[merkaartor] 01/23: Imported Upstream version 0.18.2

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Fri Sep 18 18:36:07 UTC 2015


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository merkaartor.

commit e920a8fe56f3176a051b24f4c013ebb12cc7d2d7
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Fri Sep 18 01:17:42 2015 +0200

    Imported Upstream version 0.18.2
---
 .travis.yml                                        |    17 +
 .../examples/loader/main.cpp                       |     8 +-
 .../examples/trivial/main.cpp                      |     2 +-
 .../qtsingleapplication.pro                        |     1 +
 .../src/qtlocalpeer.cpp                            |     7 +-
 .../src/qtlockedfile_win.cpp                       |     3 +
 .../src/qtsingleapplication.cpp                    |     4 +-
 .../src/qtsingleapplication.h                      |     4 +-
 .../src/qtsingleapplication.pri                    |     2 +-
 .../qttoolbardialog-2.2_1-opensource/INSTALL.TXT   |   254 -
 .../LGPL_EXCEPTION.txt                             |    23 -
 .../qttoolbardialog-2.2_1-opensource/LICENSE.GPL3  |   674 --
 .../qttoolbardialog-2.2_1-opensource/LICENSE.LGPL  |   504 -
 .../qttoolbardialog-2.2_1-opensource/README.TXT    |     7 -
 .../buildlib/buildlib.pro                          |    13 -
 .../qttoolbardialog-2.2_1-opensource/common.pri    |     6 -
 .../qttoolbardialog-2.2_1-opensource/configure     |   112 -
 .../doc/html/classic.css                           |   139 -
 .../doc/html/images/qt-logo.png                    |   Bin 4075 -> 0 bytes
 .../doc/html/images/qttoolbardialog.png            |   Bin 12323 -> 0 bytes
 .../doc/html/index.html                            |    41 -
 .../doc/html/qttoolbardialog-members.html          |   371 -
 .../doc/html/qttoolbardialog.dcf                   |    29 -
 .../doc/html/qttoolbardialog.html                  |    89 -
 .../doc/html/qttoolbardialog.index                 |    54 -
 .../doc/html/qttoolbardialog.qch                   |   Bin 50176 -> 0 bytes
 .../doc/html/qttoolbardialog.qhp                   |    46 -
 .../doc/html/qttoolbarmanager-members.html         |    85 -
 .../doc/html/qttoolbarmanager.html                 |   102 -
 .../doc/images/qt-logo.png                         |   Bin 4075 -> 0 bytes
 .../doc/images/qttoolbardialog.png                 |   Bin 12323 -> 0 bytes
 .../doc/index.qdoc                                 |    37 -
 .../examples/examples.pro                          |     7 -
 .../examples/simple/images/copy.png                |   Bin 1338 -> 0 bytes
 .../examples/simple/images/cut.png                 |   Bin 1323 -> 0 bytes
 .../examples/simple/images/new.png                 |   Bin 852 -> 0 bytes
 .../examples/simple/images/open.png                |   Bin 2073 -> 0 bytes
 .../examples/simple/images/paste.png               |   Bin 1745 -> 0 bytes
 .../examples/simple/images/save.png                |   Bin 1187 -> 0 bytes
 .../examples/simple/main.cpp                       |    59 -
 .../examples/simple/mainwindow.cpp                 |   455 -
 .../examples/simple/mainwindow.h                   |   122 -
 .../examples/simple/simple.pro                     |    11 -
 .../examples/simple/simple.qrc                     |    10 -
 .../qttoolbardialog.pro                            |     5 -
 .../src/QtToolBarDialog                            |     1 -
 .../src/QtToolBarManager                           |     1 -
 .../src/qttoolbardialog.cpp                        |  1892 ----
 .../src/qttoolbardialog.h                          |   144 -
 .../src/qttoolbardialog.pri                        |    17 -
 .../src/qttoolbardialog.qrc                        |    10 -
 3rdparty/quazip-0.7/CMakeLists.txt                 |    54 +
 3rdparty/quazip-0.7/COPYING                        |   458 +
 3rdparty/quazip-0.7/Doxyfile                       |  1722 +++
 3rdparty/quazip-0.7/FindQuaZip.cmake               |    40 +
 3rdparty/quazip-0.7/NEWS.txt                       |   149 +
 3rdparty/quazip-0.7/README.txt                     |    66 +
 .../quazip-0.7/doc/html/JlCompress_8h_source.html  |   131 +
 3rdparty/quazip-0.7/doc/html/annotated.html        |    78 +
 3rdparty/quazip-0.7/doc/html/bc_s.png              |   Bin 0 -> 676 bytes
 3rdparty/quazip-0.7/doc/html/bdwn.png              |   Bin 0 -> 147 bytes
 .../doc/html/classJlCompress-members.html          |    69 +
 3rdparty/quazip-0.7/doc/html/classJlCompress.html  |   475 +
 .../doc/html/classQuaAdler32-members.html          |    67 +
 3rdparty/quazip-0.7/doc/html/classQuaAdler32.html  |   194 +
 .../doc/html/classQuaAdler32__coll__graph.map      |     3 +
 .../doc/html/classQuaAdler32__coll__graph.md5      |     1 +
 .../doc/html/classQuaAdler32__coll__graph.png      |   Bin 0 -> 3849 bytes
 .../doc/html/classQuaAdler32__inherit__graph.map   |     3 +
 .../doc/html/classQuaAdler32__inherit__graph.md5   |     1 +
 .../doc/html/classQuaAdler32__inherit__graph.png   |   Bin 0 -> 3849 bytes
 .../doc/html/classQuaChecksum32-members.html       |    66 +
 .../quazip-0.7/doc/html/classQuaChecksum32.html    |   197 +
 .../html/classQuaChecksum32__inherit__graph.map    |     4 +
 .../html/classQuaChecksum32__inherit__graph.md5    |     1 +
 .../html/classQuaChecksum32__inherit__graph.png    |   Bin 0 -> 6444 bytes
 .../quazip-0.7/doc/html/classQuaCrc32-members.html |    67 +
 3rdparty/quazip-0.7/doc/html/classQuaCrc32.html    |   194 +
 .../doc/html/classQuaCrc32__coll__graph.map        |     3 +
 .../doc/html/classQuaCrc32__coll__graph.md5        |     1 +
 .../doc/html/classQuaCrc32__coll__graph.png        |   Bin 0 -> 3690 bytes
 .../doc/html/classQuaCrc32__inherit__graph.map     |     3 +
 .../doc/html/classQuaCrc32__inherit__graph.md5     |     1 +
 .../doc/html/classQuaCrc32__inherit__graph.png     |   Bin 0 -> 3690 bytes
 .../doc/html/classQuaGzipFile-members.html         |    75 +
 3rdparty/quazip-0.7/doc/html/classQuaGzipFile.html |   349 +
 .../doc/html/classQuaGzipFile__coll__graph.map     |     2 +
 .../doc/html/classQuaGzipFile__coll__graph.md5     |     1 +
 .../doc/html/classQuaGzipFile__coll__graph.png     |   Bin 0 -> 3070 bytes
 .../doc/html/classQuaGzipFile__inherit__graph.map  |     2 +
 .../doc/html/classQuaGzipFile__inherit__graph.md5  |     1 +
 .../doc/html/classQuaGzipFile__inherit__graph.png  |   Bin 0 -> 3070 bytes
 .../doc/html/classQuaZIODevice-members.html        |    71 +
 .../quazip-0.7/doc/html/classQuaZIODevice.html     |   261 +
 .../doc/html/classQuaZIODevice__coll__graph.map    |     2 +
 .../doc/html/classQuaZIODevice__coll__graph.md5    |     1 +
 .../doc/html/classQuaZIODevice__coll__graph.png    |   Bin 0 -> 3294 bytes
 .../doc/html/classQuaZIODevice__inherit__graph.map |     2 +
 .../doc/html/classQuaZIODevice__inherit__graph.md5 |     1 +
 .../doc/html/classQuaZIODevice__inherit__graph.png |   Bin 0 -> 3294 bytes
 .../quazip-0.7/doc/html/classQuaZip-members.html   |   118 +
 3rdparty/quazip-0.7/doc/html/classQuaZip.html      |  1203 +++
 .../doc/html/classQuaZipDir-members.html           |    94 +
 3rdparty/quazip-0.7/doc/html/classQuaZipDir.html   |   669 ++
 .../doc/html/classQuaZipFile-members.html          |    95 +
 3rdparty/quazip-0.7/doc/html/classQuaZipFile.html  |  1034 ++
 .../doc/html/classQuaZipFilePrivate-members.html   |    63 +
 .../doc/html/classQuaZipFilePrivate.html           |    77 +
 .../doc/html/classQuaZipFile__coll__graph.map      |     2 +
 .../doc/html/classQuaZipFile__coll__graph.md5      |     1 +
 .../doc/html/classQuaZipFile__coll__graph.png      |   Bin 0 -> 2870 bytes
 .../doc/html/classQuaZipFile__inherit__graph.map   |     2 +
 .../doc/html/classQuaZipFile__inherit__graph.md5   |     1 +
 .../doc/html/classQuaZipFile__inherit__graph.png   |   Bin 0 -> 2870 bytes
 .../doc/html/classQuaZipPrivate-members.html       |    65 +
 .../quazip-0.7/doc/html/classQuaZipPrivate.html    |    77 +
 3rdparty/quazip-0.7/doc/html/classes.html          |    72 +
 3rdparty/quazip-0.7/doc/html/closed.png            |   Bin 0 -> 132 bytes
 .../html/dir_94f3fdea1a650ed21d35813cdb37a339.html |   113 +
 .../dir_94f3fdea1a650ed21d35813cdb37a339_dep.map   |     3 +
 .../dir_94f3fdea1a650ed21d35813cdb37a339_dep.md5   |     1 +
 .../dir_94f3fdea1a650ed21d35813cdb37a339_dep.png   |   Bin 0 -> 1147 bytes
 3rdparty/quazip-0.7/doc/html/doxygen.css           |  1366 +++
 3rdparty/quazip-0.7/doc/html/doxygen.png           |   Bin 0 -> 3779 bytes
 3rdparty/quazip-0.7/doc/html/dynsections.js        |    97 +
 3rdparty/quazip-0.7/doc/html/faq.html              |    58 +
 3rdparty/quazip-0.7/doc/html/files.html            |    74 +
 3rdparty/quazip-0.7/doc/html/ftv2blank.png         |   Bin 0 -> 86 bytes
 3rdparty/quazip-0.7/doc/html/ftv2cl.png            |   Bin 0 -> 453 bytes
 3rdparty/quazip-0.7/doc/html/ftv2doc.png           |   Bin 0 -> 746 bytes
 3rdparty/quazip-0.7/doc/html/ftv2folderclosed.png  |   Bin 0 -> 616 bytes
 3rdparty/quazip-0.7/doc/html/ftv2folderopen.png    |   Bin 0 -> 597 bytes
 3rdparty/quazip-0.7/doc/html/ftv2lastnode.png      |   Bin 0 -> 86 bytes
 3rdparty/quazip-0.7/doc/html/ftv2link.png          |   Bin 0 -> 746 bytes
 3rdparty/quazip-0.7/doc/html/ftv2mlastnode.png     |   Bin 0 -> 246 bytes
 3rdparty/quazip-0.7/doc/html/ftv2mnode.png         |   Bin 0 -> 246 bytes
 3rdparty/quazip-0.7/doc/html/ftv2mo.png            |   Bin 0 -> 403 bytes
 3rdparty/quazip-0.7/doc/html/ftv2node.png          |   Bin 0 -> 86 bytes
 3rdparty/quazip-0.7/doc/html/ftv2ns.png            |   Bin 0 -> 388 bytes
 3rdparty/quazip-0.7/doc/html/ftv2plastnode.png     |   Bin 0 -> 229 bytes
 3rdparty/quazip-0.7/doc/html/ftv2pnode.png         |   Bin 0 -> 229 bytes
 3rdparty/quazip-0.7/doc/html/ftv2splitbar.png      |   Bin 0 -> 314 bytes
 3rdparty/quazip-0.7/doc/html/ftv2vertline.png      |   Bin 0 -> 86 bytes
 3rdparty/quazip-0.7/doc/html/functions.html        |    97 +
 3rdparty/quazip-0.7/doc/html/functions_b.html      |    97 +
 3rdparty/quazip-0.7/doc/html/functions_c.html      |   160 +
 3rdparty/quazip-0.7/doc/html/functions_d.html      |   106 +
 3rdparty/quazip-0.7/doc/html/functions_e.html      |   130 +
 3rdparty/quazip-0.7/doc/html/functions_enum.html   |    75 +
 3rdparty/quazip-0.7/doc/html/functions_eval.html   |    93 +
 3rdparty/quazip-0.7/doc/html/functions_f.html      |   108 +
 3rdparty/quazip-0.7/doc/html/functions_func.html   |   532 +
 3rdparty/quazip-0.7/doc/html/functions_g.html      |   180 +
 3rdparty/quazip-0.7/doc/html/functions_h.html      |    97 +
 3rdparty/quazip-0.7/doc/html/functions_i.html      |   122 +
 3rdparty/quazip-0.7/doc/html/functions_m.html      |   119 +
 3rdparty/quazip-0.7/doc/html/functions_n.html      |   102 +
 3rdparty/quazip-0.7/doc/html/functions_o.html      |   112 +
 3rdparty/quazip-0.7/doc/html/functions_p.html      |   100 +
 3rdparty/quazip-0.7/doc/html/functions_q.html      |   112 +
 3rdparty/quazip-0.7/doc/html/functions_r.html      |   107 +
 3rdparty/quazip-0.7/doc/html/functions_s.html      |   174 +
 3rdparty/quazip-0.7/doc/html/functions_t.html      |    97 +
 3rdparty/quazip-0.7/doc/html/functions_u.html      |   110 +
 3rdparty/quazip-0.7/doc/html/functions_v.html      |   107 +
 3rdparty/quazip-0.7/doc/html/functions_vars.html   |   192 +
 3rdparty/quazip-0.7/doc/html/functions_w.html      |    99 +
 3rdparty/quazip-0.7/doc/html/functions_z.html      |    97 +
 3rdparty/quazip-0.7/doc/html/functions_~.html      |   109 +
 3rdparty/quazip-0.7/doc/html/graph_legend.html     |   116 +
 3rdparty/quazip-0.7/doc/html/graph_legend.md5      |     1 +
 3rdparty/quazip-0.7/doc/html/graph_legend.png      |   Bin 0 -> 19871 bytes
 3rdparty/quazip-0.7/doc/html/hierarchy.html        |    81 +
 3rdparty/quazip-0.7/doc/html/index.html            |   130 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_0.map   |     3 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_0.md5   |     1 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_0.png   |   Bin 0 -> 1293 bytes
 3rdparty/quazip-0.7/doc/html/inherit_graph_1.map   |     3 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_1.md5   |     1 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_1.png   |   Bin 0 -> 2239 bytes
 3rdparty/quazip-0.7/doc/html/inherit_graph_10.map  |     3 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_10.md5  |     1 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_10.png  |   Bin 0 -> 1493 bytes
 3rdparty/quazip-0.7/doc/html/inherit_graph_2.map   |     5 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_2.md5   |     1 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_2.png   |   Bin 0 -> 4633 bytes
 3rdparty/quazip-0.7/doc/html/inherit_graph_3.map   |     5 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_3.md5   |     1 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_3.png   |   Bin 0 -> 7279 bytes
 3rdparty/quazip-0.7/doc/html/inherit_graph_4.map   |     3 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_4.md5   |     1 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_4.png   |   Bin 0 -> 1124 bytes
 3rdparty/quazip-0.7/doc/html/inherit_graph_5.map   |     3 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_5.md5   |     1 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_5.png   |   Bin 0 -> 1208 bytes
 3rdparty/quazip-0.7/doc/html/inherit_graph_6.map   |     3 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_6.md5   |     1 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_6.png   |   Bin 0 -> 1492 bytes
 3rdparty/quazip-0.7/doc/html/inherit_graph_7.map   |     3 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_7.md5   |     1 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_7.png   |   Bin 0 -> 1764 bytes
 3rdparty/quazip-0.7/doc/html/inherit_graph_8.map   |     3 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_8.md5   |     1 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_8.png   |   Bin 0 -> 1772 bytes
 3rdparty/quazip-0.7/doc/html/inherit_graph_9.map   |     3 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_9.md5   |     1 +
 3rdparty/quazip-0.7/doc/html/inherit_graph_9.png   |   Bin 0 -> 1717 bytes
 3rdparty/quazip-0.7/doc/html/inherits.html         |   107 +
 3rdparty/quazip-0.7/doc/html/nav_f.png             |   Bin 0 -> 153 bytes
 3rdparty/quazip-0.7/doc/html/nav_g.png             |   Bin 0 -> 94 bytes
 3rdparty/quazip-0.7/doc/html/nav_h.png             |   Bin 0 -> 98 bytes
 3rdparty/quazip-0.7/doc/html/open.png              |   Bin 0 -> 123 bytes
 3rdparty/quazip-0.7/doc/html/pages.html            |    58 +
 .../quazip-0.7/doc/html/quaadler32_8h_source.html  |   117 +
 .../doc/html/quachecksum32_8h_source.html          |   110 +
 .../quazip-0.7/doc/html/quacrc32_8h_source.html    |   113 +
 .../quazip-0.7/doc/html/quagzipfile_8h_source.html |   129 +
 .../doc/html/quaziodevice_8h_source.html           |   118 +
 3rdparty/quazip-0.7/doc/html/quazip_8h_source.html |   225 +
 .../doc/html/quazip__global_8h_source.html         |   111 +
 .../quazip-0.7/doc/html/quazipdir_8h_source.html   |   166 +
 .../quazip-0.7/doc/html/quazipfile_8h_source.html  |   183 +
 .../doc/html/quazipfileinfo_8h_source.html         |   174 +
 .../doc/html/quazipnewinfo_8h_source.html          |   147 +
 .../html/structQIODevice__descriptor-members.html  |    64 +
 .../doc/html/structQIODevice__descriptor.html      |    72 +
 .../doc/html/structQuaZipFileInfo-members.html     |    77 +
 .../quazip-0.7/doc/html/structQuaZipFileInfo.html  |   160 +
 .../doc/html/structQuaZipFileInfo64-members.html   |    81 +
 .../doc/html/structQuaZipFileInfo64.html           |   306 +
 .../doc/html/structQuaZipNewInfo-members.html      |    81 +
 .../quazip-0.7/doc/html/structQuaZipNewInfo.html   |   551 +
 3rdparty/quazip-0.7/doc/html/sync_off.png          |   Bin 0 -> 853 bytes
 3rdparty/quazip-0.7/doc/html/sync_on.png           |   Bin 0 -> 845 bytes
 3rdparty/quazip-0.7/doc/html/tab_a.png             |   Bin 0 -> 142 bytes
 3rdparty/quazip-0.7/doc/html/tab_b.png             |   Bin 0 -> 169 bytes
 3rdparty/quazip-0.7/doc/html/tab_h.png             |   Bin 0 -> 177 bytes
 3rdparty/quazip-0.7/doc/html/tab_s.png             |   Bin 0 -> 184 bytes
 3rdparty/quazip-0.7/doc/html/tabs.css              |    60 +
 3rdparty/quazip-0.7/doc/html/usage.html            |    70 +
 3rdparty/quazip-0.7/doc/latex/annotated.tex        |    18 +
 3rdparty/quazip-0.7/doc/latex/classJlCompress.tex  |   274 +
 3rdparty/quazip-0.7/doc/latex/classQuaAdler32.tex  |   108 +
 .../doc/latex/classQuaAdler32__coll__graph.eps     |   264 +
 .../doc/latex/classQuaAdler32__coll__graph.md5     |     1 +
 .../doc/latex/classQuaAdler32__inherit__graph.eps  |   264 +
 .../doc/latex/classQuaAdler32__inherit__graph.md5  |     1 +
 .../quazip-0.7/doc/latex/classQuaChecksum32.tex    |   113 +
 .../latex/classQuaChecksum32__inherit__graph.eps   |   310 +
 .../latex/classQuaChecksum32__inherit__graph.md5   |     1 +
 3rdparty/quazip-0.7/doc/latex/classQuaCrc32.tex    |   108 +
 .../doc/latex/classQuaCrc32__coll__graph.eps       |   264 +
 .../doc/latex/classQuaCrc32__coll__graph.md5       |     1 +
 .../doc/latex/classQuaCrc32__inherit__graph.eps    |   264 +
 .../doc/latex/classQuaCrc32__inherit__graph.md5    |     1 +
 3rdparty/quazip-0.7/doc/latex/classQuaGzipFile.tex |   189 +
 .../doc/latex/classQuaGzipFile__coll__graph.eps    |   259 +
 .../doc/latex/classQuaGzipFile__coll__graph.md5    |     1 +
 .../doc/latex/classQuaGzipFile__inherit__graph.eps |   259 +
 .../doc/latex/classQuaGzipFile__inherit__graph.md5 |     1 +
 .../quazip-0.7/doc/latex/classQuaZIODevice.tex     |   156 +
 .../doc/latex/classQuaZIODevice__coll__graph.eps   |   259 +
 .../doc/latex/classQuaZIODevice__coll__graph.md5   |     1 +
 .../latex/classQuaZIODevice__inherit__graph.eps    |   259 +
 .../latex/classQuaZIODevice__inherit__graph.md5    |     1 +
 3rdparty/quazip-0.7/doc/latex/classQuaZip.tex      |   951 ++
 3rdparty/quazip-0.7/doc/latex/classQuaZipDir.tex   |   419 +
 3rdparty/quazip-0.7/doc/latex/classQuaZipFile.tex  |   700 ++
 .../doc/latex/classQuaZipFilePrivate.tex           |    21 +
 .../doc/latex/classQuaZipFile__coll__graph.eps     |   259 +
 .../doc/latex/classQuaZipFile__coll__graph.md5     |     1 +
 .../doc/latex/classQuaZipFile__inherit__graph.eps  |   259 +
 .../doc/latex/classQuaZipFile__inherit__graph.md5  |     1 +
 .../quazip-0.7/doc/latex/classQuaZipPrivate.tex    |    21 +
 .../latex/dir_94f3fdea1a650ed21d35813cdb37a339.tex |    59 +
 .../dir_94f3fdea1a650ed21d35813cdb37a339_dep.eps   |   223 +
 .../dir_94f3fdea1a650ed21d35813cdb37a339_dep.md5   |     1 +
 3rdparty/quazip-0.7/doc/latex/doxygen.sty          |   464 +
 3rdparty/quazip-0.7/doc/latex/faq.tex              |    14 +
 3rdparty/quazip-0.7/doc/latex/hierarchy.tex        |    22 +
 3rdparty/quazip-0.7/doc/latex/index.tex            |    85 +
 3rdparty/quazip-0.7/doc/latex/refman.tex           |   153 +
 .../doc/latex/structQIODevice__descriptor.tex      |    13 +
 .../quazip-0.7/doc/latex/structQuaZipFileInfo.tex  |    86 +
 .../doc/latex/structQuaZipFileInfo64.tex           |   209 +
 .../quazip-0.7/doc/latex/structQuaZipNewInfo.tex   |   360 +
 3rdparty/quazip-0.7/doc/latex/usage.tex            |    22 +
 3rdparty/quazip-0.7/includes.pri                   |    10 +
 3rdparty/quazip-0.7/quazip.pri                     |     3 +
 3rdparty/quazip-0.7/quazip.pro                     |     3 +
 3rdparty/quazip-0.7/quazip.sln                     |    26 +
 3rdparty/quazip-0.7/quazip/CMakeLists.txt          |    23 +
 3rdparty/quazip-0.7/quazip/JlCompress.cpp          |   522 +
 3rdparty/quazip-0.7/quazip/JlCompress.h            |   139 +
 3rdparty/quazip-0.7/quazip/crypt.h                 |   135 +
 .../quazip-0.7/quazip/debian/libquazip0.symbols    |   163 +
 3rdparty/quazip-0.7/quazip/doc/faq.dox             |    45 +
 3rdparty/quazip-0.7/quazip/doc/index.dox           |   177 +
 3rdparty/quazip-0.7/quazip/doc/usage.dox           |    77 +
 3rdparty/quazip-0.7/quazip/ioapi.h                 |   207 +
 3rdparty/quazip-0.7/quazip/qioapi.cpp              |   361 +
 3rdparty/quazip-0.7/quazip/quaadler32.cpp          |    53 +
 3rdparty/quazip-0.7/quazip/quaadler32.h            |    54 +
 3rdparty/quazip-0.7/quazip/quachecksum32.h         |    78 +
 3rdparty/quazip-0.7/quazip/quacrc32.cpp            |    52 +
 3rdparty/quazip-0.7/quazip/quacrc32.h              |    50 +
 3rdparty/quazip-0.7/quazip/quagzipfile.cpp         |   172 +
 3rdparty/quazip-0.7/quazip/quagzipfile.h           |   108 +
 3rdparty/quazip-0.7/quazip/quaziodevice.cpp        |   320 +
 3rdparty/quazip-0.7/quazip/quaziodevice.h          |    98 +
 3rdparty/quazip-0.7/quazip/quazip.cpp              |   788 ++
 3rdparty/quazip-0.7/quazip/quazip.h                |   571 +
 3rdparty/quazip-0.7/quazip/quazip.pri              |    33 +
 3rdparty/quazip-0.7/quazip/quazip.pro              |    81 +
 3rdparty/quazip-0.7/quazip/quazip.sln              |    20 +
 3rdparty/quazip-0.7/quazip/quazip.vcproj           |   314 +
 3rdparty/quazip-0.7/quazip/quazip.vcxproj          |   121 +
 3rdparty/quazip-0.7/quazip/quazip.vcxproj.filters  |   117 +
 3rdparty/quazip-0.7/quazip/quazip_global.h         |    59 +
 3rdparty/quazip-0.7/quazip/quazipdir.cpp           |   567 +
 3rdparty/quazip-0.7/quazip/quazipdir.h             |   223 +
 3rdparty/quazip-0.7/quazip/quazipfile.cpp          |   502 +
 3rdparty/quazip-0.7/quazip/quazipfile.h            |   456 +
 3rdparty/quazip-0.7/quazip/quazipfileinfo.cpp      |   176 +
 3rdparty/quazip-0.7/quazip/quazipfileinfo.h        |   172 +
 3rdparty/quazip-0.7/quazip/quazipnewinfo.cpp       |   277 +
 3rdparty/quazip-0.7/quazip/quazipnewinfo.h         |   207 +
 3rdparty/quazip-0.7/quazip/run_moc.bat             |     3 +
 3rdparty/quazip-0.7/quazip/unzip.c                 |  2155 ++++
 3rdparty/quazip-0.7/quazip/unzip.h                 |   458 +
 3rdparty/quazip-0.7/quazip/zip.c                   |  2103 ++++
 3rdparty/quazip-0.7/quazip/zip.h                   |   390 +
 3rdparty/quazip-0.7/qztest/coverage.sh             |     3 +
 3rdparty/quazip-0.7/qztest/qztest.cpp              |   231 +
 3rdparty/quazip-0.7/qztest/qztest.h                |    49 +
 3rdparty/quazip-0.7/qztest/qztest.pro              |    46 +
 3rdparty/quazip-0.7/qztest/qztest.sln              |    26 +
 3rdparty/quazip-0.7/qztest/qztest.vcproj           |   293 +
 3rdparty/quazip-0.7/qztest/qztest.vcxproj          |   132 +
 3rdparty/quazip-0.7/qztest/qztest.vcxproj.filters  |    94 +
 3rdparty/quazip-0.7/qztest/run_moc.bat             |     7 +
 3rdparty/quazip-0.7/qztest/testjlcompress.cpp      |   316 +
 3rdparty/quazip-0.7/qztest/testjlcompress.h        |    48 +
 3rdparty/quazip-0.7/qztest/testquachecksum32.cpp   |    50 +
 3rdparty/quazip-0.7/qztest/testquachecksum32.h     |    37 +
 3rdparty/quazip-0.7/qztest/testquagzipfile.cpp     |    79 +
 3rdparty/quazip-0.7/qztest/testquagzipfile.h       |    38 +
 3rdparty/quazip-0.7/qztest/testquaziodevice.cpp    |    83 +
 3rdparty/quazip-0.7/qztest/testquaziodevice.h      |    37 +
 3rdparty/quazip-0.7/qztest/testquazip.cpp          |   441 +
 3rdparty/quazip-0.7/qztest/testquazip.h            |    55 +
 3rdparty/quazip-0.7/qztest/testquazipdir.cpp       |   348 +
 3rdparty/quazip-0.7/qztest/testquazipdir.h         |    42 +
 3rdparty/quazip-0.7/qztest/testquazipfile.cpp      |   512 +
 3rdparty/quazip-0.7/qztest/testquazipfile.h        |    51 +
 3rdparty/quazip-0.7/qztest/testquazipfileinfo.cpp  |   108 +
 3rdparty/quazip-0.7/qztest/testquazipfileinfo.h    |    15 +
 3rdparty/quazip-0.7/qztest/testquazipnewinfo.cpp   |   146 +
 3rdparty/quazip-0.7/qztest/testquazipnewinfo.h     |    15 +
 AUTHORS                                            |     5 +-
 CHANGELOG                                          |    73 +
 INSTALL                                            |   134 +-
 Icons/AllIcons.qrc                                 |     1 +
 Icons/Merkaartor_installer.bmp                     |   Bin 0 -> 154542 bytes
 .../src/images => Icons/QToolBarDialog}/back.png   |   Bin
 .../src/images => Icons/QToolBarDialog}/down.png   |   Bin
 .../images => Icons/QToolBarDialog}/forward.png    |   Bin
 .../src/images => Icons/QToolBarDialog}/minus.png  |   Bin
 .../src/images => Icons/QToolBarDialog}/plus.png   |   Bin
 Icons/QToolBarDialog/qttoolbardialog.qrc           |    10 +
 .../src/images => Icons/QToolBarDialog}/up.png     |   Bin
 Icons/actions/build_bridge.png                     |   Bin 0 -> 305 bytes
 Icons/src/actions/build_bridge.xcf                 |   Bin 0 -> 1420 bytes
 Icons/src/actions/shadow.xcf                       |   Bin 0 -> 1864 bytes
 Merkaartor.pro                                     |     1 +
 Styles/Wireframe.mas                               |     2 +-
 include/builtin-ggl/ggl/algorithms/append.hpp      |   197 -
 include/builtin-ggl/ggl/algorithms/area.hpp        |   252 -
 include/builtin-ggl/ggl/algorithms/assign.hpp      |   410 -
 include/builtin-ggl/ggl/algorithms/buffer.hpp      |   153 -
 include/builtin-ggl/ggl/algorithms/centroid.hpp    |   277 -
 include/builtin-ggl/ggl/algorithms/clear.hpp       |   161 -
 include/builtin-ggl/ggl/algorithms/combine.hpp     |   189 -
 include/builtin-ggl/ggl/algorithms/convert.hpp     |   161 -
 include/builtin-ggl/ggl/algorithms/convex_hull.hpp |   127 -
 include/builtin-ggl/ggl/algorithms/correct.hpp     |   161 -
 .../ggl/algorithms/detail/calculate_null.hpp       |    33 -
 include/builtin-ggl/ggl/algorithms/detail/not.hpp  |    45 -
 include/builtin-ggl/ggl/algorithms/disjoint.hpp    |   221 -
 include/builtin-ggl/ggl/algorithms/distance.hpp    |   360 -
 include/builtin-ggl/ggl/algorithms/envelope.hpp    |   329 -
 include/builtin-ggl/ggl/algorithms/equals.hpp      |   134 -
 include/builtin-ggl/ggl/algorithms/for_each.hpp    |   268 -
 include/builtin-ggl/ggl/algorithms/get_section.hpp |   102 -
 .../builtin-ggl/ggl/algorithms/intermediate.hpp    |   126 -
 .../builtin-ggl/ggl/algorithms/intersection.hpp    |   455 -
 .../ggl/algorithms/intersection_linestring.hpp     |   236 -
 include/builtin-ggl/ggl/algorithms/intersects.hpp  |    61 -
 include/builtin-ggl/ggl/algorithms/labelinfo.hpp   |   103 -
 include/builtin-ggl/ggl/algorithms/length.hpp      |   181 -
 include/builtin-ggl/ggl/algorithms/make.hpp        |   123 -
 include/builtin-ggl/ggl/algorithms/num_points.hpp  |   147 -
 include/builtin-ggl/ggl/algorithms/overlaps.hpp    |    49 -
 .../ggl/algorithms/overlay/adapt_turns.hpp         |   556 -
 .../ggl/algorithms/overlay/copy_segments.hpp       |   211 -
 .../overlay/enrich_intersection_points.hpp         |   501 -
 .../algorithms/overlay/get_intersection_points.hpp |   722 --
 .../ggl/algorithms/overlay/intersection_point.hpp  |   255 -
 .../overlay/merge_intersection_points.hpp          |   254 -
 .../ggl/algorithms/overlay/segment_identifier.hpp  |    86 -
 .../overlay/self_intersection_points.hpp           |   167 -
 .../ggl/algorithms/overlay/traverse.hpp            |   437 -
 include/builtin-ggl/ggl/algorithms/parse.hpp       |   117 -
 include/builtin-ggl/ggl/algorithms/perimeter.hpp   |   141 -
 .../builtin-ggl/ggl/algorithms/point_on_line.hpp   |    72 -
 .../builtin-ggl/ggl/algorithms/remove_holes_if.hpp |   132 -
 .../builtin-ggl/ggl/algorithms/sectionalize.hpp    |   579 -
 include/builtin-ggl/ggl/algorithms/selected.hpp    |   278 -
 include/builtin-ggl/ggl/algorithms/simplify.hpp    |   342 -
 include/builtin-ggl/ggl/algorithms/transform.hpp   |   289 -
 include/builtin-ggl/ggl/algorithms/within.hpp      |   414 -
 include/builtin-ggl/ggl/arithmetic/arithmetic.hpp  |   209 -
 include/builtin-ggl/ggl/arithmetic/dot_product.hpp |    70 -
 include/builtin-ggl/ggl/core/access.hpp            |   292 -
 .../builtin-ggl/ggl/core/concepts/box_concept.hpp  |   109 -
 .../ggl/core/concepts/linestring_concept.hpp       |    84 -
 .../ggl/core/concepts/nsphere_concept.hpp          |   119 -
 .../ggl/core/concepts/point_concept.hpp            |   146 -
 .../ggl/core/concepts/polygon_concept.hpp          |   120 -
 .../builtin-ggl/ggl/core/concepts/ring_concept.hpp |    83 -
 .../ggl/core/concepts/segment_concept.hpp          |   119 -
 .../builtin-ggl/ggl/core/coordinate_dimension.hpp  |   111 -
 include/builtin-ggl/ggl/core/coordinate_system.hpp |    79 -
 include/builtin-ggl/ggl/core/coordinate_type.hpp   |    72 -
 include/builtin-ggl/ggl/core/cs.hpp                |   180 -
 include/builtin-ggl/ggl/core/exception.hpp         |    26 -
 include/builtin-ggl/ggl/core/exterior_ring.hpp     |   100 -
 include/builtin-ggl/ggl/core/geometry_id.hpp       |    80 -
 include/builtin-ggl/ggl/core/interior_rings.hpp    |   165 -
 include/builtin-ggl/ggl/core/is_linear.hpp         |    59 -
 include/builtin-ggl/ggl/core/is_multi.hpp          |    49 -
 include/builtin-ggl/ggl/core/point_type.hpp        |   109 -
 include/builtin-ggl/ggl/core/radian_access.hpp     |   118 -
 include/builtin-ggl/ggl/core/radius.hpp            |   152 -
 .../builtin-ggl/ggl/core/replace_point_type.hpp    |    99 -
 include/builtin-ggl/ggl/core/reverse_dispatch.hpp  |    61 -
 include/builtin-ggl/ggl/core/ring_type.hpp         |    97 -
 include/builtin-ggl/ggl/core/tag.hpp               |    65 -
 include/builtin-ggl/ggl/core/tags.hpp              |    64 -
 .../builtin-ggl/ggl/core/topological_dimension.hpp |    89 -
 .../ggl/extensions/astronomy/core/cs.hpp           |    48 -
 .../ggl/extensions/gis/geographic/core/cs.hpp      |    82 -
 .../extensions/gis/geographic/detail/ellipsoid.hpp |    58 -
 .../gis/geographic/strategies/andoyer.hpp          |   140 -
 .../gis/geographic/strategies/dms_parser.hpp       |   266 -
 .../gis/geographic/strategies/vincenty.hpp         |   149 -
 .../extensions/gis/io/veshape/write_veshape.hpp    |   281 -
 .../ggl/extensions/gis/io/wkb/detail/endian.hpp    |   256 -
 .../ggl/extensions/gis/io/wkb/detail/ogc.hpp       |    82 -
 .../ggl/extensions/gis/io/wkb/detail/parser.hpp    |   310 -
 .../ggl/extensions/gis/io/wkb/read_wkb.hpp         |   107 -
 .../ggl/extensions/gis/io/wkb/utility.hpp          |    89 -
 .../ggl/extensions/gis/io/wkt/detail/wkt.hpp       |    45 -
 .../ggl/extensions/gis/io/wkt/detail/wkt_multi.hpp |    51 -
 .../ggl/extensions/gis/io/wkt/read_wkt.hpp         |   624 --
 .../ggl/extensions/gis/io/wkt/read_wkt_multi.hpp   |   105 -
 .../ggl/extensions/gis/io/wkt/stream_wkt.hpp       |    36 -
 .../builtin-ggl/ggl/extensions/gis/io/wkt/wkt.hpp  |    19 -
 .../ggl/extensions/gis/io/wkt/write_wkt.hpp        |   360 -
 .../ggl/extensions/gis/io/wkt/write_wkt_multi.hpp  |   109 -
 .../extensions/gis/latlong/detail/graticule.hpp    |   231 -
 .../ggl/extensions/gis/latlong/latlong.hpp         |    39 -
 .../ggl/extensions/gis/latlong/point_ll.hpp        |   151 -
 .../ggl/extensions/gis/projections/epsg.hpp        |  3566 ------
 .../ggl/extensions/gis/projections/epsg_traits.hpp |    40 -
 .../ggl/extensions/gis/projections/factory.hpp     |   242 -
 .../extensions/gis/projections/impl/aasincos.hpp   |    93 -
 .../ggl/extensions/gis/projections/impl/adjlon.hpp |    65 -
 .../gis/projections/impl/base_dynamic.hpp          |   105 -
 .../gis/projections/impl/base_static.hpp           |   108 -
 .../gis/projections/impl/factory_entry.hpp         |    38 -
 .../gis/projections/impl/function_overloads.hpp    |    34 -
 .../ggl/extensions/gis/projections/impl/geocent.c  |   454 -
 .../ggl/extensions/gis/projections/impl/geocent.h  |   179 -
 .../extensions/gis/projections/impl/pj_auth.hpp    |    82 -
 .../gis/projections/impl/pj_datum_set.hpp          |   164 -
 .../extensions/gis/projections/impl/pj_datums.hpp  |   103 -
 .../extensions/gis/projections/impl/pj_ell_set.hpp |   150 -
 .../extensions/gis/projections/impl/pj_ellps.hpp   |    90 -
 .../ggl/extensions/gis/projections/impl/pj_fwd.hpp |    93 -
 .../extensions/gis/projections/impl/pj_gauss.hpp   |   124 -
 .../extensions/gis/projections/impl/pj_init.hpp    |   291 -
 .../ggl/extensions/gis/projections/impl/pj_inv.hpp |    72 -
 .../extensions/gis/projections/impl/pj_mlfn.hpp    |   103 -
 .../extensions/gis/projections/impl/pj_msfn.hpp    |    49 -
 .../extensions/gis/projections/impl/pj_param.hpp   |   150 -
 .../extensions/gis/projections/impl/pj_phi2.hpp    |    67 -
 .../extensions/gis/projections/impl/pj_qsfn.hpp    |    80 -
 .../gis/projections/impl/pj_transform.hpp          |   751 --
 .../extensions/gis/projections/impl/pj_tsfn.hpp    |    51 -
 .../extensions/gis/projections/impl/pj_units.hpp   |    73 -
 .../extensions/gis/projections/impl/pj_zpoly1.hpp  |    99 -
 .../extensions/gis/projections/impl/proj_mdist.hpp |   131 -
 .../extensions/gis/projections/impl/projects.hpp   |   184 -
 .../ggl/extensions/gis/projections/parameters.hpp  |    65 -
 .../ggl/extensions/gis/projections/proj/aea.hpp    |   525 -
 .../ggl/extensions/gis/projections/proj/aeqd.hpp   |   454 -
 .../ggl/extensions/gis/projections/proj/airy.hpp   |   217 -
 .../ggl/extensions/gis/projections/proj/aitoff.hpp |   210 -
 .../ggl/extensions/gis/projections/proj/august.hpp |   141 -
 .../ggl/extensions/gis/projections/proj/bacon.hpp  |   238 -
 .../ggl/extensions/gis/projections/proj/bipc.hpp   |   253 -
 .../ggl/extensions/gis/projections/proj/boggs.hpp  |   154 -
 .../ggl/extensions/gis/projections/proj/bonne.hpp  |   246 -
 .../ggl/extensions/gis/projections/proj/cass.hpp   |   465 -
 .../ggl/extensions/gis/projections/proj/cc.hpp     |   145 -
 .../ggl/extensions/gis/projections/proj/cea.hpp    |   224 -
 .../ggl/extensions/gis/projections/proj/chamb.hpp  |   242 -
 .../ggl/extensions/gis/projections/proj/collg.hpp  |   152 -
 .../ggl/extensions/gis/projections/proj/crast.hpp  |   144 -
 .../ggl/extensions/gis/projections/proj/denoy.hpp  |   140 -
 .../ggl/extensions/gis/projections/proj/eck1.hpp   |   140 -
 .../ggl/extensions/gis/projections/proj/eck2.hpp   |   151 -
 .../ggl/extensions/gis/projections/proj/eck3.hpp   |   286 -
 .../ggl/extensions/gis/projections/proj/eck4.hpp   |   167 -
 .../ggl/extensions/gis/projections/proj/eck5.hpp   |   141 -
 .../ggl/extensions/gis/projections/proj/eqc.hpp    |   146 -
 .../ggl/extensions/gis/projections/proj/eqdc.hpp   |   212 -
 .../ggl/extensions/gis/projections/proj/fahey.hpp  |   140 -
 .../ggl/extensions/gis/projections/proj/fouc_s.hpp |   167 -
 .../ggl/extensions/gis/projections/proj/gall.hpp   |   142 -
 .../extensions/gis/projections/proj/geocent.hpp    |   143 -
 .../ggl/extensions/gis/projections/proj/geos.hpp   |   280 -
 .../ggl/extensions/gis/projections/proj/gins8.hpp  |   140 -
 .../extensions/gis/projections/proj/gn_sinu.hpp    |   380 -
 .../ggl/extensions/gis/projections/proj/gnom.hpp   |   227 -
 .../ggl/extensions/gis/projections/proj/goode.hpp  |   160 -
 .../extensions/gis/projections/proj/gstmerc.hpp    |   176 -
 .../ggl/extensions/gis/projections/proj/hammer.hpp |   152 -
 .../ggl/extensions/gis/projections/proj/hatano.hpp |   173 -
 .../ggl/extensions/gis/projections/proj/imw_p.hpp  |   281 -
 .../ggl/extensions/gis/projections/proj/krovak.hpp |   338 -
 .../ggl/extensions/gis/projections/proj/labrd.hpp  |   231 -
 .../ggl/extensions/gis/projections/proj/laea.hpp   |   391 -
 .../ggl/extensions/gis/projections/proj/lagrng.hpp |   158 -
 .../ggl/extensions/gis/projections/proj/larr.hpp   |   134 -
 .../ggl/extensions/gis/projections/proj/lask.hpp   |   148 -
 .../extensions/gis/projections/proj/latlong.hpp    |   282 -
 .../ggl/extensions/gis/projections/proj/lcc.hpp    |   249 -
 .../ggl/extensions/gis/projections/proj/lcca.hpp   |   191 -
 .../ggl/extensions/gis/projections/proj/loxim.hpp  |   164 -
 .../ggl/extensions/gis/projections/proj/lsat.hpp   |   299 -
 .../extensions/gis/projections/proj/mbt_fps.hpp    |   161 -
 .../ggl/extensions/gis/projections/proj/mbtfpp.hpp |   155 -
 .../ggl/extensions/gis/projections/proj/mbtfpq.hpp |   170 -
 .../ggl/extensions/gis/projections/proj/merc.hpp   |   213 -
 .../ggl/extensions/gis/projections/proj/mill.hpp   |   138 -
 .../extensions/gis/projections/proj/mod_ster.hpp   |   474 -
 .../ggl/extensions/gis/projections/proj/moll.hpp   |   262 -
 .../ggl/extensions/gis/projections/proj/nell.hpp   |   154 -
 .../ggl/extensions/gis/projections/proj/nell_h.hpp |   153 -
 .../ggl/extensions/gis/projections/proj/nocol.hpp  |   160 -
 .../ggl/extensions/gis/projections/proj/nsper.hpp  |   317 -
 .../ggl/extensions/gis/projections/proj/nzmg.hpp   |   196 -
 .../extensions/gis/projections/proj/ob_tran.hpp    |   318 -
 .../ggl/extensions/gis/projections/proj/ocea.hpp   |   189 -
 .../ggl/extensions/gis/projections/proj/oea.hpp    |   181 -
 .../ggl/extensions/gis/projections/proj/omerc.hpp  |   294 -
 .../ggl/extensions/gis/projections/proj/ortho.hpp  |   219 -
 .../ggl/extensions/gis/projections/proj/poly.hpp   |   266 -
 .../ggl/extensions/gis/projections/proj/putp2.hpp  |   163 -
 .../ggl/extensions/gis/projections/proj/putp3.hpp  |   197 -
 .../ggl/extensions/gis/projections/proj/putp4p.hpp |   201 -
 .../ggl/extensions/gis/projections/proj/putp5.hpp  |   198 -
 .../ggl/extensions/gis/projections/proj/putp6.hpp  |   223 -
 .../ggl/extensions/gis/projections/proj/robin.hpp  |   232 -
 .../ggl/extensions/gis/projections/proj/rouss.hpp  |   211 -
 .../ggl/extensions/gis/projections/proj/rpoly.hpp  |   158 -
 .../extensions/gis/projections/proj/sconics.hpp    |   512 -
 .../ggl/extensions/gis/projections/proj/somerc.hpp |   188 -
 .../ggl/extensions/gis/projections/proj/stere.hpp  |   451 -
 .../ggl/extensions/gis/projections/proj/sterea.hpp |   381 -
 .../ggl/extensions/gis/projections/proj/sts.hpp    |   294 -
 .../ggl/extensions/gis/projections/proj/tcc.hpp    |   142 -
 .../ggl/extensions/gis/projections/proj/tcea.hpp   |   149 -
 .../ggl/extensions/gis/projections/proj/tmerc.hpp  |   458 -
 .../ggl/extensions/gis/projections/proj/tpeqd.hpp  |   198 -
 .../ggl/extensions/gis/projections/proj/urm5.hpp   |   149 -
 .../ggl/extensions/gis/projections/proj/urmfps.hpp |   205 -
 .../ggl/extensions/gis/projections/proj/vandg.hpp  |   201 -
 .../ggl/extensions/gis/projections/proj/vandg2.hpp |   205 -
 .../ggl/extensions/gis/projections/proj/vandg4.hpp |   163 -
 .../ggl/extensions/gis/projections/proj/wag2.hpp   |   144 -
 .../ggl/extensions/gis/projections/proj/wag3.hpp   |   148 -
 .../ggl/extensions/gis/projections/proj/wag7.hpp   |   137 -
 .../ggl/extensions/gis/projections/proj/wink1.hpp  |   145 -
 .../ggl/extensions/gis/projections/proj/wink2.hpp  |   159 -
 .../projections/project_inverse_transformer.hpp    |    73 -
 .../gis/projections/project_transformer.hpp        |    63 -
 .../ggl/extensions/gis/projections/projection.hpp  |    65 -
 .../ggl/extensions/index/rtree/helpers.hpp         |    68 -
 .../ggl/extensions/index/rtree/rtree.hpp           |   769 --
 .../ggl/extensions/index/rtree/rtree_leaf.hpp      |   252 -
 .../ggl/extensions/index/rtree/rtree_node.hpp      |   488 -
 .../ggl/extensions/io/svg/write_svg.hpp            |   263 -
 .../ggl/extensions/io/svg/write_svg_multi.hpp      |    73 -
 .../adapted/boost_array_as_linestring.hpp          |    40 -
 .../ggl/geometries/adapted/boost_array_as_ring.hpp |    40 -
 .../builtin-ggl/ggl/geometries/adapted/c_array.hpp |    88 -
 .../ggl/geometries/adapted/c_array_cartesian.hpp   |    37 -
 .../ggl/geometries/adapted/c_array_geographic.hpp  |    35 -
 .../ggl/geometries/adapted/std_as_linestring.hpp   |    61 -
 .../ggl/geometries/adapted/std_as_ring.hpp         |    43 -
 .../builtin-ggl/ggl/geometries/adapted/tuple.hpp   |   100 -
 .../ggl/geometries/adapted/tuple_cartesian.hpp     |    41 -
 .../ggl/geometries/adapted/tuple_geographic.hpp    |    41 -
 include/builtin-ggl/ggl/geometries/box.hpp         |   110 -
 include/builtin-ggl/ggl/geometries/cartesian2d.hpp |    29 -
 include/builtin-ggl/ggl/geometries/cartesian3d.hpp |    28 -
 include/builtin-ggl/ggl/geometries/geometries.hpp  |    25 -
 include/builtin-ggl/ggl/geometries/linear_ring.hpp |    64 -
 include/builtin-ggl/ggl/geometries/linestring.hpp  |    69 -
 include/builtin-ggl/ggl/geometries/nsphere.hpp     |   130 -
 include/builtin-ggl/ggl/geometries/point.hpp       |   125 -
 include/builtin-ggl/ggl/geometries/point_xy.hpp    |   109 -
 include/builtin-ggl/ggl/geometries/polygon.hpp     |   179 -
 .../builtin-ggl/ggl/geometries/register/box.hpp    |   106 -
 .../ggl/geometries/register/linestring.hpp         |    25 -
 .../builtin-ggl/ggl/geometries/register/point.hpp  |   154 -
 .../ggl/geometries/register/register_box.hpp       |    22 -
 .../ggl/geometries/register/register_point.hpp     |    22 -
 .../builtin-ggl/ggl/geometries/register/ring.hpp   |    28 -
 include/builtin-ggl/ggl/geometries/segment.hpp     |   105 -
 include/builtin-ggl/ggl/ggl.hpp                    |    72 -
 include/builtin-ggl/ggl/iterators/base.hpp         |    58 -
 .../ggl/iterators/circular_iterator.hpp            |    92 -
 .../ggl/iterators/ever_circling_iterator.hpp       |    86 -
 .../ggl/iterators/point_const_iterator.hpp         |    76 -
 .../ggl/iterators/section_iterators.hpp            |   217 -
 .../builtin-ggl/ggl/iterators/segment_iterator.hpp |   139 -
 include/builtin-ggl/ggl/multi/algorithms/area.hpp  |    37 -
 .../builtin-ggl/ggl/multi/algorithms/centroid.hpp  |    81 -
 .../ggl/multi/algorithms/convex_hull.hpp           |    95 -
 .../builtin-ggl/ggl/multi/algorithms/correct.hpp   |    53 -
 .../algorithms/detail/modify_with_predicate.hpp    |    46 -
 .../ggl/multi/algorithms/detail/multi_sum.hpp      |    54 -
 .../builtin-ggl/ggl/multi/algorithms/distance.hpp  |   121 -
 .../builtin-ggl/ggl/multi/algorithms/envelope.hpp  |    98 -
 .../builtin-ggl/ggl/multi/algorithms/foreach.hpp   |   222 -
 .../ggl/multi/algorithms/get_section.hpp           |    57 -
 .../ggl/multi/algorithms/intersection.hpp          |    43 -
 .../builtin-ggl/ggl/multi/algorithms/length.hpp    |    32 -
 .../ggl/multi/algorithms/num_points.hpp            |    78 -
 .../ggl/multi/algorithms/overlay/copy_segments.hpp |    92 -
 .../algorithms/overlay/get_intersection_points.hpp |    64 -
 .../builtin-ggl/ggl/multi/algorithms/perimeter.hpp |    33 -
 .../ggl/multi/algorithms/remove_holes_if.hpp       |    43 -
 .../ggl/multi/algorithms/sectionalize.hpp          |    86 -
 .../builtin-ggl/ggl/multi/algorithms/simplify.hpp  |    69 -
 .../builtin-ggl/ggl/multi/algorithms/transform.hpp |    87 -
 .../builtin-ggl/ggl/multi/algorithms/within.hpp    |   104 -
 include/builtin-ggl/ggl/multi/core/geometry_id.hpp |    51 -
 include/builtin-ggl/ggl/multi/core/is_multi.hpp    |    49 -
 include/builtin-ggl/ggl/multi/core/point_type.hpp  |    59 -
 include/builtin-ggl/ggl/multi/core/ring_type.hpp   |    48 -
 include/builtin-ggl/ggl/multi/core/tags.hpp        |    30 -
 .../ggl/multi/core/topological_dimension.hpp       |    45 -
 .../ggl/multi/geometries/multi_linestring.hpp      |    55 -
 .../ggl/multi/geometries/multi_point.hpp           |    54 -
 .../ggl/multi/geometries/multi_polygon.hpp         |    55 -
 .../ggl/multi/iterators/point_const_iterator.hpp   |    50 -
 include/builtin-ggl/ggl/multi/util/write_dsv.hpp   |    66 -
 include/builtin-ggl/ggl/policies/relate/de9im.hpp  |   184 -
 .../builtin-ggl/ggl/policies/relate/direction.hpp  |   299 -
 .../ggl/policies/relate/intersection_points.hpp    |   143 -
 include/builtin-ggl/ggl/policies/relate/tupled.hpp |   154 -
 .../ggl/strategies/agnostic/agn_convex_hull.hpp    |   278 -
 .../ggl/strategies/agnostic/agn_simplify.hpp       |   196 -
 .../ggl/strategies/agnostic/agn_within.hpp         |   162 -
 .../ggl/strategies/cartesian/cart_area.hpp         |   102 -
 .../ggl/strategies/cartesian/cart_centroid.hpp     |   292 -
 .../ggl/strategies/cartesian/cart_compare.hpp      |    66 -
 .../ggl/strategies/cartesian/cart_distance.hpp     |   246 -
 .../ggl/strategies/cartesian/cart_envelope.hpp     |    66 -
 .../ggl/strategies/cartesian/cart_intersect.hpp    |   352 -
 .../ggl/strategies/cartesian/cart_side.hpp         |    71 -
 .../ggl/strategies/cartesian/cart_within.hpp       |   100 -
 .../builtin-ggl/ggl/strategies/distance_result.hpp |   265 -
 .../ggl/strategies/intersection_result.hpp         |   167 -
 .../ggl/strategies/spherical/haversine.hpp         |   257 -
 .../ggl/strategies/spherical/sph_area.hpp          |   167 -
 .../ggl/strategies/spherical/sph_envelope.hpp      |   176 -
 include/builtin-ggl/ggl/strategies/strategies.hpp  |    38 -
 .../builtin-ggl/ggl/strategies/strategy_traits.hpp |   231 -
 .../ggl/strategies/strategy_transform.hpp          |   358 -
 .../strategies/transform/inverse_transformer.hpp   |    65 -
 .../ggl/strategies/transform/map_transformer.hpp   |   145 -
 .../strategies/transform/matrix_transformers.hpp   |   357 -
 include/builtin-ggl/ggl/util/as_range.hpp          |    95 -
 include/builtin-ggl/ggl/util/assign_box_corner.hpp |    59 -
 include/builtin-ggl/ggl/util/builder.hpp           |   334 -
 include/builtin-ggl/ggl/util/copy.hpp              |    76 -
 .../builtin-ggl/ggl/util/for_each_coordinate.hpp   |    64 -
 include/builtin-ggl/ggl/util/get_cs_as_radian.hpp  |    43 -
 include/builtin-ggl/ggl/util/less.hpp              |    64 -
 include/builtin-ggl/ggl/util/loop.hpp              |    85 -
 include/builtin-ggl/ggl/util/math.hpp              |    91 -
 .../ggl/util/select_coordinate_type.hpp            |    40 -
 .../builtin-ggl/ggl/util/select_most_precise.hpp   |   160 -
 include/builtin-ggl/ggl/util/write_dsv.hpp         |   375 -
 mobilemerk/src/main.cpp                            |     2 +-
 .../qadastre/cadastrewrapper.cpp                   |    15 +-
 .../MCadastreFranceBackground/qadastre/main.cpp    |     2 +-
 plugins/background/MGdalBackground/GdalAdapter.cpp |     4 +-
 plugins/background/MGdalBackground/GdalAdapter.h   |     3 +
 .../background/MGdalBackground/GdalAdapter.json    |     1 +
 .../MGeoTiffBackground/GeoTiffAdapter.cpp          |     4 +-
 .../background/MGeoTiffBackground/GeoTiffAdapter.h |     3 +
 .../MGeoTiffBackground/GeoTiffAdapter.json         |     1 +
 .../MGosmoreBackground/GosmoreAdapter.cpp          |     2 +
 .../background/MGosmoreBackground/GosmoreAdapter.h |     3 +
 .../MGosmoreBackground/GosmoreAdapter.json         |     1 +
 .../MMsBingMapBackground/MMsBingMapBackground.pro  |     2 +
 .../MMsBingMapBackground/msbingmapadapter.cpp      |    12 +-
 .../MMsBingMapBackground/msbingmapadapter.h        |     3 +
 .../MMsBingMapBackground/msbingmapadapter.json     |     1 +
 .../background/MNavitBackground/NavitAdapter.cpp   |     2 +
 plugins/background/MNavitBackground/NavitAdapter.h |     3 +
 .../background/MNavitBackground/NavitAdapter.json  |     1 +
 .../MSpatialiteBackground/PrimitiveFeature.h       |     2 +-
 .../MSpatialiteBackground/SpatialiteAdapter.cpp    |    25 +-
 .../MSpatialiteBackground/SpatialiteAdapter.h      |     6 +-
 .../MSpatialiteBackground/SpatialiteAdapter.json   |     1 +
 .../WalkingPapersAdapter.cpp                       |    15 +-
 .../WalkingPapersAdapter.h                         |     3 +
 .../WalkingPapersAdapter.json                      |     0
 .../MYahooBackground/yahoolegalmapadapter.cpp      |     2 +
 .../MYahooBackground/yahoolegalmapadapter.h        |     3 +
 .../MYahooBackground/yahoolegalmapadapter.json     |     1 +
 .../MYahooTiledBackground/yahootiledmapadapter.cpp |     2 +
 .../MYahooTiledBackground/yahootiledmapadapter.h   |     3 +
 .../yahootiledmapadapter.json                      |     1 +
 plugins/background/background.pro                  |    19 +-
 plugins/background/common.pri                      |     4 +-
 plugins/common.pri                                 |    35 +-
 plugins/plugins.pro                                |     5 +-
 plugins/qtstyle/common.pri                         |     7 -
 plugins/qtstyle/qtstyle.pro                        |     3 -
 plugins/qtstyle/skulpture/skulpture.cpp            |  8059 --------------
 plugins/qtstyle/skulpture/skulpture.h              |    82 -
 plugins/qtstyle/skulpture/skulpture_p.h            |   251 -
 plugins/qtstyle/skulpture22/sk_effects.h           |    59 -
 plugins/qtstyle/skulpture22/sk_factory.h           |   165 -
 plugins/qtstyle/skulpture22/skulpture.cpp          | 10757 -------------------
 plugins/qtstyle/skulpture22/skulpture.h            |   116 -
 plugins/qtstyle/skulpture22/skulpture22.pro        |    15 -
 plugins/qtstyle/skulpture22/skulpture_p.h          |   374 -
 semperMerk/MouseMachine/LICENSE.LGPL               |   504 -
 semperMerk/MouseMachine/MouseMachine.cpp           |   491 -
 semperMerk/MouseMachine/MouseMachine.h             |   129 -
 semperMerk/MouseMachine/README                     |     9 -
 semperMerk/MyMessageHandler.h                      |    89 -
 semperMerk/MyPreferences.cpp                       |   199 -
 semperMerk/MyPreferences.h                         |   114 -
 semperMerk/MyPreferences.ui                        |    90 -
 semperMerk/README.TXT                              |     0
 semperMerk/semperMerk.pro                          |   127 -
 semperMerk/src/AddressBar.cpp                      |   106 -
 semperMerk/src/AddressBar.h                        |    71 -
 semperMerk/src/BookmarkBar.cpp                     |    38 -
 semperMerk/src/BookmarkBar.h                       |    37 -
 semperMerk/src/BookmarkBar.ui                      |    68 -
 semperMerk/src/BookmarkItem.cpp                    |    66 -
 semperMerk/src/BookmarkItem.h                      |    40 -
 semperMerk/src/BookmarksDelegate.cpp               |   171 -
 semperMerk/src/BookmarksDelegate.h                 |    34 -
 semperMerk/src/BookmarksModel.cpp                  |    14 -
 semperMerk/src/BookmarksModel.h                    |    19 -
 semperMerk/src/BookmarksView.cpp                   |   302 -
 semperMerk/src/BookmarksView.h                     |    90 -
 semperMerk/src/BrowserCache.cpp                    |    84 -
 semperMerk/src/BrowserCache.h                      |    39 -
 semperMerk/src/BrowserView.cpp                     |   551 -
 semperMerk/src/BrowserView.h                       |   103 -
 semperMerk/src/ControlButton.h                     |    31 -
 semperMerk/src/ControlStrip.cpp                    |   327 -
 semperMerk/src/ControlStrip.h                      |   107 -
 semperMerk/src/Downloader.cpp                      |   160 -
 semperMerk/src/Downloader.h                        |    49 -
 semperMerk/src/HomeView.cpp                        |    82 -
 semperMerk/src/HomeView.h                          |    86 -
 semperMerk/src/MWebView.cpp                        |   249 -
 semperMerk/src/MWebView.h                          |    80 -
 semperMerk/src/Main.cpp                            |   169 -
 semperMerk/src/MainWindow.cpp                      |   395 -
 semperMerk/src/MainWindow.h                        |    82 -
 semperMerk/src/TitleBar.cpp                        |   186 -
 semperMerk/src/TitleBar.h                          |    86 -
 semperMerk/src/ViewMenu.cpp                        |    38 -
 semperMerk/src/ViewMenu.h                          |    33 -
 semperMerk/src/ViewMenu.ui                         |    35 -
 semperMerk/src/ZoomStrip.cpp                       |    83 -
 semperMerk/src/ZoomStrip.h                         |    70 -
 semperMerk/src/images/arrow_down_48.png            |   Bin 511 -> 0 bytes
 semperMerk/src/images/arrow_left_48.png            |   Bin 465 -> 0 bytes
 semperMerk/src/images/arrow_right_48.png           |   Bin 529 -> 0 bytes
 semperMerk/src/images/arrow_up_48.png              |   Bin 420 -> 0 bytes
 semperMerk/src/images/book_bookmark_48.png         |   Bin 309 -> 0 bytes
 semperMerk/src/images/edit-find-replace.png        |   Bin 2104 -> 0 bytes
 semperMerk/src/images/edit-find.png                |   Bin 1636 -> 0 bytes
 semperMerk/src/images/gear_48.png                  |   Bin 1005 -> 0 bytes
 semperMerk/src/images/go-down.png                  |   Bin 1187 -> 0 bytes
 semperMerk/src/images/go-next.png                  |   Bin 1219 -> 0 bytes
 semperMerk/src/images/go-previous.png              |   Bin 1200 -> 0 bytes
 semperMerk/src/images/go-up.png                    |   Bin 1193 -> 0 bytes
 semperMerk/src/images/heart_48.png                 |   Bin 675 -> 0 bytes
 semperMerk/src/images/list-add.png                 |   Bin 601 -> 0 bytes
 semperMerk/src/images/list-remove.png              |   Bin 317 -> 0 bytes
 semperMerk/src/images/magnifier_48.png             |   Bin 844 -> 0 bytes
 semperMerk/src/images/minus_48.png                 |   Bin 184 -> 0 bytes
 semperMerk/src/images/on_off_48.png                |   Bin 251 -> 0 bytes
 semperMerk/src/images/pencil_48.png                |   Bin 634 -> 0 bytes
 semperMerk/src/images/play_48.png                  |   Bin 488 -> 0 bytes
 semperMerk/src/images/plus_48.png                  |   Bin 264 -> 0 bytes
 semperMerk/src/images/process-stop.png             |   Bin 1927 -> 0 bytes
 semperMerk/src/images/reload_48.png                |   Bin 799 -> 0 bytes
 semperMerk/src/images/star_48.png                  |   Bin 623 -> 0 bytes
 semperMerk/src/images/stop_48.png                  |   Bin 634 -> 0 bytes
 semperMerk/src/images/system-lock-screen.png       |   Bin 1751 -> 0 bytes
 semperMerk/src/images/system-log-out.png           |   Bin 1725 -> 0 bytes
 semperMerk/src/images/system-search.png            |   Bin 2215 -> 0 bytes
 semperMerk/src/images/system-shutdown.png          |   Bin 1055 -> 0 bytes
 semperMerk/src/images/tray_full_48.png             |   Bin 260 -> 0 bytes
 semperMerk/src/images/video_pause_48.png           |   Bin 189 -> 0 bytes
 semperMerk/src/images/video_stop_48.png            |   Bin 182 -> 0 bytes
 semperMerk/src/images/view-refresh.png             |   Bin 2024 -> 0 bytes
 semperMerk/src/images/wifi_48.png                  |   Bin 841 -> 0 bytes
 semperMerk/src/images/zoom-best-fit.png            |   Bin 2194 -> 0 bytes
 semperMerk/src/images/zoom-original.png            |   Bin 2129 -> 0 bytes
 semperMerk/src/images/zoom_in_48.png               |   Bin 829 -> 0 bytes
 semperMerk/src/images/zoom_out_48.png              |   Bin 779 -> 0 bytes
 semperMerk/src/resources/Merkaartor.svg            |    11 -
 semperMerk/src/resources/btn_donate_LG.gif         |   Bin 1714 -> 0 bytes
 semperMerk/src/resources/home.html                 |    24 -
 semperMerk/src/resources/pixel.gif                 |   Bin 43 -> 0 bytes
 semperMerk/src/resources/resources.qrc             |    21 -
 semperMerk/src/resources/semperWeb - Copy.svg      |    72 -
 semperMerk/src/resources/semperWeb-big.svg         |   262 -
 semperMerk/src/resources/semperWeb.svg             |   148 -
 semperMerk/src/resources/t_logo-a.png              |   Bin 2229 -> 0 bytes
 semperMerk/src/retinaIcons.qrc                     |    21 -
 semperMerk/src/semperWeb.qrc                       |    17 -
 semperMerk/src/sym_iap_util.h                      |   510 -
 src/Backend/SpatialiteBackend.cpp                  |    25 +-
 src/Backend/SpatialiteBackend.h                    |     1 +
 src/Backend/SpatialiteBase.cpp                     |     3 +
 src/Backend/SpatialiteBase.h                       |     2 +-
 src/Config.pri                                     |    40 +-
 src/Docks/GeoImageDock.cpp                         |    41 +-
 src/Docks/GeoImageDock.h                           |    32 +-
 src/Docks/LayerDock.cpp                            |     2 +-
 src/Docks/LayerDock.h                              |     2 +-
 src/Docks/PropertiesDock.cpp                       |    10 +-
 src/Features/Feature.cpp                           |    23 +-
 src/Features/Feature.h                             |    11 +-
 src/Features/Node.cpp                              |    15 +-
 src/Features/Node.h                                |    53 -
 src/Features/Relation.cpp                          |     3 +-
 src/Features/Way.cpp                               |    19 +-
 src/Features/Way.h                                 |     6 -
 src/GPS/SatelliteStrengthView.h                    |     2 +-
 src/GPS/qgpsdevice.cpp                             |    35 +-
 src/ImportExport/ExportGPX.cpp                     |     1 +
 src/ImportExport/ImportCSVDialog.cpp               |     2 +-
 src/ImportExport/ImportExportGdal.cpp              |   103 +-
 src/ImportExport/ImportExportGdal.h                |    16 +-
 src/ImportExport/ImportExportKML.cpp               |     8 +-
 src/ImportExport/ImportGPX.cpp                     |    10 +-
 src/ImportExport/ImportNMEA.cpp                    |     1 +
 src/ImportExport/ImportOSM.cpp                     |    28 +-
 src/Interactions/BuildBridgeInteraction.cpp        |   170 +
 src/Interactions/BuildBridgeInteraction.h          |    26 +
 src/Interactions/CreateAreaInteraction.cpp         |     6 +-
 src/Interactions/CreateDoubleWayInteraction.cpp    |     4 +-
 src/Interactions/CreateRoundaboutInteraction.cpp   |     4 +-
 src/Interactions/CreateSingleWayInteraction.cpp    |     4 +-
 src/Interactions/ExtrudeInteraction.cpp            |    11 +-
 src/Interactions/Interaction.cpp                   |     3 +-
 src/Interactions/Interaction.h                     |     2 +-
 src/Interactions/Interactions.pri                  |     6 +-
 src/Interactions/MoveNodeInteraction.cpp           |     2 +
 src/Layers/ImageMapLayer.cpp                       |    32 +-
 src/Layers/Layer.cpp                               |    10 +-
 src/Layers/Layer.h                                 |     1 +
 src/Layers/LayerWidget.cpp                         |     1 +
 src/Layers/OsmRenderLayer.cpp                      |    11 +-
 src/Layers/OsmRenderLayer.h                        |     6 +-
 src/Main.cpp                                       |    99 +-
 src/MainWindow.cpp                                 |  1094 +-
 src/MainWindow.h                                   |    26 +-
 src/MainWindow.ui                                  |    24 +-
 src/NameFinder/httpquery.cpp                       |    79 +-
 src/NameFinder/httpquery.h                         |    21 +-
 src/NameFinder/namefindertablemodel.cpp            |     3 +-
 src/NameFinder/namefinderwidget.cpp                |    33 +-
 src/NameFinder/namefinderwidget.h                  |     7 +-
 src/PaintStyle/MasPaintStyle.cpp                   |    10 +-
 src/PaintStyle/PaintStyleEditor.cpp                |    16 +-
 src/PaintStyle/PaintStyleEditor.h                  |     2 +-
 src/Preferences/MerkaartorPreferences.cpp          |   493 +-
 src/Preferences/MerkaartorPreferences.h            |   104 +-
 src/Preferences/PreferencesDialog.cpp              |    46 +-
 src/Preferences/PreferencesDialog.h                |     2 +-
 src/Preferences/TMSPreferencesDialog.cpp           |    56 +-
 src/Preferences/TMSPreferencesDialog.h             |    10 +-
 src/Preferences/WMSPreferencesDialog.cpp           |    88 +-
 src/Preferences/WMSPreferencesDialog.h             |    43 +-
 src/QMapControl/WmscMapAdapter.cpp                 |    51 +-
 src/QMapControl/browserimagemanager.cpp            |     6 +-
 src/QMapControl/browserimagemanager.h              |     2 +-
 src/QMapControl/imagemanager.cpp                   |     6 +-
 src/QMapControl/mapcontrol.h                       |     2 +-
 src/QMapControl/wmsmapadapter.cpp                  |    47 +-
 src/QToolBarDialog/QToolBarDialog.pri              |     7 +
 src/QToolBarDialog/qttoolbardialog.cpp             |  1892 ++++
 src/QToolBarDialog/qttoolbardialog.h               |   144 +
 .../src => src/QToolBarDialog}/qttoolbardialog.ui  |     0
 src/Render/MapRenderer.cpp                         |     2 +-
 src/Sync/DirtyList.cpp                             |    12 +-
 src/Sync/DirtyList.h                               |     2 +-
 src/Sync/DownloadOSM.cpp                           |   333 +-
 src/Sync/DownloadOSM.h                             |    15 +-
 src/Tools/ActionsDialog.cpp                        |     7 +-
 src/Tools/QFatFs/QFat.cpp                          |   585 +
 src/Tools/QFatFs/QFat.h                            |   114 +
 src/Tools/QFatFs/QFatFile.cpp                      |    78 +
 src/Tools/QFatFs/QFatFile.h                        |    29 +
 src/Tools/QFatFs/QFatFs.cpp                        |   278 +
 src/Tools/QFatFs/QFatFs.h                          |    91 +
 src/Tools/QFatFs/QFatFs.pri                        |    12 +
 src/Tools/Tools.pri                                |     5 +
 src/Tools/ZipEngine.cpp                            |   101 +
 src/Tools/ZipEngine.h                              |    58 +
 src/Utils/CheckBoxList.cpp                         |     5 +
 src/Utils/CheckBoxList.h                           |     1 +
 src/Utils/OsmLink.cpp                              |    81 +-
 src/Utils/ProjectionChooser.cpp                    |     1 +
 src/Utils/SlippyMapWidget.cpp                      |    30 +-
 src/Utils/SlippyMapWidget.h                        |    12 +-
 src/Utils/TagSelector.cpp                          |     6 +-
 src/common/AboutDialog.ui                          |    17 +-
 src/common/Coord.h                                 |    10 -
 src/common/Document.cpp                            |    40 +-
 src/common/Document.h                              |     3 +
 src/common/FeatureManipulations.cpp                |    41 +-
 src/common/FeatureManipulations.h                  |     2 +
 src/common/Global.h                                |     7 +
 src/common/MapView.cpp                             |     9 +-
 src/common/MapView.h                               |     6 +-
 src/common/Projection.cpp                          |     6 +-
 src/common/TerraceDialog.cpp                       |     2 +-
 src/src.pro                                        |    57 +-
 translations/merkaartor_ar.ts                      |    11 +-
 translations/merkaartor_cs.ts                      |    11 +-
 translations/merkaartor_de.ts                      |    15 +-
 translations/merkaartor_es.ts                      |    11 +-
 translations/merkaartor_et.ts                      |    11 +-
 translations/merkaartor_fr.ts                      |    11 +-
 translations/merkaartor_hr.ts                      |    11 +-
 translations/merkaartor_hu.ts                      |    11 +-
 translations/merkaartor_it.ts                      |    15 +-
 translations/merkaartor_ja.ts                      |    17 +-
 translations/merkaartor_nl.ts                      |    11 +-
 translations/merkaartor_pl.ts                      |    15 +-
 translations/merkaartor_pt.ts                      |    11 +-
 translations/merkaartor_pt_BR.ts                   |    17 +-
 translations/merkaartor_ru.ts                      |    15 +-
 translations/merkaartor_sk.ts                      |    11 +-
 translations/merkaartor_sv.ts                      |    11 +-
 translations/merkaartor_uk.ts                      |    11 +-
 windows/Makefile                                   |     2 +-
 windows/copydeps.sh                                |     3 +
 windows/installer.nsi                              |   146 +
 983 files changed, 46805 insertions(+), 93346 deletions(-)

diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..229da78
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,17 @@
+env:
+ - QT=4
+ - QT=5
+
+install:
+ - sudo apt-add-repository -y ppa:ubuntu-sdk-team/ppa
+ - sudo apt-get update -qq
+ - sudo apt-cache search qt
+ - sudo apt-get install gdb libgdal-dev libproj-dev
+ - sudo apt-get install libqt4-xml libqt4-network libqt4-gui libqt4-svg libqt4-webkit libqt4-dev qt4-qmake
+ - sudo apt-get install libqt5xml5* libqt5network5* libqt5gui5* libqt5svg5* libqt5webkit5* libqt5quick5* qtdeclarative5-dev qttools5-dev qtbase5-dev qt5-qmake qtchooser
+ - qtchooser -list-versions
+
+
+script:
+  - qtchooser -qt=qt$QT -run-tool=qmake
+  - make
diff --git a/3rdparty/qtsingleapplication-2.6_1-opensource/examples/loader/main.cpp b/3rdparty/qtsingleapplication-2.6_1-opensource/examples/loader/main.cpp
index e336aa4..23e6fe0 100644
--- a/3rdparty/qtsingleapplication-2.6_1-opensource/examples/loader/main.cpp
+++ b/3rdparty/qtsingleapplication-2.6_1-opensource/examples/loader/main.cpp
@@ -46,11 +46,11 @@
 
 #include <qtsingleapplication.h>
 #include <QtCore/QFile>
-#include <QtGui/QMainWindow>
-#include <QtGui/QPrinter>
+#include <QtWidgets/QMainWindow>
+#include <QtPrintSupport/QPrinter>
 #include <QtGui/QPainter>
-#include <QtGui/QTextEdit>
-#include <QtGui/QMdiArea>
+#include <QtWidgets/QTextEdit>
+#include <QtWidgets/QMdiArea>
 #include <QtCore/QTextStream>
 
 class MainWindow : public QMainWindow
diff --git a/3rdparty/qtsingleapplication-2.6_1-opensource/examples/trivial/main.cpp b/3rdparty/qtsingleapplication-2.6_1-opensource/examples/trivial/main.cpp
index 3e6229d..727fab8 100644
--- a/3rdparty/qtsingleapplication-2.6_1-opensource/examples/trivial/main.cpp
+++ b/3rdparty/qtsingleapplication-2.6_1-opensource/examples/trivial/main.cpp
@@ -45,7 +45,7 @@
 ****************************************************************************/
 
 #include <qtsingleapplication.h>
-#include <QtGui/QTextEdit>
+#include <QtWidgets/QTextEdit>
 
 class TextEdit : public QTextEdit
 {
diff --git a/3rdparty/qtsingleapplication-2.6_1-opensource/qtsingleapplication.pro b/3rdparty/qtsingleapplication-2.6_1-opensource/qtsingleapplication.pro
index 07257c5..cceb41f 100644
--- a/3rdparty/qtsingleapplication-2.6_1-opensource/qtsingleapplication.pro
+++ b/3rdparty/qtsingleapplication-2.6_1-opensource/qtsingleapplication.pro
@@ -3,3 +3,4 @@ CONFIG += ordered
 include(common.pri)
 qtsingleapplication-uselib:SUBDIRS=buildlib
 SUBDIRS+=examples
+QT += widgets
diff --git a/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtlocalpeer.cpp b/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtlocalpeer.cpp
index 45e9619..bff13f5 100644
--- a/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtlocalpeer.cpp
+++ b/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtlocalpeer.cpp
@@ -47,6 +47,7 @@
 
 #include "qtlocalpeer.h"
 #include <QtCore/QCoreApplication>
+#include <QtCore/QDataStream>
 #include <QtCore/QTime>
 
 #if defined(Q_OS_WIN)
@@ -60,6 +61,9 @@ static PProcessIdToSessionId pProcessIdToSessionId = 0;
 #include <time.h>
 #endif
 
+#include <unistd.h>
+#include <sys/types.h>
+
 namespace QtLP_Private {
 #include "qtlockedfile.cpp"
 #if defined(Q_OS_WIN)
@@ -69,6 +73,7 @@ namespace QtLP_Private {
 #endif
 }
 
+
 const char* QtLocalPeer::ack = "ack";
 
 QtLocalPeer::QtLocalPeer(QObject* parent, const QString &appId)
@@ -101,7 +106,7 @@ QtLocalPeer::QtLocalPeer(QObject* parent, const QString &appId)
         socketName += QLatin1Char('-') + QString::number(sessionId, 16);
     }
 #else
-    socketName += QLatin1Char('-') + QString::number(::getuid(), 16);
+    socketName += QLatin1Char('-') + QString::number(getuid(), 16);
 #endif
 
     server = new QLocalServer(this);
diff --git a/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtlockedfile_win.cpp b/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtlockedfile_win.cpp
index d4bf9e1..2dd8918 100644
--- a/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtlockedfile_win.cpp
+++ b/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtlockedfile_win.cpp
@@ -47,6 +47,9 @@
 #include "qtlockedfile.h"
 #include <qt_windows.h>
 #include <QtCore/QFileInfo>
+#if QT_VERSION >= 0x050000
+#define QT_WA(unicode,ansi) unicode
+#endif
 
 #define MUTEX_PREFIX "QtLockedFile mutex "
 // Maximum number of concurrent read locks. Must not be greater than MAXIMUM_WAIT_OBJECTS
diff --git a/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.cpp b/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.cpp
index 9691ccc..cd5623e 100644
--- a/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.cpp
+++ b/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.cpp
@@ -47,7 +47,7 @@
 
 #include "qtsingleapplication.h"
 #include "qtlocalpeer.h"
-#include <QtGui/QWidget>
+#include <QWidget>
 
 
 /*!
@@ -182,11 +182,13 @@ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char *
     will be QCoreApplication::applicationFilePath(). \a argc, \a
     argv, and \a type are passed on to the QAppliation constructor.
 */
+#if 0
 QtSingleApplication::QtSingleApplication(int &argc, char **argv, Type type)
     : QApplication(argc, argv, type)
 {
     sysInit();
 }
+#endif
 
 
 #if defined(Q_WS_X11)
diff --git a/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.h b/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.h
index 5df9165..ca2c118 100644
--- a/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.h
+++ b/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.h
@@ -45,7 +45,7 @@
 ****************************************************************************/
 
 
-#include <QtGui/QApplication>
+#include <QApplication>
 
 class QtLocalPeer;
 
@@ -72,7 +72,7 @@ class QT_QTSINGLEAPPLICATION_EXPORT QtSingleApplication : public QApplication
 public:
     QtSingleApplication(int &argc, char **argv, bool GUIenabled = true);
     QtSingleApplication(const QString &id, int &argc, char **argv);
-    QtSingleApplication(int &argc, char **argv, Type type);
+    //QtSingleApplication(int &argc, char **argv, Type type);
 #if defined(Q_WS_X11)
     QtSingleApplication(Display* dpy, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0);
     QtSingleApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap= 0);
diff --git a/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.pri b/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.pri
index 5909f04..f306033 100644
--- a/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.pri
+++ b/3rdparty/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.pri
@@ -1,7 +1,7 @@
 include(../common.pri)
 INCLUDEPATH += $$PWD
 DEPENDPATH += $$PWD
-QT *= network
+QT *= network widgets
 
 qtsingleapplication-uselib:!qtsingleapplication-buildlib {
     LIBS += -L$$QTSINGLEAPPLICATION_LIBDIR -l$$QTSINGLEAPPLICATION_LIBNAME
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/INSTALL.TXT b/3rdparty/qttoolbardialog-2.2_1-opensource/INSTALL.TXT
deleted file mode 100644
index bbb74a9..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/INSTALL.TXT
+++ /dev/null
@@ -1,254 +0,0 @@
-INSTALLATION INSTRUCTIONS
-
-These instructions refer to the package you are installing as
-some-package.tar.gz or some-package.zip. The .zip file is intended for use
-on Windows.
-
-The directory you choose for the installation will be referred to as
-your-install-dir.
-
-Note to Qt Visual Studio Integration users: In the instructions below,
-instead of building from command line with nmake, you can use the menu
-command 'Qt->Open Solution from .pro file' on the .pro files in the
-example and plugin directories, and then build from within Visual
-Studio.
-
-Unpacking and installation
---------------------------
-
-1.  Unpacking the archive (if you have not done so already).
-
-    On Unix and Mac OS X (in a terminal window):
-
-	cd your-install-dir
-	gunzip some-package.tar.gz
-	tar xvf some-package.tar
-
-    This creates the subdirectory some-package containing the files.
-
-    On Windows:
-
-    Unpack the .zip archive by right-clicking it in explorer and
-    choosing "Extract All...". If your version of Windows does not
-    have zip support, you can use the infozip tools available
-    from www.info-zip.org.
-
-    If you are using the infozip tools (in a command prompt window):
-	cd your-install-dir
-	unzip some-package.zip
-
-2.  Configuring the package.
-
-    The configure script is called "configure" on unix/mac and
-    "configure.bat" on Windows. It should be run from a command line
-    after cd'ing to the package directory. 
-
-    You can choose whether you want to use the component by including
-    its source code directly into your project, or build the component
-    as a dynamic shared library (DLL) that is loaded into the
-    application at run-time. The latter may be preferable for
-    technical or licensing (LGPL) reasons. If you want to build a DLL,
-    run the configure script with the argument "-library". Also see
-    the note about usage below.
-
-    (Components that are Qt plugins, e.g. styles and image formats,
-    are by default built as a plugin DLL.)
-
-    The configure script will prompt you in some cases for further
-    information. Answer these questions and carefully read the license text
-    before accepting the license conditions. The package cannot be used if
-    you do not accept the license conditions.
-
-3.  Building the component and examples (when required).
-
-    If a DLL is to be built, or if you would like to build the
-    examples, next give the commands
-
-        qmake
-        make          [or nmake if your are using Microsoft Visual C++]
-
-    The example program(s) can be found in the directory called
-    "examples" or "example".
-
-    Components that are Qt plugins, e.g. styles and image formats, are
-    ready to be used as soon as they are built, so the rest of this
-    installation instruction can be skipped.
-
-4.  Building the Qt Designer plugin (optional).
-
-    Some of the widget components are provided with plugins for Qt
-    Designer. To build and install the plugin, cd into the
-    some-package/plugin directory and give the commands
-
-	qmake
-	make           [or nmake if your are using Microsoft Visual C++]
-
-    Restart Qt Designer to make it load the new widget plugin.
-
-    Note: If you are using the built-in Qt Designer from the Qt Visual
-    Studio Integration, you will need to manually copy the plugin DLL
-    file, i.e. copy
-	%QTDIR%\plugins\designer\some-component.dll 
-    to the Qt Visual Studio Integration plugin path, typically:
-	C:\Program Files\Trolltech\Qt VS Integration\plugins
-
-    Note: If you for some reason are using a Qt Designer that is built
-    in debug mode, you will need to build the plugin in debug mode
-    also. Edit the file plugin.pro in the plugin directory, changing
-    'release' to 'debug' in the CONFIG line, before running qmake.
-
-
-
-Solutions components are intended to be used directly from the package
-directory during development, so there is no 'make install' procedure.
-
-
-Using a component in your project
----------------------------------
-
-To use this component in your project, add the following line to the
-project's .pro file (or do the equivalent in your IDE):
-
-    include(your-install-dir/some-package/src/some-package.pri)
-
-This adds the package's sources and headers to the SOURCES and HEADERS
-project variables respectively (or, if the component has been
-configured as a DLL, it adds that library to the LIBS variable), and
-updates INCLUDEPATH to contain the package's src
-directory. Additionally, the .pri file may include some dependencies
-needed by the package.
-
-To include a header file from the package in your sources, you can now
-simply use:
-
-    #include <SomeClass>
-
-or alternatively, in pre-Qt 4 style:
-
-    #include <some-class.h>
-
-Refer to the documentation to see the classes and headers this
-components provides.
-
-
-
-Install documentation (optional)
---------------------------------
-
-The HTML documentation for the package's classes is located in the
-your-install-dir/some-package/doc/html/index.html. You can open this
-file and read the documentation with any web browser.
-
-To install the documentation into Qt Assistant (for Qt version 4.4 and
-later):
-
-1.  In Assistant, open the Edit->Preferences dialog and choose the
-    Documentation tab. Click the Add... button and select the file
-       your-install-dir/some-package/doc/html/some-package.qch
-    
-For Qt versions prior to 4.4, do instead the following:
-
-1.  The directory your-install-dir/some-package/doc/html contains a
-    file called some-package.dcf. Execute the following commands in a
-    shell, command prompt or terminal window:
-
-	cd your-install-dir/some-package/doc/html/
-	assistant -addContentFile some-package.dcf
-
-The next time you start Qt Assistant, you can access the package's
-documentation.
-
-
-Removing the documentation from assistant
------------------------------------------
-
-If you have installed the documentation into Qt Assistant, and want to uninstall it, do as follows, for Qt version 4.4 and later:
-
-1.  In Assistant, open the Edit->Preferences dialog and choose the
-    Documentation tab. In the list of Registered Documentation, select
-    the item com.nokia.qtsolutions.some-package_version, and click
-    the Remove button.
-
-For Qt versions prior to 4.4, do instead the following:
-
-1.  The directory your-install-dir/some-package/doc/html contains a
-    file called some-package.dcf. Execute the following commands in a
-    shell, command prompt or terminal window:
-
-	cd your-install-dir/some-package/doc/html/
-	assistant -removeContentFile some-package.dcf
-
-
-
-Using the component as a DLL
-----------------------------
-
-1. Normal components
-
-    The shared library (DLL) is built and placed in the
-    some-package/lib directory. It is intended to be used directly
-    from there during development. When appropriate, both debug and
-    release versions are built, since the run-time linker will in some
-    cases refuse to load a debug-built DLL into a release-built
-    application or vice versa.
-
-    The following steps are taken by default to help the dynamic
-    linker to locate the DLL at run-time (during development):
-
-    Unix: The some-package.pri file will add linker instructions to
-    add the some-package/lib directory to the rpath of the
-    executable. (When distributing, or if your system does not support
-    rpath, you can copy the shared library to another place that is
-    searched by the dynamic linker, e.g. the "lib" directory of your
-    Qt installation.)
-
-    Mac: The full path to the library is hardcoded into the library
-    itself, from where it is copied into the executable at link time,
-    and ready by the dynamic linker at run-time. (When distributing,
-    you will want to edit these hardcoded paths in the same way as for
-    the Qt DLLs. Refer to the document "Deploying an Application on
-    Mac OS X" in the Qt Reference Documentation.)
-
-    Windows: the .dll file(s) are copied into the "bin" directory of
-    your Qt installation. The Qt installation will already have set up
-    that directory to be searched by the dynamic linker.
-
-
-2. Plugins
-
-    For Qt Solutions plugins (e.g. image formats), both debug and
-    release versions of the plugin are built by default when
-    appropriate, since in some cases the release Qt library will not
-    load a debug plugin, and vice versa. The plugins are automatically
-    copied into the plugins directory of your Qt installation when
-    built, so no further setup is required.
-
-    Plugins may also be built statically, i.e. as a library that will be
-    linked into your application executable, and so will not need to
-    be redistributed as a separate plugin DLL to end users. Static
-    building is required if Qt itself is built statically. To do it,
-    just add "static" to the CONFIG variable in the plugin/plugin.pro
-    file before building. Refer to the "Static Plugins" section in the
-    chapter "How to Create Qt Plugins" for explanation of how to use a
-    static plugin in your application. The source code of the example
-    program(s) will also typically contain the relevant instructions
-    as comments.
-
-
-
-Uninstalling
-------------
-
-    The following command will remove any fils that have been
-    automatically placed outside the package directory itself during
-    installation and building
-
-	make distclean [or nmake if your are using Microsoft Visual C++]
-
-    If Qt Assistant documentation or Qt Designer plugins have been
-    installed, they can be uninstalled manually, ref. above.
-
-
-Enjoy! :)
-
-- The Qt Solutions Team.
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/LGPL_EXCEPTION.txt b/3rdparty/qttoolbardialog-2.2_1-opensource/LGPL_EXCEPTION.txt
deleted file mode 100644
index 238ade5..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/LGPL_EXCEPTION.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-Nokia Qt LGPL Exception version 1.1
-
-As an additional permission to the GNU Lesser General Public License
-version 2.1, the object code form of a "work that uses the Library"
-may incorporate material from a header file that is part of the
-Library.  You may distribute such object code under terms of your
-choice, provided that:
-(i) the header files of the Library have not been modified; and
-(ii) the incorporated material is limited to numerical parameters,
-data structure layouts, accessors, macros, inline functions and
-templates; and 
-(iii) you comply with the terms of Section 6 of the GNU
-Lesser General Public License version 2.1.
-
-Moreover, you may apply this exception to a modified version of the
-Library, provided that such modification does not involve copying
-material from the Library into the modified Library?s header files
-unless such material is limited to (i) numerical parameters; (ii) data
-structure layouts; (iii) accessors; and (iv) small macros, templates
-and inline functions of five lines or less in length.
-
-Furthermore, you are not required to apply this additional permission
-to a modified version of the Library.
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/LICENSE.GPL3 b/3rdparty/qttoolbardialog-2.2_1-opensource/LICENSE.GPL3
deleted file mode 100644
index 94a9ed0..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/LICENSE.GPL3
+++ /dev/null
@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/LICENSE.LGPL b/3rdparty/qttoolbardialog-2.2_1-opensource/LICENSE.LGPL
deleted file mode 100644
index 5ab7695..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/LICENSE.LGPL
+++ /dev/null
@@ -1,504 +0,0 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-

-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-

-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-

-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-

-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-

-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-

-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-

-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-

-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-

-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library 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
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/README.TXT b/3rdparty/qttoolbardialog-2.2_1-opensource/README.TXT
deleted file mode 100644
index 1774d70..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/README.TXT
+++ /dev/null
@@ -1,7 +0,0 @@
-Toolbar Dialog v2.2
-
-The Toolbar Dialog component provides customizing functionality
-for toolbars.
-
-
-
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/buildlib/buildlib.pro b/3rdparty/qttoolbardialog-2.2_1-opensource/buildlib/buildlib.pro
deleted file mode 100644
index 45e00d0..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/buildlib/buildlib.pro
+++ /dev/null
@@ -1,13 +0,0 @@
-TEMPLATE=lib
-CONFIG += qt dll qttoolbardialog-buildlib
-mac:CONFIG += absolute_library_soname
-win32|mac:!wince*:!win32-msvc:!macx-xcode:CONFIG += debug_and_release build_all
-include(../src/qttoolbardialog.pri)
-TARGET = $$QTTOOLBARDIALOG_LIBNAME
-DESTDIR = $$QTTOOLBARDIALOG_LIBDIR
-win32 {
-    DLLDESTDIR = $$[QT_INSTALL_BINS]
-    QMAKE_DISTCLEAN += $$[QT_INSTALL_BINS]\\$${QTTOOLBARDIALOG_LIBNAME}.dll
-}
-target.path = $$DESTDIR
-INSTALLS += target
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/common.pri b/3rdparty/qttoolbardialog-2.2_1-opensource/common.pri
deleted file mode 100644
index 44b0adf..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/common.pri
+++ /dev/null
@@ -1,6 +0,0 @@
-infile(config.pri, SOLUTIONS_LIBRARY, yes): CONFIG += qttoolbardialog-uselib
-TEMPLATE += fakelib
-QTTOOLBARDIALOG_LIBNAME = $$qtLibraryTarget(QtSolutions_ToolbarDialog-2.2)
-TEMPLATE -= fakelib
-QTTOOLBARDIALOG_LIBDIR = $$PWD/lib
-unix:qttoolbardialog-uselib:!qttoolbardialog-buildlib:QMAKE_RPATHDIR += $$QTTOOLBARDIALOG_LIBDIR
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/configure b/3rdparty/qttoolbardialog-2.2_1-opensource/configure
deleted file mode 100755
index 099b08c..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/configure
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/sh
-
-if [ "x$1" != "x" -a "x$1" != "x-library" ]; then
-    echo "Usage: $0 [-library]"
-    echo 
-    echo "-library: Build the component as a dynamic library (DLL). Default is to"
-    echo "          include the component source code directly in the application."
-    echo "          A DLL may be preferable for technical or licensing (LGPL) reasons."
-    echo 
-    exit 0
-fi
-
-
-# only ask to accept the license text once
-if [ ! -f .licenseAccepted ]; then
-# determine if opensource or commercial package
-    if [ -f LICENSE.LGPL ]; then
-    # opensource edition
-	while true; do
-	    echo 
-	    echo "You are licensed to use this software under the terms of"
-	    echo "the GNU General Public License (GPL) version 3, or"
-	    echo "the GNU Lesser General Public License (LGPL) version 2.1"
-	    echo "with certain additional extra rights as specified in the"
-	    echo "Nokia Qt LGPL Exception version 1.1."
-	    echo 
-	    echo "Type 'G' to view the GNU General Public License (GPL) version 3."
-	    echo "Type 'L' to view the GNU Lesser General Public License (LGPL) version 2.1."
-	    echo "Type 'E' to view the Nokia Qt LGPL Exception version 1.1."
-	    echo "Type 'yes' to accept this license offer."
-	    echo "Type 'no' to decline this license offer."
-	    echo 
-	    echo "Do you accept the terms of this license? "
-	    read answer
-	    echo
-
-	    if [ "x$answer" = "xno" ]; then
-		echo "You are not licensed to use this software."
-		echo
-		exit 1
-	    elif [ "x$answer" = "xyes" ]; then
-		echo license accepted > .licenseAccepted
-		break
-	    elif [ "x$answer" = "xe" -o "x$answer" = "xE" ]; then
-		more LGPL_EXCEPTION.txt
-	    elif [ "x$answer" = "xl" -o "x$answer" = "xL" ]; then
-		more LICENSE.LGPL
-	    elif [ "x$answer" = "xg" -o "x$answer" = "xG" ]; then
-		more LICENSE.GPL3
-	    fi
-	done
-    else
-	while true; do
-	    echo 
-	    echo "Please choose your region."
-	    echo 
-	    echo "Type 1 for North or South America."
-	    echo "Type 2 for anywhere outside North and South America."
-	    echo 
-	    echo "Select: "
-	    read region
-	    if [ "x$region" = "x1" ]; then
-		licenseFile=LICENSE.US
-		break;
-	    elif [ "x$region" = "x2" ]; then
-		licenseFile=LICENSE.NO
-		break;
-	    fi
-	done
-	while true; do
-	    echo 
-	    echo "License Agreement"
-	    echo 
-	    echo "Type '?' to view the Qt Solutions Commercial License."
-	    echo "Type 'yes' to accept this license offer."
-	    echo "Type 'no' to decline this license offer."
-	    echo 
-	    echo "Do you accept the terms of this license? "
-	    read answer
-	    echo
-
-	    if [ "x$answer" = "xno" ]; then
-		echo "You are not licensed to use this software."
-		echo
-		exit 1
-	    elif [ "x$answer" = "xyes" ]; then
-		echo license accepted > .licenseAccepted
-		cp "$licenseFile" LICENSE
-		rm LICENSE.US
-		rm LICENSE.NO
-		break
-	    elif [ "x$answer" = "x?" ]; then
-		more "$licenseFile"
-	    fi
-	done
-    fi
-fi
-
-rm -f config.pri
-if [ "x$1" = "x-library" ]; then
-    echo "Configuring to build this component as a dynamic library."
-    echo "SOLUTIONS_LIBRARY = yes" > config.pri
-fi
-
-echo
-echo "This component is now configured."
-echo
-echo "To build the component library (if requested) and example(s),"
-echo "run qmake and your make command."
-echo
-echo "To remove or reconfigure, run make distclean."
-echo
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/classic.css b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/classic.css
deleted file mode 100644
index f22a77a..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/classic.css
+++ /dev/null
@@ -1,139 +0,0 @@
-h3.fn,span.fn
-{
-  margin-left: 1cm;
-  text-indent: -1cm;
-}
-
-a:link
-{
-  color: #004faf;
-  text-decoration: none
-}
-
-a:visited
-{
-  color: #672967;
-  text-decoration: none
-}
-
-a.obsolete
-{
-  color: #661100;
-  text-decoration: none
-}
-
-a.compat
-{
-  color: #661100;
-  text-decoration: none
-}
-
-a.obsolete:visited
-{
-  color: #995500;
-  text-decoration: none
-}
-
-a.compat:visited
-{
-  color: #995500;
-  text-decoration: none
-}
-
-td.postheader
-{
-  font-family: sans-serif
-}
-
-tr.address
-{
-  font-family: sans-serif
-}
-
-body
-{
-  background: #ffffff;
-  color: black
-}
-
-table tr.odd {
-  background: #f0f0f0;
-  color: black;
-}
-
-table tr.even {
-  background: #e4e4e4;
-  color: black;
-}
-
-table.annotated th {
-  padding: 3px;
-  text-align: left
-}
-
-table.annotated td {
-  padding: 3px;
-}
-
-table tr pre
-{
-  padding-top: 0px;
-  padding-bottom: 0px;
-  padding-left: 0px;
-  padding-right: 0px;
-  border: none;
-  background: none
-}
-
-tr.qt-style
-{
-  background: #96E066;
-  color: black
-}
-
-body pre
-{
-  padding: 0.2em;
-  border: #e7e7e7 1px solid;
-  background: #f1f1f1;
-  color: black
-}
-
-table tr.qt-code pre
-{
-  padding: 0.2em;
-  border: #e7e7e7 1px solid;
-  background: #f1f1f1;
-  color: black
-}
-
-span.preprocessor, span.preprocessor a
-{
-  color: darkblue;
-}
-
-span.comment
-{
-  color: darkred;
-  font-style: italic
-}
-
-span.string,span.char
-{
-  color: darkgreen;
-}
-
-.title
-{
-    text-align: center
-}
-
-.subtitle
-{
-    font-size: 0.8em
-}
-
-.small-subtitle
-{
-    font-size: 0.65em
-}
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/images/qt-logo.png b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/images/qt-logo.png
deleted file mode 100644
index 794162f..0000000
Binary files a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/images/qt-logo.png and /dev/null differ
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/images/qttoolbardialog.png b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/images/qttoolbardialog.png
deleted file mode 100644
index c47cd8e..0000000
Binary files a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/images/qttoolbardialog.png and /dev/null differ
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/index.html b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/index.html
deleted file mode 100644
index 9d327b7..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/index.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html
-    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<!-- qttoolbardialog-2.2_1-opensource/doc/index.qdoc -->
-<head>
-  <title>Toolbar Dialog</title>
-  <link href="classic.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
-<td width="1">  </td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
-</tr></table><h1 class="title">Toolbar Dialog<br /><span class="subtitle"></span>
-</h1>
-<a name="description"></a>
-<h2>Description</h2>
-<p>The Toolbar Dialog component provides customizing functionality for toolbars.</p>
-<a name="classes"></a>
-<h2>Classes</h2>
-<ul>
-<li><a href="qttoolbarmanager.html">QtToolBarManager</a></li>
-<li><a href="qttoolbardialog.html">QtToolBarDialog</a></li>
-</ul>
-<a name="tested-platforms"></a>
-<h2>Tested platforms</h2>
-<ul>
-<li>Qt 4.4, 4.5 / Windows XP / MSVC.NET 2005</li>
-<li>Qt 4.4, 4.5 / Linux / gcc</li>
-<li>Qt 4.4, 4.5 / MacOS X 10.5 / gcc</li>
-</ul>
-<a name="screenshots"></a>
-<h2>Screenshots</h2>
-<p align="center"><img src="images/qttoolbardialog.png" /></p><p /><address><hr /><div align="center">
-<table width="100%" cellspacing="0" border="0"><tr class="address">
-<td width="30%" align="left">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
-<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
-<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
-</tr></table></div></address></body>
-</html>
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog-members.html b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog-members.html
deleted file mode 100644
index 4087f40..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog-members.html
+++ /dev/null
@@ -1,371 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html
-    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<!-- qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.cpp -->
-<head>
-  <title>List of All Members for QtToolBarDialog</title>
-  <link href="classic.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
-<td width="1">  </td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
-</tr></table><h1 class="title">List of All Members for QtToolBarDialog</h1>
-<p>This is the complete list of members for <a href="qttoolbardialog.html">QtToolBarDialog</a>, including inherited members.</p>
-<p><table width="100%" border="0" cellpadding="0" cellspacing="0">
-<tr><td width="45%" valign="top"><ul>
-<li><div class="fn"></div>enum <a href="http://qt.nokia.com/doc/4.5/qdialog.html#DialogCode-enum">DialogCode</a></li>
-<li><div class="fn"></div>enum <a href="http://qt.nokia.com/doc/4.5/qpaintdevice.html#PaintDeviceMetric-enum">PaintDeviceMetric</a></li>
-<li><div class="fn"></div>enum <a href="http://qt.nokia.com/doc/4.5/qwidget.html#RenderFlag-enum">RenderFlag</a></li>
-<li><div class="fn"></div>typedef <a href="http://qt.nokia.com/doc/4.5/qwidget.html#RenderFlags-typedef">RenderFlags</a></li>
-<li><div class="fn"></div><a href="qttoolbardialog.html#QtToolBarDialog">QtToolBarDialog</a> ( QWidget *, Qt::WFlags )</li>
-<li><div class="fn"></div><a href="qttoolbardialog.html#dtor.QtToolBarDialog">~QtToolBarDialog</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qdialog.html#accept">accept</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#acceptDrops-prop">acceptDrops</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qdialog.html#accepted">accepted</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#accessibleDescription-prop">accessibleDescription</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#accessibleName-prop">accessibleName</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#actionEvent">actionEvent</a> ( QActionEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#actions">actions</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#activateWindow">activateWindow</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#addAction">addAction</a> ( QAction * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#addActions">addActions</a> ( QList<QAction *> )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#adjustSize">adjustSize</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#autoFillBackground-prop">autoFillBackground</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#backgroundRole">backgroundRole</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#baseSize-prop">baseSize</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#blockSignals">blockSignals</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#changeEvent">changeEvent</a> ( QEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#childAt">childAt</a> ( int, int ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#childAt-4">childAt</a> ( const QPoint & ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#childEvent">childEvent</a> ( QChildEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#children">children</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#childrenRect-prop">childrenRect</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#childrenRegion-prop">childrenRegion</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#clearFocus">clearFocus</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#clearMask">clearMask</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#close">close</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#closeEvent">closeEvent</a> ( QCloseEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#connect">connect</a> ( const QObject *, const char *, const QObject *, const char *, Qt::ConnectionType )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#connect-2">connect</a> ( const QObject *, const char *, const char *, Qt::ConnectionType ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#connectNotify">connectNotify</a> ( const char * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#contentsRect">contentsRect</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#contextMenuEvent">contextMenuEvent</a> ( QContextMenuEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#contextMenuPolicy-prop">contextMenuPolicy</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#create">create</a> ( WId, bool, bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#cursor-prop">cursor</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#customContextMenuRequested">customContextMenuRequested</a> ( const QPoint & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#customEvent">customEvent</a> ( QEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#d_ptr-var">d_ptr</a> : </li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#deleteLater">deleteLater</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qpaintdevice.html#depth">depth</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#destroy">destroy</a> ( bool, bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#destroyed">destroyed</a> ( QObject * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect">disconnect</a> ( const QObject *, const char *, const QObject *, const char * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect-2">disconnect</a> ( const char *, const QObject *, const char * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect-3">disconnect</a> ( const QObject *, const char * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnectNotify">disconnectNotify</a> ( const char * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qdialog.html#done">done</a> ( int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#dragEnterEvent">dragEnterEvent</a> ( QDragEnterEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#dragLeaveEvent">dragLeaveEvent</a> ( QDragLeaveEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#dragMoveEvent">dragMoveEvent</a> ( QDragMoveEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#dropEvent">dropEvent</a> ( QDropEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#dumpObjectInfo">dumpObjectInfo</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#dumpObjectTree">dumpObjectTree</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#dynamicPropertyNames">dynamicPropertyNames</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#effectiveWinId">effectiveWinId</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#ensurePolished">ensurePolished</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#enterEvent">enterEvent</a> ( QEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#event">event</a> ( QEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#eventFilter">eventFilter</a> ( QObject *, QEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qdialog.html#exec">exec</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#find">find</a> ( WId )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChild">findChild</a> ( const QString & ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChildren">findChildren</a> ( const QString & ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChildren-2">findChildren</a> ( const QRegExp & ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qdialog.html#finished">finished</a> ( int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#focusInEvent">focusInEvent</a> ( QFocusEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#focusNextChild">focusNextChild</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#focusNextPrevChild">focusNextPrevChild</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#focusOutEvent">focusOutEvent</a> ( QFocusEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#focusPolicy-prop">focusPolicy</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#focusPreviousChild">focusPreviousChild</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#focusProxy">focusProxy</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#focusWidget">focusWidget</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#font-prop">font</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#fontInfo">fontInfo</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#fontMetrics">fontMetrics</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#foregroundRole">foregroundRole</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#frameGeometry-prop">frameGeometry</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#frameSize-prop">frameSize</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#geometry-prop">geometry</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#getContentsMargins">getContentsMargins</a> ( int *, int *, int *, int * ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#getDC">getDC</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#grabKeyboard">grabKeyboard</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#grabMouse">grabMouse</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#grabMouse-2">grabMouse</a> ( const QCursor & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#grabShortcut">grabShortcut</a> ( const QKeySequence &, Qt::ShortcutContext )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#graphicsProxyWidget">graphicsProxyWidget</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#hasEditFocus">hasEditFocus</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#focus-prop">hasFocus</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#mouseTracking-prop">hasMouseTracking</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#height-prop">height</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#heightForWidth">heightForWidth</a> ( int ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qpaintdevice.html#heightMM">heightMM</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#hide">hide</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#hideEvent">hideEvent</a> ( QHideEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#inherits">inherits</a> ( const char * ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#inputContext">inputContext</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#inputMethodEvent">inputMethodEvent</a> ( QInputMethodEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#inputMethodQuery">inputMethodQuery</a> ( Qt::InputMethodQuery ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#insertAction">insertAction</a> ( QAction *, QAction * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#insertActions">insertActions</a> ( QAction *, QList<QAction *> )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#installEventFilter">installEventFilter</a> ( QObject * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#isActiveWindow-prop">isActiveWindow</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#isAncestorOf">isAncestorOf</a> ( const QWidget * ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#enabled-prop">isEnabled</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#isEnabledTo">isEnabledTo</a> ( QWidget * ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#fullScreen-prop">isFullScreen</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#isHidden">isHidden</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#maximized-prop">isMaximized</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#minimized-prop">isMinimized</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#modal-prop">isModal</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qdialog.html#sizeGripEnabled-prop">isSizeGripEnabled</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#visible-prop">isVisible</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#isVisibleTo">isVisibleTo</a> ( QWidget * ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#isWidgetType">isWidgetType</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#isWindow">isWindow</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowModified-prop">isWindowModified</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#keyPressEvent">keyPressEvent</a> ( QKeyEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#keyReleaseEvent">keyReleaseEvent</a> ( QKeyEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#keyboardGrabber">keyboardGrabber</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#killTimer">killTimer</a> ( int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#layout">layout</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#layoutDirection-prop">layoutDirection</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#leaveEvent">leaveEvent</a> ( QEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#locale-prop">locale</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qpaintdevice.html#logicalDpiX">logicalDpiX</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qpaintdevice.html#logicalDpiY">logicalDpiY</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#lower">lower</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#macCGHandle">macCGHandle</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#macEvent">macEvent</a> ( EventHandlerCallRef, EventRef )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#macQDHandle">macQDHandle</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#mapFrom">mapFrom</a> ( QWidget *, const QPoint & ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#mapFromGlobal">mapFromGlobal</a> ( const QPoint & ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#mapFromParent">mapFromParent</a> ( const QPoint & ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#mapTo">mapTo</a> ( QWidget *, const QPoint & ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#mapToGlobal">mapToGlobal</a> ( const QPoint & ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#mapToParent">mapToParent</a> ( const QPoint & ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#mask">mask</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#maximumHeight-prop">maximumHeight</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#maximumSize-prop">maximumSize</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#maximumWidth-prop">maximumWidth</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#metaObject">metaObject</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#metric">metric</a> ( PaintDeviceMetric ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#minimumHeight-prop">minimumHeight</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#minimumSize-prop">minimumSize</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#minimumSizeHint-prop">minimumSizeHint</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#minimumWidth-prop">minimumWidth</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#mouseDoubleClickEvent">mouseDoubleClickEvent</a> ( QMouseEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#mouseGrabber">mouseGrabber</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#mouseMoveEvent">mouseMoveEvent</a> ( QMouseEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#mousePressEvent">mousePressEvent</a> ( QMouseEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#mouseReleaseEvent">mouseReleaseEvent</a> ( QMouseEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#pos-prop">move</a> ( const QPoint & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#pos-prop">move</a> ( int, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#moveEvent">moveEvent</a> ( QMoveEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#moveToThread">moveToThread</a> ( QThread * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#nativeParentWidget">nativeParentWidget</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#nextInFocusChain">nextInFocusChain</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#normalGeometry-prop">normalGeometry</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qpaintdevice.html#numColors">numColors</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#objectName-prop">objectName</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qdialog.html#open">open</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#overrideWindowFlags">overrideWindowFlags</a> ( QFlags<Qt::WindowType> )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#paintEngine">paintEngine</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#paintEvent">paintEvent</a> ( QPaintEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qpaintdevice.html#painters-var">painters</a> : </li>
-</ul></td><td valign="top"><ul>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qpaintdevice.html#paintingActive">paintingActive</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#palette-prop">palette</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#parent">parent</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#parentWidget">parentWidget</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qpaintdevice.html#physicalDpiX">physicalDpiX</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qpaintdevice.html#physicalDpiY">physicalDpiY</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#pos-prop">pos</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#property">property</a> ( const char * ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#qwsEvent">qwsEvent</a> ( QWSEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#raise">raise</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#receivers">receivers</a> ( const char * ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#rect-prop">rect</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qdialog.html#reject">reject</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qdialog.html#rejected">rejected</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#releaseDC">releaseDC</a> ( HDC ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#releaseKeyboard">releaseKeyboard</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#releaseMouse">releaseMouse</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#releaseShortcut">releaseShortcut</a> ( int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#removeAction">removeAction</a> ( QAction * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#removeEventFilter">removeEventFilter</a> ( QObject * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#render">render</a> ( QPaintDevice *, const QPoint &, const QRegion &, QFlags<QWidget::RenderFlag> )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#render-2">render</a> ( QPainter *, const QPoint &, const QRegion &, QFlags<QWidget::RenderFlag> )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#repaint">repaint</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#repaint-6">repaint</a> ( int, int, int, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#repaint-7">repaint</a> ( const QRect & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#repaint-8">repaint</a> ( const QRegion & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#size-prop">resize</a> ( const QSize & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#size-prop">resize</a> ( int, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#resizeEvent">resizeEvent</a> ( QResizeEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#restoreGeometry">restoreGeometry</a> ( const QByteArray & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qdialog.html#result">result</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#saveGeometry">saveGeometry</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#scroll">scroll</a> ( int, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#scroll-2">scroll</a> ( int, int, const QRect & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#sender">sender</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#acceptDrops-prop">setAcceptDrops</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#accessibleDescription-prop">setAccessibleDescription</a> ( const QString & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#accessibleName-prop">setAccessibleName</a> ( const QString & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setAttribute">setAttribute</a> ( Qt::WidgetAttribute, bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#autoFillBackground-prop">setAutoFillBackground</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setBackgroundRole">setBackgroundRole</a> ( QPalette::ColorRole )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#baseSize-prop">setBaseSize</a> ( const QSize & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#baseSize-prop">setBaseSize</a> ( int, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setContentsMargins">setContentsMargins</a> ( int, int, int, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#contextMenuPolicy-prop">setContextMenuPolicy</a> ( Qt::ContextMenuPolicy )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#cursor-prop">setCursor</a> ( const QCursor & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setDisabled">setDisabled</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setEditFocus">setEditFocus</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#enabled-prop">setEnabled</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setFixedHeight">setFixedHeight</a> ( int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setFixedSize">setFixedSize</a> ( const QSize & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setFixedSize-2">setFixedSize</a> ( int, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setFixedWidth">setFixedWidth</a> ( int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setFocus">setFocus</a> ( Qt::FocusReason )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setFocus-2">setFocus</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#focusPolicy-prop">setFocusPolicy</a> ( Qt::FocusPolicy )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setFocusProxy">setFocusProxy</a> ( QWidget * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#font-prop">setFont</a> ( const QFont & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setForegroundRole">setForegroundRole</a> ( QPalette::ColorRole )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#geometry-prop">setGeometry</a> ( const QRect & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#geometry-prop">setGeometry</a> ( int, int, int, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setHidden">setHidden</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setInputContext">setInputContext</a> ( QInputContext * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setLayout">setLayout</a> ( QLayout * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#layoutDirection-prop">setLayoutDirection</a> ( Qt::LayoutDirection )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#locale-prop">setLocale</a> ( const QLocale & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setMask">setMask</a> ( const QBitmap & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setMask-2">setMask</a> ( const QRegion & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#maximumHeight-prop">setMaximumHeight</a> ( int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#maximumSize-prop">setMaximumSize</a> ( const QSize & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#maximumSize-prop">setMaximumSize</a> ( int, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#maximumWidth-prop">setMaximumWidth</a> ( int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#minimumHeight-prop">setMinimumHeight</a> ( int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#minimumSize-prop">setMinimumSize</a> ( const QSize & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#minimumSize-prop">setMinimumSize</a> ( int, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#minimumWidth-prop">setMinimumWidth</a> ( int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qdialog.html#modal-prop">setModal</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#mouseTracking-prop">setMouseTracking</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#objectName-prop">setObjectName</a> ( const QString & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#palette-prop">setPalette</a> ( const QPalette & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setParent">setParent</a> ( QWidget * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setParent-2">setParent</a> ( QWidget *, QFlags<Qt::WindowType> )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#setProperty">setProperty</a> ( const char *, const QVariant & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qdialog.html#setResult">setResult</a> ( int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setShortcutAutoRepeat">setShortcutAutoRepeat</a> ( int, bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setShortcutEnabled">setShortcutEnabled</a> ( int, bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qdialog.html#sizeGripEnabled-prop">setSizeGripEnabled</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#sizeIncrement-prop">setSizeIncrement</a> ( const QSize & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#sizeIncrement-prop">setSizeIncrement</a> ( int, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#sizePolicy-prop">setSizePolicy</a> ( QSizePolicy )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#sizePolicy-prop">setSizePolicy</a> ( QSizePolicy::Policy, QSizePolicy::Policy )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#statusTip-prop">setStatusTip</a> ( const QString & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setStyle">setStyle</a> ( QStyle * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#styleSheet-prop">setStyleSheet</a> ( const QString & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setTabOrder">setTabOrder</a> ( QWidget *, QWidget * )</li>
-<li><div class="fn"></div><a href="qttoolbardialog.html#setToolBarManager">setToolBarManager</a> ( QtToolBarManager * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#toolTip-prop">setToolTip</a> ( const QString & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#updatesEnabled-prop">setUpdatesEnabled</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#visible-prop">setVisible</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#whatsThis-prop">setWhatsThis</a> ( const QString & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowFilePath-prop">setWindowFilePath</a> ( const QString & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowFlags-prop">setWindowFlags</a> ( QFlags<Qt::WindowType> )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowIcon-prop">setWindowIcon</a> ( const QIcon & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowIconText-prop">setWindowIconText</a> ( const QString & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowModality-prop">setWindowModality</a> ( Qt::WindowModality )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowModified-prop">setWindowModified</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowOpacity-prop">setWindowOpacity</a> ( qreal )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setWindowRole">setWindowRole</a> ( const QString & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setWindowState">setWindowState</a> ( QFlags<Qt::WindowState> )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#setWindowSurface">setWindowSurface</a> ( QWindowSurface * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowTitle-prop">setWindowTitle</a> ( const QString & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#show">show</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#showEvent">showEvent</a> ( QShowEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#showFullScreen">showFullScreen</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#showMaximized">showMaximized</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#showMinimized">showMinimized</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#showNormal">showNormal</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#signalsBlocked">signalsBlocked</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#size-prop">size</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#sizeHint-prop">sizeHint</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#sizeIncrement-prop">sizeIncrement</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#sizePolicy-prop">sizePolicy</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#stackUnder">stackUnder</a> ( QWidget * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#startTimer">startTimer</a> ( int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#staticMetaObject-var">staticMetaObject</a> : </li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#staticQtMetaObject-var">staticQtMetaObject</a> : </li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#statusTip-prop">statusTip</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#style">style</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#styleSheet-prop">styleSheet</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#tabletEvent">tabletEvent</a> ( QTabletEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#testAttribute">testAttribute</a> ( Qt::WidgetAttribute ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#thread">thread</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#timerEvent">timerEvent</a> ( QTimerEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#toolTip-prop">toolTip</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#tr">tr</a> ( const char *, const char *, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#trUtf8">trUtf8</a> ( const char *, const char *, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#underMouse">underMouse</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#cursor-prop">unsetCursor</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#layoutDirection-prop">unsetLayoutDirection</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#locale-prop">unsetLocale</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#update">update</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#update-2">update</a> ( int, int, int, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#update-3">update</a> ( const QRect & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#update-4">update</a> ( const QRegion & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#updateGeometry">updateGeometry</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#updateMicroFocus">updateMicroFocus</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#updatesEnabled-prop">updatesEnabled</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#visibleRegion">visibleRegion</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#whatsThis-prop">whatsThis</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#wheelEvent">wheelEvent</a> ( QWheelEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#width-prop">width</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qpaintdevice.html#widthMM">widthMM</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#winEvent">winEvent</a> ( MSG *, long * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#winId">winId</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#window">window</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowFilePath-prop">windowFilePath</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowFlags-prop">windowFlags</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowIcon-prop">windowIcon</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowIconText-prop">windowIconText</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowModality-prop">windowModality</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowOpacity-prop">windowOpacity</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowRole">windowRole</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowState">windowState</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowSurface">windowSurface</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowTitle-prop">windowTitle</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#windowType">windowType</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#x-prop">x</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#x11Event">x11Event</a> ( XEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#x11Info">x11Info</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#x11PictureHandle">x11PictureHandle</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qwidget.html#y-prop">y</a> () const</li>
-</ul>
-</td></tr>
-</table></p>
-<p /><address><hr /><div align="center">
-<table width="100%" cellspacing="0" border="0"><tr class="address">
-<td width="30%" align="left">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
-<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
-<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
-</tr></table></div></address></body>
-</html>
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.dcf b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.dcf
deleted file mode 100644
index daa1ba2..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.dcf
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE DCF>
-<DCF ref="index.html" icon="qttoolbardialog.png" imagedir="../../gif" title="Qt Solutions: Toolbar Dialog Documentation">
-<section ref="classes.html" title="Classes">
-    <section ref="qttoolbardialog.html" title="QtToolBarDialog Class Reference">
-        <keyword ref="qttoolbardialog.html">QtToolBarDialog</keyword>
-        <keyword ref="qttoolbardialog.html#setToolBarManager">setToolBarManager</keyword>
-        <section ref="qttoolbardialog-members.html" title="List of all members"/>
-    </section>
-    <section ref="qttoolbarmanager.html" title="QtToolBarManager Class Reference">
-        <keyword ref="qttoolbarmanager.html">QtToolBarManager</keyword>
-        <keyword ref="qttoolbarmanager.html#addAction">addAction</keyword>
-        <keyword ref="qttoolbarmanager.html#addToolBar">addToolBar</keyword>
-        <keyword ref="qttoolbarmanager.html#mainWindow">mainWindow</keyword>
-        <keyword ref="qttoolbarmanager.html#removeAction">removeAction</keyword>
-        <keyword ref="qttoolbarmanager.html#removeToolBar">removeToolBar</keyword>
-        <keyword ref="qttoolbarmanager.html#restoreState">restoreState</keyword>
-        <keyword ref="qttoolbarmanager.html#saveState">saveState</keyword>
-        <keyword ref="qttoolbarmanager.html#setMainWindow">setMainWindow</keyword>
-        <keyword ref="qttoolbarmanager.html#toolBars">toolBars</keyword>
-        <section ref="qttoolbarmanager-members.html" title="List of all members"/>
-    </section>
-</section>
-<section ref="overviews.html" title="Overviews">
-    <section ref="index.html" title="Toolbar Dialog">
-        <keyword ref="index.html">Toolbar Dialog</keyword>
-    </section>
-</section>
-<section ref="examples.html" title="Tutorial & Examples"/>
-</DCF>
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.html b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.html
deleted file mode 100644
index 82c0d22..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html
-    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<!-- qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.cpp -->
-<head>
-  <title>QtToolBarDialog Class Reference</title>
-  <link href="classic.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
-<td width="1">  </td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
-</tr></table><h1 class="title">QtToolBarDialog Class Reference</h1>
-<p>The QtToolBarDialog class provides a dialog for customizing toolbars. <a href="#details">More...</a></p>
-<pre> #include <QtToolBarDialog></pre><p>Inherits <a href="http://qt.nokia.com/doc/4.5/qdialog.html">QDialog</a>.</p>
-<ul>
-<li><a href="qttoolbardialog-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="public-functions"></a>
-<h3>Public Functions</h3>
-<ul>
-<li><div class="fn"></div><b><a href="qttoolbardialog.html#QtToolBarDialog">QtToolBarDialog</a></b> ( QWidget * <i>parent</i> = 0, Qt::WFlags <i>flags</i> = 0 )</li>
-<li><div class="fn"></div><b><a href="qttoolbardialog.html#dtor.QtToolBarDialog">~QtToolBarDialog</a></b> ()</li>
-<li><div class="fn"></div>void <b><a href="qttoolbardialog.html#setToolBarManager">setToolBarManager</a></b> ( QtToolBarManager * <i>toolBarManager</i> )</li>
-</ul>
-<ul>
-<li><div class="fn"></div>5 public functions inherited from <a href="http://qt.nokia.com/doc/4.5/qdialog.html#public-functions">QDialog</a></li>
-<li><div class="fn"></div>207 public functions inherited from <a href="http://qt.nokia.com/doc/4.5/qwidget.html#public-functions">QWidget</a></li>
-<li><div class="fn"></div>12 public functions inherited from <a href="http://qt.nokia.com/doc/4.5/qpaintdevice.html#public-functions">QPaintDevice</a></li>
-<li><div class="fn"></div>29 public functions inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-functions">QObject</a></li>
-</ul>
-<h3>Additional Inherited Members</h3>
-<ul>
-<li><div class="fn"></div>2 properties inherited from <a href="http://qt.nokia.com/doc/4.5/qdialog.html#properties">QDialog</a></li>
-<li><div class="fn"></div>57 properties inherited from <a href="http://qt.nokia.com/doc/4.5/qwidget.html#properties">QWidget</a></li>
-<li><div class="fn"></div>1 property inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#properties">QObject</a></li>
-<li><div class="fn"></div>5 public slots inherited from <a href="http://qt.nokia.com/doc/4.5/qdialog.html#public-slots">QDialog</a></li>
-<li><div class="fn"></div>19 public slots inherited from <a href="http://qt.nokia.com/doc/4.5/qwidget.html#public-slots">QWidget</a></li>
-<li><div class="fn"></div>1 public slot inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-slots">QObject</a></li>
-<li><div class="fn"></div>3 signals inherited from <a href="http://qt.nokia.com/doc/4.5/qdialog.html#signals">QDialog</a></li>
-<li><div class="fn"></div>1 signal inherited from <a href="http://qt.nokia.com/doc/4.5/qwidget.html#signals">QWidget</a></li>
-<li><div class="fn"></div>1 signal inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#signals">QObject</a></li>
-<li><div class="fn"></div>1 public type inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-variables">QObject</a></li>
-<li><div class="fn"></div>4 static public members inherited from <a href="http://qt.nokia.com/doc/4.5/qwidget.html#static-public-members">QWidget</a></li>
-<li><div class="fn"></div>4 static public members inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#static-public-members">QObject</a></li>
-<li><div class="fn"></div>37 protected functions inherited from <a href="http://qt.nokia.com/doc/4.5/qwidget.html#protected-functions">QWidget</a></li>
-<li><div class="fn"></div>1 protected function inherited from <a href="http://qt.nokia.com/doc/4.5/qpaintdevice.html#protected-functions">QPaintDevice</a></li>
-<li><div class="fn"></div>7 protected functions inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#protected-functions">QObject</a></li>
-<li><div class="fn"></div>1 protected slot inherited from <a href="http://qt.nokia.com/doc/4.5/qwidget.html#protected-slots">QWidget</a></li>
-<li><div class="fn"></div>1 protected type inherited from <a href="http://qt.nokia.com/doc/4.5/qpaintdevice.html#protected-variables">QPaintDevice</a></li>
-<li><div class="fn"></div>2 protected variables inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#protected-variables">QObject</a></li>
-</ul>
-<a name="details"></a>
-<hr />
-<h2>Detailed Description</h2>
-<p>The QtToolBarDialog class provides a dialog for customizing toolbars.</p>
-<p>QtToolBarDialog allows the user to customize the toolbars for a given main window.</p>
-<p align="center"><img src="images/qttoolbardialog.png" /></p><p>The dialog lets the users add, rename and remove custom toolbars. Note that built-in toolbars are marked with a green color, and cannot be removed or renamed.</p>
-<p>The users can also add and remove actions from the toolbars. An action can be added to many toolbars, but a toolbar can only contain one instance of each action. Actions that contains a widget are marked with a blue color in the list of actions, and can only be added to one single toolbar.</p>
-<p>Finally, the users can add separators to the toolbars.</p>
-<p>The original toolbars can be restored by clicking the <b>Restore all</b> button. All custom toolbars will then be removed, and all built-in toolbars will be restored to their original state.</p>
-<p>The QtToolBarDialog class's functionality is controlled by an instance of the <a href="qttoolbarmanager.html">QtToolBarManager</a> class, and the main window is specified using the <a href="qttoolbarmanager.html#setMainWindow">QtToolBarManager::setMainWindow</a>() function.</p>
-<p>All you need to do to use QtToolBarDialog is to specify an <a href="qttoolbarmanager.html">QtToolBarManager</a> instance and call the <a href="http://qt.nokia.com/doc/4.5/qdialog.html#exec">QDialog::exec</a>() slot:</p>
-<pre> QtToolBarManager *toolBarManager;
-
- void MyMainWindow::customize()
-     {
-         QtToolBarDialog dialog(this);
-         dialog.setToolBarManager(toolBarManager);
-         dialog.exec();
-     }</pre>
-<p>See also <a href="qttoolbarmanager.html">QtToolBarManager</a>.</p>
-<hr />
-<h2>Member Function Documentation</h2>
-<h3 class="fn"><a name="QtToolBarDialog"></a>QtToolBarDialog::QtToolBarDialog ( <a href="http://qt.nokia.com/doc/4.5/qwidget.html">QWidget</a> * <i>parent</i> = 0, <a href="http://qt.nokia.com/doc/4.5/qt.html#WFlags-typedef">Qt::WFlags</a> <i>flags</i> = 0 )</h3>
-<p>Creates a toolbar dialog with the given <i>parent</i> and the specifed window <i>flags</i>.</p>
-<h3 class="fn"><a name="dtor.QtToolBarDialog"></a>QtToolBarDialog::~QtToolBarDialog ()</h3>
-<p>Destroys the toolbar dialog.</p>
-<h3 class="fn"><a name="setToolBarManager"></a>void QtToolBarDialog::setToolBarManager ( <a href="qttoolbarmanager.html">QtToolBarManager</a> * <i>toolBarManager</i> )</h3>
-<p>Connects the toolbar dialog to the given <i>toolBarManager</i>. Then, when <a href="http://qt.nokia.com/doc/4.5/qdialog.html#exec">exec</a>() is called, the toolbar dialog will operate using the given <i>toolBarManager</i>.</p>
-<p /><address><hr /><div align="center">
-<table width="100%" cellspacing="0" border="0"><tr class="address">
-<td width="30%" align="left">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
-<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
-<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
-</tr></table></div></address></body>
-</html>
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.index b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.index
deleted file mode 100644
index 42ad314..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.index
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE QDOCINDEX>
-<INDEX url="" title="Qt Solutions: Toolbar Dialog Documentation" version="">
-    <namespace access="public" threadsafety="unspecified" status="commendable" name="" href="" location="" module="">
-        <class access="public" threadsafety="unspecified" status="commendable" name="QtToolBarManager" href="qttoolbarmanager.html" location="qttoolbardialog.h" bases="QObject" module="">
-            <function access="public" threadsafety="unspecified" status="commendable" name="QtToolBarManager" fullname="QtToolBarManager::QtToolBarManager" href="qttoolbarmanager.html#QtToolBarManager" location="qttoolbardialog.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QtToolBarManager(QObject * parent)">
-                <parameter left="QObject *" right="" name="parent" default="0"/>
-            </function>
-            <function access="public" threadsafety="unspecified" status="commendable" name="~QtToolBarManager" fullname="QtToolBarManager::~QtToolBarManager" href="qttoolbarmanager.html#dtor.QtToolBarManager" location="qttoolbardialog.h" virtual="non" meta="destructor" const="false" static="false" overload="false" type="" signature="~QtToolBarManager()"/>
-            <function access="public" threadsafety="unspecified" status="commendable" name="setMainWindow" fullname="QtToolBarManager::setMainWindow" href="qttoolbarmanager.html#setMainWindow" location="qttoolbardialog.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setMainWindow(QMainWindow * mainWindow)">
-                <parameter left="QMainWindow *" right="" name="mainWindow" default=""/>
-            </function>
-            <function access="public" threadsafety="unspecified" status="commendable" name="mainWindow" fullname="QtToolBarManager::mainWindow" href="qttoolbarmanager.html#mainWindow" location="qttoolbardialog.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QMainWindow *" signature="mainWindow() const"/>
-            <function access="public" threadsafety="unspecified" status="commendable" name="addAction" fullname="QtToolBarManager::addAction" href="qttoolbarmanager.html#addAction" location="qttoolbardialog.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="addAction(QAction * action, const QString & category)">
-                <parameter left="QAction *" right="" name="action" default=""/>
-                <parameter left="const QString &" right="" name="category" default=""/>
-            </function>
-            <function access="public" threadsafety="unspecified" status="commendable" name="removeAction" fullname="QtToolBarManager::removeAction" href="qttoolbarmanager.html#removeAction" location="qttoolbardialog.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="removeAction(QAction * action)">
-                <parameter left="QAction *" right="" name="action" default=""/>
-            </function>
-            <function access="public" threadsafety="unspecified" status="commendable" name="addToolBar" fullname="QtToolBarManager::addToolBar" href="qttoolbarmanager.html#addToolBar" location="qttoolbardialog.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="addToolBar(QToolBar * toolBar, const QString & category)">
-                <parameter left="QToolBar *" right="" name="toolBar" default=""/>
-                <parameter left="const QString &" right="" name="category" default=""/>
-            </function>
-            <function access="public" threadsafety="unspecified" status="commendable" name="removeToolBar" fullname="QtToolBarManager::removeToolBar" href="qttoolbarmanager.html#removeToolBar" location="qttoolbardialog.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="removeToolBar(QToolBar * toolBar)">
-                <parameter left="QToolBar *" right="" name="toolBar" default=""/>
-            </function>
-            <function access="public" threadsafety="unspecified" status="commendable" name="toolBars" fullname="QtToolBarManager::toolBars" href="qttoolbarmanager.html#toolBars" location="qttoolbardialog.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QList<QToolBar *>" signature="toolBars() const"/>
-            <function access="public" threadsafety="unspecified" status="commendable" name="saveState" fullname="QtToolBarManager::saveState" href="qttoolbarmanager.html#saveState" location="qttoolbardialog.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QByteArray" signature="saveState(int version) const">
-                <parameter left="int" right="" name="version" default="0"/>
-            </function>
-            <function access="public" threadsafety="unspecified" status="commendable" name="restoreState" fullname="QtToolBarManager::restoreState" href="qttoolbarmanager.html#restoreState" location="qttoolbardialog.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="bool" signature="restoreState(const QByteArray & state, int version)">
-                <parameter left="const QByteArray &" right="" name="state" default=""/>
-                <parameter left="int" right="" name="version" default="0"/>
-            </function>
-        </class>
-        <class access="public" threadsafety="unspecified" status="commendable" name="QtToolBarDialog" href="qttoolbardialog.html" location="qttoolbardialog.h" bases="QDialog" module="">
-            <function access="public" threadsafety="unspecified" status="commendable" name="QtToolBarDialog" fullname="QtToolBarDialog::QtToolBarDialog" href="qttoolbardialog.html#QtToolBarDialog" location="qttoolbardialog.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QtToolBarDialog(QWidget * parent, Qt::WFlags flags)">
-                <parameter left="QWidget *" right="" name="parent" default="0"/>
-                <parameter left="Qt::WFlags" right="" name="flags" default="0"/>
-            </function>
-            <function access="public" threadsafety="unspecified" status="commendable" name="~QtToolBarDialog" fullname="QtToolBarDialog::~QtToolBarDialog" href="qttoolbardialog.html#dtor.QtToolBarDialog" location="qttoolbardialog.h" virtual="non" meta="destructor" const="false" static="false" overload="false" type="" signature="~QtToolBarDialog()"/>
-            <function access="public" threadsafety="unspecified" status="commendable" name="setToolBarManager" fullname="QtToolBarDialog::setToolBarManager" href="qttoolbardialog.html#setToolBarManager" location="qttoolbardialog.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setToolBarManager(QtToolBarManager * toolBarManager)">
-                <parameter left="QtToolBarManager *" right="" name="toolBarManager" default=""/>
-            </function>
-        </class>
-        <page access="public" status="commendable" name="index.html" href="index.html" subtype="page" title="Toolbar Dialog" fulltitle="Toolbar Dialog" subtitle="" location="index.qdoc">
-            <contents name="description" title="Description" level="1"/>
-            <contents name="classes" title="Classes" level="1"/>
-            <contents name="tested-platforms" title="Tested platforms" level="1"/>
-            <contents name="screenshots" title="Screenshots" level="1"/>
-        </page>
-    </namespace>
-</INDEX>
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.qch b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.qch
deleted file mode 100644
index b52f14b..0000000
Binary files a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.qch and /dev/null differ
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.qhp b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.qhp
deleted file mode 100644
index a2c9bee..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbardialog.qhp
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<QtHelpProject version="1.0">
-    <namespace>com.nokia.qtsolutions.qttoolbardialog_2.2</namespace>
-    <virtualFolder>qdoc</virtualFolder>
-    <customFilter name="Qt Solutions: Toolbar Dialog">
-        <filterAttribute>qt</filterAttribute>
-        <filterAttribute>qttoolbardialog</filterAttribute>
-        <filterAttribute>solutions</filterAttribute>
-    </customFilter>
-    <filterSection>
-        <filterAttribute>qt</filterAttribute>
-        <filterAttribute>qttoolbardialog</filterAttribute>
-        <filterAttribute>solutions</filterAttribute>
-        <toc>
-            <section ref="index.html" title="Qt Solutions: Toolbar Dialog Documentation">
-                <section ref="index.html" title="Toolbar Dialog"/>
-            </section>
-        </toc>
-        <keywords>
-            <keyword name="QtToolBarDialog" id="QtToolBarDialog" ref="qttoolbardialog.html"/>
-            <keyword name="setToolBarManager" id="QtToolBarDialog::setToolBarManager" ref="qttoolbardialog.html#setToolBarManager"/>
-            <keyword name="~QtToolBarDialog" id="QtToolBarDialog::~QtToolBarDialog" ref="qttoolbardialog.html#dtor.QtToolBarDialog"/>
-            <keyword name="QtToolBarManager" id="QtToolBarManager" ref="qttoolbarmanager.html"/>
-            <keyword name="addAction" id="QtToolBarManager::addAction" ref="qttoolbarmanager.html#addAction"/>
-            <keyword name="addToolBar" id="QtToolBarManager::addToolBar" ref="qttoolbarmanager.html#addToolBar"/>
-            <keyword name="mainWindow" id="QtToolBarManager::mainWindow" ref="qttoolbarmanager.html#mainWindow"/>
-            <keyword name="removeAction" id="QtToolBarManager::removeAction" ref="qttoolbarmanager.html#removeAction"/>
-            <keyword name="removeToolBar" id="QtToolBarManager::removeToolBar" ref="qttoolbarmanager.html#removeToolBar"/>
-            <keyword name="restoreState" id="QtToolBarManager::restoreState" ref="qttoolbarmanager.html#restoreState"/>
-            <keyword name="saveState" id="QtToolBarManager::saveState" ref="qttoolbarmanager.html#saveState"/>
-            <keyword name="setMainWindow" id="QtToolBarManager::setMainWindow" ref="qttoolbarmanager.html#setMainWindow"/>
-            <keyword name="toolBars" id="QtToolBarManager::toolBars" ref="qttoolbarmanager.html#toolBars"/>
-            <keyword name="~QtToolBarManager" id="QtToolBarManager::~QtToolBarManager" ref="qttoolbarmanager.html#dtor.QtToolBarManager"/>
-            <keyword name="Toolbar Dialog" id="Toolbar Dialog" ref="index.html"/>
-        </keywords>
-        <files>
-            <file>index.html</file>
-            <file>images/qttoolbardialog.png</file>
-            <file>qttoolbarmanager.html</file>
-            <file>qttoolbardialog.html</file>
-            <file>classic.css</file>
-            <file>images/qt-logo.png</file>
-            <file>images/qttoolbardialog.png</file>
-        </files>
-    </filterSection>
-</QtHelpProject>
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbarmanager-members.html b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbarmanager-members.html
deleted file mode 100644
index e3272f2..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbarmanager-members.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html
-    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<!-- qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.cpp -->
-<head>
-  <title>List of All Members for QtToolBarManager</title>
-  <link href="classic.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
-<td width="1">  </td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
-</tr></table><h1 class="title">List of All Members for QtToolBarManager</h1>
-<p>This is the complete list of members for <a href="qttoolbarmanager.html">QtToolBarManager</a>, including inherited members.</p>
-<p><table width="100%" border="0" cellpadding="0" cellspacing="0">
-<tr><td width="45%" valign="top"><ul>
-<li><div class="fn"></div><a href="qttoolbarmanager.html#QtToolBarManager">QtToolBarManager</a> ( QObject * )</li>
-<li><div class="fn"></div><a href="qttoolbarmanager.html#dtor.QtToolBarManager">~QtToolBarManager</a> ()</li>
-<li><div class="fn"></div><a href="qttoolbarmanager.html#addAction">addAction</a> ( QAction *, const QString & )</li>
-<li><div class="fn"></div><a href="qttoolbarmanager.html#addToolBar">addToolBar</a> ( QToolBar *, const QString & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#blockSignals">blockSignals</a> ( bool )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#childEvent">childEvent</a> ( QChildEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#children">children</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#connect">connect</a> ( const QObject *, const char *, const QObject *, const char *, Qt::ConnectionType )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#connect-2">connect</a> ( const QObject *, const char *, const char *, Qt::ConnectionType ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#connectNotify">connectNotify</a> ( const char * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#customEvent">customEvent</a> ( QEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#d_ptr-var">d_ptr</a> : </li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#deleteLater">deleteLater</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#destroyed">destroyed</a> ( QObject * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect">disconnect</a> ( const QObject *, const char *, const QObject *, const char * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect-2">disconnect</a> ( const char *, const QObject *, const char * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect-3">disconnect</a> ( const QObject *, const char * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnectNotify">disconnectNotify</a> ( const char * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#dumpObjectInfo">dumpObjectInfo</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#dumpObjectTree">dumpObjectTree</a> ()</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#dynamicPropertyNames">dynamicPropertyNames</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#event">event</a> ( QEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#eventFilter">eventFilter</a> ( QObject *, QEvent * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChild">findChild</a> ( const QString & ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChildren">findChildren</a> ( const QString & ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChildren-2">findChildren</a> ( const QRegExp & ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#inherits">inherits</a> ( const char * ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#installEventFilter">installEventFilter</a> ( QObject * )</li>
-</ul></td><td valign="top"><ul>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#isWidgetType">isWidgetType</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#killTimer">killTimer</a> ( int )</li>
-<li><div class="fn"></div><a href="qttoolbarmanager.html#mainWindow">mainWindow</a> () const : QMainWindow *</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#metaObject">metaObject</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#moveToThread">moveToThread</a> ( QThread * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#objectName-prop">objectName</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#parent">parent</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#property">property</a> ( const char * ) const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#receivers">receivers</a> ( const char * ) const</li>
-<li><div class="fn"></div><a href="qttoolbarmanager.html#removeAction">removeAction</a> ( QAction * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#removeEventFilter">removeEventFilter</a> ( QObject * )</li>
-<li><div class="fn"></div><a href="qttoolbarmanager.html#removeToolBar">removeToolBar</a> ( QToolBar * )</li>
-<li><div class="fn"></div><a href="qttoolbarmanager.html#restoreState">restoreState</a> ( const QByteArray &, int ) : bool</li>
-<li><div class="fn"></div><a href="qttoolbarmanager.html#saveState">saveState</a> ( int ) const : QByteArray</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#sender">sender</a> () const</li>
-<li><div class="fn"></div><a href="qttoolbarmanager.html#setMainWindow">setMainWindow</a> ( QMainWindow * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#objectName-prop">setObjectName</a> ( const QString & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#setParent">setParent</a> ( QObject * )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#setProperty">setProperty</a> ( const char *, const QVariant & )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#signalsBlocked">signalsBlocked</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#startTimer">startTimer</a> ( int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#staticMetaObject-var">staticMetaObject</a> : </li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#staticQtMetaObject-var">staticQtMetaObject</a> : </li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#thread">thread</a> () const</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#timerEvent">timerEvent</a> ( QTimerEvent * )</li>
-<li><div class="fn"></div><a href="qttoolbarmanager.html#toolBars">toolBars</a> () const : QList<QToolBar *></li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#tr">tr</a> ( const char *, const char *, int )</li>
-<li><div class="fn"></div><a href="http://qt.nokia.com/doc/4.5/qobject.html#trUtf8">trUtf8</a> ( const char *, const char *, int )</li>
-</ul>
-</td></tr>
-</table></p>
-<p /><address><hr /><div align="center">
-<table width="100%" cellspacing="0" border="0"><tr class="address">
-<td width="30%" align="left">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
-<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
-<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
-</tr></table></div></address></body>
-</html>
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbarmanager.html b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbarmanager.html
deleted file mode 100644
index 69be8dc..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/html/qttoolbarmanager.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html
-    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<!-- qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.cpp -->
-<head>
-  <title>QtToolBarManager Class Reference</title>
-  <link href="classic.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
-<td width="1">  </td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
-</tr></table><h1 class="title">QtToolBarManager Class Reference</h1>
-<p>The QtToolBarManager class provides toolbar management for main windows. <a href="#details">More...</a></p>
-<pre> #include <QtToolBarManager></pre><p>Inherits <a href="http://qt.nokia.com/doc/4.5/qobject.html">QObject</a>.</p>
-<ul>
-<li><a href="qttoolbarmanager-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="public-functions"></a>
-<h3>Public Functions</h3>
-<ul>
-<li><div class="fn"></div><b><a href="qttoolbarmanager.html#QtToolBarManager">QtToolBarManager</a></b> ( QObject * <i>parent</i> = 0 )</li>
-<li><div class="fn"></div><b><a href="qttoolbarmanager.html#dtor.QtToolBarManager">~QtToolBarManager</a></b> ()</li>
-<li><div class="fn"></div>void <b><a href="qttoolbarmanager.html#addAction">addAction</a></b> ( QAction * <i>action</i>, const QString & <i>category</i> )</li>
-<li><div class="fn"></div>void <b><a href="qttoolbarmanager.html#addToolBar">addToolBar</a></b> ( QToolBar * <i>toolBar</i>, const QString & <i>category</i> )</li>
-<li><div class="fn"></div>QMainWindow * <b><a href="qttoolbarmanager.html#mainWindow">mainWindow</a></b> () const</li>
-<li><div class="fn"></div>void <b><a href="qttoolbarmanager.html#removeAction">removeAction</a></b> ( QAction * <i>action</i> )</li>
-<li><div class="fn"></div>void <b><a href="qttoolbarmanager.html#removeToolBar">removeToolBar</a></b> ( QToolBar * <i>toolBar</i> )</li>
-<li><div class="fn"></div>bool <b><a href="qttoolbarmanager.html#restoreState">restoreState</a></b> ( const QByteArray & <i>state</i>, int <i>version</i> = 0 )</li>
-<li><div class="fn"></div>QByteArray <b><a href="qttoolbarmanager.html#saveState">saveState</a></b> ( int <i>version</i> = 0 ) const</li>
-<li><div class="fn"></div>void <b><a href="qttoolbarmanager.html#setMainWindow">setMainWindow</a></b> ( QMainWindow * <i>mainWindow</i> )</li>
-<li><div class="fn"></div>QList<QToolBar *> <b><a href="qttoolbarmanager.html#toolBars">toolBars</a></b> () const</li>
-</ul>
-<ul>
-<li><div class="fn"></div>29 public functions inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-functions">QObject</a></li>
-</ul>
-<h3>Additional Inherited Members</h3>
-<ul>
-<li><div class="fn"></div>1 property inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#properties">QObject</a></li>
-<li><div class="fn"></div>1 public slot inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-slots">QObject</a></li>
-<li><div class="fn"></div>1 signal inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#signals">QObject</a></li>
-<li><div class="fn"></div>1 public type inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-variables">QObject</a></li>
-<li><div class="fn"></div>4 static public members inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#static-public-members">QObject</a></li>
-<li><div class="fn"></div>7 protected functions inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#protected-functions">QObject</a></li>
-<li><div class="fn"></div>2 protected variables inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#protected-variables">QObject</a></li>
-</ul>
-<a name="details"></a>
-<hr />
-<h2>Detailed Description</h2>
-<p>The QtToolBarManager class provides toolbar management for main windows.</p>
-<p>The QtToolBarManager is typically used with a <a href="qttoolbardialog.html">QtToolBarDialog</a> which allows the user to customize the toolbars for a given main window. The <a href="qttoolbardialog.html">QtToolBarDialog</a> class's functionality is controlled by an instance of the QtToolBarManager class, and the main window is specified using the QtToolBarManager class's <a href="qttoolbarmanager.html#setMainWindow">setMainWindow</a>() function.</p>
-<p>The currently specified main window can be retrieved using the <a href="qttoolbarmanager.html#mainWindow">mainWindow</a>() function.</p>
-<p>The toolbar manager holds lists of the given main window's actions and toolbars, and can add actions and toolbars to these lists using the <a href="qttoolbarmanager.html#addAction">addAction</a>() and <a href="qttoolbarmanager.html#addToolBar">addToolBar</a>() functions respectively. The actions can in addition be categorized acccording to the user's preferences. The toolbar manager can also remove custom actions and toolbars using the <a href="qttoolbarmanager.html#removeAction">remo [...]
-<p>Finally, the QtToolBarManager is able to save the customized state of its toolbars using the <a href="qttoolbarmanager.html#saveState">saveState</a>() function as well as restore the toolbars' saved state using <a href="qttoolbarmanager.html#restoreState">restoreState</a>() function.</p>
-<p>See also <a href="qttoolbardialog.html">QtToolBarDialog</a>.</p>
-<hr />
-<h2>Member Function Documentation</h2>
-<h3 class="fn"><a name="QtToolBarManager"></a>QtToolBarManager::QtToolBarManager ( <a href="http://qt.nokia.com/doc/4.5/qobject.html">QObject</a> * <i>parent</i> = 0 )</h3>
-<p>Creates a toolbar manager with the given <i>parent</i>.</p>
-<h3 class="fn"><a name="dtor.QtToolBarManager"></a>QtToolBarManager::~QtToolBarManager ()</h3>
-<p>Destroys the toolbar manager.</p>
-<h3 class="fn"><a name="addAction"></a>void QtToolBarManager::addAction ( <a href="http://qt.nokia.com/doc/4.5/qaction.html">QAction</a> * <i>action</i>, const <a href="http://qt.nokia.com/doc/4.5/qstring.html">QString</a> & <i>category</i> )</h3>
-<p>Adds the given <i>action</i> to the given <i>category</i> in the manager's list of actions. If the <i>category</i> doesn't exist it is created. Only non separator actions can be added. If the action is already added to the list, the function doesn't do anything.</p>
-<p>See also <a href="qttoolbarmanager.html#removeAction">removeAction</a>().</p>
-<h3 class="fn"><a name="addToolBar"></a>void QtToolBarManager::addToolBar ( <a href="http://qt.nokia.com/doc/4.5/qtoolbar.html">QToolBar</a> * <i>toolBar</i>, const <a href="http://qt.nokia.com/doc/4.5/qstring.html">QString</a> & <i>category</i> )</h3>
-<p>Adds the given <i>toolBar</i> to the manager's toolbar list.</p>
-<p>All the <i>toolBar</i>'s actions are automatically added to the given <i>category</i> in the manager's list of actions if they're not already there. The manager remembers which toolbar the actions belonged to, so, when the <i>toolBar</i> is removed, its actions will be removed as well.</p>
-<p>Custom toolbars are created with the main window returned by the <a href="qttoolbarmanager.html#mainWindow">mainWindow</a>() function, as its parent.</p>
-<p>See also <a href="qttoolbarmanager.html#removeToolBar">removeToolBar</a>().</p>
-<h3 class="fn"><a name="mainWindow"></a><a href="http://qt.nokia.com/doc/4.5/qmainwindow.html">QMainWindow</a> * QtToolBarManager::mainWindow () const</h3>
-<p>Returns the main window associated this toolbar manager.</p>
-<p>See also <a href="qttoolbarmanager.html#setMainWindow">setMainWindow</a>().</p>
-<h3 class="fn"><a name="removeAction"></a>void QtToolBarManager::removeAction ( <a href="http://qt.nokia.com/doc/4.5/qaction.html">QAction</a> * <i>action</i> )</h3>
-<p>Removes the specified <i>action</i> from the manager's list of actions. The action is also removed from all the registered toolbars. If the specified <i>action</i> is the only action in its category, that category is removed as well.</p>
-<p>See also <a href="qttoolbarmanager.html#addAction">addAction</a>().</p>
-<h3 class="fn"><a name="removeToolBar"></a>void QtToolBarManager::removeToolBar ( <a href="http://qt.nokia.com/doc/4.5/qtoolbar.html">QToolBar</a> * <i>toolBar</i> )</h3>
-<p>Removes the specified <i>toolBar</i> from the manager's list. All the actions that existed in the specified <i>toolBar</i> when it was added are removed as well.</p>
-<p>See also <a href="qttoolbarmanager.html#addToolBar">addToolBar</a>().</p>
-<h3 class="fn"><a name="restoreState"></a>bool QtToolBarManager::restoreState ( const <a href="http://qt.nokia.com/doc/4.5/qbytearray.html">QByteArray</a> & <i>state</i>, int <i>version</i> = 0 )</h3>
-<p>Restores the saved state of the toolbar manager's toolbars. The <i>version</i> number is compared with the version number of the stored <i>state</i>.</p>
-<p>Returns true if the version numbers are matching and the toolbar manager's state is restored; otherwise the toolbar manager's state is left unchanged and the function returns false.</p>
-<p>Note that the state of the toolbar manager's toolbars should be restored before restoring the state of the main window's toolbars and dockwidgets using the <a href="http://qt.nokia.com/doc/4.5/qmainwindow.html#restoreState">QMainWindow::restoreState</a>() function. In that way the restoreState() function can create the custom toolbars before the <a href="http://qt.nokia.com/doc/4.5/qmainwindow.html#restoreState">QMainWindow::restoreState</a>() function restores the custom toolbars' po [...]
-<p>See also <a href="qttoolbarmanager.html#saveState">saveState</a>().</p>
-<h3 class="fn"><a name="saveState"></a><a href="http://qt.nokia.com/doc/4.5/qbytearray.html">QByteArray</a> QtToolBarManager::saveState ( int <i>version</i> = 0 ) const</h3>
-<p>Saves the state of the toolbar manager's toolbars. The <i>version</i> number is stored as part of the data.</p>
-<p>Identifies all the <a href="http://qt.nokia.com/doc/4.5/qtoolbar.html">QToolBar</a> and <a href="http://qt.nokia.com/doc/4.5/qaction.html">QAction</a> objects by their object name property. Ensure that this property is unique for each <a href="http://qt.nokia.com/doc/4.5/qtoolbar.html">QToolBar</a> and <a href="http://qt.nokia.com/doc/4.5/qaction.html">QAction</a> that you add using the <a href="qttoolbarmanager.html">QtToolBarManager</a>.</p>
-<p>Returns an identifier for the state which can be passed along with the version number to the <a href="qttoolbarmanager.html#restoreState">restoreState</a>() function to restore the saved state.</p>
-<p>See also <a href="qttoolbarmanager.html#restoreState">restoreState</a>().</p>
-<h3 class="fn"><a name="setMainWindow"></a>void QtToolBarManager::setMainWindow ( <a href="http://qt.nokia.com/doc/4.5/qmainwindow.html">QMainWindow</a> * <i>mainWindow</i> )</h3>
-<p>Sets the main window upon which the toolbar manager operates, to be the given <i>mainWindow</i>.</p>
-<p>See also <a href="qttoolbarmanager.html#mainWindow">mainWindow</a>().</p>
-<h3 class="fn"><a name="toolBars"></a><a href="http://qt.nokia.com/doc/4.5/qlist.html">QList</a><<a href="http://qt.nokia.com/doc/4.5/qtoolbar.html">QToolBar</a> *> QtToolBarManager::toolBars () const</h3>
-<p>Returns the manager's toolbar list.</p>
-<p /><address><hr /><div align="center">
-<table width="100%" cellspacing="0" border="0"><tr class="address">
-<td width="30%" align="left">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
-<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
-<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
-</tr></table></div></address></body>
-</html>
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/images/qt-logo.png b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/images/qt-logo.png
deleted file mode 100644
index 794162f..0000000
Binary files a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/images/qt-logo.png and /dev/null differ
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/images/qttoolbardialog.png b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/images/qttoolbardialog.png
deleted file mode 100644
index c47cd8e..0000000
Binary files a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/images/qttoolbardialog.png and /dev/null differ
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/index.qdoc b/3rdparty/qttoolbardialog-2.2_1-opensource/doc/index.qdoc
deleted file mode 100644
index 69bf4ce..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/doc/index.qdoc
+++ /dev/null
@@ -1,37 +0,0 @@
-/*!
-	\page index.html
-	\title Toolbar Dialog
-
-    	\section1 Description
-	
-            The Toolbar Dialog component provides customizing functionality for toolbars.
-	
-
-	
-	
-
-    	
-        \section1 Classes
-	    \list
-	 \i  QtToolBarManager \i  QtToolBarDialog\endlist
-	
-    
-
-    	
-
-    	
-    		\section1 Tested platforms
-		\list
-		\i Qt 4.4, 4.5 / Windows XP / MSVC.NET 2005
-		    \i Qt 4.4, 4.5 / Linux / gcc
-		    \i Qt 4.4, 4.5 / MacOS X 10.5 / gcc
-		    \endlist
-
-    	
-
-	
-		\section1 Screenshots
-
-    		\img qttoolbardialog.png
-		    
-	*/
\ No newline at end of file
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/examples.pro b/3rdparty/qttoolbardialog-2.2_1-opensource/examples/examples.pro
deleted file mode 100644
index 843437b..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/examples.pro
+++ /dev/null
@@ -1,7 +0,0 @@
-######################################################################
-# Automatically generated by qmake (2.00a) Wed Jun 15 15:53:34 2005
-######################################################################
-
-TEMPLATE = subdirs
-SUBDIRS = simple
-
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/copy.png b/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/copy.png
deleted file mode 100644
index 2aeb282..0000000
Binary files a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/copy.png and /dev/null differ
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/cut.png b/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/cut.png
deleted file mode 100644
index 54638e9..0000000
Binary files a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/cut.png and /dev/null differ
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/new.png b/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/new.png
deleted file mode 100644
index 12131b0..0000000
Binary files a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/new.png and /dev/null differ
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/open.png b/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/open.png
deleted file mode 100644
index 45fa288..0000000
Binary files a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/open.png and /dev/null differ
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/paste.png b/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/paste.png
deleted file mode 100644
index e38bbe5..0000000
Binary files a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/paste.png and /dev/null differ
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/save.png b/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/save.png
deleted file mode 100644
index daba865..0000000
Binary files a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/images/save.png and /dev/null differ
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/main.cpp b/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/main.cpp
deleted file mode 100644
index 2ca230c..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/main.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-** 
-** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info at nokia.com)
-** 
-** This file is part of a Qt Solutions component.
-**
-** Commercial Usage  
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Solutions Commercial License Agreement provided
-** with the Software or, alternatively, in accordance with the terms
-** contained in a written agreement between you and Nokia.
-** 
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-** 
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
-** package.
-** 
-** GNU General Public License Usage 
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-** 
-** Please note Third Party Software included with Qt Solutions may impose
-** additional restrictions and it is the user's responsibility to ensure
-** that they have met the licensing requirements of the GPL, LGPL, or Qt
-** Solutions Commercial license and the relevant license of the Third
-** Party Software they are using.
-** 
-** If you are unsure which license is appropriate for your use, please
-** contact Nokia at qt-info at nokia.com.
-** 
-****************************************************************************/
-
-#include <QtGui/QApplication>
-
-#include "mainwindow.h"
-
-int main(int argc, char *argv[])
-{
-    Q_INIT_RESOURCE(simple);
-
-    QApplication app(argc, argv);
-    MainWindow mainWin;
-    mainWin.show();
-    return app.exec();
-}
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/mainwindow.cpp b/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/mainwindow.cpp
deleted file mode 100644
index 819fad9..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/mainwindow.cpp
+++ /dev/null
@@ -1,455 +0,0 @@
-/****************************************************************************
-** 
-** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info at nokia.com)
-** 
-** This file is part of a Qt Solutions component.
-**
-** Commercial Usage  
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Solutions Commercial License Agreement provided
-** with the Software or, alternatively, in accordance with the terms
-** contained in a written agreement between you and Nokia.
-** 
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-** 
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
-** package.
-** 
-** GNU General Public License Usage 
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-** 
-** Please note Third Party Software included with Qt Solutions may impose
-** additional restrictions and it is the user's responsibility to ensure
-** that they have met the licensing requirements of the GPL, LGPL, or Qt
-** Solutions Commercial license and the relevant license of the Third
-** Party Software they are using.
-** 
-** If you are unsure which license is appropriate for your use, please
-** contact Nokia at qt-info at nokia.com.
-** 
-****************************************************************************/
-
-#include <QtGui>
-
-#include "mainwindow.h"
-#include "qttoolbardialog.h"
-
-MainWindow::MainWindow()
-{
-    textEdit = new QTextEdit;
-    setCentralWidget(textEdit);
-
-    findWidget = new QLineEdit;
-    findWidget->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
-    connect(findWidget, SIGNAL(returnPressed()), this, SLOT(find()));
-
-    createActions();
-    createMenus();
-    createToolBars();
-    createStatusBar();
-    createToolBarManager();
-
-    readSettings();
-
-    connect(textEdit->document(), SIGNAL(contentsChanged()),
-            this, SLOT(documentWasModified()));
-
-    setCurrentFile("");
-}
-
-void MainWindow::closeEvent(QCloseEvent *event)
-{
-    if (maybeSave()) {
-        writeSettings();
-        event->accept();
-    } else {
-        event->ignore();
-    }
-}
-
-void MainWindow::newFile()
-{
-    if (maybeSave()) {
-        textEdit->clear();
-        setCurrentFile("");
-    }
-}
-
-void MainWindow::open()
-{
-    if (maybeSave()) {
-        QString fileName = QFileDialog::getOpenFileName(this);
-        if (!fileName.isEmpty())
-            loadFile(fileName);
-    }
-}
-
-bool MainWindow::save()
-{
-    if (curFile.isEmpty()) {
-        return saveAs();
-    } else {
-        return saveFile(curFile);
-    }
-}
-
-bool MainWindow::saveAs()
-{
-    QString fileName = QFileDialog::getSaveFileName(this);
-    if (fileName.isEmpty())
-        return false;
-
-    return saveFile(fileName);
-}
-
-void MainWindow::configureToolBars()
-{
-    QtToolBarDialog dlg(this);
-    dlg.setToolBarManager(toolBarManager);
-    dlg.exec();
-}
-
-void MainWindow::saveToolBars()
-{
-    QString fileName = QFileDialog::getSaveFileName(this,
-            tr("Save Toolbars' State"), QString(), "*.state");
-    if (fileName.isEmpty())
-        return;
-    QFileInfo fi(fileName);
-    if (fi.suffix() != QString("state"))
-        fileName += QString(".state");
-
-    QFile file(fileName);
-    if (file.open(QFile::WriteOnly)) {
-        QByteArray array = toolBarManager->saveState();
-        file.write(array);
-        file.close();
-    }
-}
-
-void MainWindow::restoreToolBars()
-{
-    QString fileName = QFileDialog::getOpenFileName(this,
-            tr("Restore Toolbars' State"), QString(), "*.state");
-    if (fileName.isEmpty())
-        return;
-
-    QFile file(fileName);
-    if (file.open(QFile::ReadOnly)) {
-        QByteArray array = file.readAll();
-        file.close();
-        toolBarManager->restoreState(array);
-    }
-}
-
-void MainWindow::about()
-{
-   QMessageBox::about(this, tr("About Application"),
-            tr("The <b>Application</b> example demonstrates how to "
-               "write modern GUI applications using Qt, with a menu bar, "
-               "toolbars, and a status bar."));
-}
-
-void MainWindow::documentWasModified()
-{
-    setWindowModified(textEdit->document()->isModified());
-}
-
-void MainWindow::find()
-{
-    QString text = findWidget->text();
-    if (!textEdit->find(text)) {
-        statusBar()->showMessage(tr("Search hit bottom, continuing from top"), 2000);
-        QTextCursor oldCursor = textEdit->textCursor();
-        int vpos = textEdit->verticalScrollBar()->value();
-        int hpos = textEdit->horizontalScrollBar()->value();
-        QTextCursor newCursor = oldCursor;
-        newCursor.setPosition(0);
-        textEdit->setTextCursor(newCursor);
-        if (!textEdit->find(text)) {
-            statusBar()->showMessage(tr("Pattern '%1' not found").arg(text), 2000);
-            textEdit->setTextCursor(oldCursor);
-            textEdit->verticalScrollBar()->setValue(vpos);
-            textEdit->horizontalScrollBar()->setValue(hpos);
-        }
-    }
-}
-
-void MainWindow::createActions()
-{
-    findAct = 0;
-
-    newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this);
-    newAct->setObjectName(QString::fromUtf8("newAct"));
-    newAct->setShortcut(tr("Ctrl+N"));
-    newAct->setStatusTip(tr("Create a new file"));
-    connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
-
-    openAct = new QAction(QIcon(":/images/open.png"), tr("&Open..."), this);
-    openAct->setObjectName(QString::fromUtf8("openAct"));
-    openAct->setShortcut(tr("Ctrl+O"));
-    openAct->setStatusTip(tr("Open an existing file"));
-    connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
-
-    saveAct = new QAction(QIcon(":/images/save.png"), tr("&Save"), this);
-    saveAct->setObjectName(QString::fromUtf8("saveAct"));
-    saveAct->setShortcut(tr("Ctrl+S"));
-    saveAct->setStatusTip(tr("Save the document to disk"));
-    connect(saveAct, SIGNAL(triggered()), this, SLOT(save()));
-
-    saveAsAct = new QAction(tr("Save &As..."), this);
-    saveAsAct->setObjectName(QString::fromUtf8("saveAsAct"));
-    saveAsAct->setStatusTip(tr("Save the document under a new name"));
-    connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs()));
-
-    exitAct = new QAction(tr("E&xit"), this);
-    exitAct->setObjectName(QString::fromUtf8("exitAct"));
-    exitAct->setShortcut(tr("Ctrl+Q"));
-    exitAct->setStatusTip(tr("Exit the application"));
-    connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
-
-    cutAct = new QAction(QIcon(":/images/cut.png"), tr("Cu&t"), this);
-    cutAct->setObjectName(QString::fromUtf8("cutAct"));
-    cutAct->setShortcut(tr("Ctrl+X"));
-    cutAct->setStatusTip(tr("Cut the current selection's contents to the "
-                            "clipboard"));
-    connect(cutAct, SIGNAL(triggered()), textEdit, SLOT(cut()));
-
-    copyAct = new QAction(QIcon(":/images/copy.png"), tr("&Copy"), this);
-    copyAct->setObjectName(QString::fromUtf8("copyAct"));
-    copyAct->setShortcut(tr("Ctrl+C"));
-    copyAct->setStatusTip(tr("Copy the current selection's contents to the "
-                             "clipboard"));
-    connect(copyAct, SIGNAL(triggered()), textEdit, SLOT(copy()));
-
-    pasteAct = new QAction(QIcon(":/images/paste.png"), tr("&Paste"), this);
-    pasteAct->setObjectName(QString::fromUtf8("pasteAct"));
-    pasteAct->setShortcut(tr("Ctrl+V"));
-    pasteAct->setStatusTip(tr("Paste the clipboard's contents into the current "
-                              "selection"));
-    connect(pasteAct, SIGNAL(triggered()), textEdit, SLOT(paste()));
-
-    configureToolBarsAct = new QAction(tr("&Configure Toolbars..."), this);
-    configureToolBarsAct->setObjectName(QString::fromUtf8("configureToolBarsAct"));
-    configureToolBarsAct->setStatusTip(tr("Configure toolbars"));
-    QObject::connect(configureToolBarsAct, SIGNAL(triggered()),
-                this, SLOT(configureToolBars()));
-
-    saveToolBarsAct = new QAction(tr("&Save Toolbars..."), this);
-    saveToolBarsAct->setObjectName(QString::fromUtf8("saveToolBarsAct"));
-    saveToolBarsAct->setStatusTip(tr("Save toolbars' state"));
-    QObject::connect(saveToolBarsAct, SIGNAL(triggered()),
-                this, SLOT(saveToolBars()));
-
-    restoreToolBarsAct = new QAction(tr("&Restore Toolbars..."), this);
-    restoreToolBarsAct->setObjectName(QString::fromUtf8("restoreToolBarsAct"));
-    restoreToolBarsAct->setStatusTip(tr("Restore toolbars' state"));
-    QObject::connect(restoreToolBarsAct, SIGNAL(triggered()),
-                this, SLOT(restoreToolBars()));
-
-    aboutAct = new QAction(tr("&About"), this);
-    aboutAct->setObjectName(QString::fromUtf8("aboutAct"));
-    aboutAct->setStatusTip(tr("Show the application's About box"));
-    connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));
-
-    aboutQtAct = new QAction(tr("About &Qt"), this);
-    aboutQtAct->setObjectName(QString::fromUtf8("aboutQtAct"));
-    aboutQtAct->setStatusTip(tr("Show the Qt library's About box"));
-    connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
-
-    cutAct->setEnabled(false);
-    copyAct->setEnabled(false);
-    connect(textEdit, SIGNAL(copyAvailable(bool)),
-            cutAct, SLOT(setEnabled(bool)));
-    connect(textEdit, SIGNAL(copyAvailable(bool)),
-            copyAct, SLOT(setEnabled(bool)));
-}
-
-void MainWindow::createMenus()
-{
-    fileMenu = menuBar()->addMenu(tr("&File"));
-    fileMenu->addAction(newAct);
-    fileMenu->addAction(openAct);
-    fileMenu->addAction(saveAct);
-    fileMenu->addAction(saveAsAct);
-    fileMenu->addSeparator();
-    fileMenu->addAction(exitAct);
-
-    editMenu = menuBar()->addMenu(tr("&Edit"));
-    editMenu->addAction(cutAct);
-    editMenu->addAction(copyAct);
-    editMenu->addAction(pasteAct);
-
-    settingsMenu = menuBar()->addMenu(tr("&Settings"));
-    settingsMenu->addAction(configureToolBarsAct);
-    settingsMenu->addAction(saveToolBarsAct);
-    settingsMenu->addAction(restoreToolBarsAct);
-
-    menuBar()->addSeparator();
-
-    helpMenu = menuBar()->addMenu(tr("&Help"));
-    helpMenu->addAction(aboutAct);
-    helpMenu->addAction(aboutQtAct);
-}
-
-void MainWindow::createToolBars()
-{
-    fileToolBar = addToolBar(tr("File"));
-    fileToolBar->setObjectName(QString::fromUtf8("fileToolBar"));
-    fileToolBar->addAction(newAct);
-    fileToolBar->addAction(openAct);
-    fileToolBar->addAction(saveAct);
-
-    editToolBar = addToolBar(tr("Edit"));
-    editToolBar->setObjectName(QString::fromUtf8("editToolBar"));
-    editToolBar->addAction(cutAct);
-    editToolBar->addAction(copyAct);
-    editToolBar->addAction(pasteAct);
-    editToolBar->addSeparator();
-
-    findAct = editToolBar->addWidget(findWidget);
-    findAct->setText(tr("Find"));
-    findAct->setObjectName(QString::fromUtf8("findAct"));
-}
-
-void MainWindow::createStatusBar()
-{
-    statusBar()->showMessage(tr("Ready"));
-}
-
-void MainWindow::createToolBarManager()
-{
-    toolBarManager = new QtToolBarManager(this);
-    toolBarManager->setMainWindow(this);
-
-    QString fileStr = tr("File");
-    QString editStr = tr("Edit");
-    QString settingsStr = tr("Settings");
-    QString helpStr = tr("Help");
-
-    toolBarManager->addToolBar(fileToolBar, fileStr);
-    toolBarManager->addToolBar(editToolBar, editStr);
-
-    toolBarManager->addAction(saveAsAct, fileStr);
-    toolBarManager->addAction(exitAct, fileStr);
-    toolBarManager->addAction(configureToolBarsAct, settingsStr);
-    toolBarManager->addAction(saveToolBarsAct, settingsStr);
-    toolBarManager->addAction(restoreToolBarsAct, settingsStr);
-    toolBarManager->addAction(aboutAct, helpStr);
-    toolBarManager->addAction(aboutQtAct, helpStr);
-}
-
-void MainWindow::readSettings()
-{
-    QSettings settings("Qt Software", "Application Example");
-    QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();
-    QSize size = settings.value("size", QSize(400, 400)).toSize();
-    QByteArray toolBarsState = settings.value("toolBarsState").toByteArray();
-    QByteArray docksState = settings.value("docksState").toByteArray();
-    resize(size);
-    move(pos);
-    toolBarManager->restoreState(toolBarsState);
-    restoreState(docksState);
-}
-
-void MainWindow::writeSettings()
-{
-    QSettings settings("Qt Software", "Application Example");
-    settings.setValue("pos", pos());
-    settings.setValue("size", size());
-    settings.setValue("toolBarsState", toolBarManager->saveState());
-    settings.setValue("docksState", saveState());
-}
-
-bool MainWindow::maybeSave()
-{
-    if (textEdit->document()->isModified()) {
-        int ret = QMessageBox::warning(this, tr("Application"),
-                     tr("The document has been modified.\n"
-                        "Do you want to save your changes?"),
-                     QMessageBox::Yes | QMessageBox::Default,
-                     QMessageBox::No,
-                     QMessageBox::Cancel | QMessageBox::Escape);
-        if (ret == QMessageBox::Yes)
-            return save();
-        else if (ret == QMessageBox::Cancel)
-            return false;
-    }
-    return true;
-}
-
-void MainWindow::loadFile(const QString &fileName)
-{
-    QFile file(fileName);
-    if (!file.open(QFile::ReadOnly | QFile::Text)) {
-        QMessageBox::warning(this, tr("Application"),
-                             tr("Cannot read file %1:\n%2.")
-                             .arg(fileName)
-                             .arg(file.errorString()));
-        return;
-    }
-
-    QTextStream in(&file);
-    QApplication::setOverrideCursor(Qt::WaitCursor);
-    textEdit->setPlainText(in.readAll());
-    QApplication::restoreOverrideCursor();
-
-    setCurrentFile(fileName);
-    statusBar()->showMessage(tr("File loaded"), 2000);
-}
-
-bool MainWindow::saveFile(const QString &fileName)
-{
-    QFile file(fileName);
-    if (!file.open(QFile::WriteOnly | QFile::Text)) {
-        QMessageBox::warning(this, tr("Application"),
-                             tr("Cannot write file %1:\n%2.")
-                             .arg(fileName)
-                             .arg(file.errorString()));
-        return false;
-    }
-
-    QTextStream out(&file);
-    QApplication::setOverrideCursor(Qt::WaitCursor);
-    out << textEdit->toPlainText();
-    QApplication::restoreOverrideCursor();
-
-    setCurrentFile(fileName);
-    statusBar()->showMessage(tr("File saved"), 2000);
-    return true;
-}
-
-void MainWindow::setCurrentFile(const QString &fileName)
-{
-    curFile = fileName;
-    textEdit->document()->setModified(false);
-    setWindowModified(false);
-
-    QString shownName;
-    if (curFile.isEmpty())
-        shownName = "untitled.txt";
-    else
-        shownName = strippedName(curFile);
-
-    setWindowTitle(tr("%1[*] - %2").arg(shownName).arg(tr("Application")));
-}
-
-QString MainWindow::strippedName(const QString &fullFileName)
-{
-    return QFileInfo(fullFileName).fileName();
-}
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/mainwindow.h b/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/mainwindow.h
deleted file mode 100644
index 017883a..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/mainwindow.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/****************************************************************************
-** 
-** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info at nokia.com)
-** 
-** This file is part of a Qt Solutions component.
-**
-** Commercial Usage  
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Solutions Commercial License Agreement provided
-** with the Software or, alternatively, in accordance with the terms
-** contained in a written agreement between you and Nokia.
-** 
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-** 
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
-** package.
-** 
-** GNU General Public License Usage 
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-** 
-** Please note Third Party Software included with Qt Solutions may impose
-** additional restrictions and it is the user's responsibility to ensure
-** that they have met the licensing requirements of the GPL, LGPL, or Qt
-** Solutions Commercial license and the relevant license of the Third
-** Party Software they are using.
-** 
-** If you are unsure which license is appropriate for your use, please
-** contact Nokia at qt-info at nokia.com.
-** 
-****************************************************************************/
-
-#ifndef MAINWINDOW_H
-#define MAINWINDOW_H
-
-#include <QtGui/QMainWindow>
-
-class QAction;
-class QMenu;
-class QTextEdit;
-class QLineEdit;
-class QtToolBarManager;
-
-class MainWindow : public QMainWindow
-{
-    Q_OBJECT
-public:
-    MainWindow();
-
-protected:
-    void closeEvent(QCloseEvent *event);
-
-private slots:
-    void newFile();
-    void open();
-    bool save();
-    bool saveAs();
-    void configureToolBars();
-    void saveToolBars();
-    void restoreToolBars();
-    void about();
-    void documentWasModified();
-    void find();
-
-private:
-    void createActions();
-    void createMenus();
-    void createToolBars();
-    void createStatusBar();
-    void createToolBarManager();
-    void readSettings();
-    void writeSettings();
-    bool maybeSave();
-    void loadFile(const QString &fileName);
-    bool saveFile(const QString &fileName);
-    void setCurrentFile(const QString &fileName);
-    QString strippedName(const QString &fullFileName);
-
-    QTextEdit *textEdit;
-    QString curFile;
-
-    QLineEdit *findWidget;
-
-    QMenu *fileMenu;
-    QMenu *editMenu;
-    QMenu *settingsMenu;
-    QMenu *helpMenu;
-    QToolBar *fileToolBar;
-    QToolBar *editToolBar;
-    QAction *newAct;
-    QAction *openAct;
-    QAction *saveAct;
-    QAction *saveAsAct;
-    QAction *exitAct;
-    QAction *cutAct;
-    QAction *copyAct;
-    QAction *pasteAct;
-    QAction *findAct;
-    QAction *configureToolBarsAct;
-    QAction *saveToolBarsAct;
-    QAction *restoreToolBarsAct;
-    QAction *aboutAct;
-    QAction *aboutQtAct;
-
-    QtToolBarManager *toolBarManager;
-};
-
-#endif
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/simple.pro b/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/simple.pro
deleted file mode 100644
index 17239fb..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/simple.pro
+++ /dev/null
@@ -1,11 +0,0 @@
-TEMPLATE = app
-DEPENDPATH += .
-INCLUDEPATH += .
-
-include(../../src/qttoolbardialog.pri)
-# Input
-SOURCES += main.cpp \
-           mainwindow.cpp
-HEADERS += mainwindow.h
-RESOURCES += simple.qrc
-
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/simple.qrc b/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/simple.qrc
deleted file mode 100644
index 0a776fa..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/examples/simple/simple.qrc
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
-    <file>images/copy.png</file>
-    <file>images/cut.png</file>
-    <file>images/new.png</file>
-    <file>images/open.png</file>
-    <file>images/paste.png</file>
-    <file>images/save.png</file>
-</qresource>
-</RCC>
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/qttoolbardialog.pro b/3rdparty/qttoolbardialog-2.2_1-opensource/qttoolbardialog.pro
deleted file mode 100644
index 268c53f..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/qttoolbardialog.pro
+++ /dev/null
@@ -1,5 +0,0 @@
-TEMPLATE=subdirs
-CONFIG += ordered
-include(common.pri)
-qttoolbardialog-uselib:SUBDIRS=buildlib
-SUBDIRS+=examples
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/src/QtToolBarDialog b/3rdparty/qttoolbardialog-2.2_1-opensource/src/QtToolBarDialog
deleted file mode 100644
index 70becef..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/src/QtToolBarDialog
+++ /dev/null
@@ -1 +0,0 @@
-#include "qttoolbardialog.h"
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/src/QtToolBarManager b/3rdparty/qttoolbardialog-2.2_1-opensource/src/QtToolBarManager
deleted file mode 100644
index 70becef..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/src/QtToolBarManager
+++ /dev/null
@@ -1 +0,0 @@
-#include "qttoolbardialog.h"
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.cpp b/3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.cpp
deleted file mode 100644
index abbc22e..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.cpp
+++ /dev/null
@@ -1,1892 +0,0 @@
-/****************************************************************************
-** 
-** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info at nokia.com)
-** 
-** This file is part of a Qt Solutions component.
-**
-** Commercial Usage  
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Solutions Commercial License Agreement provided
-** with the Software or, alternatively, in accordance with the terms
-** contained in a written agreement between you and Nokia.
-** 
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-** 
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
-** package.
-** 
-** GNU General Public License Usage 
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-** 
-** Please note Third Party Software included with Qt Solutions may impose
-** additional restrictions and it is the user's responsibility to ensure
-** that they have met the licensing requirements of the GPL, LGPL, or Qt
-** Solutions Commercial license and the relevant license of the Third
-** Party Software they are using.
-** 
-** If you are unsure which license is appropriate for your use, please
-** contact Nokia at qt-info at nokia.com.
-** 
-****************************************************************************/
-
-#include "qttoolbardialog.h"
-#include "ui_qttoolbardialog.h"
-#include <QtCore/QSet>
-#include <QtGui/QAction>
-#include <QtGui/QToolBar>
-#include <QtGui/QMainWindow>
-#include <QtGui/QShowEvent>
-#include <QtGui/QHideEvent>
-#include <QtGui/QHeaderView>
-
-class QtFullToolBarManagerPrivate
-{
-    class QtFullToolBarManager *q_ptr;
-    Q_DECLARE_PUBLIC(QtFullToolBarManager)
-
-public:
-
-    QToolBar *toolBarWidgetAction(QAction *action) const;
-    void removeWidgetActions(const QMap<QToolBar *, QList<QAction *> > &actions);
-
-    enum {
-        VersionMarker = 0xff,
-        ToolBarMarker = 0xfe,
-        CustomToolBarMarker = 0xfd,
-    };
-
-    void saveState(QDataStream &stream) const;
-    bool restoreState(QDataStream &stream) const;
-    QToolBar *findDefaultToolBar(const QString &objectName) const;
-    QAction *findAction(const QString &actionName) const;
-
-    QToolBar *toolBarByName(const QString &toolBarName) const;
-
-    QtFullToolBarManagerPrivate();
-
-    QMap<QString, QList<QAction *> > categoryToActions;
-    QMap<QAction *, QString>         actionToCategory;
-
-    QSet<QAction *> allActions;
-    QMap<QAction *, QToolBar *> widgetActions;
-    QSet<QAction *> regularActions;
-    QMap<QAction *, QList<QToolBar *> > actionToToolBars;
-
-    QMap<QToolBar *, QList<QAction *> > toolBars;
-    QMap<QToolBar *, QList<QAction *> > toolBarsWithSeparators;
-    QMap<QToolBar *, QList<QAction *> > defaultToolBars;
-    QList<QToolBar *> customToolBars;
-
-    QMainWindow *theMainWindow;
-};
-
-
-class QtFullToolBarManager : public QObject
-{
-    Q_OBJECT
-public:
-    QtFullToolBarManager(QObject *parent);
-    ~QtFullToolBarManager();
-
-    void setMainWindow(QMainWindow *mainWindow);
-    QMainWindow *mainWindow() const;
-
-    void addCategory(const QString &category);
-    bool hasCategory(const QString &category) const;
-    QStringList categories() const;
-    QList<QAction *> categoryActions(const QString &category) const;
-    QString actionCategory(QAction *action) const;
-
-    // only non-separator
-    void addAction(QAction *action, const QString &category);
-
-    void removeAction(QAction *action);
-
-    QSet<QAction *> actions() const;
-    bool isWidgetAction(QAction *action) const;
-
-    /*
-    Adds (registers) toolBar. Adds (registers) actions that already exists in toolBar.
-    Remembers toolbar and its actions as a default.
-    */
-    void addDefaultToolBar(QToolBar *toolBar, const QString &category);
-
-    void removeDefaultToolBar(QToolBar *toolBar);
-    // NULL on action list means separator.
-    QMap<QToolBar *, QList<QAction *> > defaultToolBars() const;
-    bool isDefaultToolBar(QToolBar *toolBar) const;
-
-    QToolBar *createToolBar(const QString &toolBarName);
-    void deleteToolBar(QToolBar *toolBar); // only those which were created, not added
-
-    QList<QAction *> actions(QToolBar *toolBar) const;
-
-    void setToolBars(const QMap<QToolBar *, QList<QAction *> > &actions);
-    void setToolBar(QToolBar *toolBar, const QList<QAction *> &actions);
-
-    QMap<QToolBar *, QList<QAction *> > toolBarsActions() const;
-    QByteArray saveState(int version = 0) const;
-    bool restoreState(const QByteArray &state, int version = 0);
-
-public slots:
-
-    void resetToolBar(QToolBar *toolBar);
-    void resetAllToolBars();
-
-signals:
-    void toolBarCreated(QToolBar *toolBar);
-    void toolBarRemoved(QToolBar *toolBar);
-
-    /*
-    If QToolBarWidgetAction was in another tool bar and is inserted into
-    this toolBar, toolBarChanged is first emited for other toolbar - without
-    that action. (Another approach may be that user first must call setToolBar
-    without that action for old tool bar)
-    */
-    void toolBarChanged(QToolBar *toolBar, const QList<QAction *> &actions);
-
-private:
-    QtFullToolBarManagerPrivate *d_ptr;
-    Q_DECLARE_PRIVATE(QtFullToolBarManager)
-    Q_DISABLE_COPY(QtFullToolBarManager)
-};
-
-
-QtFullToolBarManagerPrivate::QtFullToolBarManagerPrivate()
-    : theMainWindow(0)
-{
-}
-
-QToolBar *QtFullToolBarManagerPrivate::toolBarWidgetAction(QAction *action) const
-{
-    if (widgetActions.contains(action))
-        return widgetActions.value(action);
-    return 0;
-}
-
-void QtFullToolBarManagerPrivate::removeWidgetActions(const QMap<QToolBar *, QList<QAction *> >
-            &actions)
-{
-    QMap<QToolBar *, QList<QAction *> >::ConstIterator itToolBar = actions.constBegin();
-    while (itToolBar != actions.constEnd()) {
-        QToolBar *toolBar = itToolBar.key();
-        QList<QAction *> newActions = toolBars.value(toolBar);
-        QList<QAction *> newActionsWithSeparators = toolBarsWithSeparators.value(toolBar);
-
-        QList<QAction *> removedActions;
-        QList<QAction *> actionList = itToolBar.value();
-        QListIterator<QAction *> itAction(actionList);
-        while (itAction.hasNext()) {
-            QAction *action = itAction.next();
-            if (newActions.contains(action) && toolBarWidgetAction(action) == toolBar) {
-                newActions.removeAll(action);
-                newActionsWithSeparators.removeAll(action);
-                removedActions.append(action);
-            }
-        }
-
-        //emit q_ptr->toolBarChanged(toolBar, newActions);
-
-        toolBars.insert(toolBar, newActions);
-        toolBarsWithSeparators.insert(toolBar, newActionsWithSeparators);
-        QListIterator<QAction *> itRemovedAction(removedActions);
-        while (itRemovedAction.hasNext()) {
-            QAction *oldAction = itRemovedAction.next();
-            widgetActions.insert(oldAction, 0);
-            actionToToolBars[oldAction].removeAll(toolBar);
-        }
-
-        itToolBar++;
-    }
-}
-
-void QtFullToolBarManagerPrivate::saveState(QDataStream &stream) const
-{
-    stream << (uchar) ToolBarMarker;
-    stream << defaultToolBars.size();
-    QMap<QToolBar *, QList<QAction *> >::ConstIterator itToolBar =
-                defaultToolBars.constBegin();
-    while (itToolBar != defaultToolBars.constEnd()) {
-        QToolBar *tb = itToolBar.key();
-        if (tb->objectName().isEmpty()) {
-            qWarning("QtToolBarManager::saveState(): 'objectName' not set for QToolBar "
-                "%p '%s', using 'windowTitle' instead",
-            tb, tb->windowTitle().toLocal8Bit().constData());
-            stream << tb->windowTitle();
-        } else {
-            stream << tb->objectName();
-        }
-
-        stream << toolBars[tb].size();
-        QListIterator<QAction *> itAction(toolBars[tb]);
-        while (itAction.hasNext()) {
-            QAction *action = itAction.next();
-
-            if (action) {
-                if (action->objectName().isEmpty()) {
-                    qWarning("QtToolBarManager::saveState(): 'objectName' not set for QAction "
-                                "%p '%s', using 'text' instead",
-                            action, action->text().toLocal8Bit().constData());
-                    stream << action->text();
-                } else {
-                    stream << action->objectName();
-                }
-            } else {
-                stream << QString();
-            }
-        }
-        itToolBar++;
-    }
-
-
-    stream << (uchar) CustomToolBarMarker;
-    stream << toolBars.size() - defaultToolBars.size();
-    itToolBar = toolBars.constBegin();
-    while (itToolBar != toolBars.constEnd()) {
-        QToolBar *tb = itToolBar.key();
-        if (!defaultToolBars.contains(tb)) {
-            stream << tb->objectName();
-            stream << tb->windowTitle();
-
-            stream << toolBars[tb].size();
-            QListIterator<QAction *> itAction(toolBars[tb]);
-            while (itAction.hasNext()) {
-                QAction *action = itAction.next();
-
-                if (action) {
-                    if (action->objectName().isEmpty()) {
-                        qWarning("QtToolBarManager::saveState(): 'objectName' not set for QAction "
-                                    "%p '%s', using 'text' instead",
-                                action, action->text().toLocal8Bit().constData());
-                        stream << action->text();
-                    } else {
-                        stream << action->objectName();
-                    }
-                } else {
-                    stream << QString();
-                }
-            }
-        }
-        itToolBar++;
-    }
-}
-
-bool QtFullToolBarManagerPrivate::restoreState(QDataStream &stream) const
-{
-    uchar tmarker;
-    stream >> tmarker;
-    if (tmarker != ToolBarMarker)
-        return false;
-
-    int toolBars;
-    stream >> toolBars;
-    for (int i = 0; i < toolBars; i++) {
-        QString objectName;
-        stream >> objectName;
-        int actionCount;
-        stream >> actionCount;
-        QList<QAction *> actions;
-        for (int j = 0; j < actionCount; j++) {
-            QString actionName;
-            stream >> actionName;
-
-            if (actionName.isEmpty())
-                actions.append(0);
-            else {
-                QAction *action = findAction(actionName);
-                if (action)
-                    actions.append(action);
-            }
-        }
-
-        QToolBar *toolBar = findDefaultToolBar(objectName);
-        if (toolBar)
-            q_ptr->setToolBar(toolBar, actions);
-    }
-
-
-
-    uchar ctmarker;
-    stream >> ctmarker;
-    if (ctmarker != CustomToolBarMarker)
-        return false;
-
-    QList<QToolBar *> oldCustomToolBars = customToolBars;
-
-    stream >> toolBars;
-    for (int i = 0; i < toolBars; i++) {
-        QString objectName;
-        QString toolBarName;
-        int actionCount;
-        stream >> objectName;
-        stream >> toolBarName;
-        stream >> actionCount;
-        QList<QAction *> actions;
-        for (int j = 0; j < actionCount; j++) {
-            QString actionName;
-            stream >> actionName;
-
-            if (actionName.isEmpty())
-                actions.append(0);
-            else {
-                QAction *action = findAction(actionName);
-                if (action)
-                    actions.append(action);
-            }
-        }
-
-        QToolBar *toolBar = toolBarByName(objectName);
-        if (toolBar) {
-            toolBar->setWindowTitle(toolBarName);
-            oldCustomToolBars.removeAll(toolBar);
-        }
-        else
-            toolBar = q_ptr->createToolBar(toolBarName);
-        if (toolBar) {
-            toolBar->setObjectName(objectName);
-            q_ptr->setToolBar(toolBar, actions);
-        }
-    }
-    QListIterator<QToolBar *> itToolBar(oldCustomToolBars);
-    while (itToolBar.hasNext())
-        q_ptr->deleteToolBar(itToolBar.next());
-    return true;
-}
-
-QToolBar *QtFullToolBarManagerPrivate::findDefaultToolBar(const QString &objectName) const
-{
-    QMap<QToolBar *, QList<QAction *> >::ConstIterator itToolBar =
-                defaultToolBars.constBegin();
-    while (itToolBar != defaultToolBars.constEnd()) {
-        QToolBar *tb = itToolBar.key();
-        if (tb->objectName() == objectName)
-            return tb;
-
-        itToolBar++;
-    }
-
-    qWarning("QtToolBarManager::restoreState(): cannot find a QToolBar named "
-        "'%s', trying to match using 'windowTitle' instead.",
-        objectName.toLocal8Bit().constData());
-
-    itToolBar = defaultToolBars.constBegin();
-    while (itToolBar != defaultToolBars.constEnd()) {
-        QToolBar *tb = itToolBar.key();
-        if (tb->windowTitle() == objectName)
-            return tb;
-
-        itToolBar++;
-    }
-    qWarning("QtToolBarManager::restoreState(): cannot find a QToolBar with "
-        "matching 'windowTitle' (looking for '%s').",
-        objectName.toLocal8Bit().constData());
-
-    return 0;
-}
-
-QAction *QtFullToolBarManagerPrivate::findAction(const QString &actionName) const
-{
-    QSetIterator<QAction *> itAction(allActions);
-    while (itAction.hasNext()) {
-        QAction *action = itAction.next();
-
-        if (action->objectName() == actionName)
-            return action;
-    }
-    qWarning("QtToolBarManager::restoreState(): cannot find a QAction named "
-        "'%s', trying to match using 'text' instead.",
-        actionName.toLocal8Bit().constData());
-
-    itAction.toFront();
-    while (itAction.hasNext()) {
-        QAction *action = itAction.next();
-
-        if (action->text() == actionName)
-            return action;
-    }
-    qWarning("QtToolBarManager::restoreState(): cannot find a QAction with "
-        "matching 'text' (looking for '%s').",
-        actionName.toLocal8Bit().constData());
-
-    return 0;
-}
-
-QToolBar *QtFullToolBarManagerPrivate::toolBarByName(const QString &toolBarName) const
-{
-    QMap<QToolBar *, QList<QAction *> >::ConstIterator itToolBar = toolBars.constBegin();
-    while (itToolBar != toolBars.constEnd()) {
-        QToolBar *toolBar = itToolBar.key();
-        if (toolBar->objectName() == toolBarName)
-            return toolBar;
-
-        itToolBar++;
-    }
-    return 0;
-}
-
-//////////////////////////////
-
-QtFullToolBarManager::QtFullToolBarManager(QObject *parent)
-    : QObject(parent)
-{
-    d_ptr = new QtFullToolBarManagerPrivate;
-    d_ptr->q_ptr = this;
-}
-
-QtFullToolBarManager::~QtFullToolBarManager()
-{
-    delete d_ptr;
-}
-
-void QtFullToolBarManager::setMainWindow(QMainWindow *mainWindow)
-{
-    d_ptr->theMainWindow = mainWindow;
-}
-
-QMainWindow *QtFullToolBarManager::mainWindow() const
-{
-    return d_ptr->theMainWindow;
-}
-
-void QtFullToolBarManager::addCategory(const QString &category)
-{
-    d_ptr->categoryToActions[category] = QList<QAction *>();
-}
-
-bool QtFullToolBarManager::hasCategory(const QString &category) const
-{
-    return d_ptr->categoryToActions.contains(category);
-}
-
-QStringList QtFullToolBarManager::categories() const
-{
-    return d_ptr->categoryToActions.keys();
-}
-
-QList<QAction *> QtFullToolBarManager::categoryActions(const QString &category) const
-{
-    QMap<QString, QList<QAction *> >::ConstIterator it =
-                d_ptr->categoryToActions.find(category);
-    if (it != d_ptr->categoryToActions.constEnd())
-        return it.value();
-    return QList<QAction *>();
-}
-
-QString QtFullToolBarManager::actionCategory(QAction *action) const
-{
-    QMap<QAction *, QString>::ConstIterator it = d_ptr->actionToCategory.find(action);
-    if (it != d_ptr->actionToCategory.constEnd())
-        return it.value();
-    return QString();
-}
-
-void QtFullToolBarManager::addAction(QAction *action, const QString &category)
-{
-    if (!action)
-        return;
-//    if (!d_ptr->categoryToActions.contains(category))
-//        return;
-    if (action->isSeparator())
-        return;
-    if (d_ptr->allActions.contains(action))
-        return;
-    if (QLatin1String(action->metaObject()->className()) ==
-                QLatin1String("QToolBarWidgetAction"))
-        d_ptr->widgetActions.insert(action, 0);
-    else
-        d_ptr->regularActions.insert(action);
-    d_ptr->allActions.insert(action);
-    d_ptr->categoryToActions[category].append(action);
-    d_ptr->actionToCategory[action] = category;
-}
-
-void QtFullToolBarManager::removeAction(QAction *action)
-{
-    if (!d_ptr->allActions.contains(action))
-        return;
-
-    QList<QToolBar *> toolBars = d_ptr->actionToToolBars[action];
-    QListIterator<QToolBar *> itToolBar(toolBars);
-    while (itToolBar.hasNext()) {
-        QToolBar *toolBar = itToolBar.next();
-
-        d_ptr->toolBars[toolBar].removeAll(action);
-        d_ptr->toolBarsWithSeparators[toolBar].removeAll(action);
-
-        toolBar->removeAction(action);
-    }
-
-    QMap<QToolBar *, QList<QAction *> >::ConstIterator itDefault =
-            d_ptr->defaultToolBars.constBegin();
-    while (itDefault != d_ptr->defaultToolBars.constEnd()) {
-        if (itDefault.value().contains(action))
-            d_ptr->defaultToolBars[itDefault.key()].removeAll(action);
-
-        itDefault++;
-    }
-
-    d_ptr->allActions.remove(action);
-    d_ptr->widgetActions.remove(action);
-    d_ptr->regularActions.remove(action);
-    d_ptr->actionToToolBars.remove(action);
-
-    QString category = d_ptr->actionToCategory.value(action);
-    d_ptr->actionToCategory.remove(action);
-    d_ptr->categoryToActions[category].removeAll(action);
-
-    if (d_ptr->categoryToActions[category].isEmpty())
-        d_ptr->categoryToActions.remove(category);
-}
-
-QSet<QAction *> QtFullToolBarManager::actions() const
-{
-    return d_ptr->allActions;
-}
-
-bool QtFullToolBarManager::isWidgetAction(QAction *action) const
-{
-    if (d_ptr->widgetActions.contains(action))
-        return true;
-    return false;
-}
-
-void QtFullToolBarManager::addDefaultToolBar(QToolBar *toolBar, const QString &category)
-{
-    if (!toolBar)
-        return;
-    if (d_ptr->toolBars.contains(toolBar))
-        return;
-//    if (!d_ptr->categoryToActions.contains(category))
-//        return;
-    // could be also checked if toolBar belongs to mainwindow
-
-    QList<QAction *> newActionsWithSeparators;
-    QList<QAction *> newActions;
-    QList<QAction *> actions = toolBar->actions();
-    QListIterator<QAction *> itAction(actions);
-    while (itAction.hasNext()) {
-        QAction *action = itAction.next();
-        addAction(action, category);
-        if (d_ptr->widgetActions.contains(action))
-            d_ptr->widgetActions.insert(action, toolBar);
-        newActionsWithSeparators.append(action);
-        if (action->isSeparator())
-            action = 0;
-        else
-            d_ptr->actionToToolBars[action].append(toolBar);
-        newActions.append(action);
-    }
-    d_ptr->defaultToolBars.insert(toolBar, newActions);
-    //Below could be done by call setToolBar() if we want signal emission here.
-    d_ptr->toolBars.insert(toolBar, newActions);
-    d_ptr->toolBarsWithSeparators.insert(toolBar, newActionsWithSeparators);
-}
-
-void QtFullToolBarManager::removeDefaultToolBar(QToolBar *toolBar)
-{
-    if (!d_ptr->defaultToolBars.contains(toolBar))
-        return;
-
-    QList<QAction *> defaultActions = d_ptr->defaultToolBars[toolBar];
-    setToolBar(toolBar, QList<QAction *>());
-    QListIterator<QAction *> itAction(defaultActions);
-    while (itAction.hasNext())
-        removeAction(itAction.next());
-
-    d_ptr->toolBars.remove(toolBar);
-    d_ptr->toolBarsWithSeparators.remove(toolBar);
-    d_ptr->defaultToolBars.remove(toolBar);
-
-    itAction.toFront();
-    while (itAction.hasNext()) {
-        QAction *action = itAction.next();
-        if (action)
-            toolBar->insertAction(0, action);
-        else
-            toolBar->insertSeparator(0);
-    }
-}
-
-QMap<QToolBar *, QList<QAction *> > QtFullToolBarManager::defaultToolBars() const
-{
-    return d_ptr->defaultToolBars;
-}
-
-bool QtFullToolBarManager::isDefaultToolBar(QToolBar *toolBar) const
-{
-    if (d_ptr->defaultToolBars.contains(toolBar))
-        return true;
-    return false;
-}
-
-QToolBar *QtFullToolBarManager::createToolBar(const QString &toolBarName)
-{
-    if (!mainWindow())
-        return 0;
-    QToolBar *toolBar = new QToolBar(toolBarName, mainWindow());
-    int i = 1;
-    QLatin1String prefix("_Custom_Toolbar_");
-    QString name = QString("%1%2").arg(prefix).arg(i);
-    while (d_ptr->toolBarByName(name))
-        name = QString("%1%2").arg(prefix).arg(++i);
-    toolBar->setObjectName(name);
-    mainWindow()->addToolBar(toolBar);
-    d_ptr->customToolBars.append(toolBar);
-    d_ptr->toolBars.insert(toolBar, QList<QAction *>());
-    d_ptr->toolBarsWithSeparators.insert(toolBar, QList<QAction *>());
-    //emit toolBarCreated(toolBar);
-    return toolBar;
-}
-
-void QtFullToolBarManager::deleteToolBar(QToolBar *toolBar)
-{
-    if (!d_ptr->toolBars.contains(toolBar))
-        return;
-    if (d_ptr->defaultToolBars.contains(toolBar))
-        return;
-    setToolBar(toolBar, QList<QAction *>());
-    //emit toolBarRemoved(toolBar);
-    d_ptr->customToolBars.removeAll(toolBar);
-    d_ptr->toolBars.remove(toolBar);
-    d_ptr->toolBarsWithSeparators.remove(toolBar);
-    delete toolBar;
-}
-
-QList<QAction *> QtFullToolBarManager::actions(QToolBar *toolBar) const
-{
-    if (d_ptr->toolBars.contains(toolBar))
-        return d_ptr->toolBars.value(toolBar);
-    return QList<QAction *>();
-}
-
-void QtFullToolBarManager::setToolBars(const QMap<QToolBar *, QList<QAction *> > &actions)
-{
-    QMap<QToolBar *, QList<QAction *> >::ConstIterator it = actions.constBegin();
-    while (it != actions.constEnd()) {
-        setToolBar(it.key(), it.value());
-        it++;
-    }
-}
-
-void QtFullToolBarManager::setToolBar(QToolBar *toolBar, const QList<QAction *> &actions)
-{
-    if (!toolBar)
-        return;
-    if (!d_ptr->toolBars.contains(toolBar))
-        return;
-
-    if (actions == d_ptr->toolBars[toolBar])
-        return;
-
-    QMap<QToolBar *, QList<QAction *> > toRemove;
-
-    QList<QAction *> newActions;
-    QListIterator<QAction *> itAction(actions);
-    while (itAction.hasNext()) {
-        QAction *action = itAction.next();
-        if (!action || (!newActions.contains(action) && d_ptr->allActions.contains(action)))
-            newActions.append(action);
-
-        QToolBar *oldToolBar = d_ptr->toolBarWidgetAction(action);
-        if (oldToolBar && oldToolBar != toolBar)
-            toRemove[oldToolBar].append(action);
-    }
-
-    d_ptr->removeWidgetActions(toRemove);
-    //emit toolBarChanged(toolBar, newActions);
-
-    QList<QAction *> oldActions = d_ptr->toolBarsWithSeparators.value(toolBar);
-    QListIterator<QAction *> itOldAction(oldActions);
-    while (itOldAction.hasNext()) {
-        QAction *action = itOldAction.next();
-        /*
-        When addDefaultToolBar() separator actions could be checked if they are
-        inserted in other toolbars - if yes then create new one.
-        */
-        if (d_ptr->toolBarWidgetAction(action) == toolBar)
-            d_ptr->widgetActions.insert(action, 0);
-        toolBar->removeAction(action);
-        if (action->isSeparator())
-            delete action;
-        else
-            d_ptr->actionToToolBars[action].removeAll(toolBar);
-    }
-
-    QList<QAction *> newActionsWithSeparators;
-    QListIterator<QAction *> itNewActions(newActions);
-    while (itNewActions.hasNext()) {
-        QAction *action = itNewActions.next();
-        QAction *newAction = 0;
-        if (!action)
-            newAction = toolBar->insertSeparator(0);
-        if (d_ptr->allActions.contains(action)) {
-            toolBar->insertAction(0, action);
-            newAction = action;
-            d_ptr->actionToToolBars[action].append(toolBar);
-        }
-        newActionsWithSeparators.append(newAction);
-    }
-    d_ptr->toolBars.insert(toolBar, newActions);
-    d_ptr->toolBarsWithSeparators.insert(toolBar, newActionsWithSeparators);
-}
-
-QMap<QToolBar *, QList<QAction *> > QtFullToolBarManager::toolBarsActions() const
-{
-    return d_ptr->toolBars;
-}
-
-void QtFullToolBarManager::resetToolBar(QToolBar *toolBar)
-{
-    if (!isDefaultToolBar(toolBar))
-        return;
-    setToolBar(toolBar, defaultToolBars().value(toolBar));
-}
-
-void QtFullToolBarManager::resetAllToolBars()
-{
-    setToolBars(defaultToolBars());
-    QList<QToolBar *> oldCustomToolBars = d_ptr->customToolBars;
-    QListIterator<QToolBar *> itToolBar(oldCustomToolBars);
-    while (itToolBar.hasNext()) {
-        deleteToolBar(itToolBar.next());
-    }
-}
-
-QByteArray QtFullToolBarManager::saveState(int version) const
-{
-    QByteArray data;
-    QDataStream stream(&data, QIODevice::WriteOnly);
-    stream << QtFullToolBarManagerPrivate::VersionMarker;
-    stream << version;
-    d_ptr->saveState(stream);
-    return data;
-}
-
-bool QtFullToolBarManager::restoreState(const QByteArray &state, int version)
-{
-    QByteArray sd = state;
-    QDataStream stream(&sd, QIODevice::ReadOnly);
-    int marker, v;
-    stream >> marker;
-    stream >> v;
-    if (marker != QtFullToolBarManagerPrivate::VersionMarker || v != version)
-        return false;
-    return d_ptr->restoreState(stream);
-}
-
-
-class QtToolBarManagerPrivate
-{
-    class QtToolBarManager *q_ptr;
-    Q_DECLARE_PUBLIC(QtToolBarManager)
-public:
-    QtFullToolBarManager *manager;
-};
-
-//////////////////////////////////////
-
-/*! \class QtToolBarManager
-
-    \brief The QtToolBarManager class provides toolbar management for
-    main windows.
-
-    The QtToolBarManager is typically used with a QtToolBarDialog
-    which allows the user to customize the toolbars for a given main
-    window. The QtToolBarDialog class's functionality is controlled by
-    an instance of the QtToolBarManager class, and the main window is
-    specified using the QtToolBarManager class's setMainWindow()
-    function.
-
-    The currently specified main window can be retrieved using the
-    mainWindow() function.
-
-    The toolbar manager holds lists of the given main window's actions
-    and toolbars, and can add actions and toolbars to these
-    lists using the addAction() and addToolBar() functions
-    respectively. The actions can in addition be categorized
-    acccording to the user's preferences. The toolbar manager can also
-    remove custom actions and toolbars using the removeAction() and
-    removeToolBar() functions.
-
-    Finally, the QtToolBarManager is able to save the customized state
-    of its toolbars using the saveState() function as well as restore
-    the toolbars' saved state using restoreState() function.
-
-    \sa QtToolBarDialog
-*/
-
-/*!
-    Creates a toolbar manager with the given \a parent.
-*/
-QtToolBarManager::QtToolBarManager(QObject *parent)
-    : QObject(parent)
-{
-    d_ptr = new QtToolBarManagerPrivate;
-    d_ptr->q_ptr = this;
-
-    d_ptr->manager = new QtFullToolBarManager(this);
-}
-
-/*!
-    Destroys the toolbar manager.
-*/
-QtToolBarManager::~QtToolBarManager()
-{
-    delete d_ptr;
-}
-
-/*!
-    Sets the main window upon which the toolbar manager operates, to
-    be the given \a mainWindow.
-*/
-void QtToolBarManager::setMainWindow(QMainWindow *mainWindow)
-{
-    d_ptr->manager->setMainWindow(mainWindow);
-}
-
-/*!
-    Returns the main window associated this toolbar manager.
-*/
-QMainWindow *QtToolBarManager::mainWindow() const
-{
-    return d_ptr->manager->mainWindow();
-}
-
-/*!
-    Adds the given \a action to the given \a category in the manager's
-    list of actions. If the \a category doesn't exist it is created.
-    Only non separator actions can be added. If the action is already
-    added to the list, the function doesn't do anything.
-
-    \sa removeAction()
-*/
-void QtToolBarManager::addAction(QAction *action, const QString &category)
-{
-    d_ptr->manager->addAction(action, category);
-}
-
-/*!
-    Removes the specified \a action from the manager's list of
-    actions. The action is also removed from all the registered
-    toolbars.  If the specified \a action is the only action in its
-    category, that category is removed as well.
-
-    \sa addAction()
-*/
-void QtToolBarManager::removeAction(QAction *action)
-{
-    d_ptr->manager->removeAction(action);
-}
-
-/*!
-    Adds the given \a toolBar to the manager's toolbar list.
-
-    All the \a toolBar's actions are automatically added to the given
-    \a category in the manager's list of actions if they're not
-    already there. The manager remembers which toolbar the actions
-    belonged to, so, when the \a toolBar is removed, its actions will
-    be removed as well.
-
-    Custom toolbars are created with the main window returned by
-    the mainWindow() function, as its parent.
-
-    \sa removeToolBar()
-*/
-void QtToolBarManager::addToolBar(QToolBar *toolBar, const QString &category)
-{
-    d_ptr->manager->addDefaultToolBar(toolBar, category);
-}
-
-/*!
-    Removes the specified \a toolBar from the manager's list. All the
-    actions that existed in the specified \a toolBar when it was
-    added are removed as well.
-
-    \sa addToolBar()
-*/
-void QtToolBarManager::removeToolBar(QToolBar *toolBar)
-{
-    d_ptr->manager->removeDefaultToolBar(toolBar);
-}
-
-/*!
-    Returns the manager's toolbar list.
-*/
-QList<QToolBar *> QtToolBarManager::toolBars() const
-{
-    return d_ptr->manager->toolBarsActions().keys();
-}
-
-/*
-void QtToolBarManager::resetToolBar(QToolBar *toolBar)
-{
-    d_ptr->manager->resetToolBar(toolBar);
-}
-
-void QtToolBarManager::resetAllToolBars()
-{
-    d_ptr->manager->resetAllToolBars();
-}
-*/
-
-/*!
-    Saves the state of the toolbar manager's toolbars. The \a version
-    number is stored as part of the data.
-
-    Identifies all the QToolBar and QAction objects by their object
-    name property. Ensure that this property is unique for each
-    QToolBar and QAction that you add using the QtToolBarManager.
-
-    Returns an identifier for the state which can be passed along with
-    the version number to the restoreState() function to restore the
-    saved state.
-
-    \sa restoreState()
-*/
-QByteArray QtToolBarManager::saveState(int version) const
-{
-    return d_ptr->manager->saveState(version);
-}
-
-/*!
-    Restores the saved state of the toolbar manager's toolbars.  The
-    \a version number is compared with the version number of the
-    stored \a state.
-
-    Returns true if the version numbers are matching and the toolbar
-    manager's state is restored; otherwise the toolbar manager's state
-    is left unchanged and the function returns false.
-
-    Note that the state of the toolbar manager's toolbars should be
-    restored before restoring the state of the main window's toolbars
-    and dockwidgets using the QMainWindow::restoreState() function. In
-    that way the restoreState() function can create the custom
-    toolbars before the QMainWindow::restoreState() function restores
-    the custom toolbars' positions.
-
-    \sa saveState()
-*/
-bool QtToolBarManager::restoreState(const QByteArray &state, int version)
-{
-    return d_ptr->manager->restoreState(state, version);
-}
-
-//////////////////////
-
-class ToolBarItem {
-public:
-    ToolBarItem() : tb(0) {}
-    ToolBarItem(QToolBar *toolBar) : tb(toolBar) {}
-    ToolBarItem(QToolBar *toolBar, const QString &toolBarName)
-            : tb(toolBar), tbName(toolBarName) {}
-    ToolBarItem(const QString &toolBarName) : tb(0), tbName(toolBarName) {}
-    QToolBar *toolBar() const
-        { return tb; }
-    void setToolBar(QToolBar *toolBar)
-        { tb = toolBar; }
-    QString toolBarName() const
-        { return tbName; }
-    void setToolBarName(const QString &toolBarName)
-        { tbName = toolBarName; }
-private:
-    QToolBar *tb;
-    QString tbName;
-};
-
-class QtToolBarDialogPrivate {
-    QtToolBarDialog *q_ptr;
-    Q_DECLARE_PUBLIC(QtToolBarDialog)
-public:
-    QtToolBarDialogPrivate()
-        : toolBarManager(0),
-          currentAction(0),
-          currentToolBar(0)
-          { }
-
-    ToolBarItem *createItem(QToolBar *toolBar);
-    ToolBarItem *createItem(const QString &toolBarName);
-    void deleteItem(ToolBarItem *item);
-
-    void newClicked();
-    void removeClicked();
-    void defaultClicked();
-    void okClicked();
-    void applyClicked();
-    void cancelClicked();
-    void upClicked();
-    void downClicked();
-    void leftClicked();
-    void rightClicked();
-    void renameClicked();
-    void toolBarRenamed(QListWidgetItem *item);
-    void currentActionChanged(QTreeWidgetItem *current);
-    void currentToolBarChanged(QListWidgetItem *current);
-    void currentToolBarActionChanged(QListWidgetItem *current);
-
-    void removeToolBar(ToolBarItem *item);
-    bool isDefaultToolBar(ToolBarItem *item) const;
-    void setButtons();
-    void clearOld();
-    void fillNew();
-    QtFullToolBarManager *toolBarManager;
-    QMap<ToolBarItem *, QList<QAction *> > currentState;
-    QMap<QToolBar *, ToolBarItem *> toolBarItems;
-    QSet<ToolBarItem *> createdItems;
-    QSet<ToolBarItem *> removedItems;
-
-    QSet<ToolBarItem *> allToolBarItems;
-
-    // static
-    QTreeWidgetItem *currentAction;
-    QMap<QAction *, QTreeWidgetItem *> actionToItem;
-    QMap<QTreeWidgetItem *, QAction *> itemToAction;
-
-    // dynamic
-    ToolBarItem *currentToolBar;
-    QMap<ToolBarItem *, QListWidgetItem *> toolBarToItem;
-    QMap<QListWidgetItem *, ToolBarItem *> itemToToolBar;
-
-    // dynamic
-    QMap<QAction *, QListWidgetItem *> actionToCurrentItem;
-    QMap<QListWidgetItem *, QAction *> currentItemToAction;
-
-    QMap<QAction *, ToolBarItem *> widgetActionToToolBar;
-    QMap<ToolBarItem *, QSet<QAction *> > toolBarToWidgetActions;
-
-    QString separatorText;
-    Ui::QtToolBarDialog ui;
-};
-
-ToolBarItem *QtToolBarDialogPrivate::createItem(QToolBar *toolBar)
-{
-    if (!toolBar)
-        return 0;
-    ToolBarItem *item = new ToolBarItem(toolBar, toolBar->windowTitle());
-    allToolBarItems.insert(item);
-    return item;
-}
-
-ToolBarItem *QtToolBarDialogPrivate::createItem(const QString &toolBarName)
-{
-    ToolBarItem *item = new ToolBarItem(toolBarName);
-    allToolBarItems.insert(item);
-    return item;
-}
-
-void QtToolBarDialogPrivate::deleteItem(ToolBarItem *item)
-{
-    if (!allToolBarItems.contains(item))
-        return;
-    allToolBarItems.remove(item);
-    delete item;
-}
-
-void QtToolBarDialogPrivate::clearOld()
-{
-    ui.actionTree->clear();
-    ui.toolBarList->clear();
-    ui.currentToolBarList->clear();
-    ui.removeButton->setEnabled(false);
-    ui.newButton->setEnabled(false);
-    ui.upButton->setEnabled(false);
-    ui.downButton->setEnabled(false);
-    ui.leftButton->setEnabled(false);
-    ui.rightButton->setEnabled(false);
-
-    actionToItem.clear();
-    itemToAction.clear();
-    toolBarToItem.clear();
-    itemToToolBar.clear();
-    actionToCurrentItem.clear();
-    currentItemToAction.clear();
-    widgetActionToToolBar.clear();
-    toolBarToWidgetActions.clear();
-
-    toolBarItems.clear();
-    currentState.clear();
-    createdItems.clear();
-    removedItems.clear();
-    QSetIterator<ToolBarItem *> itItem(allToolBarItems);
-    while (itItem.hasNext())
-        delete itItem.next();
-    allToolBarItems.clear();
-
-    currentToolBar = 0;
-    currentAction = 0;
-}
-
-void QtToolBarDialogPrivate::fillNew()
-{
-    if (!toolBarManager)
-        return;
-
-    QTreeWidgetItem *item = new QTreeWidgetItem(ui.actionTree);
-    item->setText(0, separatorText);
-    ui.actionTree->setCurrentItem(item);
-    currentAction = item;
-    actionToItem.insert(0, item);
-    itemToAction.insert(item, 0);
-    QStringList categories = toolBarManager->categories();
-    QStringListIterator itCategory(categories);
-    while (itCategory.hasNext()) {
-        QString category = itCategory.next();
-        QTreeWidgetItem *categoryItem = new QTreeWidgetItem(ui.actionTree);
-        categoryItem->setText(0, category);
-        QList<QAction *> actions = toolBarManager->categoryActions(category);
-        QListIterator<QAction *> itAction(actions);
-        while (itAction.hasNext()) {
-            QAction *action = itAction.next();
-            item = new QTreeWidgetItem(categoryItem);
-            item->setText(0, action->text());
-            item->setIcon(0, action->icon());
-            item->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic);
-            actionToItem.insert(action, item);
-            itemToAction.insert(item, action);
-            if (toolBarManager->isWidgetAction(action)) {
-                item->setData(0, Qt::TextColorRole, QColor(Qt::blue));
-                widgetActionToToolBar.insert(action, 0);
-            }
-            item->setFlags(item->flags() | Qt::ItemIsDragEnabled);
-        }
-        ui.actionTree->setItemExpanded(categoryItem, true);
-    }
-    //ui.actionTree->sortItems(0, Qt::AscendingOrder);
-
-    QMap<QToolBar *, QList<QAction *> > toolBars = toolBarManager->toolBarsActions();
-    QMap<QToolBar *, QList<QAction *> >::ConstIterator it = toolBars.constBegin();
-    while (it != toolBars.constEnd()) {
-        QToolBar *toolBar = it.key();
-        ToolBarItem *tbItem = createItem(toolBar);
-        toolBarItems.insert(toolBar, tbItem);
-        QListWidgetItem *item = new QListWidgetItem(toolBar->windowTitle(),
-                ui.toolBarList);
-        toolBarToItem.insert(tbItem, item);
-        itemToToolBar.insert(item, tbItem);
-        QList<QAction *> actions = it.value();
-        QListIterator<QAction *> itAction(actions);
-        while (itAction.hasNext()) {
-            QAction *action = itAction.next();
-            if (toolBarManager->isWidgetAction(action)) {
-                widgetActionToToolBar.insert(action, tbItem);
-                toolBarToWidgetActions[tbItem].insert(action);
-            }
-        }
-        currentState.insert(tbItem, actions);
-        if (it == toolBars.constBegin())
-            ui.toolBarList->setCurrentItem(item);
-        if (isDefaultToolBar(tbItem))
-            item->setData(Qt::TextColorRole, QColor(Qt::darkGreen));
-        else
-            item->setFlags(item->flags() | Qt::ItemIsEditable);
-
-        it++;
-    }
-    ui.toolBarList->sortItems();
-    setButtons();
-}
-
-bool QtToolBarDialogPrivate::isDefaultToolBar(ToolBarItem *item) const
-{
-    if (!item)
-        return false;
-    if (!item->toolBar())
-        return false;
-    return toolBarManager->isDefaultToolBar(item->toolBar());
-}
-
-void QtToolBarDialogPrivate::setButtons()
-{
-    bool newEnabled = false;
-    bool removeEnabled = false;
-    bool renameEnabled = false;
-    bool upEnabled = false;
-    bool downEnabled = false;
-    bool leftEnabled = false;
-    bool rightEnabled = false;
-
-    if (toolBarManager) {
-        newEnabled = true;
-        removeEnabled = !isDefaultToolBar(currentToolBar);
-        renameEnabled = removeEnabled;
-        QListWidgetItem *currentToolBarAction = ui.currentToolBarList->currentItem();
-        if (currentToolBarAction) {
-            int row = ui.currentToolBarList->row(currentToolBarAction);
-            upEnabled = row > 0;
-            downEnabled = row < ui.currentToolBarList->count() - 1;
-            leftEnabled = true;
-        }
-        if (currentAction && currentToolBar)
-            rightEnabled = true;
-    }
-    ui.newButton->setEnabled(newEnabled);
-    ui.removeButton->setEnabled(removeEnabled);
-    ui.renameButton->setEnabled(renameEnabled);
-    ui.upButton->setEnabled(upEnabled);
-    ui.downButton->setEnabled(downEnabled);
-    ui.leftButton->setEnabled(leftEnabled);
-    ui.rightButton->setEnabled(rightEnabled);
-}
-
-void QtToolBarDialogPrivate::newClicked()
-{
-    QString toolBarName = q_ptr->tr("Custom Toolbar"); // = QInputDialog::getString();
-    // produce unique name
-    ToolBarItem *item = createItem(toolBarName);
-    currentState.insert(item, QList<QAction *>());
-    createdItems.insert(item);
-    QListWidgetItem *i = new QListWidgetItem(toolBarName, ui.toolBarList);
-    i->setFlags(i->flags() | Qt::ItemIsEditable);
-    ui.toolBarList->setCurrentItem(i);
-    itemToToolBar.insert(i, item);
-    toolBarToItem.insert(item, i);
-    ui.toolBarList->sortItems();
-    ui.toolBarList->setCurrentItem(i);
-    currentToolBarChanged(i);
-    renameClicked();
-}
-
-void QtToolBarDialogPrivate::removeToolBar(ToolBarItem *item)
-{
-    if (!item)
-        return;
-    if (item->toolBar() && toolBarManager->isDefaultToolBar(item->toolBar()))
-        return;
-    if (!toolBarToItem.contains(item))
-        return;
-    QListWidgetItem *i = toolBarToItem.value(item);
-    bool wasCurrent = false;
-    if (i == ui.toolBarList->currentItem())
-        wasCurrent = true;
-    int row = ui.toolBarList->row(i);
-    QMap<ToolBarItem *, QSet<QAction *> >::ConstIterator itToolBar =
-            toolBarToWidgetActions.find(item);
-    if (itToolBar != toolBarToWidgetActions.constEnd()) {
-        QSet<QAction *> actions = itToolBar.value();
-        QSetIterator<QAction *> itAction(actions);
-        while (itAction.hasNext()) {
-            QAction *action = itAction.next();
-            widgetActionToToolBar.insert(action, 0);
-        }
-        toolBarToWidgetActions.remove(item);
-    }
-
-    currentState.remove(item);
-    createdItems.remove(item);
-    toolBarToItem.remove(item);
-    itemToToolBar.remove(i);
-    delete i;
-    if (item->toolBar())
-        removedItems.insert(item);
-    else
-        deleteItem(item);
-    if (wasCurrent) {
-        if (row == ui.toolBarList->count())
-            row--;
-        if (row < 0)
-            ;
-        else
-            ui.toolBarList->setCurrentRow(row);
-    }
-    setButtons();
-}
-
-void QtToolBarDialogPrivate::removeClicked()
-{
-    QListWidgetItem *i = ui.toolBarList->currentItem();
-    if (!i)
-        return;
-    ToolBarItem *item = itemToToolBar.value(i);
-    removeToolBar(item);
-}
-
-void QtToolBarDialogPrivate::defaultClicked()
-{
-    QMap<QToolBar *, QList<QAction *> > defaultToolBars = toolBarManager->defaultToolBars();
-    QMap<QToolBar *, QList<QAction *> >::ConstIterator itToolBar = defaultToolBars.constBegin();
-    while (itToolBar != defaultToolBars.constEnd()) {
-        QToolBar *toolBar = itToolBar.key();
-        ToolBarItem *toolBarItem = toolBarItems.value(toolBar);
-
-        if (toolBarToWidgetActions.contains(toolBarItem)) {
-            QSetIterator<QAction *> itAction(toolBarToWidgetActions.value(toolBarItem));
-            while (itAction.hasNext())
-                widgetActionToToolBar.insert(itAction.next(), 0);
-            toolBarToWidgetActions.remove(toolBarItem);
-        }
-
-        currentState.remove(toolBarItem);
-
-        QListIterator<QAction *> itAction(itToolBar.value());
-        while (itAction.hasNext()) {
-            QAction *action = itAction.next();
-            if (toolBarManager->isWidgetAction(action)) {
-                ToolBarItem *otherToolBar = widgetActionToToolBar.value(action);
-                if (otherToolBar) {
-                    toolBarToWidgetActions[otherToolBar].remove(action);
-                    currentState[otherToolBar].removeAll(action);
-                }
-                widgetActionToToolBar.insert(action, toolBarItem);
-                toolBarToWidgetActions[toolBarItem].insert(action);
-            }
-        }
-        currentState.insert(toolBarItem, itToolBar.value());
-
-        itToolBar++;
-    }
-    currentToolBarChanged(toolBarToItem.value(currentToolBar));
-
-    QList<ToolBarItem *> toolBars = currentState.keys();
-    QListIterator<ToolBarItem *> itTb(toolBars);
-    while (itTb.hasNext())
-        removeToolBar(itTb.next());
-}
-
-void QtToolBarDialogPrivate::okClicked()
-{
-    applyClicked();
-    q_ptr->accept();
-}
-
-void QtToolBarDialogPrivate::applyClicked()
-{
-    QMap<ToolBarItem *, QList<QAction *> > toolBars = currentState;
-    QMap<ToolBarItem *, QList<QAction *> >::ConstIterator itToolBar = toolBars.constBegin();
-    while (itToolBar != toolBars.constEnd()) {
-        ToolBarItem *item = itToolBar.key();
-        QToolBar *toolBar = item->toolBar();
-        if (toolBar) {
-            toolBarManager->setToolBar(toolBar, itToolBar.value());
-            toolBar->setWindowTitle(item->toolBarName());
-        }
-
-        itToolBar++;
-    }
-
-    QSet<ToolBarItem *> toRemove = removedItems;
-    QSetIterator<ToolBarItem *> itRemove(toRemove);
-    while (itRemove.hasNext()) {
-        ToolBarItem *item = itRemove.next();
-        QToolBar *toolBar = item->toolBar();
-        removedItems.remove(item);
-        currentState.remove(item);
-        deleteItem(item);
-        if (toolBar)
-            toolBarManager->deleteToolBar(toolBar);
-    }
-
-    QSet<ToolBarItem *> toCreate = createdItems;
-    QSetIterator<ToolBarItem *> itCreate(toCreate);
-    while (itCreate.hasNext()) {
-        ToolBarItem *item = itCreate.next();
-        QString toolBarName = item->toolBarName();
-        createdItems.remove(item);
-        QList<QAction *> actions = currentState.value(item);
-        QToolBar *toolBar = toolBarManager->createToolBar(toolBarName);
-        item->setToolBar(toolBar);
-        toolBarManager->setToolBar(toolBar, actions);
-    }
-}
-
-void QtToolBarDialogPrivate::upClicked()
-{
-    QListWidgetItem *currentToolBarAction = ui.currentToolBarList->currentItem();
-    if (!currentToolBarAction)
-        return;
-    int row = ui.currentToolBarList->row(currentToolBarAction);
-    if (row == 0)
-        return;
-    ui.currentToolBarList->takeItem(row);
-    int newRow = row - 1;
-    ui.currentToolBarList->insertItem(newRow, currentToolBarAction);
-    QList<QAction *> actions = currentState.value(currentToolBar);
-    QAction *action = actions.at(row);
-    actions.removeAt(row);
-    actions.insert(newRow, action);
-    currentState.insert(currentToolBar, actions);
-    ui.currentToolBarList->setCurrentItem(currentToolBarAction);
-    setButtons();
-}
-
-void QtToolBarDialogPrivate::downClicked()
-{
-    QListWidgetItem *currentToolBarAction = ui.currentToolBarList->currentItem();
-    if (!currentToolBarAction)
-        return;
-    int row = ui.currentToolBarList->row(currentToolBarAction);
-    if (row == ui.currentToolBarList->count() - 1)
-        return;
-    ui.currentToolBarList->takeItem(row);
-    int newRow = row + 1;
-    ui.currentToolBarList->insertItem(newRow, currentToolBarAction);
-    QList<QAction *> actions = currentState.value(currentToolBar);
-    QAction *action = actions.at(row);
-    actions.removeAt(row);
-    actions.insert(newRow, action);
-    currentState.insert(currentToolBar, actions);
-    ui.currentToolBarList->setCurrentItem(currentToolBarAction);
-    setButtons();
-}
-
-void QtToolBarDialogPrivate::leftClicked()
-{
-    QListWidgetItem *currentToolBarAction = ui.currentToolBarList->currentItem();
-    if (!currentToolBarAction)
-        return;
-    int row = ui.currentToolBarList->row(currentToolBarAction);
-    currentState[currentToolBar].removeAt(row);
-    QAction *action = currentItemToAction.value(currentToolBarAction);
-    if (widgetActionToToolBar.contains(action)) {
-        ToolBarItem *item = widgetActionToToolBar.value(action);
-        if (item == currentToolBar) { // have to be
-            toolBarToWidgetActions[item].remove(action);
-            if (toolBarToWidgetActions[item].empty())
-                toolBarToWidgetActions.remove(item);
-        }
-        widgetActionToToolBar.insert(action, 0);
-    }
-    if (action)
-        actionToCurrentItem.remove(action);
-    currentItemToAction.remove(currentToolBarAction);
-    delete currentToolBarAction;
-    if (row == ui.currentToolBarList->count())
-        row--;
-    if (row >= 0) {
-        QListWidgetItem *item = ui.currentToolBarList->item(row);
-        ui.currentToolBarList->setCurrentItem(item);
-    }
-    setButtons();
-}
-
-void QtToolBarDialogPrivate::rightClicked()
-{
-    if (!currentAction)
-        return;
-    if (!currentToolBar)
-        return;
-    QListWidgetItem *currentToolBarAction = ui.currentToolBarList->currentItem();
-
-    QAction *action = itemToAction.value(currentAction);
-    QListWidgetItem *item = 0;
-    if (action) {
-        if (currentState[currentToolBar].contains(action)) {
-            item = actionToCurrentItem.value(action);
-            if (item == currentToolBarAction)
-                return;
-            int row = ui.currentToolBarList->row(item);
-            ui.currentToolBarList->takeItem(row);
-            currentState[currentToolBar].removeAt(row);
-            // only reorder here
-        } else {
-            item = new QListWidgetItem(action->text());
-            item->setIcon(action->icon());
-            item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic);
-            currentItemToAction.insert(item, action);
-            actionToCurrentItem.insert(action, item);
-            if (widgetActionToToolBar.contains(action)) {
-                item->setData(Qt::TextColorRole, QColor(Qt::blue));
-                ToolBarItem *toolBar = widgetActionToToolBar.value(action);
-                if (toolBar) {
-                    currentState[toolBar].removeAll(action);
-                    toolBarToWidgetActions[toolBar].remove(action);
-                    if (toolBarToWidgetActions[toolBar].empty())
-                        toolBarToWidgetActions.remove(toolBar);
-                }
-                widgetActionToToolBar.insert(action, currentToolBar);
-                toolBarToWidgetActions[currentToolBar].insert(action);
-            }
-        }
-    } else {
-        item = new QListWidgetItem(separatorText);
-        currentItemToAction.insert(item, 0);
-    }
-
-    int row = ui.currentToolBarList->count();
-    if (currentToolBarAction) {
-        row = ui.currentToolBarList->row(currentToolBarAction) + 1;
-    }
-    ui.currentToolBarList->insertItem(row, item);
-    currentState[currentToolBar].insert(row, action);
-    ui.currentToolBarList->setCurrentItem(item);
-
-    setButtons();
-}
-
-void QtToolBarDialogPrivate::renameClicked()
-{
-    if (!currentToolBar)
-        return;
-
-    QListWidgetItem *item = toolBarToItem.value(currentToolBar);
-    ui.toolBarList->editItem(item);
-}
-
-void QtToolBarDialogPrivate::toolBarRenamed(QListWidgetItem *item)
-{
-    if (!currentToolBar)
-        return;
-
-    ToolBarItem *tbItem = itemToToolBar.value(item);
-    if (!tbItem)
-        return;
-    tbItem->setToolBarName(item->text());
-    //ui.toolBarList->sortItems();
-}
-
-void QtToolBarDialogPrivate::currentActionChanged(QTreeWidgetItem *current)
-{
-    if (itemToAction.contains(current))
-        currentAction = current;
-    else
-        currentAction = NULL;
-    setButtons();
-}
-
-void QtToolBarDialogPrivate::currentToolBarChanged(QListWidgetItem *current)
-{
-    currentToolBar = itemToToolBar.value(current);
-    ui.currentToolBarList->clear();
-    actionToCurrentItem.clear();
-    currentItemToAction.clear();
-    setButtons();
-    if (!currentToolBar) {
-        return;
-    }
-    QList<QAction *> actions = currentState.value(currentToolBar);
-    QListIterator<QAction *> itAction(actions);
-    QListWidgetItem *first = 0;
-    while (itAction.hasNext()) {
-        QAction *action = itAction.next();
-        QString actionName = separatorText;
-        if (action)
-            actionName = action->text();
-        QListWidgetItem *item = new QListWidgetItem(actionName, ui.currentToolBarList);
-        if (action) {
-            item->setIcon(action->icon());
-            item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic);
-            actionToCurrentItem.insert(action, item);
-            if (widgetActionToToolBar.contains(action))
-                item->setData(Qt::TextColorRole, QColor(Qt::blue));
-        }
-        currentItemToAction.insert(item, action);
-        if (!first)
-            first = item;
-    }
-    if (first)
-        ui.currentToolBarList->setCurrentItem(first);
-}
-
-void QtToolBarDialogPrivate::currentToolBarActionChanged(QListWidgetItem *)
-{
-    setButtons();
-}
-
-void QtToolBarDialogPrivate::cancelClicked()
-{
-    // just nothing
-    q_ptr->reject();
-}
-
-//////////////////////
-/*
-class FeedbackItemDelegate : public QItemDelegate
-{
-    Q_OBJECT
-public:
-    FeedbackItemDelegate(QObject *parent = 0) : QItemDelegate(parent) { }
-
-    virtual void paint(QPainter *painter, const QStyleOptionViewItem &option,
-                    const QModelIndex & index) const;
-    virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
-};
-
-void FeedbackItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
-                            const QModelIndex &index) const
-{
-    if ()
-    painter->save();
-    QRect r = option.rect;
-    float yCentral = r.height() / 2.0;
-    float margin = 2.0;
-    float arrowWidth = 5.0;
-    float width = 20;
-    qDebug("rect: x %d, y %d, w %d, h %d", r.x(), r.y(), r.width(), r.height());
-    QLineF lineBase(0.0 + margin, r.y() + yCentral, width - margin, r.y() + yCentral);
-    QLineF lineArrowLeft(width - margin - arrowWidth, r.y() + yCentral - arrowWidth,
-                    width - margin, r.y() + yCentral);
-    QLineF lineArrowRight(width - margin - arrowWidth, r.y() + yCentral + arrowWidth,
-                    width - margin, r.y() + yCentral);
-    painter->drawLine(lineBase);
-    painter->drawLine(lineArrowLeft);
-    painter->drawLine(lineArrowRight);
-    painter->translate(QPoint(width, 0));
-    QItemDelegate::paint(painter, option, index);
-    painter->restore();
-}
-
-QSize FeedbackItemDelegate::sizeHint(const QStyleOptionViewItem &option,
-            const QModelIndex &index) const
-{
-    //return QItemDelegate::sizeHint(option, index);
-    QSize s = QItemDelegate::sizeHint(option, index);
-    s.setWidth(s.width() - 20);
-    return s;
-}
-
-class QtToolBarListWidget : public QListWidget
-{
-    Q_OBJECT
-public:
-    QtToolBarListWidget(QWidget *parent) : QListWidget(parent), actionDrag(false) {}
-
-protected:
-    void startDrag(Qt::DropActions supportedActions);
-
-    void dragEnterEvent(QDragEnterEvent *event);
-    void dragMoveEvent(QDragMoveEvent *event);
-    void dragLeaveEvent(QDragLeaveEvent *);
-    void dropEvent(QDropEvent *event);
-
-    void setDragAction(const QString *action) { actionName = action; }
-private:
-    QPersistentModelIndex lastDropIndicator;
-    QString actionName;
-    bool actionDrag;
-};
-
-void QtToolBarListWidget::startDrag(Qt::DropActions supportedActions)
-{
-    QListWidgetItem *item = currentItem();
-    if (item) {
-        actionName = QString();
-        emit aboutToDrag(item);
-        if (!actionName.isEmpty()) {
-            QDrag *drag = new QDrag(this);
-            QMimeData *data = new QMimeData;
-            data->setData("action", actionName.toLocal8Bit().constData());
-            drag->setMimeData(data);
-            drag->start(supportedActions);
-        }
-    }
-}
-
-void QtToolBarListWidget::dragEnterEvent(QDragEnterEvent *event)
-{
-    const QMimeData *mime = event->mimeData();
-    actionDrag = mime->hasFormat("action");
-    if (actionDrag)
-        event->accept();
-    else
-        event->ignore();
-}
-
-void QtToolBarListWidget::dragMoveEvent(QDragMoveEvent *event)
-{
-    event->ignore();
-    if (actionDrag) {
-        QPoint p = event->pos();
-        QListWidgetItem *item = itemAt(p);
-        Indicator indic = QtToolBarListWidget::None;
-        if (item) {
-            QRect rect = visualItemRect(item);
-            if (p.y() - rect.top() < rect.height() / 2)
-                indic = QtToolBarListWidget::Above;
-            else
-                indic = QtToolBarListWidget::Below;
-        }
-        setIndicator(item, indic);
-        event->accept();
-    }
-}
-
-void QtToolBarListWidget::dragLeaveEvent(QDragLeaveEvent *)
-{
-    if (actionDrag) {
-        actionDrag = false;
-        setIndicator(item, QtToolBarListWidget::None);
-    }
-}
-
-void QtToolBarListWidget::dropEvent(QDropEvent *event)
-{
-    if (actionDrag) {
-        QListWidgetItem *item = indicatorItem();
-        Indicator indic = indicator();
-        QByteArray array = event->mimeData()->data("action");
-        QDataStream stream(&array, QIODevice::ReadOnly);
-        QString action;
-        stream >> action;
-        emit actionDropped(action, item, );
-
-        actionDrag = false;
-        setIndicator(item, QtToolBarListWidget::None);
-    }
-}
-*/
-
-/*! \class QtToolBarDialog
-
-    \brief The QtToolBarDialog class provides a dialog for customizing
-    toolbars.
-
-    QtToolBarDialog allows the user to customize the toolbars for a
-    given main window.
-
-    \image qttoolbardialog.png
-
-    The dialog lets the users add, rename and remove custom toolbars.
-    Note that built-in toolbars are marked with a green color, and
-    cannot be removed or renamed.
-
-    The users can also add and remove actions from the toolbars. An
-    action can be added to many toolbars, but a toolbar can only
-    contain one instance of each action. Actions that contains a
-    widget are marked with a blue color in the list of actions, and
-    can only be added to one single toolbar.
-
-    Finally, the users can add separators to the toolbars.
-
-    The original toolbars can be restored by clicking the \gui
-    {Restore all} button. All custom toolbars will then be removed,
-    and all built-in toolbars will be restored to their original state.
-
-    The QtToolBarDialog class's functionality is controlled by an
-    instance of the QtToolBarManager class, and the main window is
-    specified using the QtToolBarManager::setMainWindow() function.
-
-    All you need to do to use QtToolBarDialog is to specify an
-    QtToolBarManager instance and call the QDialog::exec() slot:
-
-    \code
-    QtToolBarManager *toolBarManager;
-
-    void MyMainWindow::customize()
-        {
-            QtToolBarDialog dialog(this);
-            dialog.setToolBarManager(toolBarManager);
-            dialog.exec();
-        }
-    \endcode
-
-    \sa QtToolBarManager
-*/
-
-/*!
-    Creates a toolbar dialog with the given \a parent and the specifed
-    window \a flags.
-*/
-QtToolBarDialog::QtToolBarDialog(QWidget *parent, Qt::WFlags flags)
-    : QDialog(parent, flags)
-{
-    d_ptr = new QtToolBarDialogPrivate;
-    d_ptr->q_ptr = this;
-    d_ptr->ui.setupUi(this);
-    d_ptr->separatorText = tr("< S E P A R A T O R >");
-
-    d_ptr->ui.actionTree->setColumnCount(1);
-    d_ptr->ui.actionTree->setRootIsDecorated(false);
-    d_ptr->ui.actionTree->header()->hide();
-/*
-    ui.toolBarList->setEditTriggers(QAbstractItemView::DoubleClicked |
-                QAbstractItemView::EditKeyPressed);
-*/
-
-//    ui.actionList->setDragEnabled(true);
-//    FeedbackItemDelegate *del = new FeedbackItemDelegate(this);
-//    ui.currentToolBarList->setItemDelegate(del);
-//    ui.currentToolBarList->setAcceptDrops(true);
-
-    d_ptr->ui.upButton->setIcon(QIcon(":/qttoolbardialog/images/up.png"));
-    d_ptr->ui.downButton->setIcon(QIcon(":/qttoolbardialog/images/down.png"));
-    d_ptr->ui.leftButton->setIcon(QIcon(":/qttoolbardialog/images/back.png"));
-    d_ptr->ui.rightButton->setIcon(QIcon(":/qttoolbardialog/images/forward.png"));
-    d_ptr->ui.newButton->setIcon(QIcon(":/qttoolbardialog/images/plus.png"));
-    d_ptr->ui.removeButton->setIcon(QIcon(":/qttoolbardialog/images/minus.png"));
-
-    connect(d_ptr->ui.newButton, SIGNAL(clicked()), this, SLOT(newClicked()));
-    connect(d_ptr->ui.removeButton, SIGNAL(clicked()), this, SLOT(removeClicked()));
-    connect(d_ptr->ui.renameButton, SIGNAL(clicked()), this, SLOT(renameClicked()));
-    connect(d_ptr->ui.defaultButton, SIGNAL(clicked()), this, SLOT(defaultClicked()));
-    connect(d_ptr->ui.okButton, SIGNAL(clicked()), this, SLOT(okClicked()));
-    connect(d_ptr->ui.applyButton, SIGNAL(clicked()), this, SLOT(applyClicked()));
-    connect(d_ptr->ui.cancelButton, SIGNAL(clicked()), this, SLOT(cancelClicked()));
-    connect(d_ptr->ui.upButton, SIGNAL(clicked()), this, SLOT(upClicked()));
-    connect(d_ptr->ui.downButton, SIGNAL(clicked()), this, SLOT(downClicked()));
-    connect(d_ptr->ui.leftButton, SIGNAL(clicked()), this, SLOT(leftClicked()));
-    connect(d_ptr->ui.rightButton, SIGNAL(clicked()), this, SLOT(rightClicked()));
-
-    connect(d_ptr->ui.actionTree, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
-                    this, SLOT(currentActionChanged(QTreeWidgetItem *)));
-    connect(d_ptr->ui.toolBarList, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
-                    this, SLOT(currentToolBarChanged(QListWidgetItem *)));
-    connect(d_ptr->ui.currentToolBarList,
-                    SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
-                    this, SLOT(currentToolBarActionChanged(QListWidgetItem *)));
-
-    connect(d_ptr->ui.actionTree, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)),
-                    this, SLOT(rightClicked()));
-    connect(d_ptr->ui.currentToolBarList, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
-                    this, SLOT(leftClicked()));
-    connect(d_ptr->ui.toolBarList, SIGNAL(itemChanged(QListWidgetItem *)),
-                    this, SLOT(toolBarRenamed(QListWidgetItem *)));
-}
-
-/*!
-    Destroys the toolbar dialog.
-*/
-QtToolBarDialog::~QtToolBarDialog()
-{
-    d_ptr->clearOld();
-    delete d_ptr;
-}
-
-/*!
-    Connects the toolbar dialog to the given \a toolBarManager. Then,
-    when exec() is called, the toolbar dialog will operate using the
-    given \a toolBarManager.
-*/
-void QtToolBarDialog::setToolBarManager(QtToolBarManager *toolBarManager)
-{
-    if (d_ptr->toolBarManager == toolBarManager->d_ptr->manager)
-        return;
-    if (isVisible())
-        d_ptr->clearOld();
-    d_ptr->toolBarManager = toolBarManager->d_ptr->manager;
-    if (isVisible())
-        d_ptr->fillNew();
-}
-
-/*!
-    \reimp
-*/
-void QtToolBarDialog::showEvent(QShowEvent *event)
-{
-    if (!event->spontaneous())
-        d_ptr->fillNew();
-}
-
-/*!
-    \reimp
-*/
-void QtToolBarDialog::hideEvent(QHideEvent *event)
-{
-    if (!event->spontaneous())
-        d_ptr->clearOld();
-}
-
-#include "moc_qttoolbardialog.cpp"
-#include "qttoolbardialog.moc"
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.h b/3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.h
deleted file mode 100644
index 7377781..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/****************************************************************************
-** 
-** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info at nokia.com)
-** 
-** This file is part of a Qt Solutions component.
-**
-** Commercial Usage  
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Solutions Commercial License Agreement provided
-** with the Software or, alternatively, in accordance with the terms
-** contained in a written agreement between you and Nokia.
-** 
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-** 
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
-** package.
-** 
-** GNU General Public License Usage 
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-** 
-** Please note Third Party Software included with Qt Solutions may impose
-** additional restrictions and it is the user's responsibility to ensure
-** that they have met the licensing requirements of the GPL, LGPL, or Qt
-** Solutions Commercial license and the relevant license of the Third
-** Party Software they are using.
-** 
-** If you are unsure which license is appropriate for your use, please
-** contact Nokia at qt-info at nokia.com.
-** 
-****************************************************************************/
-
-#ifndef QTTOOLBARDIALOG_H
-#define QTTOOLBARDIALOG_H
-
-#include <QtGui/QDialog>
-
-#if defined(Q_WS_WIN)
-#  if !defined(QT_QTTOOLBARDIALOG_EXPORT) && !defined(QT_QTTOOLBARDIALOG_IMPORT)
-#    define QT_QTTOOLBARDIALOG_EXPORT
-#  elif defined(QT_QTTOOLBARDIALOG_IMPORT)
-#    if defined(QT_QTTOOLBARDIALOG_EXPORT)
-#      undef QT_QTTOOLBARDIALOG_EXPORT
-#    endif
-#    define QT_QTTOOLBARDIALOG_EXPORT __declspec(dllimport)
-#  elif defined(QT_QTTOOLBARDIALOG_EXPORT)
-#    undef QT_QTTOOLBARDIALOG_EXPORT
-#    define QT_QTTOOLBARDIALOG_EXPORT __declspec(dllexport)
-#  endif
-#else
-#  define QT_QTTOOLBARDIALOG_EXPORT
-#endif
-
-class QMainWindow;
-class QAction;
-class QToolBar;
-
-class QtToolBarManagerPrivate;
-
-class QT_QTTOOLBARDIALOG_EXPORT QtToolBarManager : public QObject
-{
-    Q_OBJECT
-public:
-
-    QtToolBarManager(QObject *parent = 0);
-    ~QtToolBarManager();
-
-    void setMainWindow(QMainWindow *mainWindow);
-    QMainWindow *mainWindow() const;
-
-    void addAction(QAction *action, const QString &category);
-    void removeAction(QAction *action);
-
-    void addToolBar(QToolBar *toolBar, const QString &category);
-    void removeToolBar(QToolBar *toolBar);
-
-    QList<QToolBar *> toolBars() const;
-
-    QByteArray saveState(int version = 0) const;
-    bool restoreState(const QByteArray &state, int version = 0);
-
-private:
-
-    friend class QtToolBarDialog;
-    QtToolBarManagerPrivate *d_ptr;
-    Q_DECLARE_PRIVATE(QtToolBarManager)
-    Q_DISABLE_COPY(QtToolBarManager)
-};
-
-class QtToolBarDialogPrivate;
-
-class QT_QTTOOLBARDIALOG_EXPORT QtToolBarDialog : public QDialog
-{
-    Q_OBJECT
-public:
-
-    QtToolBarDialog(QWidget *parent = 0, Qt::WFlags flags = 0);
-    ~QtToolBarDialog();
-
-    void setToolBarManager(QtToolBarManager *toolBarManager);
-
-protected:
-
-    void showEvent(QShowEvent *event);
-    void hideEvent(QHideEvent *event);
-
-private:
-
-    QtToolBarDialogPrivate *d_ptr;
-    Q_DECLARE_PRIVATE(QtToolBarDialog)
-    Q_DISABLE_COPY(QtToolBarDialog)
-
-    Q_PRIVATE_SLOT(d_func(), void newClicked())
-    Q_PRIVATE_SLOT(d_func(), void removeClicked())
-    Q_PRIVATE_SLOT(d_func(), void defaultClicked())
-    Q_PRIVATE_SLOT(d_func(), void okClicked())
-    Q_PRIVATE_SLOT(d_func(), void applyClicked())
-    Q_PRIVATE_SLOT(d_func(), void cancelClicked())
-    Q_PRIVATE_SLOT(d_func(), void upClicked())
-    Q_PRIVATE_SLOT(d_func(), void downClicked())
-    Q_PRIVATE_SLOT(d_func(), void leftClicked())
-    Q_PRIVATE_SLOT(d_func(), void rightClicked())
-    Q_PRIVATE_SLOT(d_func(), void renameClicked())
-    Q_PRIVATE_SLOT(d_func(), void toolBarRenamed(QListWidgetItem *))
-    Q_PRIVATE_SLOT(d_func(), void currentActionChanged(QTreeWidgetItem *))
-    Q_PRIVATE_SLOT(d_func(), void currentToolBarChanged(QListWidgetItem *))
-    Q_PRIVATE_SLOT(d_func(), void currentToolBarActionChanged(QListWidgetItem *))
-};
-
-#endif
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.pri b/3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.pri
deleted file mode 100644
index 066ef8a..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.pri
+++ /dev/null
@@ -1,17 +0,0 @@
-include(../common.pri)
-INCLUDEPATH += $$PWD
-DEPENDPATH += $$PWD
-
-qttoolbardialog-uselib:!qttoolbardialog-buildlib {
-    LIBS += -L$$QTTOOLBARDIALOG_LIBDIR -l$$QTTOOLBARDIALOG_LIBNAME
-} else {
-    SOURCES += $$PWD/qttoolbardialog.cpp
-    HEADERS += $$PWD/qttoolbardialog.h
-    FORMS += $$PWD/qttoolbardialog.ui
-    RESOURCES += $$PWD/qttoolbardialog.qrc
-}
-
-win32 {
-    contains(TEMPLATE, lib):contains(CONFIG, shared):DEFINES += QT_QTTOOLBARDIALOG_EXPORT
-    else:qttoolbardialog-uselib:DEFINES += QT_QTTOOLBARDIALOG_IMPORT
-}
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.qrc b/3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.qrc
deleted file mode 100644
index 2dd1f08..0000000
--- a/3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.qrc
+++ /dev/null
@@ -1,10 +0,0 @@
-<RCC version="1.0">
-    <qresource prefix="/qttoolbardialog">
-        <file>images/up.png</file>
-        <file>images/down.png</file>
-        <file>images/forward.png</file>
-        <file>images/back.png</file>
-        <file>images/plus.png</file>
-        <file>images/minus.png</file>
-    </qresource>
-</RCC>
diff --git a/3rdparty/quazip-0.7/CMakeLists.txt b/3rdparty/quazip-0.7/CMakeLists.txt
new file mode 100644
index 0000000..9a8d18d
--- /dev/null
+++ b/3rdparty/quazip-0.7/CMakeLists.txt
@@ -0,0 +1,54 @@
+project (QuaZip)
+cmake_minimum_required(VERSION 2.6)
+
+option(BUILD_WITH_QT4 "Build QuaZip with Qt4 no matter if Qt5 was found" OFF)
+
+if( NOT BUILD_WITH_QT4 )
+    # try Qt5 first, and prefer that if found
+    find_package(Qt5Core QUIET)
+endif()
+
+if (Qt5Core_FOUND)
+    set(QTCORE_LIBRARIES ${Qt5Core_LIBRARIES})
+    # if there is no QT_ROOT, try to deduce it from Qt QtCore include
+    if ("${QT_ROOT}" STREQUAL "")
+        set(QT_ROOT ${QT_QTCORE_INCLUDE_DIR}/../..)
+    endif()    
+    include_directories(${Qt5Core_INCLUDE_DIRS})
+
+    macro(qt_wrap_cpp)
+        qt5_wrap_cpp(${ARGN})
+    endmacro()
+else()
+    set(qt_min_version "4.5.0")
+    find_package(Qt4 REQUIRED)
+    set(QT_USE_QTGUI false)
+    include(${QT_USE_FILE})
+    include_directories(${QT_INCLUDES})
+    set(QTCORE_LIBRARIES ${QT_QTCORE_LIBRARY})
+
+    macro(qt_wrap_cpp)
+        qt4_wrap_cpp(${ARGN})
+    endmacro()
+endif()
+
+# Use system zlib on unix and Qt ZLIB on Windows
+IF(UNIX)
+	find_package(ZLIB REQUIRED)
+ELSE(UNIX)
+	SET(ZLIB_INCLUDE_DIRS "${QT_ROOT}/src/3rdparty/zlib" CACHE STRING "Path to ZLIB headers of Qt")
+	SET(ZLIB_LIBRARIES "")
+	IF(NOT EXISTS "${ZLIB_INCLUDE_DIRS}/zlib.h")
+		MESSAGE("Please specify a valid zlib include dir")
+	ENDIF(NOT EXISTS "${ZLIB_INCLUDE_DIRS}/zlib.h")
+ENDIF(UNIX)
+
+# All build libraries are moved to this directory
+SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})
+
+set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)")
+set(LIB_DESTINATION "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE STRING "Library directory name" FORCE)
+
+add_subdirectory(quazip)
+
+install(FILES FindQuaZip.cmake DESTINATION ${CMAKE_ROOT}/Modules)
diff --git a/3rdparty/quazip-0.7/COPYING b/3rdparty/quazip-0.7/COPYING
new file mode 100644
index 0000000..2cba2ac
--- /dev/null
+++ b/3rdparty/quazip-0.7/COPYING
@@ -0,0 +1,458 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+

+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+

+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+

+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+

+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+

+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+

+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+

+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+

+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
diff --git a/3rdparty/quazip-0.7/Doxyfile b/3rdparty/quazip-0.7/Doxyfile
new file mode 100644
index 0000000..99d1742
--- /dev/null
+++ b/3rdparty/quazip-0.7/Doxyfile
@@ -0,0 +1,1722 @@
+# Doxyfile 1.7.4
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = QuaZIP
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER         = quazip-0-7
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = doc
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this
+# tag. The format is ext=language, where ext is a file extension, and language
+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = NO
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. The create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  =
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = *.cpp \
+                         *.h \
+                         *.dox
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = quazip/unzip.h \
+                         quazip/zip.h \
+                         quazip/ioapi.h \
+                         quazip/crypt.h \
+                         qztest/
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = */.moc/* */release/* */debug/* */moc_*.cpp
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+# for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is adviced to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the stylesheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES       = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the
+# mathjax.org site, so you can quickly see the result without installing
+# MathJax, but it is strongly recommended to install a local copy of MathJax
+# before deployment.
+
+MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED             =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = YES
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will write a font called Helvetica to the output
+# directory and reference it in all dot files that doxygen generates.
+# When you want a differently looking font you can specify the font name
+# using DOT_FONTNAME. You need to make sure dot is able to find the font,
+# which can be done by putting it in a standard location or by setting the
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
+# containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
diff --git a/3rdparty/quazip-0.7/FindQuaZip.cmake b/3rdparty/quazip-0.7/FindQuaZip.cmake
new file mode 100644
index 0000000..0142ca3
--- /dev/null
+++ b/3rdparty/quazip-0.7/FindQuaZip.cmake
@@ -0,0 +1,40 @@
+# QUAZIP_FOUND               - QuaZip library was found
+# QUAZIP_INCLUDE_DIR         - Path to QuaZip include dir
+# QUAZIP_INCLUDE_DIRS        - Path to QuaZip and zlib include dir (combined from QUAZIP_INCLUDE_DIR + ZLIB_INCLUDE_DIR)
+# QUAZIP_LIBRARIES           - List of QuaZip libraries
+# QUAZIP_ZLIB_INCLUDE_DIR    - The include dir of zlib headers
+
+
+IF (QUAZIP_INCLUDE_DIRS AND QUAZIP_LIBRARIES)
+	# in cache already
+	SET(QUAZIP_FOUND TRUE)
+ELSE (QUAZIP_INCLUDE_DIRS AND QUAZIP_LIBRARIES)
+	IF (WIN32)
+		FIND_PATH(QUAZIP_LIBRARY_DIR
+			WIN32_DEBUG_POSTFIX d
+			NAMES libquazip.dll
+			HINTS "C:/Programme/" "C:/Program Files"
+			PATH_SUFFIXES QuaZip/lib
+		)
+		FIND_LIBRARY(QUAZIP_LIBRARIES NAMES libquazip.dll HINTS ${QUAZIP_LIBRARY_DIR})
+		FIND_PATH(QUAZIP_INCLUDE_DIR NAMES quazip.h HINTS ${QUAZIP_LIBRARY_DIR}/../ PATH_SUFFIXES include/quazip)
+		FIND_PATH(QUAZIP_ZLIB_INCLUDE_DIR NAMES zlib.h)
+	ELSE(WIN32)
+		FIND_PACKAGE(PkgConfig)
+#     pkg_check_modules(PC_QCA2 QUIET qca2)
+		pkg_check_modules(PC_QUAZIP quazip)
+		FIND_LIBRARY(QUAZIP_LIBRARIES
+			WIN32_DEBUG_POSTFIX d
+			NAMES quazip
+			HINTS /usr/lib /usr/lib64
+		)
+		FIND_PATH(QUAZIP_INCLUDE_DIR quazip.h
+			HINTS /usr/include /usr/local/include
+			PATH_SUFFIXES quazip
+		)
+		FIND_PATH(QUAZIP_ZLIB_INCLUDE_DIR zlib.h HINTS /usr/include /usr/local/include)
+	ENDIF (WIN32)
+	INCLUDE(FindPackageHandleStandardArgs)
+	SET(QUAZIP_INCLUDE_DIRS ${QUAZIP_INCLUDE_DIR} ${QUAZIP_ZLIB_INCLUDE_DIR})
+	find_package_handle_standard_args(QUAZIP DEFAULT_MSG  QUAZIP_LIBRARIES QUAZIP_INCLUDE_DIR QUAZIP_ZLIB_INCLUDE_DIR QUAZIP_INCLUDE_DIRS)
+ENDIF (QUAZIP_INCLUDE_DIRS AND QUAZIP_LIBRARIES)
diff --git a/3rdparty/quazip-0.7/NEWS.txt b/3rdparty/quazip-0.7/NEWS.txt
new file mode 100644
index 0000000..7388f50
--- /dev/null
+++ b/3rdparty/quazip-0.7/NEWS.txt
@@ -0,0 +1,149 @@
+QuaZIP changes
+
+* 2014-07-24 0.7
+        * It is now possible to write ZIP files to sequential devices
+          like sockets (only in mdCreate mode, so no self-extract, sorry).
+        * A few zip64 fixes.
+        * Several bug fixes and portability improvements.
+
+* 2014-02-09 0.6.2
+        * QuaZipNewInfo / QuaZipFileInfo64 now provide API to access/set
+          NTFS time stamps - useful even on non-NTFS systems if you 
+          need more precise dates and times than default ones.
+        * QuaZipNewInfo may now be initialized from QuaZipFileInfo64.
+        * No more crashes when using QSaveFile as QIODevice for ZIP.
+        * The new QuaZip::setAutoClose() method allows to leave the
+          QIODevice open when you close the QuaZip instance.
+        * qztest now depends on quazip, no longer breaking the build.
+
+* 2014-01-26 0.6.1
+        * Improved zip64 support.
+        * A LOT more tests thanks to g++ --coverage / lcov.
+        * JlCompress extraction methods now create files with default
+          permissions if they are zero in the original archive.
+        * Some QuaZipDir fixes (thanks to the new tests).
+
+* 2014-01-22 0.6
+        * Minizip updated to 1.1 (with all the necessary modifications
+          re-done), and that means that...
+        * the long-awaited zip64 support is now available!
+        * A few rather minor fixes.
+
+* 2014-01-19 0.5.2
+        * Some minor bug fixes.
+        * API to access file permissions subfield of the external
+          attributes.
+        * MS VS 2012 Express support.
+        * API to set the default codec used to encode/decode file names
+          (mainly for use by various wrappers such as JlCompress, when
+          you don't have direct access to the underlying QuaZip instance).
+
+* 2013-03-02 0.5.1
+        * Lots of QuaZipDir fixes, thanks to all bug reporters.
+        * Full Qt Creator support.
+        * MS VS 2010 Express support.
+        * Qt5 support (didn't need any source code changes anyway).
+        * Lots of minor bug fixes.
+
+* 2012-09-07 0.5
+        * Added run_moc.bat files for building under Windows in case Qt
+          integration is not available (e. g. VS 2008 Express).
+        * Added the QuaZipDir class to simplify ZIP navigation in terms
+          of directories.
+        * Added the QuaGzipFile class for working with GZIP archives. It
+          was added as a bonus since it has nothing to do with the main
+          purpose of the library. It probably won't get any major
+          improvements, although minor bug fixes are possible.
+        * Added the QuaZIODevice class for working with zlib
+          compression. It has nothing to do with the ZIP format, and
+          therefore the same notice as for the QuaGzipFile applies.
+        * The global comment is no longer erased when adding files to
+          an archive.
+        * Many bug fixes.
+
+* 2012-01-14 0.4.4
+        * Fixed isSequential() test that was causing open() failures on
+          Unix.
+        * Fixed sub-directory compressing in JlCompress.
+        * Added MS VS 2008 solution, compatible with the binary Qt
+          distribution (tested on MS VS 2008 Express, had to run MOC
+          manually due to the lack of plugin in Express).
+        * Fixed extracting directories in JlCompress.
+        * Fixed JlCompress.h includes in the test suite, which used
+          lowercase names thus breaking on case-sensitive systems.
+        * Implemented missing QuaZipFile::getZip() that was only
+          declared.
+        * Fixed reopening closed files.
+        * Fixed possible memory leak in case of open error.
+
+* 2011-09-09 0.4.3
+        * New test suite using QTestLib.
+        * Fixed bytesAvailable(), pos() and atEnd().
+        * Added ZIP v1.0 support and disabling data descriptor for
+          compatibility with some older software.
+        * Fixed DLL export/import issues for some symbols.
+        * Added QUAZIP_STATIC macro for compiling as a static library or
+          directly including the source.
+        * Added getFileNameList() and getFileInfoList() convenience
+          functions.
+        * Added some buffering to JlCompress to improve performance.
+
+* 2011-08-10 0.4.2
+        * Cmake patch (thanks to Bernhard Rosenkraenzer).
+        * Symbian patch (thanks to Hamish Willee).
+        * Documented the multiple files limitation of QuaZipFile.
+        * Fixed relative paths handling in JlCompress.
+        * Fixed linking to MinGW zlib.
+
+* 2011-05-26 0.4.1
+        * License statement updated to avoid confusion. GPL license
+        removed for the very same reason.
+        * Parts of original package are now clearly marked as modified,
+        just as their license requires.
+
+* 2011-05-23 0.4
+        * QuaZip and QuaZipFile classes now use the Pimpl idiom. This
+        means that future releases will probably be binary compatible
+        with this one, but it also means that this one is binary
+        incompatible with the old ones.
+        * IO API has been rewritten using QIODevice instead of standard
+        C library. Among other things it means that QuaZip now supports
+        files up to 4 GB in size instead of 2 GB.
+        * Added QuaZip methods allowing access to ZIP files represented
+        by any seekable QIODevice implementation (QBuffer is a good
+        example).
+
+* 2010-07-23 0.3
+        * Fixed getComment() for global comments.
+        * Added some useful classes for calculating checksums (thanks to
+        Adam Walczak).
+        * Added some utility classes for working with whole directories
+        (thanks to Roberto Pompermaier). It would be nice if someone
+        documents these in English, though.
+        * Probably fixed some problems with passwords (thanks to Vasiliy
+        Sorokin). I didn't test it, though.
+
+* 2008-09-17 0.2.3
+        * Fixed license notices in sources.
+
+* SVN
+        * Fixed a small bug in QuaZipFile::atEnd().
+
+* 2007-01-16 0.2.2
+        * Added LGPL as alternative license.
+        * Added FAQ documentation page.
+
+* 2006-03-21 0.2.1
+        * Fixed setCommentCodec() bug.
+        * Fixed bug that set month 1-12 instead of 0-11, as specified in
+          zip.h.
+        * Added workaround for Qt's bug that caused wrong timestamps.
+        * Few documentation fixes and cosmetic changes.
+
+* 2005-07-08 0.2
+        * Write support.
+        * Extended QuaZipFile API, including size(), *pos() functions.
+        * Support for comments encoding/decoding.
+
+* 2005-07-01 0.1
+        * Initial version.
diff --git a/3rdparty/quazip-0.7/README.txt b/3rdparty/quazip-0.7/README.txt
new file mode 100644
index 0000000..811ac8a
--- /dev/null
+++ b/3rdparty/quazip-0.7/README.txt
@@ -0,0 +1,66 @@
+QuaZIP is the C++ wrapper for Gilles Vollant's ZIP/UNZIP package
+(AKA minizip) using Trolltech's Qt library.
+
+It uses existing ZIP/UNZIP package C code and therefore depends on
+the zlib library.
+
+Also, it depends on Qt 4.
+
+To compile it on UNIX dialect:
+
+$ cd quazip
+$ qmake
+$ make
+
+You must make sure that:
+* You have Qt 4 properly and fully installed (including tools and
+  headers, not just library)
+* "qmake" command runs Qt 4's qmake, not some other version (you'll have
+  to type full path to qmake otherwise).
+
+To install compiled shared library, just type:
+
+$ make install
+
+By default, it installs in /usr/local, but you may change it using
+
+$ qmake PREFIX=/wherever/you/want/to/install
+
+You do not have to compile and install QuaZIP to use it. You can just
+(and sometimes it may be the best way) add QuaZIP's source files to your
+project and use them.
+
+See doc/html or, if you do not have a browser, quazip/*.h and
+quazip/doc/* files for the more detailed documentation.
+
+For Windows, it's essentially the same, but you may have to adjust
+settings for different environments.
+
+If you want to include QuaZIP sources directly in your project or if
+you want to use QuaZIP compiled as a static library using
+"qmake CONFIG+=statliclib", you have to define the QUAZIP_STATIC macro,
+otherwise you're likely to run into problems as QuaZIP symbols will be
+marked as dllimported.
+
+Copyright notice:
+
+Copyright (C) 2005-2012 Sergey A. Tachenov
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
+General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this program; if not, write to the Free Software Foundation,
+Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant, see
+quazip/(un)zip.h files for details, basically it's zlib license.
diff --git a/3rdparty/quazip-0.7/doc/html/JlCompress_8h_source.html b/3rdparty/quazip-0.7/doc/html/JlCompress_8h_source.html
new file mode 100644
index 0000000..afb0c82
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/JlCompress_8h_source.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: quazip/JlCompress.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_94f3fdea1a650ed21d35813cdb37a339.html">quazip</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">JlCompress.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef JLCOMPRESSFOLDER_H_</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define JLCOMPRESSFOLDER_H_</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">Copyright (C) 2010 Roberto Pompermaier</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment">Copyright (C) 2005-2014 Sergey A. Tachenov</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"></span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment">This file is part of QuaZIP.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"></span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">QuaZIP is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">it under the terms of the GNU Lesser General Public License as published by</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment">QuaZIP is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment">GNU Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">You should have received a copy of the GNU Lesser General Public License</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">See COPYING file for the full LGPL text.</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">Original ZIP package is copyrighted by Gilles Vollant and contributors,</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">see quazip/(un)zip.h files for details. Basically it's the zlib license.</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "quazip.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "quazipfile.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "quazipfileinfo.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <QString></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <QDir></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <QFileInfo></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <QFile></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classJlCompress.html">   42</a></span> <span class="keyword">class </span>QUAZIP_EXPORT <a class="code" href="classJlCompress.html">JlCompress</a> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     <span class="keyword">static</span> <span class="keywordtype">bool</span> compressFile(<a class="code" href="classQuaZip.html">QuaZip</a>* zip, QString fileName, QString fileDest);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>     <span class="keyword">static</span> <span class="keywordtype">bool</span> compressSubDir(<a class="code" href="classQuaZip.html">QuaZip</a>* parentZip, QString dir, QString parentDir, <span class="keywordtype">bool</span> recursive = <span class="keyword">true</span>);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="keyword">static</span> <span class="keywordtype">bool</span> extractFile(<a class="code" href="classQuaZip.html">QuaZip</a>* zip, QString fileName, QString fileDest);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     <span class="keyword">static</span> <span class="keywordtype">bool</span> removeFile(QStringList listFile);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="keyword">static</span> <span class="keywordtype">bool</span> compressFile(QString fileCompressed, QString file);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     <span class="keyword">static</span> <span class="keywordtype">bool</span> compressFiles(QString fileCompressed, QStringList files);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     <span class="keyword">static</span> <span class="keywordtype">bool</span> compressDir(QString fileCompressed, QString dir = QString(), <span class="keywordtype">bool</span> recursive = <span class="keyword">true</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     <span class="keyword">static</span> QString extractFile(QString fileCompressed, QString fileName, QString fileDest = QString());</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="keyword">static</span> QStringList extractFiles(QString fileCompressed, QStringList files, QString dir = QString());</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="keyword">static</span> QStringList extractDir(QString fileCompressed, QString dir = QString());</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keyword">static</span> QStringList getFileList(QString fileCompressed);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> };</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="preprocessor">#endif </span><span class="comment">/* JLCOMPRESSFOLDER_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="classQuaZip_html"><div class="ttname"><a href="classQuaZip.html">QuaZip</a></div><div class="ttdoc">ZIP archive. </div><div class="ttdef"><b>Definition:</b> quazip.h:84</div></div>
+<div class="ttc" id="classJlCompress_html"><div class="ttname"><a href="classJlCompress.html">JlCompress</a></div><div class="ttdoc">Utility class for typical operations. </div><div class="ttdef"><b>Definition:</b> JlCompress.h:42</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/annotated.html b/3rdparty/quazip-0.7/doc/html/annotated.html
new file mode 100644
index 0000000..cd67568
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/annotated.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Class List</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classJlCompress.html" target="_self">JlCompress</a></td><td class="desc">Utility class for typical operations </td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structQIODevice__descriptor.html" target="_self">QIODevice_descriptor</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaAdler32.html" target="_self">QuaAdler32</a></td><td class="desc">Adler32 checksum </td></tr>
+<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaChecksum32.html" target="_self">QuaChecksum32</a></td><td class="desc">Checksum interface </td></tr>
+<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaCrc32.html" target="_self">QuaCrc32</a></td><td class="desc">CRC32 checksum </td></tr>
+<tr id="row_5_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaGzipFile.html" target="_self">QuaGzipFile</a></td><td class="desc">GZIP file </td></tr>
+<tr id="row_6_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaZIODevice.html" target="_self">QuaZIODevice</a></td><td class="desc">A class to compress/decompress QIODevice </td></tr>
+<tr id="row_7_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaZip.html" target="_self">QuaZip</a></td><td class="desc">ZIP archive </td></tr>
+<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaZipDir.html" target="_self">QuaZipDir</a></td><td class="desc">Provides ZIP archive navigation </td></tr>
+<tr id="row_9_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaZipFile.html" target="_self">QuaZipFile</a></td><td class="desc">A file inside ZIP archive </td></tr>
+<tr id="row_10_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structQuaZipFileInfo.html" target="_self">QuaZipFileInfo</a></td><td class="desc">Information about a file inside archive </td></tr>
+<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structQuaZipFileInfo64.html" target="_self">QuaZipFileInfo64</a></td><td class="desc">Information about a file inside archive (with zip64 support) </td></tr>
+<tr id="row_12_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaZipFilePrivate.html" target="_self">QuaZipFilePrivate</a></td><td class="desc">The implementation class for <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> </td></tr>
+<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structQuaZipNewInfo.html" target="_self">QuaZipNewInfo</a></td><td class="desc">Information about a file to be created </td></tr>
+<tr id="row_14_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaZipPrivate.html" target="_self">QuaZipPrivate</a></td><td class="desc">All the internal stuff for the <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> class </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/bc_s.png b/3rdparty/quazip-0.7/doc/html/bc_s.png
new file mode 100644
index 0000000..224b29a
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/bc_s.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/bdwn.png b/3rdparty/quazip-0.7/doc/html/bdwn.png
new file mode 100644
index 0000000..940a0b9
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/bdwn.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/classJlCompress-members.html b/3rdparty/quazip-0.7/doc/html/classJlCompress-members.html
new file mode 100644
index 0000000..2530c6c
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classJlCompress-members.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">JlCompress Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classJlCompress.html">JlCompress</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classJlCompress.html#a8708eafcadc5c192a1d492e784cfc98f">compressDir</a>(QString fileCompressed, QString dir=QString(), bool recursive=true)</td><td class="entry"><a class="el" href="classJlCompress.html">JlCompress</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classJlCompress.html#a4a4de9c62ecf161bb658d4d80495ea97">compressFile</a>(QString fileCompressed, QString file)</td><td class="entry"><a class="el" href="classJlCompress.html">JlCompress</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classJlCompress.html#a9cdb92d29a94c6b13a718a3249685846">compressFiles</a>(QString fileCompressed, QStringList files)</td><td class="entry"><a class="el" href="classJlCompress.html">JlCompress</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classJlCompress.html#a365a153baa4c11812d93cbca60b6a293">extractDir</a>(QString fileCompressed, QString dir=QString())</td><td class="entry"><a class="el" href="classJlCompress.html">JlCompress</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classJlCompress.html#a38c0d58bfe3bbbcb3cf4e98d126633a3">extractFile</a>(QString fileCompressed, QString fileName, QString fileDest=QString())</td><td class="entry"><a class="el" href="classJlCompress.html">JlCompress</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classJlCompress.html#a309e9ee366719a4d8aa28f837fab73ae">extractFiles</a>(QString fileCompressed, QStringList files, QString dir=QString())</td><td class="entry"><a class="el" href="classJlCompress.html">JlCompress</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classJlCompress.html#ab42422be913f817d7e04c1b1cd5d0156">getFileList</a>(QString fileCompressed)</td><td class="entry"><a class="el" href="classJlCompress.html">JlCompress</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classJlCompress.html b/3rdparty/quazip-0.7/doc/html/classJlCompress.html
new file mode 100644
index 0000000..7215343
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classJlCompress.html
@@ -0,0 +1,475 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: JlCompress Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="classJlCompress-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">JlCompress Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Utility class for typical operations.  
+ <a href="classJlCompress.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="JlCompress_8h_source.html">JlCompress.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a4a4de9c62ecf161bb658d4d80495ea97"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classJlCompress.html#a4a4de9c62ecf161bb658d4d80495ea97">compressFile</a> (QString fileCompressed, QString file)</td></tr>
+<tr class="memdesc:a4a4de9c62ecf161bb658d4d80495ea97"><td class="mdescLeft"> </td><td class="mdescRight">Compress a single file.  <a href="#a4a4de9c62ecf161bb658d4d80495ea97">More...</a><br/></td></tr>
+<tr class="separator:a4a4de9c62ecf161bb658d4d80495ea97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9cdb92d29a94c6b13a718a3249685846"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classJlCompress.html#a9cdb92d29a94c6b13a718a3249685846">compressFiles</a> (QString fileCompressed, QStringList files)</td></tr>
+<tr class="memdesc:a9cdb92d29a94c6b13a718a3249685846"><td class="mdescLeft"> </td><td class="mdescRight">Compress a list of files.  <a href="#a9cdb92d29a94c6b13a718a3249685846">More...</a><br/></td></tr>
+<tr class="separator:a9cdb92d29a94c6b13a718a3249685846"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8708eafcadc5c192a1d492e784cfc98f"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classJlCompress.html#a8708eafcadc5c192a1d492e784cfc98f">compressDir</a> (QString fileCompressed, QString dir=QString(), bool recursive=true)</td></tr>
+<tr class="memdesc:a8708eafcadc5c192a1d492e784cfc98f"><td class="mdescLeft"> </td><td class="mdescRight">Compress a whole directory.  <a href="#a8708eafcadc5c192a1d492e784cfc98f">More...</a><br/></td></tr>
+<tr class="separator:a8708eafcadc5c192a1d492e784cfc98f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a38c0d58bfe3bbbcb3cf4e98d126633a3"><td class="memItemLeft" align="right" valign="top">static QString </td><td class="memItemRight" valign="bottom"><a class="el" href="classJlCompress.html#a38c0d58bfe3bbbcb3cf4e98d126633a3">extractFile</a> (QString fileCompressed, QString fileName, QString fileDest=QString())</td></tr>
+<tr class="memdesc:a38c0d58bfe3bbbcb3cf4e98d126633a3"><td class="mdescLeft"> </td><td class="mdescRight">Extract a single file.  <a href="#a38c0d58bfe3bbbcb3cf4e98d126633a3">More...</a><br/></td></tr>
+<tr class="separator:a38c0d58bfe3bbbcb3cf4e98d126633a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a309e9ee366719a4d8aa28f837fab73ae"><td class="memItemLeft" align="right" valign="top">static QStringList </td><td class="memItemRight" valign="bottom"><a class="el" href="classJlCompress.html#a309e9ee366719a4d8aa28f837fab73ae">extractFiles</a> (QString fileCompressed, QStringList files, QString dir=QString())</td></tr>
+<tr class="memdesc:a309e9ee366719a4d8aa28f837fab73ae"><td class="mdescLeft"> </td><td class="mdescRight">Extract a list of files.  <a href="#a309e9ee366719a4d8aa28f837fab73ae">More...</a><br/></td></tr>
+<tr class="separator:a309e9ee366719a4d8aa28f837fab73ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a365a153baa4c11812d93cbca60b6a293"><td class="memItemLeft" align="right" valign="top">static QStringList </td><td class="memItemRight" valign="bottom"><a class="el" href="classJlCompress.html#a365a153baa4c11812d93cbca60b6a293">extractDir</a> (QString fileCompressed, QString dir=QString())</td></tr>
+<tr class="memdesc:a365a153baa4c11812d93cbca60b6a293"><td class="mdescLeft"> </td><td class="mdescRight">Extract a whole archive.  <a href="#a365a153baa4c11812d93cbca60b6a293">More...</a><br/></td></tr>
+<tr class="separator:a365a153baa4c11812d93cbca60b6a293"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab42422be913f817d7e04c1b1cd5d0156"><td class="memItemLeft" align="right" valign="top">static QStringList </td><td class="memItemRight" valign="bottom"><a class="el" href="classJlCompress.html#ab42422be913f817d7e04c1b1cd5d0156">getFileList</a> (QString fileCompressed)</td></tr>
+<tr class="memdesc:ab42422be913f817d7e04c1b1cd5d0156"><td class="mdescLeft"> </td><td class="mdescRight">Get the file list.  <a href="#ab42422be913f817d7e04c1b1cd5d0156">More...</a><br/></td></tr>
+<tr class="separator:ab42422be913f817d7e04c1b1cd5d0156"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Utility class for typical operations. </p>
+<p>This class contains a number of useful static functions to perform simple operations, such as mass ZIP packing or extraction. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a4a4de9c62ecf161bb658d4d80495ea97"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool JlCompress::compressFile </td>
+          <td>(</td>
+          <td class="paramtype">QString </td>
+          <td class="paramname"><em>fileCompressed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QString </td>
+          <td class="paramname"><em>file</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compress a single file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fileCompressed</td><td>The name of the archive. </td></tr>
+    <tr><td class="paramname">file</td><td>The file to compress. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>true if success, false otherwise.</dd></dl>
+<p>OK Comprime il file fileName nel file fileCompressed. Se la funzione fallisce restituisce false e cancella il file che si e tentato di creare.</p>
+<p>La funzione fallisce se:</p>
+<ul>
+<li>non si riesce ad aprire l'oggetto zip;</li>
+<li>la compressione del file fallisce;</li>
+<li>non si riesce a chiudere l'oggetto zip; </li>
+</ul>
+
+<p>References <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f">QuaZip::close()</a>, <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">QuaZip::getZipError()</a>, <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e">QuaZip::mdCreate</a>, and <a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962">QuaZip::open()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9cdb92d29a94c6b13a718a3249685846"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool JlCompress::compressFiles </td>
+          <td>(</td>
+          <td class="paramtype">QString </td>
+          <td class="paramname"><em>fileCompressed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QStringList </td>
+          <td class="paramname"><em>files</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compress a list of files. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fileCompressed</td><td>The name of the archive. </td></tr>
+    <tr><td class="paramname">files</td><td>The file list to compress. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>true if success, false otherwise.</dd></dl>
+<p>OK Comprime i file specificati in files nel file fileCompressed. Se la funzione fallisce restituisce false e cancella il file che si e tentato di creare.</p>
+<p>La funzione fallisce se:</p>
+<ul>
+<li>non si riesce ad aprire l'oggetto zip;</li>
+<li>la compressione di un file fallisce;</li>
+<li>non si riesce a chiudere l'oggetto zip; </li>
+</ul>
+
+<p>References <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f">QuaZip::close()</a>, <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">QuaZip::getZipError()</a>, <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e">QuaZip::mdCreate</a>, and <a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962">QuaZip::open()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8708eafcadc5c192a1d492e784cfc98f"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool JlCompress::compressDir </td>
+          <td>(</td>
+          <td class="paramtype">QString </td>
+          <td class="paramname"><em>fileCompressed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QString </td>
+          <td class="paramname"><em>dir</em> = <code>QString()</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool </td>
+          <td class="paramname"><em>recursive</em> = <code>true</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compress a whole directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fileCompressed</td><td>The name of the archive. </td></tr>
+    <tr><td class="paramname">dir</td><td>The directory to compress. </td></tr>
+    <tr><td class="paramname">recursive</td><td>Whether to pack the subdirectories as well, or just regular files. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>true if success, false otherwise.</dd></dl>
+<p>OK Comprime la cartella dir nel file fileCompressed, se recursive e true allora comprime anche le sotto cartelle. Se la funzione fallisce restituisce false e cancella il file che si e tentato di creare.</p>
+<p>La funzione fallisce se:</p>
+<ul>
+<li>non si riesce ad aprire l'oggetto zip;</li>
+<li>la compressione di un file fallisce;</li>
+<li>non si riesce a chiudere l'oggetto zip; </li>
+</ul>
+
+<p>References <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f">QuaZip::close()</a>, <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">QuaZip::getZipError()</a>, <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e">QuaZip::mdCreate</a>, and <a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962">QuaZip::open()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a38c0d58bfe3bbbcb3cf4e98d126633a3"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">QString JlCompress::extractFile </td>
+          <td>(</td>
+          <td class="paramtype">QString </td>
+          <td class="paramname"><em>fileCompressed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QString </td>
+          <td class="paramname"><em>fileName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QString </td>
+          <td class="paramname"><em>fileDest</em> = <code>QString()</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Extract a single file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fileCompressed</td><td>The name of the archive. </td></tr>
+    <tr><td class="paramname">fileName</td><td>The file to extract. </td></tr>
+    <tr><td class="paramname">fileDest</td><td>The destination file, assumed to be identical to <em>file</em> if left empty. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The list of the full paths of the files extracted, empty on failure.</dd></dl>
+<p>OK Estrae il file fileName, contenuto nel file fileCompressed, con il nome fileDest. Se fileDest = "" allora il file viene estratto con lo stesso nome con cui e stato compresso. Se la funzione fallisce cancella il file che si e tentato di estrarre. Restituisce il nome assoluto del file estratto.</p>
+<p>La funzione fallisce se:</p>
+<ul>
+<li>non si riesce ad aprire l'oggetto zip;</li>
+<li>l'estrazione del file fallisce;</li>
+<li>non si riesce a chiudere l'oggetto zip; </li>
+</ul>
+
+<p>References <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f">QuaZip::close()</a>, <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">QuaZip::getZipError()</a>, <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">QuaZip::mdUnzip</a>, and <a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962">QuaZip::open()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a309e9ee366719a4d8aa28f837fab73ae"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">QStringList JlCompress::extractFiles </td>
+          <td>(</td>
+          <td class="paramtype">QString </td>
+          <td class="paramname"><em>fileCompressed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QStringList </td>
+          <td class="paramname"><em>files</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QString </td>
+          <td class="paramname"><em>dir</em> = <code>QString()</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Extract a list of files. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fileCompressed</td><td>The name of the archive. </td></tr>
+    <tr><td class="paramname">files</td><td>The file list to extract. </td></tr>
+    <tr><td class="paramname">dir</td><td>The directory to put the files to, the current directory if left empty. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The list of the full paths of the files extracted, empty on failure.</dd></dl>
+<p>OK Estrae i file specificati in files, contenuti nel file fileCompressed, nella cartella dir. La struttura a cartelle del file compresso viene rispettata. Se dir = "" allora il file viene estratto nella cartella corrente. Se la funzione fallisce cancella i file che si e tentato di estrarre. Restituisce i nomi assoluti dei file estratti.</p>
+<p>La funzione fallisce se:</p>
+<ul>
+<li>non si riesce ad aprire l'oggetto zip;</li>
+<li>l'estrazione di un file fallisce;</li>
+<li>non si riesce a chiudere l'oggetto zip; </li>
+</ul>
+
+<p>References <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f">QuaZip::close()</a>, <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">QuaZip::getZipError()</a>, <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">QuaZip::mdUnzip</a>, and <a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962">QuaZip::open()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a365a153baa4c11812d93cbca60b6a293"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">QStringList JlCompress::extractDir </td>
+          <td>(</td>
+          <td class="paramtype">QString </td>
+          <td class="paramname"><em>fileCompressed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QString </td>
+          <td class="paramname"><em>dir</em> = <code>QString()</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Extract a whole archive. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fileCompressed</td><td>The name of the archive. </td></tr>
+    <tr><td class="paramname">dir</td><td>The directory to extract to, the current directory if left empty. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The list of the full paths of the files extracted, empty on failure.</dd></dl>
+<p>OK Estrae il file fileCompressed nella cartella dir. Se dir = "" allora il file viene estratto nella cartella corrente. Se la funzione fallisce cancella i file che si e tentato di estrarre. Restituisce i nomi assoluti dei file estratti.</p>
+<p>La funzione fallisce se:</p>
+<ul>
+<li>non si riesce ad aprire l'oggetto zip;</li>
+<li>la compressione di un file fallisce;</li>
+<li>non si riesce a chiudere l'oggetto zip; </li>
+</ul>
+
+<p>References <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f">QuaZip::close()</a>, <a class="el" href="classQuaZip.html#a9783f8b4f39cd55e71e975aea78fd54a">QuaZip::getCurrentFileName()</a>, <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">QuaZip::getZipError()</a>, <a class="el" href="classQuaZip.html#a745488f9177bcec3cdb858587584e033">QuaZip::goToFirstFile()</a>, <a class="el" href="classQuaZip.html#aee6779b6cd338420c2e8c5655fa8ba97">QuaZip: [...]
+
+</div>
+</div>
+<a class="anchor" id="ab42422be913f817d7e04c1b1cd5d0156"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">QStringList JlCompress::getFileList </td>
+          <td>(</td>
+          <td class="paramtype">QString </td>
+          <td class="paramname"><em>fileCompressed</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the file list. </p>
+<dl class="section return"><dt>Returns</dt><dd>The list of the files in the archive, or, more precisely, the list of the entries, including both files and directories if they are present separately.</dd></dl>
+<p>OK Restituisce la lista dei file resenti nel file compresso fileCompressed. Se la funzione fallisce, restituisce un elenco vuoto.</p>
+<p>La funzione fallisce se:</p>
+<ul>
+<li>non si riesce ad aprire l'oggetto zip;</li>
+<li>la richiesta di informazioni di un file fallisce;</li>
+<li>non si riesce a chiudere l'oggetto zip; </li>
+</ul>
+
+<p>References <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f">QuaZip::close()</a>, <a class="el" href="classQuaZip.html#a9c91a53ed4c2038e153c64bdc097ebe8">QuaZip::getCurrentFileInfo()</a>, <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">QuaZip::getZipError()</a>, <a class="el" href="classQuaZip.html#a745488f9177bcec3cdb858587584e033">QuaZip::goToFirstFile()</a>, <a class="el" href="classQuaZip.html#aee6779b6cd338420c2e8c5655fa8ba97">QuaZip: [...]
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>quazip/<a class="el" href="JlCompress_8h_source.html">JlCompress.h</a></li>
+<li>quazip/JlCompress.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaAdler32-members.html b/3rdparty/quazip-0.7/doc/html/classQuaAdler32-members.html
new file mode 100644
index 0000000..42c3b52
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaAdler32-members.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QuaAdler32 Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classQuaAdler32.html">QuaAdler32</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classQuaAdler32.html#a350e84fd000ebfa3c33503336a7b21bb">calculate</a>(const QByteArray &data)</td><td class="entry"><a class="el" href="classQuaAdler32.html">QuaAdler32</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>QuaAdler32</b>() (defined in <a class="el" href="classQuaAdler32.html">QuaAdler32</a>)</td><td class="entry"><a class="el" href="classQuaAdler32.html">QuaAdler32</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaAdler32.html#a2fe6ac9eb289bafda6a9fd20e6472ab5">reset</a>()</td><td class="entry"><a class="el" href="classQuaAdler32.html">QuaAdler32</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaAdler32.html#aba24f7b16aa0cdc26f81a9ad687fc653">update</a>(const QByteArray &buf)</td><td class="entry"><a class="el" href="classQuaAdler32.html">QuaAdler32</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaAdler32.html#a2022e1db95c23cef220b335e44d74fb1">value</a>()</td><td class="entry"><a class="el" href="classQuaAdler32.html">QuaAdler32</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaAdler32.html b/3rdparty/quazip-0.7/doc/html/classQuaAdler32.html
new file mode 100644
index 0000000..1cc4881
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaAdler32.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaAdler32 Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classQuaAdler32-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">QuaAdler32 Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Adler32 checksum.  
+ <a href="classQuaAdler32.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="quaadler32_8h_source.html">quazip/quaadler32.h</a>></code></p>
+<div class="dynheader">
+Inheritance diagram for QuaAdler32:</div>
+<div class="dyncontent">
+<div class="center"><img src="classQuaAdler32__inherit__graph.png" border="0" usemap="#QuaAdler32_inherit__map" alt="Inheritance graph"/></div>
+<map name="QuaAdler32_inherit__map" id="QuaAdler32_inherit__map">
+<area shape="rect" id="node2" href="classQuaChecksum32.html" title="Checksum interface. " alt="" coords="5,5,128,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for QuaAdler32:</div>
+<div class="dyncontent">
+<div class="center"><img src="classQuaAdler32__coll__graph.png" border="0" usemap="#QuaAdler32_coll__map" alt="Collaboration graph"/></div>
+<map name="QuaAdler32_coll__map" id="QuaAdler32_coll__map">
+<area shape="rect" id="node2" href="classQuaChecksum32.html" title="Checksum interface. " alt="" coords="5,5,128,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a350e84fd000ebfa3c33503336a7b21bb"><td class="memItemLeft" align="right" valign="top">quint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaAdler32.html#a350e84fd000ebfa3c33503336a7b21bb">calculate</a> (const QByteArray &data)</td></tr>
+<tr class="memdesc:a350e84fd000ebfa3c33503336a7b21bb"><td class="mdescLeft"> </td><td class="mdescRight">Calculates the checksum for data.  <a href="#a350e84fd000ebfa3c33503336a7b21bb">More...</a><br/></td></tr>
+<tr class="separator:a350e84fd000ebfa3c33503336a7b21bb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2fe6ac9eb289bafda6a9fd20e6472ab5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2fe6ac9eb289bafda6a9fd20e6472ab5"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaAdler32.html#a2fe6ac9eb289bafda6a9fd20e6472ab5">reset</a> ()</td></tr>
+<tr class="memdesc:a2fe6ac9eb289bafda6a9fd20e6472ab5"><td class="mdescLeft"> </td><td class="mdescRight">Resets the calculation on a checksun for a stream. <br/></td></tr>
+<tr class="separator:a2fe6ac9eb289bafda6a9fd20e6472ab5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aba24f7b16aa0cdc26f81a9ad687fc653"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaAdler32.html#aba24f7b16aa0cdc26f81a9ad687fc653">update</a> (const QByteArray &buf)</td></tr>
+<tr class="memdesc:aba24f7b16aa0cdc26f81a9ad687fc653"><td class="mdescLeft"> </td><td class="mdescRight">Updates the calculated checksum for the stream.  <a href="#aba24f7b16aa0cdc26f81a9ad687fc653">More...</a><br/></td></tr>
+<tr class="separator:aba24f7b16aa0cdc26f81a9ad687fc653"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2022e1db95c23cef220b335e44d74fb1"><td class="memItemLeft" align="right" valign="top">quint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaAdler32.html#a2022e1db95c23cef220b335e44d74fb1">value</a> ()</td></tr>
+<tr class="memdesc:a2022e1db95c23cef220b335e44d74fb1"><td class="mdescLeft"> </td><td class="mdescRight">Value of the checksum calculated for the stream passed throw <a class="el" href="classQuaAdler32.html#aba24f7b16aa0cdc26f81a9ad687fc653" title="Updates the calculated checksum for the stream. ">update()</a>.  <a href="#a2022e1db95c23cef220b335e44d74fb1">More...</a><br/></td></tr>
+<tr class="separator:a2022e1db95c23cef220b335e44d74fb1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Adler32 checksum. </p>
+<p>This class wrappers the adler32 function with the <a class="el" href="classQuaChecksum32.html" title="Checksum interface. ">QuaChecksum32</a> interface. See <a class="el" href="classQuaChecksum32.html" title="Checksum interface. ">QuaChecksum32</a> for more info. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a350e84fd000ebfa3c33503336a7b21bb"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">quint32 QuaAdler32::calculate </td>
+          <td>(</td>
+          <td class="paramtype">const QByteArray & </td>
+          <td class="paramname"><em>data</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Calculates the checksum for data. </p>
+<p><em>data</em> source data </p>
+<dl class="section return"><dt>Returns</dt><dd>data checksum</dd></dl>
+<p>This function has no efect on the value returned by <a class="el" href="classQuaAdler32.html#a2022e1db95c23cef220b335e44d74fb1" title="Value of the checksum calculated for the stream passed throw update(). ">value()</a>. </p>
+
+<p>Implements <a class="el" href="classQuaChecksum32.html#a14d800fcfd55b2ae11ef07d3924fe0b1">QuaChecksum32</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aba24f7b16aa0cdc26f81a9ad687fc653"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaAdler32::update </td>
+          <td>(</td>
+          <td class="paramtype">const QByteArray & </td>
+          <td class="paramname"><em>buf</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Updates the calculated checksum for the stream. </p>
+<p><em>buf</em> next portion of data from the stream </p>
+
+<p>Implements <a class="el" href="classQuaChecksum32.html#a63a6ed3171f9243214d307da67557f7e">QuaChecksum32</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2022e1db95c23cef220b335e44d74fb1"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">quint32 QuaAdler32::value </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Value of the checksum calculated for the stream passed throw <a class="el" href="classQuaAdler32.html#aba24f7b16aa0cdc26f81a9ad687fc653" title="Updates the calculated checksum for the stream. ">update()</a>. </p>
+<dl class="section return"><dt>Returns</dt><dd>checksum </dd></dl>
+
+<p>Implements <a class="el" href="classQuaChecksum32.html#afd836e7534194fce08356be6a8336da7">QuaChecksum32</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>quazip/<a class="el" href="quaadler32_8h_source.html">quaadler32.h</a></li>
+<li>quazip/quaadler32.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaAdler32__coll__graph.map b/3rdparty/quazip-0.7/doc/html/classQuaAdler32__coll__graph.map
new file mode 100644
index 0000000..7cb921c
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaAdler32__coll__graph.map
@@ -0,0 +1,3 @@
+<map id="QuaAdler32" name="QuaAdler32">
+<area shape="rect" id="node2" href="$classQuaChecksum32.html" title="Checksum interface. " alt="" coords="5,5,128,32"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaAdler32__coll__graph.md5 b/3rdparty/quazip-0.7/doc/html/classQuaAdler32__coll__graph.md5
new file mode 100644
index 0000000..2a901c2
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaAdler32__coll__graph.md5
@@ -0,0 +1 @@
+795e0a3b4a0bae2411933397a89b71a1
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaAdler32__coll__graph.png b/3rdparty/quazip-0.7/doc/html/classQuaAdler32__coll__graph.png
new file mode 100644
index 0000000..978c35d
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/classQuaAdler32__coll__graph.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaAdler32__inherit__graph.map b/3rdparty/quazip-0.7/doc/html/classQuaAdler32__inherit__graph.map
new file mode 100644
index 0000000..7cb921c
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaAdler32__inherit__graph.map
@@ -0,0 +1,3 @@
+<map id="QuaAdler32" name="QuaAdler32">
+<area shape="rect" id="node2" href="$classQuaChecksum32.html" title="Checksum interface. " alt="" coords="5,5,128,32"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaAdler32__inherit__graph.md5 b/3rdparty/quazip-0.7/doc/html/classQuaAdler32__inherit__graph.md5
new file mode 100644
index 0000000..2a901c2
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaAdler32__inherit__graph.md5
@@ -0,0 +1 @@
+795e0a3b4a0bae2411933397a89b71a1
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaAdler32__inherit__graph.png b/3rdparty/quazip-0.7/doc/html/classQuaAdler32__inherit__graph.png
new file mode 100644
index 0000000..978c35d
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/classQuaAdler32__inherit__graph.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaChecksum32-members.html b/3rdparty/quazip-0.7/doc/html/classQuaChecksum32-members.html
new file mode 100644
index 0000000..3668587
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaChecksum32-members.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QuaChecksum32 Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classQuaChecksum32.html">QuaChecksum32</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classQuaChecksum32.html#a14d800fcfd55b2ae11ef07d3924fe0b1">calculate</a>(const QByteArray &data)=0</td><td class="entry"><a class="el" href="classQuaChecksum32.html">QuaChecksum32</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaChecksum32.html#ad3f5db3c76b00069db9bda333cb49d57">reset</a>()=0</td><td class="entry"><a class="el" href="classQuaChecksum32.html">QuaChecksum32</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaChecksum32.html#a63a6ed3171f9243214d307da67557f7e">update</a>(const QByteArray &buf)=0</td><td class="entry"><a class="el" href="classQuaChecksum32.html">QuaChecksum32</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaChecksum32.html#afd836e7534194fce08356be6a8336da7">value</a>()=0</td><td class="entry"><a class="el" href="classQuaChecksum32.html">QuaChecksum32</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaChecksum32.html b/3rdparty/quazip-0.7/doc/html/classQuaChecksum32.html
new file mode 100644
index 0000000..f74c14c
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaChecksum32.html
@@ -0,0 +1,197 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaChecksum32 Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classQuaChecksum32-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">QuaChecksum32 Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Checksum interface.  
+ <a href="classQuaChecksum32.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="quachecksum32_8h_source.html">quazip/quachecksum32.h</a>></code></p>
+<div class="dynheader">
+Inheritance diagram for QuaChecksum32:</div>
+<div class="dyncontent">
+<div class="center"><img src="classQuaChecksum32__inherit__graph.png" border="0" usemap="#QuaChecksum32_inherit__map" alt="Inheritance graph"/></div>
+<map name="QuaChecksum32_inherit__map" id="QuaChecksum32_inherit__map">
+<area shape="rect" id="node2" href="classQuaAdler32.html" title="Adler32 checksum. " alt="" coords="5,80,96,107"/><area shape="rect" id="node3" href="classQuaCrc32.html" title="CRC32 checksum. " alt="" coords="121,80,201,107"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a14d800fcfd55b2ae11ef07d3924fe0b1"><td class="memItemLeft" align="right" valign="top">virtual quint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaChecksum32.html#a14d800fcfd55b2ae11ef07d3924fe0b1">calculate</a> (const QByteArray &data)=0</td></tr>
+<tr class="memdesc:a14d800fcfd55b2ae11ef07d3924fe0b1"><td class="mdescLeft"> </td><td class="mdescRight">Calculates the checksum for data.  <a href="#a14d800fcfd55b2ae11ef07d3924fe0b1">More...</a><br/></td></tr>
+<tr class="separator:a14d800fcfd55b2ae11ef07d3924fe0b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad3f5db3c76b00069db9bda333cb49d57"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3f5db3c76b00069db9bda333cb49d57"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaChecksum32.html#ad3f5db3c76b00069db9bda333cb49d57">reset</a> ()=0</td></tr>
+<tr class="memdesc:ad3f5db3c76b00069db9bda333cb49d57"><td class="mdescLeft"> </td><td class="mdescRight">Resets the calculation on a checksun for a stream. <br/></td></tr>
+<tr class="separator:ad3f5db3c76b00069db9bda333cb49d57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a63a6ed3171f9243214d307da67557f7e"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaChecksum32.html#a63a6ed3171f9243214d307da67557f7e">update</a> (const QByteArray &buf)=0</td></tr>
+<tr class="memdesc:a63a6ed3171f9243214d307da67557f7e"><td class="mdescLeft"> </td><td class="mdescRight">Updates the calculated checksum for the stream.  <a href="#a63a6ed3171f9243214d307da67557f7e">More...</a><br/></td></tr>
+<tr class="separator:a63a6ed3171f9243214d307da67557f7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afd836e7534194fce08356be6a8336da7"><td class="memItemLeft" align="right" valign="top">virtual quint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaChecksum32.html#afd836e7534194fce08356be6a8336da7">value</a> ()=0</td></tr>
+<tr class="memdesc:afd836e7534194fce08356be6a8336da7"><td class="mdescLeft"> </td><td class="mdescRight">Value of the checksum calculated for the stream passed throw <a class="el" href="classQuaChecksum32.html#a63a6ed3171f9243214d307da67557f7e" title="Updates the calculated checksum for the stream. ">update()</a>.  <a href="#afd836e7534194fce08356be6a8336da7">More...</a><br/></td></tr>
+<tr class="separator:afd836e7534194fce08356be6a8336da7"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Checksum interface. </p>
+<p>This is an interface for 32 bit checksums. Classes implementing this interface can calcunate a certin checksum in a single step: </p>
+<div class="fragment"><div class="line">QChecksum32 *crc32 = <span class="keyword">new</span> <a class="code" href="classQuaCrc32.html">QuaCrc32</a>(); </div>
+<div class="line">rasoult = crc32->calculate(data);</div>
+</div><!-- fragment --><p> or by streaming the data: </p>
+<div class="fragment"><div class="line">QChecksum32 *crc32 = <span class="keyword">new</span> <a class="code" href="classQuaCrc32.html">QuaCrc32</a>(); </div>
+<div class="line"><span class="keywordflow">while</span>(!fileA.atEnd())</div>
+<div class="line">    crc32->update(fileA.read(bufSize));</div>
+<div class="line">resoultA = crc32->value();</div>
+<div class="line">crc32->reset();</div>
+<div class="line"><span class="keywordflow">while</span>(!fileB.atEnd())</div>
+<div class="line">    crc32->update(fileB.read(bufSize));</div>
+<div class="line">resoultB = crc32->value();</div>
+</div><!-- fragment --> </div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a14d800fcfd55b2ae11ef07d3924fe0b1"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual quint32 QuaChecksum32::calculate </td>
+          <td>(</td>
+          <td class="paramtype">const QByteArray & </td>
+          <td class="paramname"><em>data</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Calculates the checksum for data. </p>
+<p><em>data</em> source data </p>
+<dl class="section return"><dt>Returns</dt><dd>data checksum</dd></dl>
+<p>This function has no efect on the value returned by <a class="el" href="classQuaChecksum32.html#afd836e7534194fce08356be6a8336da7" title="Value of the checksum calculated for the stream passed throw update(). ">value()</a>. </p>
+
+<p>Implemented in <a class="el" href="classQuaAdler32.html#a350e84fd000ebfa3c33503336a7b21bb">QuaAdler32</a>, and <a class="el" href="classQuaCrc32.html#aaf6fdf6e36e55c97bf9eab6ec65ecb9e">QuaCrc32</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a63a6ed3171f9243214d307da67557f7e"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void QuaChecksum32::update </td>
+          <td>(</td>
+          <td class="paramtype">const QByteArray & </td>
+          <td class="paramname"><em>buf</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Updates the calculated checksum for the stream. </p>
+<p><em>buf</em> next portion of data from the stream </p>
+
+<p>Implemented in <a class="el" href="classQuaAdler32.html#aba24f7b16aa0cdc26f81a9ad687fc653">QuaAdler32</a>, and <a class="el" href="classQuaCrc32.html#a5015d80e04afe6e6d094155b7e99888e">QuaCrc32</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afd836e7534194fce08356be6a8336da7"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual quint32 QuaChecksum32::value </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Value of the checksum calculated for the stream passed throw <a class="el" href="classQuaChecksum32.html#a63a6ed3171f9243214d307da67557f7e" title="Updates the calculated checksum for the stream. ">update()</a>. </p>
+<dl class="section return"><dt>Returns</dt><dd>checksum </dd></dl>
+
+<p>Implemented in <a class="el" href="classQuaAdler32.html#a2022e1db95c23cef220b335e44d74fb1">QuaAdler32</a>, and <a class="el" href="classQuaCrc32.html#a957ce46a53862f75c89d6a3ac4f73389">QuaCrc32</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>quazip/<a class="el" href="quachecksum32_8h_source.html">quachecksum32.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaChecksum32__inherit__graph.map b/3rdparty/quazip-0.7/doc/html/classQuaChecksum32__inherit__graph.map
new file mode 100644
index 0000000..7f30436
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaChecksum32__inherit__graph.map
@@ -0,0 +1,4 @@
+<map id="QuaChecksum32" name="QuaChecksum32">
+<area shape="rect" id="node2" href="$classQuaAdler32.html" title="Adler32 checksum. " alt="" coords="5,80,96,107"/>
+<area shape="rect" id="node3" href="$classQuaCrc32.html" title="CRC32 checksum. " alt="" coords="121,80,201,107"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaChecksum32__inherit__graph.md5 b/3rdparty/quazip-0.7/doc/html/classQuaChecksum32__inherit__graph.md5
new file mode 100644
index 0000000..5a4e2e4
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaChecksum32__inherit__graph.md5
@@ -0,0 +1 @@
+5b48ecc144d4d5efcb34bba2670a3897
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaChecksum32__inherit__graph.png b/3rdparty/quazip-0.7/doc/html/classQuaChecksum32__inherit__graph.png
new file mode 100644
index 0000000..5e90c8e
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/classQuaChecksum32__inherit__graph.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaCrc32-members.html b/3rdparty/quazip-0.7/doc/html/classQuaCrc32-members.html
new file mode 100644
index 0000000..3ab2ec6
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaCrc32-members.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QuaCrc32 Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classQuaCrc32.html">QuaCrc32</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classQuaCrc32.html#aaf6fdf6e36e55c97bf9eab6ec65ecb9e">calculate</a>(const QByteArray &data)</td><td class="entry"><a class="el" href="classQuaCrc32.html">QuaCrc32</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>QuaCrc32</b>() (defined in <a class="el" href="classQuaCrc32.html">QuaCrc32</a>)</td><td class="entry"><a class="el" href="classQuaCrc32.html">QuaCrc32</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaCrc32.html#a3fe7ce6cb73512c963ffaabfbbc66363">reset</a>()</td><td class="entry"><a class="el" href="classQuaCrc32.html">QuaCrc32</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaCrc32.html#a5015d80e04afe6e6d094155b7e99888e">update</a>(const QByteArray &buf)</td><td class="entry"><a class="el" href="classQuaCrc32.html">QuaCrc32</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaCrc32.html#a957ce46a53862f75c89d6a3ac4f73389">value</a>()</td><td class="entry"><a class="el" href="classQuaCrc32.html">QuaCrc32</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaCrc32.html b/3rdparty/quazip-0.7/doc/html/classQuaCrc32.html
new file mode 100644
index 0000000..08829bc
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaCrc32.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaCrc32 Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classQuaCrc32-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">QuaCrc32 Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>CRC32 checksum.  
+ <a href="classQuaCrc32.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="quacrc32_8h_source.html">quazip/quacrc32.h</a>></code></p>
+<div class="dynheader">
+Inheritance diagram for QuaCrc32:</div>
+<div class="dyncontent">
+<div class="center"><img src="classQuaCrc32__inherit__graph.png" border="0" usemap="#QuaCrc32_inherit__map" alt="Inheritance graph"/></div>
+<map name="QuaCrc32_inherit__map" id="QuaCrc32_inherit__map">
+<area shape="rect" id="node2" href="classQuaChecksum32.html" title="Checksum interface. " alt="" coords="5,5,128,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for QuaCrc32:</div>
+<div class="dyncontent">
+<div class="center"><img src="classQuaCrc32__coll__graph.png" border="0" usemap="#QuaCrc32_coll__map" alt="Collaboration graph"/></div>
+<map name="QuaCrc32_coll__map" id="QuaCrc32_coll__map">
+<area shape="rect" id="node2" href="classQuaChecksum32.html" title="Checksum interface. " alt="" coords="5,5,128,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aaf6fdf6e36e55c97bf9eab6ec65ecb9e"><td class="memItemLeft" align="right" valign="top">quint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaCrc32.html#aaf6fdf6e36e55c97bf9eab6ec65ecb9e">calculate</a> (const QByteArray &data)</td></tr>
+<tr class="memdesc:aaf6fdf6e36e55c97bf9eab6ec65ecb9e"><td class="mdescLeft"> </td><td class="mdescRight">Calculates the checksum for data.  <a href="#aaf6fdf6e36e55c97bf9eab6ec65ecb9e">More...</a><br/></td></tr>
+<tr class="separator:aaf6fdf6e36e55c97bf9eab6ec65ecb9e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3fe7ce6cb73512c963ffaabfbbc66363"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3fe7ce6cb73512c963ffaabfbbc66363"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaCrc32.html#a3fe7ce6cb73512c963ffaabfbbc66363">reset</a> ()</td></tr>
+<tr class="memdesc:a3fe7ce6cb73512c963ffaabfbbc66363"><td class="mdescLeft"> </td><td class="mdescRight">Resets the calculation on a checksun for a stream. <br/></td></tr>
+<tr class="separator:a3fe7ce6cb73512c963ffaabfbbc66363"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5015d80e04afe6e6d094155b7e99888e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaCrc32.html#a5015d80e04afe6e6d094155b7e99888e">update</a> (const QByteArray &buf)</td></tr>
+<tr class="memdesc:a5015d80e04afe6e6d094155b7e99888e"><td class="mdescLeft"> </td><td class="mdescRight">Updates the calculated checksum for the stream.  <a href="#a5015d80e04afe6e6d094155b7e99888e">More...</a><br/></td></tr>
+<tr class="separator:a5015d80e04afe6e6d094155b7e99888e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a957ce46a53862f75c89d6a3ac4f73389"><td class="memItemLeft" align="right" valign="top">quint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaCrc32.html#a957ce46a53862f75c89d6a3ac4f73389">value</a> ()</td></tr>
+<tr class="memdesc:a957ce46a53862f75c89d6a3ac4f73389"><td class="mdescLeft"> </td><td class="mdescRight">Value of the checksum calculated for the stream passed throw <a class="el" href="classQuaCrc32.html#a5015d80e04afe6e6d094155b7e99888e" title="Updates the calculated checksum for the stream. ">update()</a>.  <a href="#a957ce46a53862f75c89d6a3ac4f73389">More...</a><br/></td></tr>
+<tr class="separator:a957ce46a53862f75c89d6a3ac4f73389"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>CRC32 checksum. </p>
+<p>This class wrappers the crc32 function with the <a class="el" href="classQuaChecksum32.html" title="Checksum interface. ">QuaChecksum32</a> interface. See <a class="el" href="classQuaChecksum32.html" title="Checksum interface. ">QuaChecksum32</a> for more info. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="aaf6fdf6e36e55c97bf9eab6ec65ecb9e"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">quint32 QuaCrc32::calculate </td>
+          <td>(</td>
+          <td class="paramtype">const QByteArray & </td>
+          <td class="paramname"><em>data</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Calculates the checksum for data. </p>
+<p><em>data</em> source data </p>
+<dl class="section return"><dt>Returns</dt><dd>data checksum</dd></dl>
+<p>This function has no efect on the value returned by <a class="el" href="classQuaCrc32.html#a957ce46a53862f75c89d6a3ac4f73389" title="Value of the checksum calculated for the stream passed throw update(). ">value()</a>. </p>
+
+<p>Implements <a class="el" href="classQuaChecksum32.html#a14d800fcfd55b2ae11ef07d3924fe0b1">QuaChecksum32</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5015d80e04afe6e6d094155b7e99888e"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaCrc32::update </td>
+          <td>(</td>
+          <td class="paramtype">const QByteArray & </td>
+          <td class="paramname"><em>buf</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Updates the calculated checksum for the stream. </p>
+<p><em>buf</em> next portion of data from the stream </p>
+
+<p>Implements <a class="el" href="classQuaChecksum32.html#a63a6ed3171f9243214d307da67557f7e">QuaChecksum32</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a957ce46a53862f75c89d6a3ac4f73389"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">quint32 QuaCrc32::value </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Value of the checksum calculated for the stream passed throw <a class="el" href="classQuaCrc32.html#a5015d80e04afe6e6d094155b7e99888e" title="Updates the calculated checksum for the stream. ">update()</a>. </p>
+<dl class="section return"><dt>Returns</dt><dd>checksum </dd></dl>
+
+<p>Implements <a class="el" href="classQuaChecksum32.html#afd836e7534194fce08356be6a8336da7">QuaChecksum32</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>quazip/<a class="el" href="quacrc32_8h_source.html">quacrc32.h</a></li>
+<li>quazip/quacrc32.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaCrc32__coll__graph.map b/3rdparty/quazip-0.7/doc/html/classQuaCrc32__coll__graph.map
new file mode 100644
index 0000000..09ca7c5
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaCrc32__coll__graph.map
@@ -0,0 +1,3 @@
+<map id="QuaCrc32" name="QuaCrc32">
+<area shape="rect" id="node2" href="$classQuaChecksum32.html" title="Checksum interface. " alt="" coords="5,5,128,32"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaCrc32__coll__graph.md5 b/3rdparty/quazip-0.7/doc/html/classQuaCrc32__coll__graph.md5
new file mode 100644
index 0000000..ae9e4e9
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaCrc32__coll__graph.md5
@@ -0,0 +1 @@
+5b4a33bc446c21199b866ccdd40d2554
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaCrc32__coll__graph.png b/3rdparty/quazip-0.7/doc/html/classQuaCrc32__coll__graph.png
new file mode 100644
index 0000000..78ad7d7
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/classQuaCrc32__coll__graph.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaCrc32__inherit__graph.map b/3rdparty/quazip-0.7/doc/html/classQuaCrc32__inherit__graph.map
new file mode 100644
index 0000000..09ca7c5
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaCrc32__inherit__graph.map
@@ -0,0 +1,3 @@
+<map id="QuaCrc32" name="QuaCrc32">
+<area shape="rect" id="node2" href="$classQuaChecksum32.html" title="Checksum interface. " alt="" coords="5,5,128,32"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaCrc32__inherit__graph.md5 b/3rdparty/quazip-0.7/doc/html/classQuaCrc32__inherit__graph.md5
new file mode 100644
index 0000000..ae9e4e9
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaCrc32__inherit__graph.md5
@@ -0,0 +1 @@
+5b4a33bc446c21199b866ccdd40d2554
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaCrc32__inherit__graph.png b/3rdparty/quazip-0.7/doc/html/classQuaCrc32__inherit__graph.png
new file mode 100644
index 0000000..78ad7d7
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/classQuaCrc32__inherit__graph.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaGzipFile-members.html b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile-members.html
new file mode 100644
index 0000000..fc74b61
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile-members.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QuaGzipFile Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classQuaGzipFile.html">QuaGzipFile</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classQuaGzipFile.html#a273205350b1235a242a1eb5cbf586434">close</a>()</td><td class="entry"><a class="el" href="classQuaGzipFile.html">QuaGzipFile</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaGzipFile.html#ab745f345b727c81abbc3eb5af4dca844">flush</a>()</td><td class="entry"><a class="el" href="classQuaGzipFile.html">QuaGzipFile</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaGzipFile.html#a9a0954a1db1fcf2aeba0530239bce71c">getFileName</a>() const </td><td class="entry"><a class="el" href="classQuaGzipFile.html">QuaGzipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaGzipFile.html#ae97f4e15d86c965c156df33d00318176">isSequential</a>() const </td><td class="entry"><a class="el" href="classQuaGzipFile.html">QuaGzipFile</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaGzipFile.html#a1d560babdfff3a3441d704099a5bc1e4">open</a>(QIODevice::OpenMode mode)</td><td class="entry"><a class="el" href="classQuaGzipFile.html">QuaGzipFile</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaGzipFile.html#adf5a954bb9bfda2d33cd336a213e2549">open</a>(int fd, QIODevice::OpenMode mode)</td><td class="entry"><a class="el" href="classQuaGzipFile.html">QuaGzipFile</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaGzipFile.html#a709608207b41ca81d5beed2b34982809">QuaGzipFile</a>()</td><td class="entry"><a class="el" href="classQuaGzipFile.html">QuaGzipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaGzipFile.html#a13996f5db660c4a29645f8d208b9ca6b">QuaGzipFile</a>(QObject *parent)</td><td class="entry"><a class="el" href="classQuaGzipFile.html">QuaGzipFile</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaGzipFile.html#ac7f7703bda9c6169c001aa15641bb2ea">QuaGzipFile</a>(const QString &fileName, QObject *parent=NULL)</td><td class="entry"><a class="el" href="classQuaGzipFile.html">QuaGzipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaGzipFile.html#a9eab41b46367e63e0c269c42ca883d82">readData</a>(char *data, qint64 maxSize)</td><td class="entry"><a class="el" href="classQuaGzipFile.html">QuaGzipFile</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaGzipFile.html#a253fbaf410a3d4ae0a719505c5525149">setFileName</a>(const QString &fileName)</td><td class="entry"><a class="el" href="classQuaGzipFile.html">QuaGzipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaGzipFile.html#a6dd09d41d8a51c96b0f2134eff37f676">writeData</a>(const char *data, qint64 maxSize)</td><td class="entry"><a class="el" href="classQuaGzipFile.html">QuaGzipFile</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaGzipFile.html#a1200bc76f36bb2e1991e1e0467befbf2">~QuaGzipFile</a>()</td><td class="entry"><a class="el" href="classQuaGzipFile.html">QuaGzipFile</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaGzipFile.html b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile.html
new file mode 100644
index 0000000..73dc96e
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile.html
@@ -0,0 +1,349 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaGzipFile Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="classQuaGzipFile-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">QuaGzipFile Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>GZIP file.  
+ <a href="classQuaGzipFile.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="quagzipfile_8h_source.html">quagzipfile.h</a>></code></p>
+<div class="dynheader">
+Inheritance diagram for QuaGzipFile:</div>
+<div class="dyncontent">
+<div class="center"><img src="classQuaGzipFile__inherit__graph.png" border="0" usemap="#QuaGzipFile_inherit__map" alt="Inheritance graph"/></div>
+<map name="QuaGzipFile_inherit__map" id="QuaGzipFile_inherit__map">
+</map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for QuaGzipFile:</div>
+<div class="dyncontent">
+<div class="center"><img src="classQuaGzipFile__coll__graph.png" border="0" usemap="#QuaGzipFile_coll__map" alt="Collaboration graph"/></div>
+<map name="QuaGzipFile_coll__map" id="QuaGzipFile_coll__map">
+</map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a709608207b41ca81d5beed2b34982809"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaGzipFile.html#a709608207b41ca81d5beed2b34982809">QuaGzipFile</a> ()</td></tr>
+<tr class="memdesc:a709608207b41ca81d5beed2b34982809"><td class="mdescLeft"> </td><td class="mdescRight">Empty constructor.  <a href="#a709608207b41ca81d5beed2b34982809">More...</a><br/></td></tr>
+<tr class="separator:a709608207b41ca81d5beed2b34982809"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a13996f5db660c4a29645f8d208b9ca6b"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaGzipFile.html#a13996f5db660c4a29645f8d208b9ca6b">QuaGzipFile</a> (QObject *parent)</td></tr>
+<tr class="memdesc:a13996f5db660c4a29645f8d208b9ca6b"><td class="mdescLeft"> </td><td class="mdescRight">Empty constructor with a parent.  <a href="#a13996f5db660c4a29645f8d208b9ca6b">More...</a><br/></td></tr>
+<tr class="separator:a13996f5db660c4a29645f8d208b9ca6b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac7f7703bda9c6169c001aa15641bb2ea"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaGzipFile.html#ac7f7703bda9c6169c001aa15641bb2ea">QuaGzipFile</a> (const QString &fileName, QObject *parent=NULL)</td></tr>
+<tr class="memdesc:ac7f7703bda9c6169c001aa15641bb2ea"><td class="mdescLeft"> </td><td class="mdescRight">Constructor.  <a href="#ac7f7703bda9c6169c001aa15641bb2ea">More...</a><br/></td></tr>
+<tr class="separator:ac7f7703bda9c6169c001aa15641bb2ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1200bc76f36bb2e1991e1e0467befbf2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1200bc76f36bb2e1991e1e0467befbf2"></a>
+virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaGzipFile.html#a1200bc76f36bb2e1991e1e0467befbf2">~QuaGzipFile</a> ()</td></tr>
+<tr class="memdesc:a1200bc76f36bb2e1991e1e0467befbf2"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
+<tr class="separator:a1200bc76f36bb2e1991e1e0467befbf2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a253fbaf410a3d4ae0a719505c5525149"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a253fbaf410a3d4ae0a719505c5525149"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaGzipFile.html#a253fbaf410a3d4ae0a719505c5525149">setFileName</a> (const QString &fileName)</td></tr>
+<tr class="memdesc:a253fbaf410a3d4ae0a719505c5525149"><td class="mdescLeft"> </td><td class="mdescRight">Sets the name of the GZIP file to be opened. <br/></td></tr>
+<tr class="separator:a253fbaf410a3d4ae0a719505c5525149"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a0954a1db1fcf2aeba0530239bce71c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a0954a1db1fcf2aeba0530239bce71c"></a>
+QString </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaGzipFile.html#a9a0954a1db1fcf2aeba0530239bce71c">getFileName</a> () const </td></tr>
+<tr class="memdesc:a9a0954a1db1fcf2aeba0530239bce71c"><td class="mdescLeft"> </td><td class="mdescRight">Returns the name of the GZIP file. <br/></td></tr>
+<tr class="separator:a9a0954a1db1fcf2aeba0530239bce71c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae97f4e15d86c965c156df33d00318176"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaGzipFile.html#ae97f4e15d86c965c156df33d00318176">isSequential</a> () const </td></tr>
+<tr class="memdesc:ae97f4e15d86c965c156df33d00318176"><td class="mdescLeft"> </td><td class="mdescRight">Returns true.  <a href="#ae97f4e15d86c965c156df33d00318176">More...</a><br/></td></tr>
+<tr class="separator:ae97f4e15d86c965c156df33d00318176"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1d560babdfff3a3441d704099a5bc1e4"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaGzipFile.html#a1d560babdfff3a3441d704099a5bc1e4">open</a> (QIODevice::OpenMode mode)</td></tr>
+<tr class="memdesc:a1d560babdfff3a3441d704099a5bc1e4"><td class="mdescLeft"> </td><td class="mdescRight">Opens the file.  <a href="#a1d560babdfff3a3441d704099a5bc1e4">More...</a><br/></td></tr>
+<tr class="separator:a1d560babdfff3a3441d704099a5bc1e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adf5a954bb9bfda2d33cd336a213e2549"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaGzipFile.html#adf5a954bb9bfda2d33cd336a213e2549">open</a> (int fd, QIODevice::OpenMode mode)</td></tr>
+<tr class="memdesc:adf5a954bb9bfda2d33cd336a213e2549"><td class="mdescLeft"> </td><td class="mdescRight">Opens the file.  <a href="#adf5a954bb9bfda2d33cd336a213e2549">More...</a><br/></td></tr>
+<tr class="separator:adf5a954bb9bfda2d33cd336a213e2549"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab745f345b727c81abbc3eb5af4dca844"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaGzipFile.html#ab745f345b727c81abbc3eb5af4dca844">flush</a> ()</td></tr>
+<tr class="memdesc:ab745f345b727c81abbc3eb5af4dca844"><td class="mdescLeft"> </td><td class="mdescRight">Flushes data to file.  <a href="#ab745f345b727c81abbc3eb5af4dca844">More...</a><br/></td></tr>
+<tr class="separator:ab745f345b727c81abbc3eb5af4dca844"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a273205350b1235a242a1eb5cbf586434"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a273205350b1235a242a1eb5cbf586434"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaGzipFile.html#a273205350b1235a242a1eb5cbf586434">close</a> ()</td></tr>
+<tr class="memdesc:a273205350b1235a242a1eb5cbf586434"><td class="mdescLeft"> </td><td class="mdescRight">Closes the file. <br/></td></tr>
+<tr class="separator:a273205350b1235a242a1eb5cbf586434"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a9eab41b46367e63e0c269c42ca883d82"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9eab41b46367e63e0c269c42ca883d82"></a>
+virtual qint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaGzipFile.html#a9eab41b46367e63e0c269c42ca883d82">readData</a> (char *data, qint64 maxSize)</td></tr>
+<tr class="memdesc:a9eab41b46367e63e0c269c42ca883d82"><td class="mdescLeft"> </td><td class="mdescRight">Implementation of QIODevice::readData(). <br/></td></tr>
+<tr class="separator:a9eab41b46367e63e0c269c42ca883d82"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6dd09d41d8a51c96b0f2134eff37f676"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6dd09d41d8a51c96b0f2134eff37f676"></a>
+virtual qint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaGzipFile.html#a6dd09d41d8a51c96b0f2134eff37f676">writeData</a> (const char *data, qint64 maxSize)</td></tr>
+<tr class="memdesc:a6dd09d41d8a51c96b0f2134eff37f676"><td class="mdescLeft"> </td><td class="mdescRight">Implementation of QIODevice::writeData(). <br/></td></tr>
+<tr class="separator:a6dd09d41d8a51c96b0f2134eff37f676"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>GZIP file. </p>
+<p>This class is a wrapper around GZIP file access functions in zlib. Unlike <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> classes, it doesn't allow reading from a GZIP file opened as QIODevice, for example, if your GZIP file is in QBuffer. It only provides QIODevice access to a GZIP file contents, but the GZIP file itself must be identified by its name on disk or by descriptor id. </p>
+</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="a709608207b41ca81d5beed2b34982809"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaGzipFile::QuaGzipFile </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Empty constructor. </p>
+<p>Must call <a class="el" href="classQuaGzipFile.html#a253fbaf410a3d4ae0a719505c5525149" title="Sets the name of the GZIP file to be opened. ">setFileName()</a> before trying to open. </p>
+
+</div>
+</div>
+<a class="anchor" id="a13996f5db660c4a29645f8d208b9ca6b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaGzipFile::QuaGzipFile </td>
+          <td>(</td>
+          <td class="paramtype">QObject * </td>
+          <td class="paramname"><em>parent</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Empty constructor with a parent. </p>
+<p>Must call <a class="el" href="classQuaGzipFile.html#a253fbaf410a3d4ae0a719505c5525149" title="Sets the name of the GZIP file to be opened. ">setFileName()</a> before trying to open. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">parent</td><td>The parent object, as per QObject logic. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ac7f7703bda9c6169c001aa15641bb2ea"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaGzipFile::QuaGzipFile </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>fileName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QObject * </td>
+          <td class="paramname"><em>parent</em> = <code>NULL</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fileName</td><td>The name of the GZIP file. </td></tr>
+    <tr><td class="paramname">parent</td><td>The parent object, as per QObject logic. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="ae97f4e15d86c965c156df33d00318176"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaGzipFile::isSequential </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns true. </p>
+<p>Strictly speaking, zlib supports seeking for GZIP files, but it is poorly implemented, because there is no way to implement it properly. For reading, seeking backwards is very slow, and for writing, it is downright impossible. Therefore, <a class="el" href="classQuaGzipFile.html" title="GZIP file. ">QuaGzipFile</a> does not support seeking at all. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1d560babdfff3a3441d704099a5bc1e4"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaGzipFile::open </td>
+          <td>(</td>
+          <td class="paramtype">QIODevice::OpenMode </td>
+          <td class="paramname"><em>mode</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Opens the file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">mode</td><td>Can be either QIODevice::Write or QIODevice::Read. ReadWrite and Append aren't supported. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="adf5a954bb9bfda2d33cd336a213e2549"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaGzipFile::open </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QIODevice::OpenMode </td>
+          <td class="paramname"><em>mode</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Opens the file. </p>
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fd</td><td>The file descriptor to read/write the GZIP file from/to. </td></tr>
+    <tr><td class="paramname">mode</td><td>Can be either QIODevice::Write or QIODevice::Read. ReadWrite and Append aren't supported. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab745f345b727c81abbc3eb5af4dca844"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaGzipFile::flush </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Flushes data to file. </p>
+<p>The data is written using Z_SYNC_FLUSH mode. Doesn't make any sense when reading. </p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>quazip/<a class="el" href="quagzipfile_8h_source.html">quagzipfile.h</a></li>
+<li>quazip/quagzipfile.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__coll__graph.map b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__coll__graph.map
new file mode 100644
index 0000000..fbb01df
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="QuaGzipFile" name="QuaGzipFile">
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__coll__graph.md5 b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__coll__graph.md5
new file mode 100644
index 0000000..9f5fd2a
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__coll__graph.md5
@@ -0,0 +1 @@
+e0277ee552f5a008221020ca6b772194
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__coll__graph.png b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__coll__graph.png
new file mode 100644
index 0000000..b76676d
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__coll__graph.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__inherit__graph.map b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__inherit__graph.map
new file mode 100644
index 0000000..fbb01df
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="QuaGzipFile" name="QuaGzipFile">
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__inherit__graph.md5 b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__inherit__graph.md5
new file mode 100644
index 0000000..9f5fd2a
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__inherit__graph.md5
@@ -0,0 +1 @@
+e0277ee552f5a008221020ca6b772194
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__inherit__graph.png b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__inherit__graph.png
new file mode 100644
index 0000000..b76676d
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/classQuaGzipFile__inherit__graph.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZIODevice-members.html b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice-members.html
new file mode 100644
index 0000000..07204d9
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice-members.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QuaZIODevice Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classQuaZIODevice.html">QuaZIODevice</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZIODevice.html#ad27e447544d57f897316ee6f44535895">close</a>()</td><td class="entry"><a class="el" href="classQuaZIODevice.html">QuaZIODevice</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZIODevice.html#a25f586eb564841b51c395fd17f1cc080">flush</a>()</td><td class="entry"><a class="el" href="classQuaZIODevice.html">QuaZIODevice</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZIODevice.html#ad63e7f1717c7d91b3c2c5ace908c98b7">getIoDevice</a>() const </td><td class="entry"><a class="el" href="classQuaZIODevice.html">QuaZIODevice</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZIODevice.html#af2697f58c228741d3715801bf48a9a8b">isSequential</a>() const </td><td class="entry"><a class="el" href="classQuaZIODevice.html">QuaZIODevice</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZIODevice.html#a175446c18eb20c9aff6faf23f09cc67a">open</a>(QIODevice::OpenMode mode)</td><td class="entry"><a class="el" href="classQuaZIODevice.html">QuaZIODevice</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZIODevice.html#a8321ed35ee9b57cf9b1104912e236361">QuaZIODevice</a>(QIODevice *io, QObject *parent=NULL)</td><td class="entry"><a class="el" href="classQuaZIODevice.html">QuaZIODevice</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZIODevice.html#aa12b8bc9c923e543eda9ae22dbd1ecbb">readData</a>(char *data, qint64 maxSize)</td><td class="entry"><a class="el" href="classQuaZIODevice.html">QuaZIODevice</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZIODevice.html#aab23b6badbc3548eb71ca86bf6211902">writeData</a>(const char *data, qint64 maxSize)</td><td class="entry"><a class="el" href="classQuaZIODevice.html">QuaZIODevice</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZIODevice.html#ab3524cef44c240c21e6b7680ee5f42de">~QuaZIODevice</a>()</td><td class="entry"><a class="el" href="classQuaZIODevice.html">QuaZIODevice</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZIODevice.html b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice.html
new file mode 100644
index 0000000..9af3cef
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice.html
@@ -0,0 +1,261 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaZIODevice Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="classQuaZIODevice-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">QuaZIODevice Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>A class to compress/decompress QIODevice.  
+ <a href="classQuaZIODevice.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="quaziodevice_8h_source.html">quaziodevice.h</a>></code></p>
+<div class="dynheader">
+Inheritance diagram for QuaZIODevice:</div>
+<div class="dyncontent">
+<div class="center"><img src="classQuaZIODevice__inherit__graph.png" border="0" usemap="#QuaZIODevice_inherit__map" alt="Inheritance graph"/></div>
+<map name="QuaZIODevice_inherit__map" id="QuaZIODevice_inherit__map">
+</map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for QuaZIODevice:</div>
+<div class="dyncontent">
+<div class="center"><img src="classQuaZIODevice__coll__graph.png" border="0" usemap="#QuaZIODevice_coll__map" alt="Collaboration graph"/></div>
+<map name="QuaZIODevice_coll__map" id="QuaZIODevice_coll__map">
+</map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a8321ed35ee9b57cf9b1104912e236361"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZIODevice.html#a8321ed35ee9b57cf9b1104912e236361">QuaZIODevice</a> (QIODevice *io, QObject *parent=NULL)</td></tr>
+<tr class="memdesc:a8321ed35ee9b57cf9b1104912e236361"><td class="mdescLeft"> </td><td class="mdescRight">Constructor.  <a href="#a8321ed35ee9b57cf9b1104912e236361">More...</a><br/></td></tr>
+<tr class="separator:a8321ed35ee9b57cf9b1104912e236361"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab3524cef44c240c21e6b7680ee5f42de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3524cef44c240c21e6b7680ee5f42de"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZIODevice.html#ab3524cef44c240c21e6b7680ee5f42de">~QuaZIODevice</a> ()</td></tr>
+<tr class="memdesc:ab3524cef44c240c21e6b7680ee5f42de"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
+<tr class="separator:ab3524cef44c240c21e6b7680ee5f42de"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a25f586eb564841b51c395fd17f1cc080"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZIODevice.html#a25f586eb564841b51c395fd17f1cc080">flush</a> ()</td></tr>
+<tr class="memdesc:a25f586eb564841b51c395fd17f1cc080"><td class="mdescLeft"> </td><td class="mdescRight">Flushes data waiting to be written.  <a href="#a25f586eb564841b51c395fd17f1cc080">More...</a><br/></td></tr>
+<tr class="separator:a25f586eb564841b51c395fd17f1cc080"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a175446c18eb20c9aff6faf23f09cc67a"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZIODevice.html#a175446c18eb20c9aff6faf23f09cc67a">open</a> (QIODevice::OpenMode mode)</td></tr>
+<tr class="memdesc:a175446c18eb20c9aff6faf23f09cc67a"><td class="mdescLeft"> </td><td class="mdescRight">Opens the device.  <a href="#a175446c18eb20c9aff6faf23f09cc67a">More...</a><br/></td></tr>
+<tr class="separator:a175446c18eb20c9aff6faf23f09cc67a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad27e447544d57f897316ee6f44535895"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZIODevice.html#ad27e447544d57f897316ee6f44535895">close</a> ()</td></tr>
+<tr class="memdesc:ad27e447544d57f897316ee6f44535895"><td class="mdescLeft"> </td><td class="mdescRight">Closes this device, but not the underlying one.  <a href="#ad27e447544d57f897316ee6f44535895">More...</a><br/></td></tr>
+<tr class="separator:ad27e447544d57f897316ee6f44535895"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad63e7f1717c7d91b3c2c5ace908c98b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad63e7f1717c7d91b3c2c5ace908c98b7"></a>
+QIODevice * </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZIODevice.html#ad63e7f1717c7d91b3c2c5ace908c98b7">getIoDevice</a> () const </td></tr>
+<tr class="memdesc:ad63e7f1717c7d91b3c2c5ace908c98b7"><td class="mdescLeft"> </td><td class="mdescRight">Returns the underlying device. <br/></td></tr>
+<tr class="separator:ad63e7f1717c7d91b3c2c5ace908c98b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af2697f58c228741d3715801bf48a9a8b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2697f58c228741d3715801bf48a9a8b"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZIODevice.html#af2697f58c228741d3715801bf48a9a8b">isSequential</a> () const </td></tr>
+<tr class="memdesc:af2697f58c228741d3715801bf48a9a8b"><td class="mdescLeft"> </td><td class="mdescRight">Returns true. <br/></td></tr>
+<tr class="separator:af2697f58c228741d3715801bf48a9a8b"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:aa12b8bc9c923e543eda9ae22dbd1ecbb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa12b8bc9c923e543eda9ae22dbd1ecbb"></a>
+virtual qint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZIODevice.html#aa12b8bc9c923e543eda9ae22dbd1ecbb">readData</a> (char *data, qint64 maxSize)</td></tr>
+<tr class="memdesc:aa12b8bc9c923e543eda9ae22dbd1ecbb"><td class="mdescLeft"> </td><td class="mdescRight">Implementation of QIODevice::readData(). <br/></td></tr>
+<tr class="separator:aa12b8bc9c923e543eda9ae22dbd1ecbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aab23b6badbc3548eb71ca86bf6211902"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aab23b6badbc3548eb71ca86bf6211902"></a>
+virtual qint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZIODevice.html#aab23b6badbc3548eb71ca86bf6211902">writeData</a> (const char *data, qint64 maxSize)</td></tr>
+<tr class="memdesc:aab23b6badbc3548eb71ca86bf6211902"><td class="mdescLeft"> </td><td class="mdescRight">Implementation of QIODevice::writeData(). <br/></td></tr>
+<tr class="separator:aab23b6badbc3548eb71ca86bf6211902"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>A class to compress/decompress QIODevice. </p>
+<p>This class can be used to compress any data written to QIODevice or decompress it back. Compressing data sent over a QTcpSocket is a good example. </p>
+</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="a8321ed35ee9b57cf9b1104912e236361"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZIODevice::QuaZIODevice </td>
+          <td>(</td>
+          <td class="paramtype">QIODevice * </td>
+          <td class="paramname"><em>io</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QObject * </td>
+          <td class="paramname"><em>parent</em> = <code>NULL</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">io</td><td>The QIODevice to read/write. </td></tr>
+    <tr><td class="paramname">parent</td><td>The parent object, as per QObject logic. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a25f586eb564841b51c395fd17f1cc080"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZIODevice::flush </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Flushes data waiting to be written. </p>
+<p>Unfortunately, as QIODevice doesn't support <a class="el" href="classQuaZIODevice.html#a25f586eb564841b51c395fd17f1cc080" title="Flushes data waiting to be written. ">flush()</a> by itself, the only thing this method does is write the compressed data into the device using Z_SYNC_FLUSH mode. If you need the compressed data to actually be flushed from the buffer of the underlying QIODevice, you need to call its <a class="el" href="classQuaZIODevice.html#a25f586eb564841b51c395fd17f1cc080 [...]
+<div class="fragment"><div class="line"><a class="code" href="classQuaZIODevice.html">QuaZIODevice</a> dev(&sock);</div>
+<div class="line">dev.open(QIODevice::Write);</div>
+<div class="line">dev.write(yourDataGoesHere);</div>
+<div class="line">dev.flush();</div>
+<div class="line">sock->flush(); <span class="comment">// this actually sends data to network</span></div>
+</div><!-- fragment --><p>This may change in the future versions of QuaZIP by implementing an ugly hack: trying to cast the QIODevice using qobject_cast to known <a class="el" href="classQuaZIODevice.html#a25f586eb564841b51c395fd17f1cc080" title="Flushes data waiting to be written. ">flush()</a>-supporting subclasses, and calling flush if the resulting pointer is not zero. </p>
+
+<p>Referenced by <a class="el" href="classQuaZIODevice.html#ad27e447544d57f897316ee6f44535895">close()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a175446c18eb20c9aff6faf23f09cc67a"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZIODevice::open </td>
+          <td>(</td>
+          <td class="paramtype">QIODevice::OpenMode </td>
+          <td class="paramname"><em>mode</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Opens the device. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">mode</td><td>Neither QIODevice::ReadWrite nor QIODevice::Append are not supported. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ad27e447544d57f897316ee6f44535895"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZIODevice::close </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Closes this device, but not the underlying one. </p>
+<p>The underlying QIODevice is not closed in case you want to write something else to it. </p>
+
+<p>References <a class="el" href="classQuaZIODevice.html#a25f586eb564841b51c395fd17f1cc080">flush()</a>.</p>
+
+<p>Referenced by <a class="el" href="classQuaZIODevice.html#ab3524cef44c240c21e6b7680ee5f42de">~QuaZIODevice()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>quazip/<a class="el" href="quaziodevice_8h_source.html">quaziodevice.h</a></li>
+<li>quazip/quaziodevice.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__coll__graph.map b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__coll__graph.map
new file mode 100644
index 0000000..0ebbaa6
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="QuaZIODevice" name="QuaZIODevice">
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__coll__graph.md5 b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__coll__graph.md5
new file mode 100644
index 0000000..5181ada
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__coll__graph.md5
@@ -0,0 +1 @@
+bee37f07c3561c0975a5aed194b73e95
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__coll__graph.png b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__coll__graph.png
new file mode 100644
index 0000000..7f73175
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__coll__graph.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__inherit__graph.map b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__inherit__graph.map
new file mode 100644
index 0000000..0ebbaa6
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="QuaZIODevice" name="QuaZIODevice">
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__inherit__graph.md5 b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__inherit__graph.md5
new file mode 100644
index 0000000..5181ada
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__inherit__graph.md5
@@ -0,0 +1 @@
+bee37f07c3561c0975a5aed194b73e95
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__inherit__graph.png b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__inherit__graph.png
new file mode 100644
index 0000000..7f73175
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/classQuaZIODevice__inherit__graph.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZip-members.html b/3rdparty/quazip-0.7/doc/html/classQuaZip-members.html
new file mode 100644
index 0000000..01eee9e
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZip-members.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QuaZip Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classQuaZip.html">QuaZip</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">CaseSensitivity</a> enum name</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f">close</a>()</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#adce46b942c341dbb5c851eadead65459">Constants</a> enum name</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a1d3fbd445a8e9d3449ded7371931c6b3">convertCaseSensitivity</a>(CaseSensitivity cs)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253">csDefault</a> enum value</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbea3e492bcc3f64f41a74906cecc45fb366">csInsensitive</a> enum value</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbead8d86b0c34203336cad09348cfa5356e">csSensitive</a> enum value</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#ae55cfbf2296132df808c557b62433051">getComment</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a008260161781d8b5d2a0a28493fddaf4">getCommentCodec</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a9c91a53ed4c2038e153c64bdc097ebe8">getCurrentFileInfo</a>(QuaZipFileInfo *info) const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a7ba6daf39263c308c683e7f72f74e0ae">getCurrentFileInfo</a>(QuaZipFileInfo64 *info) const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a9783f8b4f39cd55e71e975aea78fd54a">getCurrentFileName</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a2ea4bd1fca948637c35c2d2752bb5a80">getEntriesCount</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a7486af66bede8e131db0cd2e81881387">getFileInfoList</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a474e66b1b696a9e00edcc067484c36ad">getFileInfoList64</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a27b866aa2c75ea6f9c438cbb6e32b43c">getFileNameCodec</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#abb38d8b4c9c4ae0728b48caae9dd82de">getFileNameList</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#afd3ba12fe68748acbf8b7cc14a5a1c29">getIoDevice</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a129ceff04d28fb00531f7bf7f9329664">getMode</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a3b78a652f296ff4a678a791e8294e642">getUnzFile</a>()</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">getZipError</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a425043a4d7cc31e2fe2bba73d954f15c">getZipFile</a>()</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a4f7deef08ff40aeb1a7a04bcd7f228c2">getZipName</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a745488f9177bcec3cdb858587584e033">goToFirstFile</a>()</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#aee6779b6cd338420c2e8c5655fa8ba97">goToNextFile</a>()</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a00b237d926648f45da86db25e7cfb697">hasCurrentFile</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#adc2cc762ab5744720ae4d33290b5f5bf">isAutoClose</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#ae5c665a59447c2d30e63e9c6df48ebb7">isDataDescriptorWritingEnabled</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a5b869a9c0d4f49955b759592fec08888">isOpen</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a1b638566390d7599ba5982e844b151f4">isZip64Enabled</a>() const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#adce46b942c341dbb5c851eadead65459ab26ce1a9c9e94f901dc2cf90fa5baa4b">MAX_FILE_NAME_LENGTH</a> enum value</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a22c745f349f06add449af523254fdaec">mdAdd</a> enum value</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ab807f0c65653a16d77b365801fd25582">mdAppend</a> enum value</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e">mdCreate</a> enum value</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ac87ddb1e901e1ec700c16ee0d4d398ce">mdNotOpen</a> enum value</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">mdUnzip</a> enum value</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4">Mode</a> enum name</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962">open</a>(Mode mode, zlib_filefunc_def *ioApi=NULL)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a970e0f401c7cfd7a78e78572f758eec4">QuaZip</a>()</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#aaea7294b02abd22379cc3a9fccb754b7">QuaZip</a>(const QString &zipName)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#ae52ebadd5ce64cdb49d7e198904b0b8c">QuaZip</a>(QIODevice *ioDevice)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>QuaZipPrivate</b> (defined in <a class="el" href="classQuaZip.html">QuaZip</a>)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a54bfc924762774ccf9f99be075ba7b0e">setAutoClose</a>(bool autoClose) const </td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a1b5d936a203859340574d5908ffa2222">setComment</a>(const QString &comment)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a1c81fca7215a4374f6f03872ade4885b">setCommentCodec</a>(QTextCodec *commentCodec)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a413f3c56b54a9a47258d53802cb606e7">setCommentCodec</a>(const char *commentCodecName)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a6c657bfcfccb59d728e0da24c677d899">setCurrentFile</a>(const QString &fileName, CaseSensitivity cs=csDefault)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a6c23a12af88f7ea5edd4f9c0a24b9453">setDataDescriptorWritingEnabled</a>(bool enabled)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a317f5db89d84a80417338a3ab89770da">setDefaultFileNameCodec</a>(QTextCodec *codec)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a694af3c0ab076fab7bf619952f6fbfea">setDefaultFileNameCodec</a>(const char *codecName)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a339010b5566704ba3c9cafbfe848d8fb">setFileNameCodec</a>(QTextCodec *fileNameCodec)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#a8f283519a195aa1d9076bbbb01ea0497">setFileNameCodec</a>(const char *fileNameCodecName)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#a64642948b6531ee54f5522f29e388cc6">setIoDevice</a>(QIODevice *ioDevice)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#ab99a22efae02ebb4b5c9cd8eedc1c0b0">setZip64Enabled</a>(bool zip64)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZip.html#aa80b661de1262af905d1677dbcb008cc">setZipName</a>(const QString &zipName)</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZip.html#af60a2d3930b90f3b25a3148baecad81e">~QuaZip</a>()</td><td class="entry"><a class="el" href="classQuaZip.html">QuaZip</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZip.html b/3rdparty/quazip-0.7/doc/html/classQuaZip.html
new file mode 100644
index 0000000..ff96640
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZip.html
@@ -0,0 +1,1203 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaZip Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-types">Public Types</a> |
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="#friends">Friends</a> |
+<a href="classQuaZip-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">QuaZip Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>ZIP archive.  
+ <a href="classQuaZip.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="quazip_8h_source.html">quazip/quazip.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:adce46b942c341dbb5c851eadead65459"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#adce46b942c341dbb5c851eadead65459">Constants</a> { <a class="el" href="classQuaZip.html#adce46b942c341dbb5c851eadead65459ab26ce1a9c9e94f901dc2cf90fa5baa4b">MAX_FILE_NAME_LENGTH</a> =256
+ }</td></tr>
+<tr class="memdesc:adce46b942c341dbb5c851eadead65459"><td class="mdescLeft"> </td><td class="mdescRight">Useful constants.  <a href="classQuaZip.html#adce46b942c341dbb5c851eadead65459">More...</a><br/></td></tr>
+<tr class="separator:adce46b942c341dbb5c851eadead65459"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a47e28d4116ee716fdd6b431b821d0be4"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4">Mode</a> { <br/>
+  <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ac87ddb1e901e1ec700c16ee0d4d398ce">mdNotOpen</a>, 
+<a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">mdUnzip</a>, 
+<a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e">mdCreate</a>, 
+<a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ab807f0c65653a16d77b365801fd25582">mdAppend</a>, 
+<br/>
+  <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a22c745f349f06add449af523254fdaec">mdAdd</a>
+<br/>
+ }</td></tr>
+<tr class="memdesc:a47e28d4116ee716fdd6b431b821d0be4"><td class="mdescLeft"> </td><td class="mdescRight">Open mode of the ZIP file.  <a href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4">More...</a><br/></td></tr>
+<tr class="separator:a47e28d4116ee716fdd6b431b821d0be4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6053a1d249ed210a85c9d5eb7cf9cdbe"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">CaseSensitivity</a> { <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253">csDefault</a> =0, 
+<a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbead8d86b0c34203336cad09348cfa5356e">csSensitive</a> =1, 
+<a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbea3e492bcc3f64f41a74906cecc45fb366">csInsensitive</a> =2
+ }</td></tr>
+<tr class="memdesc:a6053a1d249ed210a85c9d5eb7cf9cdbe"><td class="mdescLeft"> </td><td class="mdescRight">Case sensitivity for the file names.  <a href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">More...</a><br/></td></tr>
+<tr class="separator:a6053a1d249ed210a85c9d5eb7cf9cdbe"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a970e0f401c7cfd7a78e78572f758eec4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a970e0f401c7cfd7a78e78572f758eec4">QuaZip</a> ()</td></tr>
+<tr class="memdesc:a970e0f401c7cfd7a78e78572f758eec4"><td class="mdescLeft"> </td><td class="mdescRight">Constructs <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object.  <a href="#a970e0f401c7cfd7a78e78572f758eec4">More...</a><br/></td></tr>
+<tr class="separator:a970e0f401c7cfd7a78e78572f758eec4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaea7294b02abd22379cc3a9fccb754b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaea7294b02abd22379cc3a9fccb754b7"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#aaea7294b02abd22379cc3a9fccb754b7">QuaZip</a> (const QString &zipName)</td></tr>
+<tr class="memdesc:aaea7294b02abd22379cc3a9fccb754b7"><td class="mdescLeft"> </td><td class="mdescRight">Constructs <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object associated with ZIP file <em>zipName</em>. <br/></td></tr>
+<tr class="separator:aaea7294b02abd22379cc3a9fccb754b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae52ebadd5ce64cdb49d7e198904b0b8c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#ae52ebadd5ce64cdb49d7e198904b0b8c">QuaZip</a> (QIODevice *ioDevice)</td></tr>
+<tr class="memdesc:ae52ebadd5ce64cdb49d7e198904b0b8c"><td class="mdescLeft"> </td><td class="mdescRight">Constructs <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object associated with ZIP file represented by <em>ioDevice</em>.  <a href="#ae52ebadd5ce64cdb49d7e198904b0b8c">More...</a><br/></td></tr>
+<tr class="separator:ae52ebadd5ce64cdb49d7e198904b0b8c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af60a2d3930b90f3b25a3148baecad81e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#af60a2d3930b90f3b25a3148baecad81e">~QuaZip</a> ()</td></tr>
+<tr class="memdesc:af60a2d3930b90f3b25a3148baecad81e"><td class="mdescLeft"> </td><td class="mdescRight">Destroys <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object.  <a href="#af60a2d3930b90f3b25a3148baecad81e">More...</a><br/></td></tr>
+<tr class="separator:af60a2d3930b90f3b25a3148baecad81e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abfa4e6018b2964a3d10a4c54e5ab3962"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962">open</a> (<a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4">Mode</a> mode, zlib_filefunc_def *ioApi=NULL)</td></tr>
+<tr class="memdesc:abfa4e6018b2964a3d10a4c54e5ab3962"><td class="mdescLeft"> </td><td class="mdescRight">Opens ZIP file.  <a href="#abfa4e6018b2964a3d10a4c54e5ab3962">More...</a><br/></td></tr>
+<tr class="separator:abfa4e6018b2964a3d10a4c54e5ab3962"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7a4323b73e12f3b4470109f200728f9f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f">close</a> ()</td></tr>
+<tr class="memdesc:a7a4323b73e12f3b4470109f200728f9f"><td class="mdescLeft"> </td><td class="mdescRight">Closes ZIP file.  <a href="#a7a4323b73e12f3b4470109f200728f9f">More...</a><br/></td></tr>
+<tr class="separator:a7a4323b73e12f3b4470109f200728f9f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a339010b5566704ba3c9cafbfe848d8fb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a339010b5566704ba3c9cafbfe848d8fb">setFileNameCodec</a> (QTextCodec *fileNameCodec)</td></tr>
+<tr class="memdesc:a339010b5566704ba3c9cafbfe848d8fb"><td class="mdescLeft"> </td><td class="mdescRight">Sets the codec used to encode/decode file names inside archive.  <a href="#a339010b5566704ba3c9cafbfe848d8fb">More...</a><br/></td></tr>
+<tr class="separator:a339010b5566704ba3c9cafbfe848d8fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8f283519a195aa1d9076bbbb01ea0497"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a8f283519a195aa1d9076bbbb01ea0497">setFileNameCodec</a> (const char *fileNameCodecName)</td></tr>
+<tr class="memdesc:a8f283519a195aa1d9076bbbb01ea0497"><td class="mdescLeft"> </td><td class="mdescRight">Sets the codec used to encode/decode file names inside archive.  <a href="#a8f283519a195aa1d9076bbbb01ea0497">More...</a><br/></td></tr>
+<tr class="separator:a8f283519a195aa1d9076bbbb01ea0497"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a27b866aa2c75ea6f9c438cbb6e32b43c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a27b866aa2c75ea6f9c438cbb6e32b43c"></a>
+QTextCodec * </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a27b866aa2c75ea6f9c438cbb6e32b43c">getFileNameCodec</a> () const </td></tr>
+<tr class="memdesc:a27b866aa2c75ea6f9c438cbb6e32b43c"><td class="mdescLeft"> </td><td class="mdescRight">Returns the codec used to encode/decode comments inside archive. <br/></td></tr>
+<tr class="separator:a27b866aa2c75ea6f9c438cbb6e32b43c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1c81fca7215a4374f6f03872ade4885b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a1c81fca7215a4374f6f03872ade4885b">setCommentCodec</a> (QTextCodec *commentCodec)</td></tr>
+<tr class="memdesc:a1c81fca7215a4374f6f03872ade4885b"><td class="mdescLeft"> </td><td class="mdescRight">Sets the codec used to encode/decode comments inside archive.  <a href="#a1c81fca7215a4374f6f03872ade4885b">More...</a><br/></td></tr>
+<tr class="separator:a1c81fca7215a4374f6f03872ade4885b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a413f3c56b54a9a47258d53802cb606e7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a413f3c56b54a9a47258d53802cb606e7">setCommentCodec</a> (const char *commentCodecName)</td></tr>
+<tr class="memdesc:a413f3c56b54a9a47258d53802cb606e7"><td class="mdescLeft"> </td><td class="mdescRight">Sets the codec used to encode/decode comments inside archive.  <a href="#a413f3c56b54a9a47258d53802cb606e7">More...</a><br/></td></tr>
+<tr class="separator:a413f3c56b54a9a47258d53802cb606e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a008260161781d8b5d2a0a28493fddaf4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a008260161781d8b5d2a0a28493fddaf4"></a>
+QTextCodec * </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a008260161781d8b5d2a0a28493fddaf4">getCommentCodec</a> () const </td></tr>
+<tr class="memdesc:a008260161781d8b5d2a0a28493fddaf4"><td class="mdescLeft"> </td><td class="mdescRight">Returns the codec used to encode/decode comments inside archive. <br/></td></tr>
+<tr class="separator:a008260161781d8b5d2a0a28493fddaf4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4f7deef08ff40aeb1a7a04bcd7f228c2"><td class="memItemLeft" align="right" valign="top">QString </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a4f7deef08ff40aeb1a7a04bcd7f228c2">getZipName</a> () const </td></tr>
+<tr class="memdesc:a4f7deef08ff40aeb1a7a04bcd7f228c2"><td class="mdescLeft"> </td><td class="mdescRight">Returns the name of the ZIP file.  <a href="#a4f7deef08ff40aeb1a7a04bcd7f228c2">More...</a><br/></td></tr>
+<tr class="separator:a4f7deef08ff40aeb1a7a04bcd7f228c2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa80b661de1262af905d1677dbcb008cc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#aa80b661de1262af905d1677dbcb008cc">setZipName</a> (const QString &zipName)</td></tr>
+<tr class="memdesc:aa80b661de1262af905d1677dbcb008cc"><td class="mdescLeft"> </td><td class="mdescRight">Sets the name of the ZIP file.  <a href="#aa80b661de1262af905d1677dbcb008cc">More...</a><br/></td></tr>
+<tr class="separator:aa80b661de1262af905d1677dbcb008cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afd3ba12fe68748acbf8b7cc14a5a1c29"><td class="memItemLeft" align="right" valign="top">QIODevice * </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#afd3ba12fe68748acbf8b7cc14a5a1c29">getIoDevice</a> () const </td></tr>
+<tr class="memdesc:afd3ba12fe68748acbf8b7cc14a5a1c29"><td class="mdescLeft"> </td><td class="mdescRight">Returns the device representing this ZIP file.  <a href="#afd3ba12fe68748acbf8b7cc14a5a1c29">More...</a><br/></td></tr>
+<tr class="separator:afd3ba12fe68748acbf8b7cc14a5a1c29"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a64642948b6531ee54f5522f29e388cc6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a64642948b6531ee54f5522f29e388cc6">setIoDevice</a> (QIODevice *ioDevice)</td></tr>
+<tr class="memdesc:a64642948b6531ee54f5522f29e388cc6"><td class="mdescLeft"> </td><td class="mdescRight">Sets the device representing the ZIP file.  <a href="#a64642948b6531ee54f5522f29e388cc6">More...</a><br/></td></tr>
+<tr class="separator:a64642948b6531ee54f5522f29e388cc6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a129ceff04d28fb00531f7bf7f9329664"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a129ceff04d28fb00531f7bf7f9329664"></a>
+<a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4">Mode</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a129ceff04d28fb00531f7bf7f9329664">getMode</a> () const </td></tr>
+<tr class="memdesc:a129ceff04d28fb00531f7bf7f9329664"><td class="mdescLeft"> </td><td class="mdescRight">Returns the mode in which ZIP file was opened. <br/></td></tr>
+<tr class="separator:a129ceff04d28fb00531f7bf7f9329664"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b869a9c0d4f49955b759592fec08888"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b869a9c0d4f49955b759592fec08888"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a5b869a9c0d4f49955b759592fec08888">isOpen</a> () const </td></tr>
+<tr class="memdesc:a5b869a9c0d4f49955b759592fec08888"><td class="mdescLeft"> </td><td class="mdescRight">Returns <code>true</code> if ZIP file is open, <code>false</code> otherwise. <br/></td></tr>
+<tr class="separator:a5b869a9c0d4f49955b759592fec08888"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a28b91a6282ddd9382c96a069572c6fb4"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">getZipError</a> () const </td></tr>
+<tr class="memdesc:a28b91a6282ddd9382c96a069572c6fb4"><td class="mdescLeft"> </td><td class="mdescRight">Returns the error code of the last operation.  <a href="#a28b91a6282ddd9382c96a069572c6fb4">More...</a><br/></td></tr>
+<tr class="separator:a28b91a6282ddd9382c96a069572c6fb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2ea4bd1fca948637c35c2d2752bb5a80"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a2ea4bd1fca948637c35c2d2752bb5a80">getEntriesCount</a> () const </td></tr>
+<tr class="memdesc:a2ea4bd1fca948637c35c2d2752bb5a80"><td class="mdescLeft"> </td><td class="mdescRight">Returns number of the entries in the ZIP central directory.  <a href="#a2ea4bd1fca948637c35c2d2752bb5a80">More...</a><br/></td></tr>
+<tr class="separator:a2ea4bd1fca948637c35c2d2752bb5a80"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae55cfbf2296132df808c557b62433051"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae55cfbf2296132df808c557b62433051"></a>
+QString </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#ae55cfbf2296132df808c557b62433051">getComment</a> () const </td></tr>
+<tr class="memdesc:ae55cfbf2296132df808c557b62433051"><td class="mdescLeft"> </td><td class="mdescRight">Returns global comment in the ZIP file. <br/></td></tr>
+<tr class="separator:ae55cfbf2296132df808c557b62433051"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1b5d936a203859340574d5908ffa2222"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a1b5d936a203859340574d5908ffa2222">setComment</a> (const QString &comment)</td></tr>
+<tr class="memdesc:a1b5d936a203859340574d5908ffa2222"><td class="mdescLeft"> </td><td class="mdescRight">Sets the global comment in the ZIP file.  <a href="#a1b5d936a203859340574d5908ffa2222">More...</a><br/></td></tr>
+<tr class="separator:a1b5d936a203859340574d5908ffa2222"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a745488f9177bcec3cdb858587584e033"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a745488f9177bcec3cdb858587584e033">goToFirstFile</a> ()</td></tr>
+<tr class="memdesc:a745488f9177bcec3cdb858587584e033"><td class="mdescLeft"> </td><td class="mdescRight">Sets the current file to the first file in the archive.  <a href="#a745488f9177bcec3cdb858587584e033">More...</a><br/></td></tr>
+<tr class="separator:a745488f9177bcec3cdb858587584e033"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aee6779b6cd338420c2e8c5655fa8ba97"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#aee6779b6cd338420c2e8c5655fa8ba97">goToNextFile</a> ()</td></tr>
+<tr class="memdesc:aee6779b6cd338420c2e8c5655fa8ba97"><td class="mdescLeft"> </td><td class="mdescRight">Sets the current file to the next file in the archive.  <a href="#aee6779b6cd338420c2e8c5655fa8ba97">More...</a><br/></td></tr>
+<tr class="separator:aee6779b6cd338420c2e8c5655fa8ba97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6c657bfcfccb59d728e0da24c677d899"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a6c657bfcfccb59d728e0da24c677d899">setCurrentFile</a> (const QString &fileName, <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">CaseSensitivity</a> cs=<a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253">csDefault< [...]
+<tr class="memdesc:a6c657bfcfccb59d728e0da24c677d899"><td class="mdescLeft"> </td><td class="mdescRight">Sets current file by its name.  <a href="#a6c657bfcfccb59d728e0da24c677d899">More...</a><br/></td></tr>
+<tr class="separator:a6c657bfcfccb59d728e0da24c677d899"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00b237d926648f45da86db25e7cfb697"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00b237d926648f45da86db25e7cfb697"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a00b237d926648f45da86db25e7cfb697">hasCurrentFile</a> () const </td></tr>
+<tr class="memdesc:a00b237d926648f45da86db25e7cfb697"><td class="mdescLeft"> </td><td class="mdescRight">Returns <code>true</code> if the current file has been set. <br/></td></tr>
+<tr class="separator:a00b237d926648f45da86db25e7cfb697"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9c91a53ed4c2038e153c64bdc097ebe8"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a9c91a53ed4c2038e153c64bdc097ebe8">getCurrentFileInfo</a> (<a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> *info) const </td></tr>
+<tr class="memdesc:a9c91a53ed4c2038e153c64bdc097ebe8"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves information about the current file.  <a href="#a9c91a53ed4c2038e153c64bdc097ebe8">More...</a><br/></td></tr>
+<tr class="separator:a9c91a53ed4c2038e153c64bdc097ebe8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7ba6daf39263c308c683e7f72f74e0ae"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a7ba6daf39263c308c683e7f72f74e0ae">getCurrentFileInfo</a> (<a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> *info) const </td></tr>
+<tr class="memdesc:a7ba6daf39263c308c683e7f72f74e0ae"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves information about the current file.  <a href="#a7ba6daf39263c308c683e7f72f74e0ae">More...</a><br/></td></tr>
+<tr class="separator:a7ba6daf39263c308c683e7f72f74e0ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9783f8b4f39cd55e71e975aea78fd54a"><td class="memItemLeft" align="right" valign="top">QString </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a9783f8b4f39cd55e71e975aea78fd54a">getCurrentFileName</a> () const </td></tr>
+<tr class="memdesc:a9783f8b4f39cd55e71e975aea78fd54a"><td class="mdescLeft"> </td><td class="mdescRight">Returns the current file name.  <a href="#a9783f8b4f39cd55e71e975aea78fd54a">More...</a><br/></td></tr>
+<tr class="separator:a9783f8b4f39cd55e71e975aea78fd54a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b78a652f296ff4a678a791e8294e642"><td class="memItemLeft" align="right" valign="top">unzFile </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a3b78a652f296ff4a678a791e8294e642">getUnzFile</a> ()</td></tr>
+<tr class="memdesc:a3b78a652f296ff4a678a791e8294e642"><td class="mdescLeft"> </td><td class="mdescRight">Returns <code>unzFile</code> handle.  <a href="#a3b78a652f296ff4a678a791e8294e642">More...</a><br/></td></tr>
+<tr class="separator:a3b78a652f296ff4a678a791e8294e642"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a425043a4d7cc31e2fe2bba73d954f15c"><td class="memItemLeft" align="right" valign="top">zipFile </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a425043a4d7cc31e2fe2bba73d954f15c">getZipFile</a> ()</td></tr>
+<tr class="memdesc:a425043a4d7cc31e2fe2bba73d954f15c"><td class="mdescLeft"> </td><td class="mdescRight">Returns <code>zipFile</code> handle.  <a href="#a425043a4d7cc31e2fe2bba73d954f15c">More...</a><br/></td></tr>
+<tr class="separator:a425043a4d7cc31e2fe2bba73d954f15c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6c23a12af88f7ea5edd4f9c0a24b9453"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a6c23a12af88f7ea5edd4f9c0a24b9453">setDataDescriptorWritingEnabled</a> (bool enabled)</td></tr>
+<tr class="memdesc:a6c23a12af88f7ea5edd4f9c0a24b9453"><td class="mdescLeft"> </td><td class="mdescRight">Changes the data descriptor writing mode.  <a href="#a6c23a12af88f7ea5edd4f9c0a24b9453">More...</a><br/></td></tr>
+<tr class="separator:a6c23a12af88f7ea5edd4f9c0a24b9453"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae5c665a59447c2d30e63e9c6df48ebb7"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#ae5c665a59447c2d30e63e9c6df48ebb7">isDataDescriptorWritingEnabled</a> () const </td></tr>
+<tr class="memdesc:ae5c665a59447c2d30e63e9c6df48ebb7"><td class="mdescLeft"> </td><td class="mdescRight">Returns the data descriptor default writing mode.  <a href="#ae5c665a59447c2d30e63e9c6df48ebb7">More...</a><br/></td></tr>
+<tr class="separator:ae5c665a59447c2d30e63e9c6df48ebb7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abb38d8b4c9c4ae0728b48caae9dd82de"><td class="memItemLeft" align="right" valign="top">QStringList </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#abb38d8b4c9c4ae0728b48caae9dd82de">getFileNameList</a> () const </td></tr>
+<tr class="memdesc:abb38d8b4c9c4ae0728b48caae9dd82de"><td class="mdescLeft"> </td><td class="mdescRight">Returns a list of files inside the archive.  <a href="#abb38d8b4c9c4ae0728b48caae9dd82de">More...</a><br/></td></tr>
+<tr class="separator:abb38d8b4c9c4ae0728b48caae9dd82de"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7486af66bede8e131db0cd2e81881387"><td class="memItemLeft" align="right" valign="top">QList< <a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a7486af66bede8e131db0cd2e81881387">getFileInfoList</a> () const </td></tr>
+<tr class="memdesc:a7486af66bede8e131db0cd2e81881387"><td class="mdescLeft"> </td><td class="mdescRight">Returns information list about all files inside the archive.  <a href="#a7486af66bede8e131db0cd2e81881387">More...</a><br/></td></tr>
+<tr class="separator:a7486af66bede8e131db0cd2e81881387"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a474e66b1b696a9e00edcc067484c36ad"><td class="memItemLeft" align="right" valign="top">QList< <a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a474e66b1b696a9e00edcc067484c36ad">getFileInfoList64</a> () const </td></tr>
+<tr class="memdesc:a474e66b1b696a9e00edcc067484c36ad"><td class="mdescLeft"> </td><td class="mdescRight">Returns information list about all files inside the archive.  <a href="#a474e66b1b696a9e00edcc067484c36ad">More...</a><br/></td></tr>
+<tr class="separator:a474e66b1b696a9e00edcc067484c36ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab99a22efae02ebb4b5c9cd8eedc1c0b0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#ab99a22efae02ebb4b5c9cd8eedc1c0b0">setZip64Enabled</a> (bool zip64)</td></tr>
+<tr class="memdesc:ab99a22efae02ebb4b5c9cd8eedc1c0b0"><td class="mdescLeft"> </td><td class="mdescRight">Enables the zip64 mode.  <a href="#ab99a22efae02ebb4b5c9cd8eedc1c0b0">More...</a><br/></td></tr>
+<tr class="separator:ab99a22efae02ebb4b5c9cd8eedc1c0b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1b638566390d7599ba5982e844b151f4"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a1b638566390d7599ba5982e844b151f4">isZip64Enabled</a> () const </td></tr>
+<tr class="memdesc:a1b638566390d7599ba5982e844b151f4"><td class="mdescLeft"> </td><td class="mdescRight">Returns whether the zip64 mode is enabled.  <a href="#a1b638566390d7599ba5982e844b151f4">More...</a><br/></td></tr>
+<tr class="separator:a1b638566390d7599ba5982e844b151f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adc2cc762ab5744720ae4d33290b5f5bf"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#adc2cc762ab5744720ae4d33290b5f5bf">isAutoClose</a> () const </td></tr>
+<tr class="memdesc:adc2cc762ab5744720ae4d33290b5f5bf"><td class="mdescLeft"> </td><td class="mdescRight">Returns the auto-close flag.  <a href="#adc2cc762ab5744720ae4d33290b5f5bf">More...</a><br/></td></tr>
+<tr class="separator:adc2cc762ab5744720ae4d33290b5f5bf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a54bfc924762774ccf9f99be075ba7b0e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a54bfc924762774ccf9f99be075ba7b0e">setAutoClose</a> (bool autoClose) const </td></tr>
+<tr class="memdesc:a54bfc924762774ccf9f99be075ba7b0e"><td class="mdescLeft"> </td><td class="mdescRight">Sets or unsets the auto-close flag.  <a href="#a54bfc924762774ccf9f99be075ba7b0e">More...</a><br/></td></tr>
+<tr class="separator:a54bfc924762774ccf9f99be075ba7b0e"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a1d3fbd445a8e9d3449ded7371931c6b3"><td class="memItemLeft" align="right" valign="top">static Qt::CaseSensitivity </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a1d3fbd445a8e9d3449ded7371931c6b3">convertCaseSensitivity</a> (<a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">CaseSensitivity</a> cs)</td></tr>
+<tr class="memdesc:a1d3fbd445a8e9d3449ded7371931c6b3"><td class="mdescLeft"> </td><td class="mdescRight">Returns the actual case sensitivity for the specified QuaZIP one.  <a href="#a1d3fbd445a8e9d3449ded7371931c6b3">More...</a><br/></td></tr>
+<tr class="separator:a1d3fbd445a8e9d3449ded7371931c6b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a317f5db89d84a80417338a3ab89770da"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a317f5db89d84a80417338a3ab89770da">setDefaultFileNameCodec</a> (QTextCodec *codec)</td></tr>
+<tr class="memdesc:a317f5db89d84a80417338a3ab89770da"><td class="mdescLeft"> </td><td class="mdescRight">Sets the default file name codec to use.  <a href="#a317f5db89d84a80417338a3ab89770da">More...</a><br/></td></tr>
+<tr class="separator:a317f5db89d84a80417338a3ab89770da"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a694af3c0ab076fab7bf619952f6fbfea"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZip.html#a694af3c0ab076fab7bf619952f6fbfea">setDefaultFileNameCodec</a> (const char *codecName)</td></tr>
+<tr class="separator:a694af3c0ab076fab7bf619952f6fbfea"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a5d400b33a69412e9d419a484aaf476cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d400b33a69412e9d419a484aaf476cd"></a>
+class </td><td class="memItemRight" valign="bottom"><b>QuaZipPrivate</b></td></tr>
+<tr class="separator:a5d400b33a69412e9d419a484aaf476cd"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>ZIP archive. </p>
+<p>This class implements basic interface to the ZIP archive. It can be used to read table contents of the ZIP archive and retreiving information about the files inside it.</p>
+<p>You can also use this class to open files inside archive by passing pointer to the instance of this class to the constructor of the <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> class. But see <a class="el" href="classQuaZipFile.html#a54e944a6b3d27030f64c8f30d2cc33bb" title="Constructs a QuaZipFile instance. ">QuaZipFile::QuaZipFile(QuaZip*, QObject*)</a> for the possible pitfalls.</p>
+<p>This class is indended to provide interface to the ZIP subpackage of the ZIP/UNZIP package as well as to the UNZIP subpackage. But currently it supports only UNZIP.</p>
+<p>The use of this class is simple - just create instance using constructor, then set ZIP archive file name using setFile() function (if you did not passed the name to the constructor), then <a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962" title="Opens ZIP file. ">open()</a> and then use different functions to work with it! Well, if you are paranoid, you may also wish to call close before destructing the instance, to check for errors on close.</p>
+<p>You may also use <a class="el" href="classQuaZip.html#a3b78a652f296ff4a678a791e8294e642" title="Returns unzFile handle. ">getUnzFile()</a> and <a class="el" href="classQuaZip.html#a425043a4d7cc31e2fe2bba73d954f15c" title="Returns zipFile handle. ">getZipFile()</a> functions to get the ZIP archive handle and use it with ZIP/UNZIP package API directly.</p>
+<p>This class supports localized file names inside ZIP archive, but you have to set up proper codec with setCodec() function. By default, locale codec will be used, which is probably ok for UNIX systems, but will almost certainly fail with ZIP archives created in Windows. This is because Windows ZIP programs have strange habit of using DOS encoding for file names in ZIP archives. For example, ZIP archive with cyrillic names created in Windows will have file names in <code>IBM866</code> e [...]
+</div><h2 class="groupheader">Member Enumeration Documentation</h2>
+<a class="anchor" id="adce46b942c341dbb5c851eadead65459"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classQuaZip.html#adce46b942c341dbb5c851eadead65459">QuaZip::Constants</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Useful constants. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="adce46b942c341dbb5c851eadead65459ab26ce1a9c9e94f901dc2cf90fa5baa4b"></a>MAX_FILE_NAME_LENGTH</em> </td><td class="fielddoc">
+<p>Maximum file name length. Taken from <code>UNZ_MAXFILENAMEINZIP</code> constant in unzip.c. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a47e28d4116ee716fdd6b431b821d0be4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4">QuaZip::Mode</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Open mode of the ZIP file. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a47e28d4116ee716fdd6b431b821d0be4ac87ddb1e901e1ec700c16ee0d4d398ce"></a>mdNotOpen</em> </td><td class="fielddoc">
+<p>ZIP file is not open. This is the initial mode. </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897"></a>mdUnzip</em> </td><td class="fielddoc">
+<p>ZIP file is open for reading files inside it. </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e"></a>mdCreate</em> </td><td class="fielddoc">
+<p>ZIP file was created with <a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962" title="Opens ZIP file. ">open()</a> call. </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a47e28d4116ee716fdd6b431b821d0be4ab807f0c65653a16d77b365801fd25582"></a>mdAppend</em> </td><td class="fielddoc">
+<p>ZIP file was opened in append mode. This refers to <code>APPEND_STATUS_CREATEAFTER</code> mode in ZIP/UNZIP package and means that zip is appended to some existing file what is useful when that file contains self-extractor code. This is obviously <em>not</em> what you whant to use to add files to the existing ZIP archive. </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a47e28d4116ee716fdd6b431b821d0be4a22c745f349f06add449af523254fdaec"></a>mdAdd</em> </td><td class="fielddoc">
+<p>ZIP file was opened for adding files in the archive. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a6053a1d249ed210a85c9d5eb7cf9cdbe"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Case sensitivity for the file names. </p>
+<p>This is what you specify when accessing files in the archive. Works perfectly fine with any characters thanks to Qt's great unicode support. This is different from ZIP/UNZIP API, where only US-ASCII characters was supported. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253"></a>csDefault</em> </td><td class="fielddoc">
+<p>Default for platform. Case sensitive for UNIX, not for Windows. </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a6053a1d249ed210a85c9d5eb7cf9cdbead8d86b0c34203336cad09348cfa5356e"></a>csSensitive</em> </td><td class="fielddoc">
+<p>Case sensitive. </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a6053a1d249ed210a85c9d5eb7cf9cdbea3e492bcc3f64f41a74906cecc45fb366"></a>csInsensitive</em> </td><td class="fielddoc">
+<p>Case insensitive. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="a970e0f401c7cfd7a78e78572f758eec4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZip::QuaZip </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Constructs <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object. </p>
+<p>Call setName() before opening constructed object. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae52ebadd5ce64cdb49d7e198904b0b8c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZip::QuaZip </td>
+          <td>(</td>
+          <td class="paramtype">QIODevice * </td>
+          <td class="paramname"><em>ioDevice</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Constructs <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object associated with ZIP file represented by <em>ioDevice</em>. </p>
+<p>The IO device must be seekable, otherwise an error will occur when opening. </p>
+
+</div>
+</div>
+<a class="anchor" id="af60a2d3930b90f3b25a3148baecad81e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZip::~QuaZip </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Destroys <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object. </p>
+<p>Calls <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f" title="Closes ZIP file. ">close()</a> if necessary. </p>
+
+<p>References <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f">close()</a>, and <a class="el" href="classQuaZip.html#a5b869a9c0d4f49955b759592fec08888">isOpen()</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a1d3fbd445a8e9d3449ded7371931c6b3"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">Qt::CaseSensitivity QuaZip::convertCaseSensitivity </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a> </td>
+          <td class="paramname"><em>cs</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the actual case sensitivity for the specified QuaZIP one. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cs</td><td>The value to convert. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>If CaseSensitivity::csDefault, then returns the default file name case sensitivity for the platform. Otherwise, just returns the appropriate value from the Qt::CaseSensitivity enum. </dd></dl>
+
+<p>References <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253">csDefault</a>, and <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbead8d86b0c34203336cad09348cfa5356e">csSensitive</a>.</p>
+
+<p>Referenced by <a class="el" href="classQuaZipDir.html#aacb488fec6e951ac80e5d473534fee97">QuaZipDir::exists()</a>, and <a class="el" href="classQuaZip.html#a6c657bfcfccb59d728e0da24c677d899">setCurrentFile()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abfa4e6018b2964a3d10a4c54e5ab3962"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZip::open </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4">Mode</a> </td>
+          <td class="paramname"><em>mode</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">zlib_filefunc_def * </td>
+          <td class="paramname"><em>ioApi</em> = <code>NULL</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Opens ZIP file. </p>
+<p>Argument <em>mode</em> specifies open mode of the ZIP archive. See Mode for details. Note that there is zipOpen2() function in the ZIP/UNZIP API which accepts <em>globalcomment</em> argument, but it does not use it anywhere, so this <a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962" title="Opens ZIP file. ">open()</a> function does not have this argument. See <a class="el" href="classQuaZip.html#a1b5d936a203859340574d5908ffa2222" title="Sets the global comment in  [...]
+<p>If the ZIP file is accessed via explicitly set QIODevice, then this device is opened in the necessary mode. If the device was already opened by some other means, then QuaZIP checks if the open mode is compatible to the mode needed for the requested operation. If necessary, seeking is performed to position the device properly.</p>
+<dl class="section return"><dt>Returns</dt><dd><code>true</code> if successful, <code>false</code> otherwise.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>ZIP/UNZIP API open calls do not return error code - they just return <code>NULL</code> indicating an error. But to make things easier, <a class="el" href="quazip_8h_source.html">quazip.h</a> header defines additional error code <code>UNZ_ERROROPEN</code> and <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4" title="Returns the error code of the last operation. ">getZipError()</a> will return it if the open call of the ZIP/UNZ [...]
+<p>Argument <em>ioApi</em> specifies IO function set for ZIP/UNZIP package to use. See unzip.h, zip.h and ioapi.h for details. Note that IO API for <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> is different from the original package. The file path argument was changed to be of type <code>voidpf</code>, and <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> passes a QIODevice pointer there. This QIODevice is either set explicitly via <a class=" [...]
+<dl class="section note"><dt>Note</dt><dd>If the zip64 support is needed, the ioApi argument <em>must</em> be NULL because due to the backwards compatibility issues it can be used to provide a 32-bit API only.</dd>
+<dd>
+If the <a class="el" href="classQuaZip.html#a54bfc924762774ccf9f99be075ba7b0e">no-auto-close</a> feature is used, then the <em>ioApi</em> argument <em>should</em> be NULL because the old API doesn't support the 'fake close' operation, causing slight memory leaks and other possible troubles (like closing the output device in case when an error occurs during opening).</dd></dl>
+<p>In short: just forget about the <em>ioApi</em> argument and you'll be fine. </p>
+
+<p>References <a class="el" href="classQuaZip.html#a5b869a9c0d4f49955b759592fec08888">isOpen()</a>, <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a22c745f349f06add449af523254fdaec">mdAdd</a>, <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ab807f0c65653a16d77b365801fd25582">mdAppend</a>, <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e">mdCreate</a>, <a class="el" href="classQuaZip.html#a [...]
+
+<p>Referenced by <a class="el" href="classJlCompress.html#a8708eafcadc5c192a1d492e784cfc98f">JlCompress::compressDir()</a>, <a class="el" href="classJlCompress.html#a4a4de9c62ecf161bb658d4d80495ea97">JlCompress::compressFile()</a>, <a class="el" href="classJlCompress.html#a9cdb92d29a94c6b13a718a3249685846">JlCompress::compressFiles()</a>, <a class="el" href="classJlCompress.html#a365a153baa4c11812d93cbca60b6a293">JlCompress::extractDir()</a>, <a class="el" href="classJlCompress.html#a38c [...]
+
+</div>
+</div>
+<a class="anchor" id="a7a4323b73e12f3b4470109f200728f9f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZip::close </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Closes ZIP file. </p>
+<p>Call <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4" title="Returns the error code of the last operation. ">getZipError()</a> to determine if the close was successful.</p>
+<p>If the file was opened by name, then the underlying QIODevice is closed and deleted.</p>
+<p>If the underlying QIODevice was set explicitly using <a class="el" href="classQuaZip.html#a64642948b6531ee54f5522f29e388cc6" title="Sets the device representing the ZIP file. ">setIoDevice()</a> or the appropriate constructor, then it is closed if the auto-close flag is set (which it is by default). Call <a class="el" href="classQuaZip.html#a54bfc924762774ccf9f99be075ba7b0e" title="Sets or unsets the auto-close flag. ">setAutoClose()</a> to clear the auto-close flag if this behavior i [...]
+<p>Since Qt 5.1, the QSaveFile was introduced. It breaks the QIODevice API by making <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f" title="Closes ZIP file. ">close()</a> private and crashing the application if it is called from the base class where it is public. It is an excellent example of poor design that illustrates why you should never ever break an is-a relationship between the base class and a subclass. QuaZIP works around this bug by checking if the QIODe [...]
+
+<p>References <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a22c745f349f06add449af523254fdaec">mdAdd</a>, <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ab807f0c65653a16d77b365801fd25582">mdAppend</a>, <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e">mdCreate</a>, <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ac87ddb1e901e1ec700c16ee0d4d398ce">mdNotOpen</a>, <a c [...]
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a42a39b12619bccd3d419ee60bbb3fcf6">QuaZipFile::close()</a>, <a class="el" href="classJlCompress.html#a8708eafcadc5c192a1d492e784cfc98f">JlCompress::compressDir()</a>, <a class="el" href="classJlCompress.html#a4a4de9c62ecf161bb658d4d80495ea97">JlCompress::compressFile()</a>, <a class="el" href="classJlCompress.html#a9cdb92d29a94c6b13a718a3249685846">JlCompress::compressFiles()</a>, <a class="el" href="classJlCompress.html#a365a153b [...]
+
+</div>
+</div>
+<a class="anchor" id="a339010b5566704ba3c9cafbfe848d8fb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZip::setFileNameCodec </td>
+          <td>(</td>
+          <td class="paramtype">QTextCodec * </td>
+          <td class="paramname"><em>fileNameCodec</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the codec used to encode/decode file names inside archive. </p>
+<p>This is necessary to access files in the ZIP archive created under Windows with non-latin characters in file names. For example, file names with cyrillic letters will be in <code>IBM866</code> encoding. </p>
+
+</div>
+</div>
+<a class="anchor" id="a8f283519a195aa1d9076bbbb01ea0497"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZip::setFileNameCodec </td>
+          <td>(</td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>fileNameCodecName</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the codec used to encode/decode file names inside archive. </p>
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Equivalent to calling setFileNameCodec(QTextCodec::codecForName(codecName)); </p>
+
+</div>
+</div>
+<a class="anchor" id="a1c81fca7215a4374f6f03872ade4885b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZip::setCommentCodec </td>
+          <td>(</td>
+          <td class="paramtype">QTextCodec * </td>
+          <td class="paramname"><em>commentCodec</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the codec used to encode/decode comments inside archive. </p>
+<p>This codec defaults to locale codec, which is probably ok. </p>
+
+</div>
+</div>
+<a class="anchor" id="a413f3c56b54a9a47258d53802cb606e7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZip::setCommentCodec </td>
+          <td>(</td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>commentCodecName</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the codec used to encode/decode comments inside archive. </p>
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Equivalent to calling setCommentCodec(QTextCodec::codecForName(codecName)); </p>
+
+</div>
+</div>
+<a class="anchor" id="a4f7deef08ff40aeb1a7a04bcd7f228c2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QString QuaZip::getZipName </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the name of the ZIP file. </p>
+<p>Returns null string if no ZIP file name has been set, for example when the <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> instance is set up to use a QIODevice instead. </p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#aa80b661de1262af905d1677dbcb008cc" title="Sets the name of the ZIP file. ">setZipName()</a>, <a class="el" href="classQuaZip.html#a64642948b6531ee54f5522f29e388cc6" title="Sets the device representing the ZIP file. ">setIoDevice()</a>, <a class="el" href="classQuaZip.html#afd3ba12fe68748acbf8b7cc14a5a1c29" title="Returns the device representing this ZIP file. ">getIoDevice()</a> </dd></dl>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a6f034a714aa94631367590de3f8f4e22">QuaZipFile::getZipName()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa80b661de1262af905d1677dbcb008cc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZip::setZipName </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>zipName</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the name of the ZIP file. </p>
+<p>Does nothing if the ZIP file is open.</p>
+<p>Does not reset error code returned by <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4" title="Returns the error code of the last operation. ">getZipError()</a>. </p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#a64642948b6531ee54f5522f29e388cc6" title="Sets the device representing the ZIP file. ">setIoDevice()</a>, <a class="el" href="classQuaZip.html#afd3ba12fe68748acbf8b7cc14a5a1c29" title="Returns the device representing this ZIP file. ">getIoDevice()</a>, <a class="el" href="classQuaZip.html#a4f7deef08ff40aeb1a7a04bcd7f228c2" title="Returns the name of the ZIP file. ">getZipName()</a> </dd></dl>
+
+<p>References <a class="el" href="classQuaZip.html#a5b869a9c0d4f49955b759592fec08888">isOpen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afd3ba12fe68748acbf8b7cc14a5a1c29"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QIODevice * QuaZip::getIoDevice </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the device representing this ZIP file. </p>
+<p>Returns null string if no device has been set explicitly, for example when opening a ZIP file by name. </p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#a64642948b6531ee54f5522f29e388cc6" title="Sets the device representing the ZIP file. ">setIoDevice()</a>, <a class="el" href="classQuaZip.html#a4f7deef08ff40aeb1a7a04bcd7f228c2" title="Returns the name of the ZIP file. ">getZipName()</a>, <a class="el" href="classQuaZip.html#aa80b661de1262af905d1677dbcb008cc" title="Sets the name of the ZIP file. ">setZipName()</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a64642948b6531ee54f5522f29e388cc6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZip::setIoDevice </td>
+          <td>(</td>
+          <td class="paramtype">QIODevice * </td>
+          <td class="paramname"><em>ioDevice</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the device representing the ZIP file. </p>
+<p>Does nothing if the ZIP file is open.</p>
+<p>Does not reset error code returned by <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4" title="Returns the error code of the last operation. ">getZipError()</a>. </p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#afd3ba12fe68748acbf8b7cc14a5a1c29" title="Returns the device representing this ZIP file. ">getIoDevice()</a>, <a class="el" href="classQuaZip.html#a4f7deef08ff40aeb1a7a04bcd7f228c2" title="Returns the name of the ZIP file. ">getZipName()</a>, <a class="el" href="classQuaZip.html#aa80b661de1262af905d1677dbcb008cc" title="Sets the name of the ZIP file. ">setZipName()</a> </dd></dl>
+
+<p>References <a class="el" href="classQuaZip.html#a5b869a9c0d4f49955b759592fec08888">isOpen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a28b91a6282ddd9382c96a069572c6fb4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int QuaZip::getZipError </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the error code of the last operation. </p>
+<p>Returns <code>UNZ_OK</code> if the last operation was successful.</p>
+<p>Error code resets to <code>UNZ_OK</code> every time you call any function that accesses something inside ZIP archive, even if it is <code>const</code> (like <a class="el" href="classQuaZip.html#a2ea4bd1fca948637c35c2d2752bb5a80" title="Returns number of the entries in the ZIP central directory. ">getEntriesCount()</a>). <a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962" title="Opens ZIP file. ">open()</a> and <a class="el" href="classQuaZip.html#a7a4323b73e12f3b44 [...]
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a42a39b12619bccd3d419ee60bbb3fcf6">QuaZipFile::close()</a>, <a class="el" href="classJlCompress.html#a8708eafcadc5c192a1d492e784cfc98f">JlCompress::compressDir()</a>, <a class="el" href="classJlCompress.html#a4a4de9c62ecf161bb658d4d80495ea97">JlCompress::compressFile()</a>, <a class="el" href="classJlCompress.html#a9cdb92d29a94c6b13a718a3249685846">JlCompress::compressFiles()</a>, <a class="el" href="classJlCompress.html#a365a153b [...]
+
+</div>
+</div>
+<a class="anchor" id="a2ea4bd1fca948637c35c2d2752bb5a80"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int QuaZip::getEntriesCount </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns number of the entries in the ZIP central directory. </p>
+<p>Returns negative error code in the case of error. The same error code will be returned by subsequent <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4" title="Returns the error code of the last operation. ">getZipError()</a> call. </p>
+
+<p>References <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">mdUnzip</a>, and <a class="el" href="classQuaZipPrivate.html#aeb1d2d3263929b17d6b0608e35af2a88">QuaZipPrivate::unzFile_f</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1b5d936a203859340574d5908ffa2222"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZip::setComment </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>comment</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the global comment in the ZIP file. </p>
+<p>The comment will be written to the archive on close operation. <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> makes a distinction between a null QByteArray() comment and an empty "" comment in the <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a22c745f349f06add449af523254fdaec" title="ZIP file was opened for adding files in the archive. ">QuaZip::mdAdd</a> mode. A null comment is the default and it means "don't change the comment". An emp [...]
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962" title="Opens ZIP file. ">open()</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a745488f9177bcec3cdb858587584e033"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZip::goToFirstFile </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the current file to the first file in the archive. </p>
+<p>Returns <code>true</code> on success, <code>false</code> otherwise. Call <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4" title="Returns the error code of the last operation. ">getZipError()</a> to get the error code. </p>
+
+<p>References <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">mdUnzip</a>, and <a class="el" href="classQuaZipPrivate.html#aeb1d2d3263929b17d6b0608e35af2a88">QuaZipPrivate::unzFile_f</a>.</p>
+
+<p>Referenced by <a class="el" href="classJlCompress.html#a365a153baa4c11812d93cbca60b6a293">JlCompress::extractDir()</a>, and <a class="el" href="classJlCompress.html#ab42422be913f817d7e04c1b1cd5d0156">JlCompress::getFileList()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aee6779b6cd338420c2e8c5655fa8ba97"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZip::goToNextFile </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the current file to the next file in the archive. </p>
+<p>Returns <code>true</code> on success, <code>false</code> otherwise. Call <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4" title="Returns the error code of the last operation. ">getZipError()</a> to determine if there was an error.</p>
+<p>Should be used only in <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897" title="ZIP file is open for reading files inside it. ">QuaZip::mdUnzip</a> mode.</p>
+<dl class="section note"><dt>Note</dt><dd>If the end of file was reached, <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4" title="Returns the error code of the last operation. ">getZipError()</a> will return <code>UNZ_OK</code> instead of <code>UNZ_END_OF_LIST_OF_FILE</code>. This is to make things like this easier: <div class="fragment"><div class="line"><span class="keywordflow">for</span>(<span class="keywordtype">bool</span> more=zip.goToFirstFile(); more; more [...]
+<div class="line">  <span class="comment">// do something</span></div>
+<div class="line">}</div>
+<div class="line"><span class="keywordflow">if</span>(zip.getZipError()==UNZ_OK) {</div>
+<div class="line">  <span class="comment">// ok, there was no error</span></div>
+<div class="line">}</div>
+</div><!-- fragment --> </dd></dl>
+
+<p>References <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">mdUnzip</a>, and <a class="el" href="classQuaZipPrivate.html#aeb1d2d3263929b17d6b0608e35af2a88">QuaZipPrivate::unzFile_f</a>.</p>
+
+<p>Referenced by <a class="el" href="classJlCompress.html#a365a153baa4c11812d93cbca60b6a293">JlCompress::extractDir()</a>, <a class="el" href="classJlCompress.html#ab42422be913f817d7e04c1b1cd5d0156">JlCompress::getFileList()</a>, and <a class="el" href="classQuaZip.html#a6c657bfcfccb59d728e0da24c677d899">setCurrentFile()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6c657bfcfccb59d728e0da24c677d899"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZip::setCurrentFile </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>fileName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">CaseSensitivity</a> </td>
+          <td class="paramname"><em>cs</em> = <code><a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253">csDefault</a></code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets current file by its name. </p>
+<p>Returns <code>true</code> if successful, <code>false</code> otherwise. Argument <em>cs</em> specifies case sensitivity of the file name. Call <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4" title="Returns the error code of the last operation. ">getZipError()</a> in the case of a failure to get error code.</p>
+<p>This is not a wrapper to unzLocateFile() function. That is because I had to implement locale-specific case-insensitive comparison.</p>
+<p>Here are the differences from the original implementation:</p>
+<ul>
+<li>If the file was not found, error code is <code>UNZ_OK</code>, not <code>UNZ_END_OF_LIST_OF_FILE</code> (see also <a class="el" href="classQuaZip.html#aee6779b6cd338420c2e8c5655fa8ba97" title="Sets the current file to the next file in the archive. ">goToNextFile()</a>).</li>
+<li>If this function fails, it unsets the current file rather than resetting it back to what it was before the call.</li>
+</ul>
+<p>If <em>fileName</em> is null string then this function unsets the current file and return <code>true</code>. Note that you should close the file first if it is open! See <a class="el" href="classQuaZipFile.html#a54e944a6b3d27030f64c8f30d2cc33bb" title="Constructs a QuaZipFile instance. ">QuaZipFile::QuaZipFile(QuaZip*,QObject*)</a> for the details.</p>
+<p>Should be used only in <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897" title="ZIP file is open for reading files inside it. ">QuaZip::mdUnzip</a> mode.</p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#a339010b5566704ba3c9cafbfe848d8fb" title="Sets the codec used to encode/decode file names inside archive. ">setFileNameCodec()</a>, <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe" title="Case sensitivity for the file names. ">CaseSensitivity</a> </dd></dl>
+
+<p>References <a class="el" href="classQuaZip.html#a1d3fbd445a8e9d3449ded7371931c6b3">convertCaseSensitivity()</a>, <a class="el" href="classQuaZip.html#a9783f8b4f39cd55e71e975aea78fd54a">getCurrentFileName()</a>, <a class="el" href="classQuaZip.html#aee6779b6cd338420c2e8c5655fa8ba97">goToNextFile()</a>, <a class="el" href="classQuaZip.html#adce46b942c341dbb5c851eadead65459ab26ce1a9c9e94f901dc2cf90fa5baa4b">MAX_FILE_NAME_LENGTH</a>, <a class="el" href="classQuaZip.html#a47e28d4116ee716fd [...]
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#aed75bace51f2bb4c3e4f656ab4493aac">QuaZipFile::open()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9c91a53ed4c2038e153c64bdc097ebe8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZip::getCurrentFileInfo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> * </td>
+          <td class="paramname"><em>info</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Retrieves information about the current file. </p>
+<p>Fills the structure pointed by <em>info</em>. Returns <code>true</code> on success, <code>false</code> otherwise. In the latter case structure pointed by <em>info</em> remains untouched. If there was an error, <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4" title="Returns the error code of the last operation. ">getZipError()</a> returns error code.</p>
+<p>Should be used only in <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897" title="ZIP file is open for reading files inside it. ">QuaZip::mdUnzip</a> mode.</p>
+<p>Does nothing and returns <code>false</code> in any of the following cases.</p>
+<ul>
+<li>ZIP is not open;</li>
+<li>ZIP does not have current file.</li>
+</ul>
+<p>In both cases <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4" title="Returns the error code of the last operation. ">getZipError()</a> returns <code>UNZ_OK</code> since there is no ZIP/UNZIP API call.</p>
+<p>This overload doesn't support zip64, but will work OK on zip64 archives except that if one of the sizes (compressed or uncompressed) is greater than 0xFFFFFFFFu, it will be set to exactly 0xFFFFFFFFu.</p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#a7ba6daf39263c308c683e7f72f74e0ae" title="Retrieves information about the current file. ">getCurrentFileInfo(QuaZipFileInfo64* info)const</a> </dd>
+<dd>
+<a class="el" href="structQuaZipFileInfo64.html#ada29945c7ee4c9df6fbe95864793aade" title="Converts to QuaZipFileInfo. ">QuaZipFileInfo64::toQuaZipFileInfo(QuaZipFileInfo&)const</a> </dd></dl>
+
+<p>References <a class="el" href="structQuaZipFileInfo64.html#ada29945c7ee4c9df6fbe95864793aade">QuaZipFileInfo64::toQuaZipFileInfo()</a>.</p>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#af35876a5ac6e9c35234275a9e503110d">QuaZipFile::getFileInfo()</a>, and <a class="el" href="classJlCompress.html#ab42422be913f817d7e04c1b1cd5d0156">JlCompress::getFileList()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7ba6daf39263c308c683e7f72f74e0ae"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZip::getCurrentFileInfo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> * </td>
+          <td class="paramname"><em>info</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Retrieves information about the current file. </p>
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.</p>
+<p>This function supports zip64. If the archive doesn't use zip64, it is completely equivalent to getCurrentFileInfo(QuaZipFileInfo* info) except for the argument type.</p>
+<dl class="section see"><dt>See Also</dt><dd></dd></dl>
+
+<p>References <a class="el" href="structQuaZipFileInfo64.html#aba3f5b982087c3e0343bb61e8814c7d1">QuaZipFileInfo64::comment</a>, <a class="el" href="structQuaZipFileInfo64.html#add8733946ea4af23aa32d85f10955b0f">QuaZipFileInfo64::compressedSize</a>, <a class="el" href="structQuaZipFileInfo64.html#aeb7b2757a0efa814b196b5280d000a14">QuaZipFileInfo64::crc</a>, <a class="el" href="structQuaZipFileInfo64.html#a4d77c6aa6076703e858c938efeb551e4">QuaZipFileInfo64::dateTime</a>, <a class="el" href [...]
+
+</div>
+</div>
+<a class="anchor" id="a9783f8b4f39cd55e71e975aea78fd54a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QString QuaZip::getCurrentFileName </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the current file name. </p>
+<p>Equivalent to calling <a class="el" href="classQuaZip.html#a9c91a53ed4c2038e153c64bdc097ebe8" title="Retrieves information about the current file. ">getCurrentFileInfo()</a> and then getting <code>name</code> field of the <a class="el" href="structQuaZipFileInfo.html" title="Information about a file inside archive. ">QuaZipFileInfo</a> structure, but faster and more convenient.</p>
+<p>Should be used only in <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897" title="ZIP file is open for reading files inside it. ">QuaZip::mdUnzip</a> mode. </p>
+
+<p>References <a class="el" href="classQuaZip.html#a00b237d926648f45da86db25e7cfb697">hasCurrentFile()</a>, <a class="el" href="classQuaZip.html#a5b869a9c0d4f49955b759592fec08888">isOpen()</a>, <a class="el" href="classQuaZip.html#adce46b942c341dbb5c851eadead65459ab26ce1a9c9e94f901dc2cf90fa5baa4b">MAX_FILE_NAME_LENGTH</a>, <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">mdUnzip</a>, and <a class="el" href="classQuaZipPrivate.html#a [...]
+
+<p>Referenced by <a class="el" href="classJlCompress.html#a365a153baa4c11812d93cbca60b6a293">JlCompress::extractDir()</a>, <a class="el" href="classQuaZipFile.html#a7b8e3c39026855cd98661a1b2815c220">QuaZipFile::getActualFileName()</a>, and <a class="el" href="classQuaZip.html#a6c657bfcfccb59d728e0da24c677d899">setCurrentFile()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3b78a652f296ff4a678a791e8294e642"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unzFile QuaZip::getUnzFile </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns <code>unzFile</code> handle. </p>
+<p>You can use this handle to directly call UNZIP part of the ZIP/UNZIP package functions (see unzip.h).</p>
+<dl class="section warning"><dt>Warning</dt><dd>When using the handle returned by this function, please keep in mind that <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> class is unable to detect any changes you make in the ZIP file state (e. g. changing current file, or closing the handle). So please do not do anything with this handle that is possible to do with the functions of this class. Or at least return the handle in the original state before calling some a [...]
+
+<p>References <a class="el" href="classQuaZipPrivate.html#aeb1d2d3263929b17d6b0608e35af2a88">QuaZipPrivate::unzFile_f</a>.</p>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a1e3f4c3c075da98af426fc167440cfc3">QuaZipFile::atEnd()</a>, <a class="el" href="classQuaZipFile.html#a42a39b12619bccd3d419ee60bbb3fcf6">QuaZipFile::close()</a>, <a class="el" href="classQuaZipFile.html#ac4da08e5cdec368a2a686775f7dc5639">QuaZipFile::csize()</a>, <a class="el" href="classQuaZipFile.html#aed75bace51f2bb4c3e4f656ab4493aac">QuaZipFile::open()</a>, <a class="el" href="classQuaZipFile.html#a90fd55dab83eca7f95df50b2c41b7f [...]
+
+</div>
+</div>
+<a class="anchor" id="a425043a4d7cc31e2fe2bba73d954f15c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">zipFile QuaZip::getZipFile </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns <code>zipFile</code> handle. </p>
+<p>You can use this handle to directly call ZIP part of the ZIP/UNZIP package functions (see zip.h). Warnings about the <a class="el" href="classQuaZip.html#a3b78a652f296ff4a678a791e8294e642" title="Returns unzFile handle. ">getUnzFile()</a> function also apply to this function. </p>
+
+<p>References <a class="el" href="classQuaZipPrivate.html#ab83497156892d07e6a1514cef149a1e2">QuaZipPrivate::zipFile_f</a>.</p>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a42a39b12619bccd3d419ee60bbb3fcf6">QuaZipFile::close()</a>, <a class="el" href="classQuaZipFile.html#a2429ea59c77371d7af56d739db130b18">QuaZipFile::open()</a>, and <a class="el" href="classQuaZipFile.html#abd07949a6fcc2ef094d2be5398bc8e7c">QuaZipFile::writeData()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6c23a12af88f7ea5edd4f9c0a24b9453"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZip::setDataDescriptorWritingEnabled </td>
+          <td>(</td>
+          <td class="paramtype">bool </td>
+          <td class="paramname"><em>enabled</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Changes the data descriptor writing mode. </p>
+<p>According to the ZIP format specification, a file inside archive may have a data descriptor immediately following the file data. This is reflected by a special flag in the local file header and in the central directory. By default, QuaZIP sets this flag and writes the data descriptor unless both method and level were set to 0, in which case it operates in 1.0-compatible mode and never writes data descriptors.</p>
+<p>By setting this flag to false, it is possible to disable data descriptor writing, thus increasing compatibility with archive readers that don't understand this feature of the ZIP file format.</p>
+<p>Setting this flag affects all the <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instances that are opened after this flag is set.</p>
+<p>The data descriptor writing mode is enabled by default.</p>
+<p>Note that if the ZIP archive is written into a QIODevice for which QIODevice::isSequential() returns <code>true</code>, then the data descriptor is mandatory and will be written even if this flag is set to false.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">enabled</td><td>If <code>true</code>, enable local descriptor writing, disable it otherwise.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section see"><dt>See Also</dt><dd>QuaZipFile::isDataDescriptorWritingEnabled() </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ae5c665a59447c2d30e63e9c6df48ebb7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZip::isDataDescriptorWritingEnabled </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the data descriptor default writing mode. </p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#a6c23a12af88f7ea5edd4f9c0a24b9453" title="Changes the data descriptor writing mode. ">setDataDescriptorWritingEnabled()</a> </dd></dl>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a2429ea59c77371d7af56d739db130b18">QuaZipFile::open()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abb38d8b4c9c4ae0728b48caae9dd82de"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QStringList QuaZip::getFileNameList </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns a list of files inside the archive. </p>
+<dl class="section return"><dt>Returns</dt><dd>A list of file names or an empty list if there was an error or if the archive is empty (call <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4" title="Returns the error code of the last operation. ">getZipError()</a> to figure out which). </dd></dl>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#a7486af66bede8e131db0cd2e81881387" title="Returns information list about all files inside the archive. ">getFileInfoList()</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a7486af66bede8e131db0cd2e81881387"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QList< <a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> > QuaZip::getFileInfoList </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns information list about all files inside the archive. </p>
+<dl class="section return"><dt>Returns</dt><dd>A list of <a class="el" href="structQuaZipFileInfo.html" title="Information about a file inside archive. ">QuaZipFileInfo</a> objects or an empty list if there was an error or if the archive is empty (call <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4" title="Returns the error code of the last operation. ">getZipError()</a> to figure out which).</dd></dl>
+<p>This function doesn't support zip64, but will still work with zip64 archives, converting results using <a class="el" href="structQuaZipFileInfo64.html#ada29945c7ee4c9df6fbe95864793aade" title="Converts to QuaZipFileInfo. ">QuaZipFileInfo64::toQuaZipFileInfo()</a>. If all file sizes are below 4 GB, it will work just fine.</p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#abb38d8b4c9c4ae0728b48caae9dd82de" title="Returns a list of files inside the archive. ">getFileNameList()</a> </dd>
+<dd>
+<a class="el" href="classQuaZip.html#a474e66b1b696a9e00edcc067484c36ad" title="Returns information list about all files inside the archive. ">getFileInfoList64()</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a474e66b1b696a9e00edcc067484c36ad"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QList< <a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> > QuaZip::getFileInfoList64 </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns information list about all files inside the archive. </p>
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.</p>
+<p>This function supports zip64.</p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#abb38d8b4c9c4ae0728b48caae9dd82de" title="Returns a list of files inside the archive. ">getFileNameList()</a> </dd>
+<dd>
+<a class="el" href="classQuaZip.html#a7486af66bede8e131db0cd2e81881387" title="Returns information list about all files inside the archive. ">getFileInfoList()</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab99a22efae02ebb4b5c9cd8eedc1c0b0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZip::setZip64Enabled </td>
+          <td>(</td>
+          <td class="paramtype">bool </td>
+          <td class="paramname"><em>zip64</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Enables the zip64 mode. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">zip64</td><td>If <code>true</code>, the zip64 mode is enabled, disabled otherwise.</td></tr>
+  </table>
+  </dd>
+</dl>
+<p>Once this is enabled, all new files (until the mode is disabled again) will be created in the zip64 mode, thus enabling the ability to write files larger than 4 GB. By default, the zip64 mode is off due to compatibility reasons.</p>
+<p>Note that this does not affect the ability to read zip64 archives in any way.</p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#a1b638566390d7599ba5982e844b151f4" title="Returns whether the zip64 mode is enabled. ">isZip64Enabled()</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1b638566390d7599ba5982e844b151f4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZip::isZip64Enabled </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns whether the zip64 mode is enabled. </p>
+<dl class="section return"><dt>Returns</dt><dd><code>true</code> if and only if the zip64 mode is enabled.</dd></dl>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#ab99a22efae02ebb4b5c9cd8eedc1c0b0" title="Enables the zip64 mode. ">setZip64Enabled()</a> </dd></dl>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a2429ea59c77371d7af56d739db130b18">QuaZipFile::open()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adc2cc762ab5744720ae4d33290b5f5bf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZip::isAutoClose </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the auto-close flag. </p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#a54bfc924762774ccf9f99be075ba7b0e" title="Sets or unsets the auto-close flag. ">setAutoClose()</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a54bfc924762774ccf9f99be075ba7b0e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZip::setAutoClose </td>
+          <td>(</td>
+          <td class="paramtype">bool </td>
+          <td class="paramname"><em>autoClose</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets or unsets the auto-close flag. </p>
+<p>By default, QuaZIP opens the underlying QIODevice when <a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962" title="Opens ZIP file. ">open()</a> is called, and closes it when <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f" title="Closes ZIP file. ">close()</a> is called. In some cases, when the device is set explicitly using <a class="el" href="classQuaZip.html#a64642948b6531ee54f5522f29e388cc6" title="Sets the device representing the ZIP file [...]
+<p>If it is needed to clear this flag, it is recommended to do so before opening the archive because otherwise QuaZIP may close the device during the <a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962" title="Opens ZIP file. ">open()</a> call if an error is encountered after the device is opened.</p>
+<p>If the device was not set explicitly, but rather the <a class="el" href="classQuaZip.html#aa80b661de1262af905d1677dbcb008cc" title="Sets the name of the ZIP file. ">setZipName()</a> or the appropriate constructor was used to set the ZIP file name instead, then the auto-close flag has no effect, and the internal device is closed nevertheless because there is no other way to close it.</p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#adc2cc762ab5744720ae4d33290b5f5bf" title="Returns the auto-close flag. ">isAutoClose()</a> </dd>
+<dd>
+<a class="el" href="classQuaZip.html#a64642948b6531ee54f5522f29e388cc6" title="Sets the device representing the ZIP file. ">setIoDevice()</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a317f5db89d84a80417338a3ab89770da"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZip::setDefaultFileNameCodec </td>
+          <td>(</td>
+          <td class="paramtype">QTextCodec * </td>
+          <td class="paramname"><em>codec</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Sets the default file name codec to use. </p>
+<p>The default codec is used by the constructors, so calling this function won't affect the <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> instances already created at that moment.</p>
+<p>The codec specified here can be overriden by calling <a class="el" href="classQuaZip.html#a339010b5566704ba3c9cafbfe848d8fb" title="Sets the codec used to encode/decode file names inside archive. ">setFileNameCodec()</a>. If neither function is called, QTextCodec::codecForLocale() will be used to decode or encode file names. Use this function with caution if the application uses other libraries that depend on QuaZIP. Those libraries can either call this function by themselves, thus ov [...]
+<p>In most cases, using <a class="el" href="classQuaZip.html#a339010b5566704ba3c9cafbfe848d8fb" title="Sets the codec used to encode/decode file names inside archive. ">setFileNameCodec()</a> instead is the right choice. However, if you depend on third-party code that uses QuaZIP, then the reasons stated above can actually become a reason to use this function in case the third-party code in question fails because it doesn't understand the encoding you need and doesn't provide a way to sp [...]
+<p>In short: use <a class="el" href="classQuaZip.html#a339010b5566704ba3c9cafbfe848d8fb" title="Sets the codec used to encode/decode file names inside archive. ">setFileNameCodec()</a> when you can, resort to <a class="el" href="classQuaZip.html#a317f5db89d84a80417338a3ab89770da" title="Sets the default file name codec to use. ">setDefaultFileNameCodec()</a> when you don't have access to the <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> instance.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">codec</td><td>The codec to use by default. If NULL, resets to default. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Referenced by <a class="el" href="classQuaZip.html#a694af3c0ab076fab7bf619952f6fbfea">setDefaultFileNameCodec()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a694af3c0ab076fab7bf619952f6fbfea"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZip::setDefaultFileNameCodec </td>
+          <td>(</td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>codecName</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Equivalent to calling setDefltFileNameCodec(QTextCodec::codecForName(codecName)). </p>
+
+<p>References <a class="el" href="classQuaZip.html#a317f5db89d84a80417338a3ab89770da">setDefaultFileNameCodec()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>quazip/<a class="el" href="quazip_8h_source.html">quazip.h</a></li>
+<li>quazip/quazip.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZipDir-members.html b/3rdparty/quazip-0.7/doc/html/classQuaZipDir-members.html
new file mode 100644
index 0000000..a1ed51a
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZipDir-members.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QuaZipDir Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classQuaZipDir.html">QuaZipDir</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#ad7ab403a8d36a3b6149da86ea37178f8">caseSensitivity</a>() const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#aa829afc0243f1d307302f1167edecc7b">cd</a>(const QString &dirName)</td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#a62306db3f4c0866930fa35c7348b84b3">cdUp</a>()</td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#aa3f14665e3991351f4ef94ab8e0ab29d">count</a>() const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#afd2f76410f7728a7166b7598926fbf96">dirName</a>() const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#aef966735a146fc10c9527c236aa89261">entryInfoList</a>(const QStringList &nameFilters, QDir::Filters filters=QDir::NoFilter, QDir::SortFlags sort=QDir::NoSort) const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#abec530f15597ddf8c8d1f340a333f7aa">entryInfoList</a>(QDir::Filters filters=QDir::NoFilter, QDir::SortFlags sort=QDir::NoSort) const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#ae2b5a4b251db7aeb165c6656da0e3431">entryInfoList64</a>(const QStringList &nameFilters, QDir::Filters filters=QDir::NoFilter, QDir::SortFlags sort=QDir::NoSort) const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#a8c38ec214c300049685cbf71486636d5">entryInfoList64</a>(QDir::Filters filters=QDir::NoFilter, QDir::SortFlags sort=QDir::NoSort) const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#a4a32faa77c4120cd3c6db4b683fa16d9">entryList</a>(const QStringList &nameFilters, QDir::Filters filters=QDir::NoFilter, QDir::SortFlags sort=QDir::NoSort) const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#ab20e9d3de675b74fcacc98accbc1d766">entryList</a>(QDir::Filters filters=QDir::NoFilter, QDir::SortFlags sort=QDir::NoSort) const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#aacb488fec6e951ac80e5d473534fee97">exists</a>(const QString &fileName) const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#a22c8f63ce874f5c0e958ae5f42e6d004">exists</a>() const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#ae8b576a150f8d62c902067603cbc97ae">filePath</a>(const QString &fileName) const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#abeee1810c7c1c1af93364081dbf70d38">filter</a>()</td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#a598fdf23f1b37e1876476e5969040a32">isRoot</a>() const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#a00f18e23abb8cac04f975e7f31553f2e">nameFilters</a>() const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#a6e60d858d05774c958215ee7741eceed">operator!=</a>(const QuaZipDir &that)</td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#aa603c69be0c1597add5951b19f8bc961">operator=</a>(const QuaZipDir &that)</td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#a4a2e07484c7159a3f469922ba2383547">operator==</a>(const QuaZipDir &that)</td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#a9e37ef5318c44a4575c58d66110e535a">operator[]</a>(int pos) const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#a68ac82ad605c0b10f9ee1a2d6d474f52">path</a>() const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#a6c9cc8b74c52d3fe997b753370566690">QuaZipDir</a>(const QuaZipDir &that)</td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#a19e5e3a54f322ce03e7f7606a87a2ba1">QuaZipDir</a>(QuaZip *zip, const QString &dir=QString())</td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#a2ae89c2b85786a0168656fc7a3faaf01">relativeFilePath</a>(const QString &fileName) const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#ad53c720975bb0c49a823355f7d518793">setCaseSensitivity</a>(QuaZip::CaseSensitivity caseSensitivity)</td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#a779a43641f0f3802678e39c9acd1fddb">setFilter</a>(QDir::Filters filters)</td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#abcf208bfd6136e14f36725ae79dce2be">setNameFilters</a>(const QStringList &nameFilters)</td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#ae82d06e43856414c30583205d337c111">setPath</a>(const QString &path)</td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#ae43e9d717e3c4b1c0d4790cf558e7451">setSorting</a>(QDir::SortFlags sort)</td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipDir.html#a4000523c961ab9e0cad08641ff10e3fa">sorting</a>() const </td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipDir.html#ae95d60e2c23e611723371bf8fff2b095">~QuaZipDir</a>()</td><td class="entry"><a class="el" href="classQuaZipDir.html">QuaZipDir</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZipDir.html b/3rdparty/quazip-0.7/doc/html/classQuaZipDir.html
new file mode 100644
index 0000000..e4b0cf7
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZipDir.html
@@ -0,0 +1,669 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaZipDir Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classQuaZipDir-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">QuaZipDir Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Provides ZIP archive navigation.  
+ <a href="classQuaZipDir.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="quazipdir_8h_source.html">quazipdir.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a6c9cc8b74c52d3fe997b753370566690"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6c9cc8b74c52d3fe997b753370566690"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a6c9cc8b74c52d3fe997b753370566690">QuaZipDir</a> (const <a class="el" href="classQuaZipDir.html">QuaZipDir</a> &that)</td></tr>
+<tr class="memdesc:a6c9cc8b74c52d3fe997b753370566690"><td class="mdescLeft"> </td><td class="mdescRight">The copy constructor. <br/></td></tr>
+<tr class="separator:a6c9cc8b74c52d3fe997b753370566690"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19e5e3a54f322ce03e7f7606a87a2ba1"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a19e5e3a54f322ce03e7f7606a87a2ba1">QuaZipDir</a> (<a class="el" href="classQuaZip.html">QuaZip</a> *zip, const QString &dir=QString())</td></tr>
+<tr class="memdesc:a19e5e3a54f322ce03e7f7606a87a2ba1"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a <a class="el" href="classQuaZipDir.html" title="Provides ZIP archive navigation. ">QuaZipDir</a> instance pointing to the specified directory.  <a href="#a19e5e3a54f322ce03e7f7606a87a2ba1">More...</a><br/></td></tr>
+<tr class="separator:a19e5e3a54f322ce03e7f7606a87a2ba1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae95d60e2c23e611723371bf8fff2b095"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae95d60e2c23e611723371bf8fff2b095"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#ae95d60e2c23e611723371bf8fff2b095">~QuaZipDir</a> ()</td></tr>
+<tr class="memdesc:ae95d60e2c23e611723371bf8fff2b095"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
+<tr class="separator:ae95d60e2c23e611723371bf8fff2b095"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4a2e07484c7159a3f469922ba2383547"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a2e07484c7159a3f469922ba2383547"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a4a2e07484c7159a3f469922ba2383547">operator==</a> (const <a class="el" href="classQuaZipDir.html">QuaZipDir</a> &that)</td></tr>
+<tr class="memdesc:a4a2e07484c7159a3f469922ba2383547"><td class="mdescLeft"> </td><td class="mdescRight">The assignment operator. <br/></td></tr>
+<tr class="separator:a4a2e07484c7159a3f469922ba2383547"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6e60d858d05774c958215ee7741eceed"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a6e60d858d05774c958215ee7741eceed">operator!=</a> (const <a class="el" href="classQuaZipDir.html">QuaZipDir</a> &that)</td></tr>
+<tr class="memdesc:a6e60d858d05774c958215ee7741eceed"><td class="mdescLeft"> </td><td class="mdescRight">operator!=  <a href="#a6e60d858d05774c958215ee7741eceed">More...</a><br/></td></tr>
+<tr class="separator:a6e60d858d05774c958215ee7741eceed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa603c69be0c1597add5951b19f8bc961"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classQuaZipDir.html">QuaZipDir</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#aa603c69be0c1597add5951b19f8bc961">operator=</a> (const <a class="el" href="classQuaZipDir.html">QuaZipDir</a> &that)</td></tr>
+<tr class="memdesc:aa603c69be0c1597add5951b19f8bc961"><td class="mdescLeft"> </td><td class="mdescRight">operator==  <a href="#aa603c69be0c1597add5951b19f8bc961">More...</a><br/></td></tr>
+<tr class="separator:aa603c69be0c1597add5951b19f8bc961"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9e37ef5318c44a4575c58d66110e535a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e37ef5318c44a4575c58d66110e535a"></a>
+QString </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a9e37ef5318c44a4575c58d66110e535a">operator[]</a> (int pos) const </td></tr>
+<tr class="memdesc:a9e37ef5318c44a4575c58d66110e535a"><td class="mdescLeft"> </td><td class="mdescRight">Returns the name of the entry at the specified position. <br/></td></tr>
+<tr class="separator:a9e37ef5318c44a4575c58d66110e535a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad7ab403a8d36a3b6149da86ea37178f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad7ab403a8d36a3b6149da86ea37178f8"></a>
+<a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#ad7ab403a8d36a3b6149da86ea37178f8">caseSensitivity</a> () const </td></tr>
+<tr class="memdesc:ad7ab403a8d36a3b6149da86ea37178f8"><td class="mdescLeft"> </td><td class="mdescRight">Returns the current case sensitivity mode. <br/></td></tr>
+<tr class="separator:ad7ab403a8d36a3b6149da86ea37178f8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa829afc0243f1d307302f1167edecc7b"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#aa829afc0243f1d307302f1167edecc7b">cd</a> (const QString &<a class="el" href="classQuaZipDir.html#afd2f76410f7728a7166b7598926fbf96">dirName</a>)</td></tr>
+<tr class="memdesc:aa829afc0243f1d307302f1167edecc7b"><td class="mdescLeft"> </td><td class="mdescRight">Changes the 'current' directory.  <a href="#aa829afc0243f1d307302f1167edecc7b">More...</a><br/></td></tr>
+<tr class="separator:aa829afc0243f1d307302f1167edecc7b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a62306db3f4c0866930fa35c7348b84b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62306db3f4c0866930fa35c7348b84b3"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a62306db3f4c0866930fa35c7348b84b3">cdUp</a> ()</td></tr>
+<tr class="memdesc:a62306db3f4c0866930fa35c7348b84b3"><td class="mdescLeft"> </td><td class="mdescRight">Goes up. <br/></td></tr>
+<tr class="separator:a62306db3f4c0866930fa35c7348b84b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa3f14665e3991351f4ef94ab8e0ab29d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3f14665e3991351f4ef94ab8e0ab29d"></a>
+uint </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#aa3f14665e3991351f4ef94ab8e0ab29d">count</a> () const </td></tr>
+<tr class="memdesc:aa3f14665e3991351f4ef94ab8e0ab29d"><td class="mdescLeft"> </td><td class="mdescRight">Returns the number of entries in the directory. <br/></td></tr>
+<tr class="separator:aa3f14665e3991351f4ef94ab8e0ab29d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afd2f76410f7728a7166b7598926fbf96"><td class="memItemLeft" align="right" valign="top">QString </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#afd2f76410f7728a7166b7598926fbf96">dirName</a> () const </td></tr>
+<tr class="memdesc:afd2f76410f7728a7166b7598926fbf96"><td class="mdescLeft"> </td><td class="mdescRight">Returns the current directory name.  <a href="#afd2f76410f7728a7166b7598926fbf96">More...</a><br/></td></tr>
+<tr class="separator:afd2f76410f7728a7166b7598926fbf96"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef966735a146fc10c9527c236aa89261"><td class="memItemLeft" align="right" valign="top">QList< <a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#aef966735a146fc10c9527c236aa89261">entryInfoList</a> (const QStringList &<a class="el" href="classQuaZipDir.html#a00f18e23abb8cac04f975e7f31553f2e">nameFilters</a>, QDir::Filters filters=QDir::NoFilter, QDir::So [...]
+<tr class="memdesc:aef966735a146fc10c9527c236aa89261"><td class="mdescLeft"> </td><td class="mdescRight">Returns the list of the entries in the directory.  <a href="#aef966735a146fc10c9527c236aa89261">More...</a><br/></td></tr>
+<tr class="separator:aef966735a146fc10c9527c236aa89261"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abec530f15597ddf8c8d1f340a333f7aa"><td class="memItemLeft" align="right" valign="top">QList< <a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#abec530f15597ddf8c8d1f340a333f7aa">entryInfoList</a> (QDir::Filters filters=QDir::NoFilter, QDir::SortFlags sort=QDir::NoSort) const </td></tr>
+<tr class="memdesc:abec530f15597ddf8c8d1f340a333f7aa"><td class="mdescLeft"> </td><td class="mdescRight">Returns the list of the entries in the directory.  <a href="#abec530f15597ddf8c8d1f340a333f7aa">More...</a><br/></td></tr>
+<tr class="separator:abec530f15597ddf8c8d1f340a333f7aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae2b5a4b251db7aeb165c6656da0e3431"><td class="memItemLeft" align="right" valign="top">QList< <a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#ae2b5a4b251db7aeb165c6656da0e3431">entryInfoList64</a> (const QStringList &<a class="el" href="classQuaZipDir.html#a00f18e23abb8cac04f975e7f31553f2e">nameFilters</a>, QDir::Filters filters=QDir::NoFilter, QD [...]
+<tr class="memdesc:ae2b5a4b251db7aeb165c6656da0e3431"><td class="mdescLeft"> </td><td class="mdescRight">Returns the list of the entries in the directory with zip64 support.  <a href="#ae2b5a4b251db7aeb165c6656da0e3431">More...</a><br/></td></tr>
+<tr class="separator:ae2b5a4b251db7aeb165c6656da0e3431"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8c38ec214c300049685cbf71486636d5"><td class="memItemLeft" align="right" valign="top">QList< <a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a8c38ec214c300049685cbf71486636d5">entryInfoList64</a> (QDir::Filters filters=QDir::NoFilter, QDir::SortFlags sort=QDir::NoSort) const </td></tr>
+<tr class="memdesc:a8c38ec214c300049685cbf71486636d5"><td class="mdescLeft"> </td><td class="mdescRight">Returns the list of the entries in the directory with zip64 support.  <a href="#a8c38ec214c300049685cbf71486636d5">More...</a><br/></td></tr>
+<tr class="separator:a8c38ec214c300049685cbf71486636d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4a32faa77c4120cd3c6db4b683fa16d9"><td class="memItemLeft" align="right" valign="top">QStringList </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a4a32faa77c4120cd3c6db4b683fa16d9">entryList</a> (const QStringList &<a class="el" href="classQuaZipDir.html#a00f18e23abb8cac04f975e7f31553f2e">nameFilters</a>, QDir::Filters filters=QDir::NoFilter, QDir::SortFlags sort=QDir::NoSort) const </td></tr>
+<tr class="memdesc:a4a32faa77c4120cd3c6db4b683fa16d9"><td class="mdescLeft"> </td><td class="mdescRight">Returns the list of the entry names in the directory.  <a href="#a4a32faa77c4120cd3c6db4b683fa16d9">More...</a><br/></td></tr>
+<tr class="separator:a4a32faa77c4120cd3c6db4b683fa16d9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab20e9d3de675b74fcacc98accbc1d766"><td class="memItemLeft" align="right" valign="top">QStringList </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#ab20e9d3de675b74fcacc98accbc1d766">entryList</a> (QDir::Filters filters=QDir::NoFilter, QDir::SortFlags sort=QDir::NoSort) const </td></tr>
+<tr class="memdesc:ab20e9d3de675b74fcacc98accbc1d766"><td class="mdescLeft"> </td><td class="mdescRight">Returns the list of the entry names in the directory.  <a href="#ab20e9d3de675b74fcacc98accbc1d766">More...</a><br/></td></tr>
+<tr class="separator:ab20e9d3de675b74fcacc98accbc1d766"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aacb488fec6e951ac80e5d473534fee97"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#aacb488fec6e951ac80e5d473534fee97">exists</a> (const QString &fileName) const </td></tr>
+<tr class="memdesc:aacb488fec6e951ac80e5d473534fee97"><td class="mdescLeft"> </td><td class="mdescRight">Returns <code>true</code> if the entry with the specified name exists.  <a href="#aacb488fec6e951ac80e5d473534fee97">More...</a><br/></td></tr>
+<tr class="separator:aacb488fec6e951ac80e5d473534fee97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a22c8f63ce874f5c0e958ae5f42e6d004"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22c8f63ce874f5c0e958ae5f42e6d004"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a22c8f63ce874f5c0e958ae5f42e6d004">exists</a> () const </td></tr>
+<tr class="memdesc:a22c8f63ce874f5c0e958ae5f42e6d004"><td class="mdescLeft"> </td><td class="mdescRight">Return <code>true</code> if the directory pointed by this <a class="el" href="classQuaZipDir.html" title="Provides ZIP archive navigation. ">QuaZipDir</a> exists. <br/></td></tr>
+<tr class="separator:a22c8f63ce874f5c0e958ae5f42e6d004"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae8b576a150f8d62c902067603cbc97ae"><td class="memItemLeft" align="right" valign="top">QString </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#ae8b576a150f8d62c902067603cbc97ae">filePath</a> (const QString &fileName) const </td></tr>
+<tr class="memdesc:ae8b576a150f8d62c902067603cbc97ae"><td class="mdescLeft"> </td><td class="mdescRight">Returns the full path to the specified file.  <a href="#ae8b576a150f8d62c902067603cbc97ae">More...</a><br/></td></tr>
+<tr class="separator:ae8b576a150f8d62c902067603cbc97ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abeee1810c7c1c1af93364081dbf70d38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abeee1810c7c1c1af93364081dbf70d38"></a>
+QDir::Filters </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#abeee1810c7c1c1af93364081dbf70d38">filter</a> ()</td></tr>
+<tr class="memdesc:abeee1810c7c1c1af93364081dbf70d38"><td class="mdescLeft"> </td><td class="mdescRight">Returns the default filter. <br/></td></tr>
+<tr class="separator:abeee1810c7c1c1af93364081dbf70d38"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a598fdf23f1b37e1876476e5969040a32"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a598fdf23f1b37e1876476e5969040a32">isRoot</a> () const </td></tr>
+<tr class="memdesc:a598fdf23f1b37e1876476e5969040a32"><td class="mdescLeft"> </td><td class="mdescRight">Returns if the <a class="el" href="classQuaZipDir.html" title="Provides ZIP archive navigation. ">QuaZipDir</a> points to the root of the archive.  <a href="#a598fdf23f1b37e1876476e5969040a32">More...</a><br/></td></tr>
+<tr class="separator:a598fdf23f1b37e1876476e5969040a32"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00f18e23abb8cac04f975e7f31553f2e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00f18e23abb8cac04f975e7f31553f2e"></a>
+QStringList </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a00f18e23abb8cac04f975e7f31553f2e">nameFilters</a> () const </td></tr>
+<tr class="memdesc:a00f18e23abb8cac04f975e7f31553f2e"><td class="mdescLeft"> </td><td class="mdescRight">Return the default name filter. <br/></td></tr>
+<tr class="separator:a00f18e23abb8cac04f975e7f31553f2e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a68ac82ad605c0b10f9ee1a2d6d474f52"><td class="memItemLeft" align="right" valign="top">QString </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a68ac82ad605c0b10f9ee1a2d6d474f52">path</a> () const </td></tr>
+<tr class="memdesc:a68ac82ad605c0b10f9ee1a2d6d474f52"><td class="mdescLeft"> </td><td class="mdescRight">Returns the path to the current dir.  <a href="#a68ac82ad605c0b10f9ee1a2d6d474f52">More...</a><br/></td></tr>
+<tr class="separator:a68ac82ad605c0b10f9ee1a2d6d474f52"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2ae89c2b85786a0168656fc7a3faaf01"><td class="memItemLeft" align="right" valign="top">QString </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a2ae89c2b85786a0168656fc7a3faaf01">relativeFilePath</a> (const QString &fileName) const </td></tr>
+<tr class="memdesc:a2ae89c2b85786a0168656fc7a3faaf01"><td class="mdescLeft"> </td><td class="mdescRight">Returns the path to the specified file relative to the current dir.  <a href="#a2ae89c2b85786a0168656fc7a3faaf01">More...</a><br/></td></tr>
+<tr class="separator:a2ae89c2b85786a0168656fc7a3faaf01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad53c720975bb0c49a823355f7d518793"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad53c720975bb0c49a823355f7d518793"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#ad53c720975bb0c49a823355f7d518793">setCaseSensitivity</a> (<a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a> <a class="el" href="classQuaZipDir.html#ad7ab403a8d36a3b6149da86ea37178f8">caseSensitivity</a>)</td></tr>
+<tr class="memdesc:ad53c720975bb0c49a823355f7d518793"><td class="mdescLeft"> </td><td class="mdescRight">Sets the default case sensitivity mode. <br/></td></tr>
+<tr class="separator:ad53c720975bb0c49a823355f7d518793"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a779a43641f0f3802678e39c9acd1fddb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a779a43641f0f3802678e39c9acd1fddb"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a779a43641f0f3802678e39c9acd1fddb">setFilter</a> (QDir::Filters filters)</td></tr>
+<tr class="memdesc:a779a43641f0f3802678e39c9acd1fddb"><td class="mdescLeft"> </td><td class="mdescRight">Sets the default filter. <br/></td></tr>
+<tr class="separator:a779a43641f0f3802678e39c9acd1fddb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abcf208bfd6136e14f36725ae79dce2be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcf208bfd6136e14f36725ae79dce2be"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#abcf208bfd6136e14f36725ae79dce2be">setNameFilters</a> (const QStringList &<a class="el" href="classQuaZipDir.html#a00f18e23abb8cac04f975e7f31553f2e">nameFilters</a>)</td></tr>
+<tr class="memdesc:abcf208bfd6136e14f36725ae79dce2be"><td class="mdescLeft"> </td><td class="mdescRight">Sets the default name filter. <br/></td></tr>
+<tr class="separator:abcf208bfd6136e14f36725ae79dce2be"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae82d06e43856414c30583205d337c111"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#ae82d06e43856414c30583205d337c111">setPath</a> (const QString &<a class="el" href="classQuaZipDir.html#a68ac82ad605c0b10f9ee1a2d6d474f52">path</a>)</td></tr>
+<tr class="memdesc:ae82d06e43856414c30583205d337c111"><td class="mdescLeft"> </td><td class="mdescRight">Goes to the specified path.  <a href="#ae82d06e43856414c30583205d337c111">More...</a><br/></td></tr>
+<tr class="separator:ae82d06e43856414c30583205d337c111"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae43e9d717e3c4b1c0d4790cf558e7451"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae43e9d717e3c4b1c0d4790cf558e7451"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#ae43e9d717e3c4b1c0d4790cf558e7451">setSorting</a> (QDir::SortFlags sort)</td></tr>
+<tr class="memdesc:ae43e9d717e3c4b1c0d4790cf558e7451"><td class="mdescLeft"> </td><td class="mdescRight">Sets the default sorting mode. <br/></td></tr>
+<tr class="separator:ae43e9d717e3c4b1c0d4790cf558e7451"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4000523c961ab9e0cad08641ff10e3fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4000523c961ab9e0cad08641ff10e3fa"></a>
+QDir::SortFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipDir.html#a4000523c961ab9e0cad08641ff10e3fa">sorting</a> () const </td></tr>
+<tr class="memdesc:a4000523c961ab9e0cad08641ff10e3fa"><td class="mdescLeft"> </td><td class="mdescRight">Returns the default sorting mode. <br/></td></tr>
+<tr class="separator:a4000523c961ab9e0cad08641ff10e3fa"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Provides ZIP archive navigation. </p>
+<p>This class is modelled after QDir, and is designed to provide similar features for ZIP archives.</p>
+<p>The only significant difference from QDir is that the root path is not '/', but an empty string since that's how the file paths are stored in the archive. However, <a class="el" href="classQuaZipDir.html" title="Provides ZIP archive navigation. ">QuaZipDir</a> understands the paths starting with '/'. It is important in a few places:</p>
+<ul>
+<li>In the <a class="el" href="classQuaZipDir.html#aa829afc0243f1d307302f1167edecc7b" title="Changes the 'current' directory. ">cd()</a> function.</li>
+<li>In the constructor.</li>
+<li>In the <a class="el" href="classQuaZipDir.html#aacb488fec6e951ac80e5d473534fee97" title="Returns true if the entry with the specified name exists. ">exists()</a> function.</li>
+<li>In the relativePath() function.</li>
+</ul>
+<p>Note that since ZIP uses '/' on all platforms, the '\' separator is not supported. </p>
+</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="a19e5e3a54f322ce03e7f7606a87a2ba1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZipDir::QuaZipDir </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classQuaZip.html">QuaZip</a> * </td>
+          <td class="paramname"><em>zip</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>dir</em> = <code>QString()</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Constructs a <a class="el" href="classQuaZipDir.html" title="Provides ZIP archive navigation. ">QuaZipDir</a> instance pointing to the specified directory. </p>
+<p>If <em>dir</em> is not specified, points to the root of the archive. The same happens if the <em>dir</em> is "/". </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a6e60d858d05774c958215ee7741eceed"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZipDir::operator!= </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classQuaZipDir.html">QuaZipDir</a> & </td>
+          <td class="paramname"><em>that</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>operator!= </p>
+<dl class="section return"><dt>Returns</dt><dd><code>true</code> if either this and <em>that</em> use different <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> instances or if they point to different directories. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa603c69be0c1597add5951b19f8bc961"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classQuaZipDir.html">QuaZipDir</a> & QuaZipDir::operator= </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classQuaZipDir.html">QuaZipDir</a> & </td>
+          <td class="paramname"><em>that</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>operator== </p>
+<dl class="section return"><dt>Returns</dt><dd><code>true</code> if both this and <em>that</em> use the same <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> instance and point to the same directory. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa829afc0243f1d307302f1167edecc7b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZipDir::cd </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>dirName</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Changes the 'current' directory. </p>
+<p>If the path starts with '/', it is interpreted as an absolute path from the root of the archive. Otherwise, it is interpreted as a path relative to the current directory as was set by the previous <a class="el" href="classQuaZipDir.html#aa829afc0243f1d307302f1167edecc7b" title="Changes the 'current' directory. ">cd()</a> or the constructor.</p>
+<p>Note that the subsequent <a class="el" href="classQuaZipDir.html#a68ac82ad605c0b10f9ee1a2d6d474f52" title="Returns the path to the current dir. ">path()</a> call will not return a path starting with '/' in all cases. </p>
+
+<p>References <a class="el" href="classQuaZipDir.html#aa829afc0243f1d307302f1167edecc7b">cd()</a>, <a class="el" href="classQuaZipDir.html#afd2f76410f7728a7166b7598926fbf96">dirName()</a>, <a class="el" href="classQuaZipDir.html#a22c8f63ce874f5c0e958ae5f42e6d004">exists()</a>, <a class="el" href="classQuaZipDir.html#a598fdf23f1b37e1876476e5969040a32">isRoot()</a>, and <a class="el" href="classQuaZipDir.html#a68ac82ad605c0b10f9ee1a2d6d474f52">path()</a>.</p>
+
+<p>Referenced by <a class="el" href="classQuaZipDir.html#aa829afc0243f1d307302f1167edecc7b">cd()</a>, and <a class="el" href="classQuaZipDir.html#a62306db3f4c0866930fa35c7348b84b3">cdUp()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afd2f76410f7728a7166b7598926fbf96"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QString QuaZipDir::dirName </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the current directory name. </p>
+<p>The name doesn't include the path. </p>
+
+<p>Referenced by <a class="el" href="classQuaZipDir.html#aa829afc0243f1d307302f1167edecc7b">cd()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aef966735a146fc10c9527c236aa89261"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QList< <a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> > QuaZipDir::entryInfoList </td>
+          <td>(</td>
+          <td class="paramtype">const QStringList & </td>
+          <td class="paramname"><em>nameFilters</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QDir::Filters </td>
+          <td class="paramname"><em>filters</em> = <code>QDir::NoFilter</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QDir::SortFlags </td>
+          <td class="paramname"><em>sort</em> = <code>QDir::NoSort</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the list of the entries in the directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">nameFilters</td><td>The list of file patterns to list, uses the same syntax as QDir. </td></tr>
+    <tr><td class="paramname">filters</td><td>The entry type filters, only Files and Dirs are accepted. </td></tr>
+    <tr><td class="paramname">sort</td><td>Sorting mode. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Referenced by <a class="el" href="classQuaZipDir.html#abec530f15597ddf8c8d1f340a333f7aa">entryInfoList()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abec530f15597ddf8c8d1f340a333f7aa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QList< <a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> > QuaZipDir::entryInfoList </td>
+          <td>(</td>
+          <td class="paramtype">QDir::Filters </td>
+          <td class="paramname"><em>filters</em> = <code>QDir::NoFilter</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QDir::SortFlags </td>
+          <td class="paramname"><em>sort</em> = <code>QDir::NoSort</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the list of the entries in the directory. </p>
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.</p>
+<p>The same as entryInfoList(QStringList(), filters, sort). </p>
+
+<p>References <a class="el" href="classQuaZipDir.html#aef966735a146fc10c9527c236aa89261">entryInfoList()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae2b5a4b251db7aeb165c6656da0e3431"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QList< <a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> > QuaZipDir::entryInfoList64 </td>
+          <td>(</td>
+          <td class="paramtype">const QStringList & </td>
+          <td class="paramname"><em>nameFilters</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QDir::Filters </td>
+          <td class="paramname"><em>filters</em> = <code>QDir::NoFilter</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QDir::SortFlags </td>
+          <td class="paramname"><em>sort</em> = <code>QDir::NoSort</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the list of the entries in the directory with zip64 support. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">nameFilters</td><td>The list of file patterns to list, uses the same syntax as QDir. </td></tr>
+    <tr><td class="paramname">filters</td><td>The entry type filters, only Files and Dirs are accepted. </td></tr>
+    <tr><td class="paramname">sort</td><td>Sorting mode. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Referenced by <a class="el" href="classQuaZipDir.html#a8c38ec214c300049685cbf71486636d5">entryInfoList64()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8c38ec214c300049685cbf71486636d5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QList< <a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> > QuaZipDir::entryInfoList64 </td>
+          <td>(</td>
+          <td class="paramtype">QDir::Filters </td>
+          <td class="paramname"><em>filters</em> = <code>QDir::NoFilter</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QDir::SortFlags </td>
+          <td class="paramname"><em>sort</em> = <code>QDir::NoSort</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the list of the entries in the directory with zip64 support. </p>
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.</p>
+<p>The same as entryInfoList64(QStringList(), filters, sort). </p>
+
+<p>References <a class="el" href="classQuaZipDir.html#ae2b5a4b251db7aeb165c6656da0e3431">entryInfoList64()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4a32faa77c4120cd3c6db4b683fa16d9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QStringList QuaZipDir::entryList </td>
+          <td>(</td>
+          <td class="paramtype">const QStringList & </td>
+          <td class="paramname"><em>nameFilters</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QDir::Filters </td>
+          <td class="paramname"><em>filters</em> = <code>QDir::NoFilter</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QDir::SortFlags </td>
+          <td class="paramname"><em>sort</em> = <code>QDir::NoSort</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the list of the entry names in the directory. </p>
+<p>The same as entryInfoList(nameFilters, filters, sort), but only returns entry names. </p>
+
+<p>Referenced by <a class="el" href="classQuaZipDir.html#aa3f14665e3991351f4ef94ab8e0ab29d">count()</a>, <a class="el" href="classQuaZipDir.html#ab20e9d3de675b74fcacc98accbc1d766">entryList()</a>, <a class="el" href="classQuaZipDir.html#aacb488fec6e951ac80e5d473534fee97">exists()</a>, and <a class="el" href="classQuaZipDir.html#a9e37ef5318c44a4575c58d66110e535a">operator[]()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab20e9d3de675b74fcacc98accbc1d766"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QStringList QuaZipDir::entryList </td>
+          <td>(</td>
+          <td class="paramtype">QDir::Filters </td>
+          <td class="paramname"><em>filters</em> = <code>QDir::NoFilter</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QDir::SortFlags </td>
+          <td class="paramname"><em>sort</em> = <code>QDir::NoSort</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the list of the entry names in the directory. </p>
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.</p>
+<p>The same as entryList(QStringList(), filters, sort). </p>
+
+<p>References <a class="el" href="classQuaZipDir.html#a4a32faa77c4120cd3c6db4b683fa16d9">entryList()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aacb488fec6e951ac80e5d473534fee97"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZipDir::exists </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>fileName</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns <code>true</code> if the entry with the specified name exists. </p>
+<p>The ".." is considered to exist if the current directory is not root. The "." and "/" are considered to always exist. Paths starting with "/" are relative to the archive root, other paths are relative to the current dir. </p>
+
+<p>References <a class="el" href="classQuaZip.html#a1d3fbd445a8e9d3449ded7371931c6b3">QuaZip::convertCaseSensitivity()</a>, <a class="el" href="classQuaZipDir.html#a4a32faa77c4120cd3c6db4b683fa16d9">entryList()</a>, <a class="el" href="classQuaZipDir.html#ae8b576a150f8d62c902067603cbc97ae">filePath()</a>, and <a class="el" href="classQuaZipDir.html#a598fdf23f1b37e1876476e5969040a32">isRoot()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae8b576a150f8d62c902067603cbc97ae"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QString QuaZipDir::filePath </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>fileName</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the full path to the specified file. </p>
+<p>Doesn't check if the file actually exists. </p>
+
+<p>Referenced by <a class="el" href="classQuaZipDir.html#aacb488fec6e951ac80e5d473534fee97">exists()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a598fdf23f1b37e1876476e5969040a32"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZipDir::isRoot </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns if the <a class="el" href="classQuaZipDir.html" title="Provides ZIP archive navigation. ">QuaZipDir</a> points to the root of the archive. </p>
+<p>Not that the root path is the empty string, not '/'. </p>
+
+<p>Referenced by <a class="el" href="classQuaZipDir.html#aa829afc0243f1d307302f1167edecc7b">cd()</a>, and <a class="el" href="classQuaZipDir.html#aacb488fec6e951ac80e5d473534fee97">exists()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a68ac82ad605c0b10f9ee1a2d6d474f52"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QString QuaZipDir::path </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the path to the current dir. </p>
+<p>The path never starts with '/', and the root path is an empty string. </p>
+
+<p>Referenced by <a class="el" href="classQuaZipDir.html#aa829afc0243f1d307302f1167edecc7b">cd()</a>, and <a class="el" href="classQuaZipDir.html#ae82d06e43856414c30583205d337c111">setPath()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2ae89c2b85786a0168656fc7a3faaf01"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QString QuaZipDir::relativeFilePath </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>fileName</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the path to the specified file relative to the current dir. </p>
+<p>This function is mostly useless, provided only for the sake of completeness.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fileName</td><td>The path to the file, should start with "/" if relative to the archive root. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Path relative to the current dir. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ae82d06e43856414c30583205d337c111"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZipDir::setPath </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>path</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Goes to the specified path. </p>
+<p>The difference from <a class="el" href="classQuaZipDir.html#aa829afc0243f1d307302f1167edecc7b" title="Changes the 'current' directory. ">cd()</a> is that this function never checks if the path actually exists and doesn't use relative paths, so it's possible to go to the root directory with setPath("").</p>
+<p>Note that this function still chops the trailing and/or leading '/' and treats a single '/' as the root path (<a class="el" href="classQuaZipDir.html#a68ac82ad605c0b10f9ee1a2d6d474f52" title="Returns the path to the current dir. ">path()</a> will still return an empty string). </p>
+
+<p>References <a class="el" href="classQuaZipDir.html#a68ac82ad605c0b10f9ee1a2d6d474f52">path()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>quazip/<a class="el" href="quazipdir_8h_source.html">quazipdir.h</a></li>
+<li>quazip/quazipdir.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZipFile-members.html b/3rdparty/quazip-0.7/doc/html/classQuaZipFile-members.html
new file mode 100644
index 0000000..cb02c4e
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZipFile-members.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QuaZipFile Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classQuaZipFile.html">QuaZipFile</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#a1e3f4c3c075da98af426fc167440cfc3">atEnd</a>() const </td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#a29fbfb34677f69394ae7c986ffd3a0c1">bytesAvailable</a>() const </td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#a42a39b12619bccd3d419ee60bbb3fcf6">close</a>()</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#ac4da08e5cdec368a2a686775f7dc5639">csize</a>() const </td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#a7b8e3c39026855cd98661a1b2815c220">getActualFileName</a>() const </td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#a25dbfddc589bf6b69b39905f3c3bcc73">getCaseSensitivity</a>() const </td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#ad3f5807329321be21b12c1ba5798b359">getFileInfo</a>(QuaZipFileInfo *info)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#af35876a5ac6e9c35234275a9e503110d">getFileInfo</a>(QuaZipFileInfo64 *info)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#a6999362e70a5b2396fba5cfb30095ff9">getFileName</a>() const </td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#a72daf8a9da14907a801a783603003205">getZip</a>() const </td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#a26d2ee56aad947193b73052f80597ef0">getZipError</a>() const </td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#a6f034a714aa94631367590de3f8f4e22">getZipName</a>() const </td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#a0df3db94c2a34c8d17ddaa0f54fc32c1">isRaw</a>() const </td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#a64430ec50820c8096f963a7e5f53001f">isSequential</a>() const </td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#a4c20c0ef00ae79c9a59eafe2906c9384">open</a>(OpenMode mode)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#a0bff0d15bbcd70306dc4a553a55776b9">open</a>(OpenMode mode, const char *password)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#aed75bace51f2bb4c3e4f656ab4493aac">open</a>(OpenMode mode, int *method, int *level, bool raw, const char *password=NULL)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#a2429ea59c77371d7af56d739db130b18">open</a>(OpenMode mode, const QuaZipNewInfo &info, const char *password=NULL, quint32 crc=0, int method=Z_DEFLATED, int level=Z_DEFAULT_COMPRESSION, bool raw=false, int windowBits=-MAX_WBITS, int memLevel=DEF_MEM_LEVEL, int strategy=Z_DEFAULT_STRATEGY)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#a90fd55dab83eca7f95df50b2c41b7f22">pos</a>() const </td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#ad31592e0e8a9eaa009c6c0e2040a2158">QuaZipFile</a>()</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#a1349ad27f1947bc3e346d83dbf9586c4">QuaZipFile</a>(QObject *parent)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#ae614495d6b2404a6c59d7cfca5c3f6fd">QuaZipFile</a>(const QString &zipName, QObject *parent=NULL)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#ac6e883b5a5d3a58c9c56eb497dd91220">QuaZipFile</a>(const QString &zipName, const QString &fileName, QuaZip::CaseSensitivity cs=QuaZip::csDefault, QObject *parent=NULL)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#a54e944a6b3d27030f64c8f30d2cc33bb">QuaZipFile</a>(QuaZip *zip, QObject *parent=NULL)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>QuaZipFilePrivate</b> (defined in <a class="el" href="classQuaZipFile.html">QuaZipFile</a>)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#aa1f2274e1579327855a17d67a9046ec2">readData</a>(char *data, qint64 maxSize)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#a3732ca7704379d457b6a27db8837de95">setFileName</a>(const QString &fileName, QuaZip::CaseSensitivity cs=QuaZip::csDefault)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#ab7939a26d1e8de2f6aca54f49a12b980">setZip</a>(QuaZip *zip)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#ac8109e9a5c19bea75982ff6986b5cb1e">setZipName</a>(const QString &zipName)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#ad1a17cc690a01c3edfb82984c3a4c8f0">size</a>() const </td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#a4814b5e6e39fb254737b81ea10964f50">usize</a>() const </td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipFile.html#abd07949a6fcc2ef094d2be5398bc8e7c">writeData</a>(const char *data, qint64 maxSize)</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipFile.html#aa1e5a0cf491bafae6cc73e649caa97fc">~QuaZipFile</a>()</td><td class="entry"><a class="el" href="classQuaZipFile.html">QuaZipFile</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZipFile.html b/3rdparty/quazip-0.7/doc/html/classQuaZipFile.html
new file mode 100644
index 0000000..1601393
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZipFile.html
@@ -0,0 +1,1034 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaZipFile Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="#friends">Friends</a> |
+<a href="classQuaZipFile-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">QuaZipFile Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>A file inside ZIP archive.  
+ <a href="classQuaZipFile.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="quazipfile_8h_source.html">quazip/quazipfile.h</a>></code></p>
+<div class="dynheader">
+Inheritance diagram for QuaZipFile:</div>
+<div class="dyncontent">
+<div class="center"><img src="classQuaZipFile__inherit__graph.png" border="0" usemap="#QuaZipFile_inherit__map" alt="Inheritance graph"/></div>
+<map name="QuaZipFile_inherit__map" id="QuaZipFile_inherit__map">
+</map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for QuaZipFile:</div>
+<div class="dyncontent">
+<div class="center"><img src="classQuaZipFile__coll__graph.png" border="0" usemap="#QuaZipFile_coll__map" alt="Collaboration graph"/></div>
+<map name="QuaZipFile_coll__map" id="QuaZipFile_coll__map">
+</map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ad31592e0e8a9eaa009c6c0e2040a2158"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#ad31592e0e8a9eaa009c6c0e2040a2158">QuaZipFile</a> ()</td></tr>
+<tr class="memdesc:ad31592e0e8a9eaa009c6c0e2040a2158"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instance.  <a href="#ad31592e0e8a9eaa009c6c0e2040a2158">More...</a><br/></td></tr>
+<tr class="separator:ad31592e0e8a9eaa009c6c0e2040a2158"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1349ad27f1947bc3e346d83dbf9586c4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a1349ad27f1947bc3e346d83dbf9586c4">QuaZipFile</a> (QObject *parent)</td></tr>
+<tr class="memdesc:a1349ad27f1947bc3e346d83dbf9586c4"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instance.  <a href="#a1349ad27f1947bc3e346d83dbf9586c4">More...</a><br/></td></tr>
+<tr class="separator:a1349ad27f1947bc3e346d83dbf9586c4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae614495d6b2404a6c59d7cfca5c3f6fd"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#ae614495d6b2404a6c59d7cfca5c3f6fd">QuaZipFile</a> (const QString &zipName, QObject *parent=NULL)</td></tr>
+<tr class="memdesc:ae614495d6b2404a6c59d7cfca5c3f6fd"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instance.  <a href="#ae614495d6b2404a6c59d7cfca5c3f6fd">More...</a><br/></td></tr>
+<tr class="separator:ae614495d6b2404a6c59d7cfca5c3f6fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac6e883b5a5d3a58c9c56eb497dd91220"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#ac6e883b5a5d3a58c9c56eb497dd91220">QuaZipFile</a> (const QString &zipName, const QString &fileName, <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a> cs=<a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976 [...]
+<tr class="memdesc:ac6e883b5a5d3a58c9c56eb497dd91220"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instance.  <a href="#ac6e883b5a5d3a58c9c56eb497dd91220">More...</a><br/></td></tr>
+<tr class="separator:ac6e883b5a5d3a58c9c56eb497dd91220"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a54e944a6b3d27030f64c8f30d2cc33bb"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a54e944a6b3d27030f64c8f30d2cc33bb">QuaZipFile</a> (<a class="el" href="classQuaZip.html">QuaZip</a> *zip, QObject *parent=NULL)</td></tr>
+<tr class="memdesc:a54e944a6b3d27030f64c8f30d2cc33bb"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instance.  <a href="#a54e944a6b3d27030f64c8f30d2cc33bb">More...</a><br/></td></tr>
+<tr class="separator:a54e944a6b3d27030f64c8f30d2cc33bb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa1e5a0cf491bafae6cc73e649caa97fc"><td class="memItemLeft" align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#aa1e5a0cf491bafae6cc73e649caa97fc">~QuaZipFile</a> ()</td></tr>
+<tr class="memdesc:aa1e5a0cf491bafae6cc73e649caa97fc"><td class="mdescLeft"> </td><td class="mdescRight">Destroys a <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instance.  <a href="#aa1e5a0cf491bafae6cc73e649caa97fc">More...</a><br/></td></tr>
+<tr class="separator:aa1e5a0cf491bafae6cc73e649caa97fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6f034a714aa94631367590de3f8f4e22"><td class="memItemLeft" align="right" valign="top">QString </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a6f034a714aa94631367590de3f8f4e22">getZipName</a> () const </td></tr>
+<tr class="memdesc:a6f034a714aa94631367590de3f8f4e22"><td class="mdescLeft"> </td><td class="mdescRight">Returns the ZIP archive file name.  <a href="#a6f034a714aa94631367590de3f8f4e22">More...</a><br/></td></tr>
+<tr class="separator:a6f034a714aa94631367590de3f8f4e22"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a72daf8a9da14907a801a783603003205"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classQuaZip.html">QuaZip</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a72daf8a9da14907a801a783603003205">getZip</a> () const </td></tr>
+<tr class="memdesc:a72daf8a9da14907a801a783603003205"><td class="mdescLeft"> </td><td class="mdescRight">Returns a pointer to the associated <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object.  <a href="#a72daf8a9da14907a801a783603003205">More...</a><br/></td></tr>
+<tr class="separator:a72daf8a9da14907a801a783603003205"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6999362e70a5b2396fba5cfb30095ff9"><td class="memItemLeft" align="right" valign="top">QString </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a6999362e70a5b2396fba5cfb30095ff9">getFileName</a> () const </td></tr>
+<tr class="memdesc:a6999362e70a5b2396fba5cfb30095ff9"><td class="mdescLeft"> </td><td class="mdescRight">Returns file name.  <a href="#a6999362e70a5b2396fba5cfb30095ff9">More...</a><br/></td></tr>
+<tr class="separator:a6999362e70a5b2396fba5cfb30095ff9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a25dbfddc589bf6b69b39905f3c3bcc73"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a25dbfddc589bf6b69b39905f3c3bcc73">getCaseSensitivity</a> () const </td></tr>
+<tr class="memdesc:a25dbfddc589bf6b69b39905f3c3bcc73"><td class="mdescLeft"> </td><td class="mdescRight">Returns case sensitivity of the file name.  <a href="#a25dbfddc589bf6b69b39905f3c3bcc73">More...</a><br/></td></tr>
+<tr class="separator:a25dbfddc589bf6b69b39905f3c3bcc73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b8e3c39026855cd98661a1b2815c220"><td class="memItemLeft" align="right" valign="top">QString </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a7b8e3c39026855cd98661a1b2815c220">getActualFileName</a> () const </td></tr>
+<tr class="memdesc:a7b8e3c39026855cd98661a1b2815c220"><td class="mdescLeft"> </td><td class="mdescRight">Returns the actual file name in the archive.  <a href="#a7b8e3c39026855cd98661a1b2815c220">More...</a><br/></td></tr>
+<tr class="separator:a7b8e3c39026855cd98661a1b2815c220"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac8109e9a5c19bea75982ff6986b5cb1e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#ac8109e9a5c19bea75982ff6986b5cb1e">setZipName</a> (const QString &zipName)</td></tr>
+<tr class="memdesc:ac8109e9a5c19bea75982ff6986b5cb1e"><td class="mdescLeft"> </td><td class="mdescRight">Sets the ZIP archive file name.  <a href="#ac8109e9a5c19bea75982ff6986b5cb1e">More...</a><br/></td></tr>
+<tr class="separator:ac8109e9a5c19bea75982ff6986b5cb1e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0df3db94c2a34c8d17ddaa0f54fc32c1"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a0df3db94c2a34c8d17ddaa0f54fc32c1">isRaw</a> () const </td></tr>
+<tr class="memdesc:a0df3db94c2a34c8d17ddaa0f54fc32c1"><td class="mdescLeft"> </td><td class="mdescRight">Returns <code>true</code> if the file was opened in raw mode.  <a href="#a0df3db94c2a34c8d17ddaa0f54fc32c1">More...</a><br/></td></tr>
+<tr class="separator:a0df3db94c2a34c8d17ddaa0f54fc32c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab7939a26d1e8de2f6aca54f49a12b980"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#ab7939a26d1e8de2f6aca54f49a12b980">setZip</a> (<a class="el" href="classQuaZip.html">QuaZip</a> *zip)</td></tr>
+<tr class="memdesc:ab7939a26d1e8de2f6aca54f49a12b980"><td class="mdescLeft"> </td><td class="mdescRight">Binds to the existing <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> instance.  <a href="#ab7939a26d1e8de2f6aca54f49a12b980">More...</a><br/></td></tr>
+<tr class="separator:ab7939a26d1e8de2f6aca54f49a12b980"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3732ca7704379d457b6a27db8837de95"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a3732ca7704379d457b6a27db8837de95">setFileName</a> (const QString &fileName, <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a> cs=<a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253">Q [...]
+<tr class="memdesc:a3732ca7704379d457b6a27db8837de95"><td class="mdescLeft"> </td><td class="mdescRight">Sets the file name.  <a href="#a3732ca7704379d457b6a27db8837de95">More...</a><br/></td></tr>
+<tr class="separator:a3732ca7704379d457b6a27db8837de95"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4c20c0ef00ae79c9a59eafe2906c9384"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a4c20c0ef00ae79c9a59eafe2906c9384">open</a> (OpenMode mode)</td></tr>
+<tr class="memdesc:a4c20c0ef00ae79c9a59eafe2906c9384"><td class="mdescLeft"> </td><td class="mdescRight">Opens a file for reading.  <a href="#a4c20c0ef00ae79c9a59eafe2906c9384">More...</a><br/></td></tr>
+<tr class="separator:a4c20c0ef00ae79c9a59eafe2906c9384"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0bff0d15bbcd70306dc4a553a55776b9"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a0bff0d15bbcd70306dc4a553a55776b9">open</a> (OpenMode mode, const char *password)</td></tr>
+<tr class="memdesc:a0bff0d15bbcd70306dc4a553a55776b9"><td class="mdescLeft"> </td><td class="mdescRight">Opens a file for reading.  <a href="#a0bff0d15bbcd70306dc4a553a55776b9">More...</a><br/></td></tr>
+<tr class="separator:a0bff0d15bbcd70306dc4a553a55776b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aed75bace51f2bb4c3e4f656ab4493aac"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#aed75bace51f2bb4c3e4f656ab4493aac">open</a> (OpenMode mode, int *method, int *level, bool raw, const char *password=NULL)</td></tr>
+<tr class="memdesc:aed75bace51f2bb4c3e4f656ab4493aac"><td class="mdescLeft"> </td><td class="mdescRight">Opens a file for reading.  <a href="#aed75bace51f2bb4c3e4f656ab4493aac">More...</a><br/></td></tr>
+<tr class="separator:aed75bace51f2bb4c3e4f656ab4493aac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2429ea59c77371d7af56d739db130b18"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a2429ea59c77371d7af56d739db130b18">open</a> (OpenMode mode, const <a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a> &info, const char *password=NULL, quint32 crc=0, int method=Z_DEFLATED, int level=Z_DEFAULT_COMPRESSION, bool raw=false, int windowBits=-MAX_WBITS, int memL [...]
+<tr class="memdesc:a2429ea59c77371d7af56d739db130b18"><td class="mdescLeft"> </td><td class="mdescRight">Opens a file for writing.  <a href="#a2429ea59c77371d7af56d739db130b18">More...</a><br/></td></tr>
+<tr class="separator:a2429ea59c77371d7af56d739db130b18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a64430ec50820c8096f963a7e5f53001f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a64430ec50820c8096f963a7e5f53001f"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a64430ec50820c8096f963a7e5f53001f">isSequential</a> () const </td></tr>
+<tr class="memdesc:a64430ec50820c8096f963a7e5f53001f"><td class="mdescLeft"> </td><td class="mdescRight">Returns <code>true</code>, but <a class="el" href="classQuaZipFile.html#quazipfile-sequential">beware</a>! <br/></td></tr>
+<tr class="separator:a64430ec50820c8096f963a7e5f53001f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a90fd55dab83eca7f95df50b2c41b7f22"><td class="memItemLeft" align="right" valign="top">virtual qint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a90fd55dab83eca7f95df50b2c41b7f22">pos</a> () const </td></tr>
+<tr class="memdesc:a90fd55dab83eca7f95df50b2c41b7f22"><td class="mdescLeft"> </td><td class="mdescRight">Returns current position in the file.  <a href="#a90fd55dab83eca7f95df50b2c41b7f22">More...</a><br/></td></tr>
+<tr class="separator:a90fd55dab83eca7f95df50b2c41b7f22"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1e3f4c3c075da98af426fc167440cfc3"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a1e3f4c3c075da98af426fc167440cfc3">atEnd</a> () const </td></tr>
+<tr class="memdesc:a1e3f4c3c075da98af426fc167440cfc3"><td class="mdescLeft"> </td><td class="mdescRight">Returns <code>true</code> if the end of file was reached.  <a href="#a1e3f4c3c075da98af426fc167440cfc3">More...</a><br/></td></tr>
+<tr class="separator:a1e3f4c3c075da98af426fc167440cfc3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad1a17cc690a01c3edfb82984c3a4c8f0"><td class="memItemLeft" align="right" valign="top">virtual qint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#ad1a17cc690a01c3edfb82984c3a4c8f0">size</a> () const </td></tr>
+<tr class="memdesc:ad1a17cc690a01c3edfb82984c3a4c8f0"><td class="mdescLeft"> </td><td class="mdescRight">Returns file size.  <a href="#ad1a17cc690a01c3edfb82984c3a4c8f0">More...</a><br/></td></tr>
+<tr class="separator:ad1a17cc690a01c3edfb82984c3a4c8f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac4da08e5cdec368a2a686775f7dc5639"><td class="memItemLeft" align="right" valign="top">qint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#ac4da08e5cdec368a2a686775f7dc5639">csize</a> () const </td></tr>
+<tr class="memdesc:ac4da08e5cdec368a2a686775f7dc5639"><td class="mdescLeft"> </td><td class="mdescRight">Returns compressed file size.  <a href="#ac4da08e5cdec368a2a686775f7dc5639">More...</a><br/></td></tr>
+<tr class="separator:ac4da08e5cdec368a2a686775f7dc5639"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4814b5e6e39fb254737b81ea10964f50"><td class="memItemLeft" align="right" valign="top">qint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a4814b5e6e39fb254737b81ea10964f50">usize</a> () const </td></tr>
+<tr class="memdesc:a4814b5e6e39fb254737b81ea10964f50"><td class="mdescLeft"> </td><td class="mdescRight">Returns uncompressed file size.  <a href="#a4814b5e6e39fb254737b81ea10964f50">More...</a><br/></td></tr>
+<tr class="separator:a4814b5e6e39fb254737b81ea10964f50"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad3f5807329321be21b12c1ba5798b359"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#ad3f5807329321be21b12c1ba5798b359">getFileInfo</a> (<a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> *info)</td></tr>
+<tr class="memdesc:ad3f5807329321be21b12c1ba5798b359"><td class="mdescLeft"> </td><td class="mdescRight">Gets information about current file.  <a href="#ad3f5807329321be21b12c1ba5798b359">More...</a><br/></td></tr>
+<tr class="separator:ad3f5807329321be21b12c1ba5798b359"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af35876a5ac6e9c35234275a9e503110d"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#af35876a5ac6e9c35234275a9e503110d">getFileInfo</a> (<a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> *info)</td></tr>
+<tr class="memdesc:af35876a5ac6e9c35234275a9e503110d"><td class="mdescLeft"> </td><td class="mdescRight">Gets information about current file with zip64 support.  <a href="#af35876a5ac6e9c35234275a9e503110d">More...</a><br/></td></tr>
+<tr class="separator:af35876a5ac6e9c35234275a9e503110d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a42a39b12619bccd3d419ee60bbb3fcf6"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a42a39b12619bccd3d419ee60bbb3fcf6">close</a> ()</td></tr>
+<tr class="memdesc:a42a39b12619bccd3d419ee60bbb3fcf6"><td class="mdescLeft"> </td><td class="mdescRight">Closes the file.  <a href="#a42a39b12619bccd3d419ee60bbb3fcf6">More...</a><br/></td></tr>
+<tr class="separator:a42a39b12619bccd3d419ee60bbb3fcf6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a26d2ee56aad947193b73052f80597ef0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a26d2ee56aad947193b73052f80597ef0"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a26d2ee56aad947193b73052f80597ef0">getZipError</a> () const </td></tr>
+<tr class="memdesc:a26d2ee56aad947193b73052f80597ef0"><td class="mdescLeft"> </td><td class="mdescRight">Returns the error code returned by the last ZIP/UNZIP API call. <br/></td></tr>
+<tr class="separator:a26d2ee56aad947193b73052f80597ef0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a29fbfb34677f69394ae7c986ffd3a0c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29fbfb34677f69394ae7c986ffd3a0c1"></a>
+virtual qint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#a29fbfb34677f69394ae7c986ffd3a0c1">bytesAvailable</a> () const </td></tr>
+<tr class="memdesc:a29fbfb34677f69394ae7c986ffd3a0c1"><td class="mdescLeft"> </td><td class="mdescRight">Returns the number of bytes available for reading. <br/></td></tr>
+<tr class="separator:a29fbfb34677f69394ae7c986ffd3a0c1"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:aa1f2274e1579327855a17d67a9046ec2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1f2274e1579327855a17d67a9046ec2"></a>
+qint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#aa1f2274e1579327855a17d67a9046ec2">readData</a> (char *data, qint64 maxSize)</td></tr>
+<tr class="memdesc:aa1f2274e1579327855a17d67a9046ec2"><td class="mdescLeft"> </td><td class="mdescRight">Implementation of the QIODevice::readData(). <br/></td></tr>
+<tr class="separator:aa1f2274e1579327855a17d67a9046ec2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abd07949a6fcc2ef094d2be5398bc8e7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd07949a6fcc2ef094d2be5398bc8e7c"></a>
+qint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="classQuaZipFile.html#abd07949a6fcc2ef094d2be5398bc8e7c">writeData</a> (const char *data, qint64 maxSize)</td></tr>
+<tr class="memdesc:abd07949a6fcc2ef094d2be5398bc8e7c"><td class="mdescLeft"> </td><td class="mdescRight">Implementation of the QIODevice::writeData(). <br/></td></tr>
+<tr class="separator:abd07949a6fcc2ef094d2be5398bc8e7c"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:abeded291f2788ca39fe2256d78f95266"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abeded291f2788ca39fe2256d78f95266"></a>
+class </td><td class="memItemRight" valign="bottom"><b>QuaZipFilePrivate</b></td></tr>
+<tr class="separator:abeded291f2788ca39fe2256d78f95266"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>A file inside ZIP archive. </p>
+<p>This is the most interesting class. Not only it provides C++ interface to the ZIP/UNZIP package, but also integrates it with Qt by subclassing QIODevice. This makes possible to access files inside ZIP archive using QTextStream or QDataStream, for example. Actually, this is the main purpose of the whole QuaZIP library.</p>
+<p>You can either use existing <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> instance to create instance of this class or pass ZIP archive file name to this class, in which case it will create internal <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object. See constructors' descriptions for details. Writing is only possible with the existing instance.</p>
+<p>Note that due to the underlying library's limitation it is not possible to use multiple <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instances to open several files in the same archive at the same time. If you need to write to multiple files in parallel, then you should write to temporary files first, then pack them all at once when you have finished writing. If you need to read multiple files inside the same archive in parallel, you sho [...]
+<h1><a class="anchor" id="quazipfile-sequential"></a>
+Sequential or random-access?</h1>
+<p>At the first thought, <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> has fixed size, the start and the end and should be therefore considered random-access device. But there is one major obstacle to making it random-access: ZIP/UNZIP API does not support seek() operation and the only way to implement it is through reopening the file and re-reading to the required position, but this is prohibitively slow.</p>
+<p>Therefore, <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> is considered to be a sequential device. This has advantage of availability of the ungetChar() operation (QIODevice does not implement it properly for non-sequential devices unless they support seek()). Disadvantage is a somewhat strange behaviour of the <a class="el" href="classQuaZipFile.html#ad1a17cc690a01c3edfb82984c3a4c8f0" title="Returns file size. ">size()</a> and <a class="e [...]
+</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="ad31592e0e8a9eaa009c6c0e2040a2158"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZipFile::QuaZipFile </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Constructs a <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instance. </p>
+<p>You should use <a class="el" href="classQuaZipFile.html#ac8109e9a5c19bea75982ff6986b5cb1e" title="Sets the ZIP archive file name. ">setZipName()</a> and <a class="el" href="classQuaZipFile.html#a3732ca7704379d457b6a27db8837de95" title="Sets the file name. ">setFileName()</a> or <a class="el" href="classQuaZipFile.html#ab7939a26d1e8de2f6aca54f49a12b980" title="Binds to the existing QuaZip instance. ">setZip()</a> before trying to call <a class="el" href="classQuaZipFile.html#a4c20c0ef0 [...]
+
+</div>
+</div>
+<a class="anchor" id="a1349ad27f1947bc3e346d83dbf9586c4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZipFile::QuaZipFile </td>
+          <td>(</td>
+          <td class="paramtype">QObject * </td>
+          <td class="paramname"><em>parent</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Constructs a <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instance. </p>
+<p><em>parent</em> argument specifies this object's parent object.</p>
+<p>You should use <a class="el" href="classQuaZipFile.html#ac8109e9a5c19bea75982ff6986b5cb1e" title="Sets the ZIP archive file name. ">setZipName()</a> and <a class="el" href="classQuaZipFile.html#a3732ca7704379d457b6a27db8837de95" title="Sets the file name. ">setFileName()</a> or <a class="el" href="classQuaZipFile.html#ab7939a26d1e8de2f6aca54f49a12b980" title="Binds to the existing QuaZip instance. ">setZip()</a> before trying to call <a class="el" href="classQuaZipFile.html#a4c20c0ef0 [...]
+
+</div>
+</div>
+<a class="anchor" id="ae614495d6b2404a6c59d7cfca5c3f6fd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZipFile::QuaZipFile </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>zipName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QObject * </td>
+          <td class="paramname"><em>parent</em> = <code>NULL</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Constructs a <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instance. </p>
+<p><em>parent</em> argument specifies this object's parent object and <em>zipName</em> specifies ZIP archive file name.</p>
+<p>You should use <a class="el" href="classQuaZipFile.html#a3732ca7704379d457b6a27db8837de95" title="Sets the file name. ">setFileName()</a> before trying to call <a class="el" href="classQuaZipFile.html#a4c20c0ef00ae79c9a59eafe2906c9384" title="Opens a file for reading. ">open()</a> on the constructed object.</p>
+<p><a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> constructed by this constructor can be used for read only access. Use <a class="el" href="classQuaZipFile.html#a54e944a6b3d27030f64c8f30d2cc33bb" title="Constructs a QuaZipFile instance. ">QuaZipFile(QuaZip*,QObject*)</a> for writing. </p>
+
+</div>
+</div>
+<a class="anchor" id="ac6e883b5a5d3a58c9c56eb497dd91220"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZipFile::QuaZipFile </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>zipName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>fileName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a> </td>
+          <td class="paramname"><em>cs</em> = <code><a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253">QuaZip::csDefault</a></code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QObject * </td>
+          <td class="paramname"><em>parent</em> = <code>NULL</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Constructs a <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instance. </p>
+<p><em>parent</em> argument specifies this object's parent object, <em>zipName</em> specifies ZIP archive file name and <em>fileName</em> and <em>cs</em> specify a name of the file to open inside archive.</p>
+<p><a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> constructed by this constructor can be used for read only access. Use <a class="el" href="classQuaZipFile.html#a54e944a6b3d27030f64c8f30d2cc33bb" title="Constructs a QuaZipFile instance. ">QuaZipFile(QuaZip*,QObject*)</a> for writing.</p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#a6c657bfcfccb59d728e0da24c677d899" title="Sets current file by its name. ">QuaZip::setCurrentFile()</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a54e944a6b3d27030f64c8f30d2cc33bb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZipFile::QuaZipFile </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classQuaZip.html">QuaZip</a> * </td>
+          <td class="paramname"><em>zip</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">QObject * </td>
+          <td class="paramname"><em>parent</em> = <code>NULL</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Constructs a <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instance. </p>
+<p><em>parent</em> argument specifies this object's parent object.</p>
+<p><em>zip</em> is the pointer to the existing <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object. This <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> object then can be used to read current file in the <em>zip</em> or to write to the file inside it.</p>
+<dl class="section warning"><dt>Warning</dt><dd>Using this constructor for reading current file can be tricky. Let's take the following example: <div class="fragment"><div class="line"><a class="code" href="classQuaZip.html">QuaZip</a> zip(<span class="stringliteral">"archive.zip"</span>);</div>
+<div class="line">zip.open(<a class="code" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">QuaZip::mdUnzip</a>);</div>
+<div class="line">zip.setCurrentFile(<span class="stringliteral">"file-in-archive"</span>);</div>
+<div class="line"><a class="code" href="classQuaZipFile.html">QuaZipFile</a> file(&zip);</div>
+<div class="line">file.open(QIODevice::ReadOnly);</div>
+<div class="line"><span class="comment">// ok, now we can read from the file</span></div>
+<div class="line">file.read(somewhere, some);</div>
+<div class="line">zip.setCurrentFile(<span class="stringliteral">"another-file-in-archive"</span>); <span class="comment">// oops...</span></div>
+<div class="line"><a class="code" href="classQuaZipFile.html">QuaZipFile</a> anotherFile(&zip);</div>
+<div class="line">anotherFile.open(QIODevice::ReadOnly);</div>
+<div class="line">anotherFile.read(somewhere, some); <span class="comment">// this is still ok...</span></div>
+<div class="line">file.read(somewhere, some); <span class="comment">// and this is NOT</span></div>
+</div><!-- fragment --> So, what exactly happens here? When we change current file in the <code>zip</code> archive, <code>file</code> that references it becomes invalid (actually, as far as I understand ZIP/UNZIP sources, it becomes closed, but <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> has no means to detect it).</dd></dl>
+<p>Summary: do not close <code>zip</code> object or change its current file as long as <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> is open. Even better - use another constructors which create internal <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> instances, one per object, and therefore do not cause unnecessary trouble. This constructor may be useful, though, if you already have a <a class="el" href="classQuaZip.ht [...]
+<div class="fragment"><div class="line"><a class="code" href="classQuaZip.html">QuaZip</a> zip(<span class="stringliteral">"archive.zip"</span>);</div>
+<div class="line">zip.open(<a class="code" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">QuaZip::mdUnzip</a>);</div>
+<div class="line"><span class="comment">// first, we need some information about archive itself</span></div>
+<div class="line">QByteArray comment=zip.getComment();</div>
+<div class="line"><span class="comment">// and now we are going to access files inside it</span></div>
+<div class="line"><a class="code" href="classQuaZipFile.html">QuaZipFile</a> file(&zip);</div>
+<div class="line"><span class="keywordflow">for</span>(<span class="keywordtype">bool</span> more=zip.goToFirstFile(); more; more=zip.goToNextFile()) {</div>
+<div class="line">  file.open(QIODevice::ReadOnly);</div>
+<div class="line">  <span class="comment">// do something cool with file here</span></div>
+<div class="line">  file.close(); <span class="comment">// do not forget to close!</span></div>
+<div class="line">}</div>
+<div class="line">zip.close();</div>
+</div><!-- fragment --> 
+</div>
+</div>
+<a class="anchor" id="aa1e5a0cf491bafae6cc73e649caa97fc"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZipFile::~QuaZipFile </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Destroys a <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instance. </p>
+<p>Closes file if open, destructs internal <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object (if it exists and <em>is</em> internal, of course). </p>
+
+<p>References <a class="el" href="classQuaZipFile.html#a42a39b12619bccd3d419ee60bbb3fcf6">close()</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a6f034a714aa94631367590de3f8f4e22"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QString QuaZipFile::getZipName </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the ZIP archive file name. </p>
+<p>If this object was created by passing <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> pointer to the constructor, this function will return that <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a>'s file name (or null string if that object does not have file name yet).</p>
+<p>Otherwise, returns associated ZIP archive file name or null string if there are no name set yet.</p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZipFile.html#ac8109e9a5c19bea75982ff6986b5cb1e" title="Sets the ZIP archive file name. ">setZipName()</a> <a class="el" href="classQuaZipFile.html#a6999362e70a5b2396fba5cfb30095ff9" title="Returns file name. ">getFileName()</a> </dd></dl>
+
+<p>References <a class="el" href="classQuaZip.html#a4f7deef08ff40aeb1a7a04bcd7f228c2">QuaZip::getZipName()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a72daf8a9da14907a801a783603003205"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classQuaZip.html">QuaZip</a> * QuaZipFile::getZip </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns a pointer to the associated <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object. </p>
+<p>Returns <code>NULL</code> if there is no associated <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> or it is internal (so you will not mess with it). </p>
+
+</div>
+</div>
+<a class="anchor" id="a6999362e70a5b2396fba5cfb30095ff9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QString QuaZipFile::getFileName </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns file name. </p>
+<p>This function returns file name you passed to this object either by using <a class="el" href="classQuaZipFile.html#ac6e883b5a5d3a58c9c56eb497dd91220" title="Constructs a QuaZipFile instance. ">QuaZipFile(const QString&,const QString&,QuaZip::CaseSensitivity,QObject*)</a> or by calling <a class="el" href="classQuaZipFile.html#a3732ca7704379d457b6a27db8837de95" title="Sets the file name. ">setFileName()</a>. Real name of the file may differ in case if you used case-insensitivity.</p>
+<p>Returns null string if there is no file name set yet. This is the case when this <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> operates on the existing <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object (constructor <a class="el" href="classQuaZipFile.html#a54e944a6b3d27030f64c8f30d2cc33bb" title="Constructs a QuaZipFile instance. ">QuaZipFile(QuaZip*,QObject*)</a> or <a class="el" href="classQuaZipFile.html#ab7 [...]
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZipFile.html#a7b8e3c39026855cd98661a1b2815c220" title="Returns the actual file name in the archive. ">getActualFileName</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a25dbfddc589bf6b69b39905f3c3bcc73"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a> QuaZipFile::getCaseSensitivity </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns case sensitivity of the file name. </p>
+<p>This function returns case sensitivity argument you passed to this object either by using <a class="el" href="classQuaZipFile.html#ac6e883b5a5d3a58c9c56eb497dd91220" title="Constructs a QuaZipFile instance. ">QuaZipFile(const QString&,const QString&,QuaZip::CaseSensitivity,QObject*)</a> or by calling <a class="el" href="classQuaZipFile.html#a3732ca7704379d457b6a27db8837de95" title="Sets the file name. ">setFileName()</a>.</p>
+<p>Returns unpredictable value if <a class="el" href="classQuaZipFile.html#a6999362e70a5b2396fba5cfb30095ff9" title="Returns file name. ">getFileName()</a> returns null string (this is the case when you did not used <a class="el" href="classQuaZipFile.html#a3732ca7704379d457b6a27db8837de95" title="Sets the file name. ">setFileName()</a> or constructor above).</p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZipFile.html#a6999362e70a5b2396fba5cfb30095ff9" title="Returns file name. ">getFileName</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a7b8e3c39026855cd98661a1b2815c220"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QString QuaZipFile::getActualFileName </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the actual file name in the archive. </p>
+<p>This is <em>not</em> a ZIP archive file name, but a name of file inside archive. It is not necessary the same name that you have passed to the <a class="el" href="classQuaZipFile.html#ac6e883b5a5d3a58c9c56eb497dd91220" title="Constructs a QuaZipFile instance. ">QuaZipFile(const QString&,const QString&,QuaZip::CaseSensitivity,QObject*)</a>, <a class="el" href="classQuaZipFile.html#a3732ca7704379d457b6a27db8837de95" title="Sets the file name. ">setFileName()</a> or <a class="el" [...]
+<p>Equivalent to calling getCurrentFileName() on the associated <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object. Returns null string if there is no associated <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object or if it does not have a current file yet. And this is the case if you called <a class="el" href="classQuaZipFile.html#a3732ca7704379d457b6a27db8837de95" title="Sets the file name. ">setFileName()</a> but did not open the fil [...]
+<div class="fragment"><div class="line"><a class="code" href="classQuaZipFile.html">QuaZipFile</a> file(<span class="stringliteral">"somezip.zip"</span>);</div>
+<div class="line">file.setFileName(<span class="stringliteral">"somefile"</span>);</div>
+<div class="line">QString name=file.getName(); <span class="comment">// name=="somefile"</span></div>
+<div class="line">QString actual=file.getActualFileName(); <span class="comment">// actual is null string</span></div>
+<div class="line">file.open(QIODevice::ReadOnly);</div>
+<div class="line">QString actual=file.getActualFileName(); <span class="comment">// actual can be "SoMeFiLe" on Windows</span></div>
+</div><!-- fragment --><dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZipFile.html#a6f034a714aa94631367590de3f8f4e22" title="Returns the ZIP archive file name. ">getZipName()</a>, <a class="el" href="classQuaZipFile.html#a6999362e70a5b2396fba5cfb30095ff9" title="Returns file name. ">getFileName()</a>, <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe" title="Case sensitivity for the file names. ">QuaZip::CaseSensitivity</a> </dd></dl>
+
+<p>References <a class="el" href="classQuaZip.html#a9783f8b4f39cd55e71e975aea78fd54a">QuaZip::getCurrentFileName()</a>, and <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">QuaZip::getZipError()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac8109e9a5c19bea75982ff6986b5cb1e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZipFile::setZipName </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>zipName</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the ZIP archive file name. </p>
+<p>Automatically creates internal <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object and destroys previously created internal <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object, if any.</p>
+<p>Will do nothing if this file is already open. You must <a class="el" href="classQuaZipFile.html#a42a39b12619bccd3d419ee60bbb3fcf6" title="Closes the file. ">close()</a> it first. </p>
+
+</div>
+</div>
+<a class="anchor" id="a0df3db94c2a34c8d17ddaa0f54fc32c1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZipFile::isRaw </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns <code>true</code> if the file was opened in raw mode. </p>
+<p>If the file is not open, the returned value is undefined.</p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZipFile.html#aed75bace51f2bb4c3e4f656ab4493aac" title="Opens a file for reading. ">open(OpenMode,int*,int*,bool,const char*)</a> </dd></dl>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a42a39b12619bccd3d419ee60bbb3fcf6">close()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab7939a26d1e8de2f6aca54f49a12b980"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZipFile::setZip </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classQuaZip.html">QuaZip</a> * </td>
+          <td class="paramname"><em>zip</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Binds to the existing <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> instance. </p>
+<p>This function destroys internal <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object, if any, and makes this <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> to use current file in the <em>zip</em> object for any further operations. See <a class="el" href="classQuaZipFile.html#a54e944a6b3d27030f64c8f30d2cc33bb" title="Constructs a QuaZipFile instance. ">QuaZipFile(QuaZip*,QObject*)</a> for the possible pitfalls.</p>
+<p>Will do nothing if the file is currently open. You must <a class="el" href="classQuaZipFile.html#a42a39b12619bccd3d419ee60bbb3fcf6" title="Closes the file. ">close()</a> it first. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3732ca7704379d457b6a27db8837de95"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZipFile::setFileName </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>fileName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a> </td>
+          <td class="paramname"><em>cs</em> = <code><a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253">QuaZip::csDefault</a></code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the file name. </p>
+<p>Will do nothing if at least one of the following conditions is met:</p>
+<ul>
+<li>ZIP name has not been set yet (<a class="el" href="classQuaZipFile.html#a6f034a714aa94631367590de3f8f4e22" title="Returns the ZIP archive file name. ">getZipName()</a> returns null string).</li>
+<li>This <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> is associated with external <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a>. In this case you should call that <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a>'s setCurrentFile() function instead!</li>
+<li>File is already open so setting the name is meaningless.</li>
+</ul>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZip.html#a6c657bfcfccb59d728e0da24c677d899" title="Sets current file by its name. ">QuaZip::setCurrentFile</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a4c20c0ef00ae79c9a59eafe2906c9384"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZipFile::open </td>
+          <td>(</td>
+          <td class="paramtype">OpenMode </td>
+          <td class="paramname"><em>mode</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Opens a file for reading. </p>
+<p>Returns <code>true</code> on success, <code>false</code> otherwise. Call <a class="el" href="classQuaZipFile.html#a26d2ee56aad947193b73052f80597ef0" title="Returns the error code returned by the last ZIP/UNZIP API call. ">getZipError()</a> to get error code.</p>
+<dl class="section note"><dt>Note</dt><dd>Since ZIP/UNZIP API provides buffered reading only, <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> does not support unbuffered reading. So do not pass QIODevice::Unbuffered flag in <em>mode</em>, or open will fail. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a0bff0d15bbcd70306dc4a553a55776b9"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZipFile::open </td>
+          <td>(</td>
+          <td class="paramtype">OpenMode </td>
+          <td class="paramname"><em>mode</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>password</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Opens a file for reading. </p>
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Argument <em>password</em> specifies a password to decrypt the file. If it is NULL then this function behaves just like <a class="el" href="classQuaZipFile.html#a4c20c0ef00ae79c9a59eafe2906c9384" title="Opens a file for reading. ">open(OpenMode)</a>. </p>
+
+</div>
+</div>
+<a class="anchor" id="aed75bace51f2bb4c3e4f656ab4493aac"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZipFile::open </td>
+          <td>(</td>
+          <td class="paramtype">OpenMode </td>
+          <td class="paramname"><em>mode</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>method</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>level</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool </td>
+          <td class="paramname"><em>raw</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>password</em> = <code>NULL</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Opens a file for reading. </p>
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Argument <em>password</em> specifies a password to decrypt the file.</p>
+<p>An integers pointed by <em>method</em> and <em>level</em> will receive codes of the compression method and level used. See unzip.h.</p>
+<p>If raw is <code>true</code> then no decompression is performed.</p>
+<p><em>method</em> should not be <code>NULL</code>. <em>level</em> can be <code>NULL</code> if you don't want to know the compression level. </p>
+
+<p>References <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f">QuaZip::close()</a>, <a class="el" href="classQuaZip.html#a129ceff04d28fb00531f7bf7f9329664">QuaZip::getMode()</a>, <a class="el" href="classQuaZip.html#a3b78a652f296ff4a678a791e8294e642">QuaZip::getUnzFile()</a>, <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">QuaZip::getZipError()</a>, <a class="el" href="classQuaZip.html#a00b237d926648f45da86db25e7cfb697">QuaZip::hasCurrentFil [...]
+
+</div>
+</div>
+<a class="anchor" id="a2429ea59c77371d7af56d739db130b18"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZipFile::open </td>
+          <td>(</td>
+          <td class="paramtype">OpenMode </td>
+          <td class="paramname"><em>mode</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a> & </td>
+          <td class="paramname"><em>info</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>password</em> = <code>NULL</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">quint32 </td>
+          <td class="paramname"><em>crc</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>method</em> = <code>Z_DEFLATED</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>level</em> = <code>Z_DEFAULT_COMPRESSION</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool </td>
+          <td class="paramname"><em>raw</em> = <code>false</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>windowBits</em> = <code>-MAX_WBITS</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>memLevel</em> = <code>DEF_MEM_LEVEL</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>strategy</em> = <code>Z_DEFAULT_STRATEGY</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Opens a file for writing. </p>
+<p><em>info</em> argument specifies information about file. It should at least specify a correct file name. Also, it is a good idea to specify correct timestamp (by default, current time will be used). See <a class="el" href="structQuaZipNewInfo.html" title="Information about a file to be created. ">QuaZipNewInfo</a>.</p>
+<p>The <em>password</em> argument specifies the password for crypting. Pass NULL if you don't need any crypting. The <em>crc</em> argument was supposed to be used for crypting too, but then it turned out that it's false information, so you need to set it to 0 unless you want to use the raw mode (see below).</p>
+<p>Arguments <em>method</em> and <em>level</em> specify compression method and level. The only method supported is Z_DEFLATED, but you may also specify 0 for no compression. If all of the files in the archive use both method 0 and either level 0 is explicitly specified or data descriptor writing is disabled with <a class="el" href="classQuaZip.html#a6c23a12af88f7ea5edd4f9c0a24b9453" title="Changes the data descriptor writing mode. ">QuaZip::setDataDescriptorWritingEnabled()</a>, then the [...]
+<p>If <em>raw</em> is <code>true</code>, no compression is performed. In this case, <em>crc</em> and uncompressedSize field of the <em>info</em> are required.</p>
+<p>Arguments <em>windowBits</em>, <em>memLevel</em>, <em>strategy</em> provide zlib algorithms tuning. See deflateInit2() in zlib. </p>
+
+<p>References <a class="el" href="structQuaZipNewInfo.html#ae24b1d38c3550b4724862ffcf8f20924">QuaZipNewInfo::comment</a>, <a class="el" href="structQuaZipNewInfo.html#aec7f3ac72c72a2e10b82ad64c2fa3453">QuaZipNewInfo::dateTime</a>, <a class="el" href="structQuaZipNewInfo.html#affd1a9700d302e1395bd04f0864da7d0">QuaZipNewInfo::externalAttr</a>, <a class="el" href="structQuaZipNewInfo.html#abda207eb3949db3a88761c1b06e6bd58">QuaZipNewInfo::extraGlobal</a>, <a class="el" href="structQuaZipNewI [...]
+
+</div>
+</div>
+<a class="anchor" id="a90fd55dab83eca7f95df50b2c41b7f22"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">qint64 QuaZipFile::pos </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns current position in the file. </p>
+<p>Implementation of the QIODevice::pos(). When reading, this function is a wrapper to the ZIP/UNZIP unztell(), therefore it is unable to keep track of the ungetChar() calls (which is non-virtual and therefore is dangerous to reimplement). So if you are using ungetChar() feature of the QIODevice, this function reports incorrect value until you get back characters which you ungot.</p>
+<p>When writing, <a class="el" href="classQuaZipFile.html#a90fd55dab83eca7f95df50b2c41b7f22" title="Returns current position in the file. ">pos()</a> returns number of bytes already written (uncompressed unless you use raw mode).</p>
+<dl class="section note"><dt>Note</dt><dd>Although <a class="el" href="classQuaZipFile.html#quazipfile-sequential">QuaZipFile is a sequential device</a> and therefore <a class="el" href="classQuaZipFile.html#a90fd55dab83eca7f95df50b2c41b7f22" title="Returns current position in the file. ">pos()</a> should always return zero, it does not, because it would be misguiding. Keep this in mind.</dd></dl>
+<p>This function returns -1 if the file or archive is not open.</p>
+<p>Error code returned by <a class="el" href="classQuaZipFile.html#a26d2ee56aad947193b73052f80597ef0" title="Returns the error code returned by the last ZIP/UNZIP API call. ">getZipError()</a> is not affected by this function call. </p>
+
+<p>References <a class="el" href="classQuaZip.html#a3b78a652f296ff4a678a791e8294e642">QuaZip::getUnzFile()</a>.</p>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a29fbfb34677f69394ae7c986ffd3a0c1">bytesAvailable()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1e3f4c3c075da98af426fc167440cfc3"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZipFile::atEnd </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns <code>true</code> if the end of file was reached. </p>
+<p>This function returns <code>false</code> in the case of error. This means that you called this function on either not open file, or a file in the not open archive or even on a <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> instance that does not even have <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> instance associated. Do not do that because there is no means to determine whether <code>false</code> is returned be [...]
+no end of file therefore".</p>
+<p>When writing, this function always returns <code>true</code> (because you are always writing to the end of file).</p>
+<p>Error code returned by <a class="el" href="classQuaZipFile.html#a26d2ee56aad947193b73052f80597ef0" title="Returns the error code returned by the last ZIP/UNZIP API call. ">getZipError()</a> is not affected by this function call. </p>
+
+<p>References <a class="el" href="classQuaZip.html#a3b78a652f296ff4a678a791e8294e642">QuaZip::getUnzFile()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad1a17cc690a01c3edfb82984c3a4c8f0"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">qint64 QuaZipFile::size </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns file size. </p>
+<p>This function returns <a class="el" href="classQuaZipFile.html#ac4da08e5cdec368a2a686775f7dc5639" title="Returns compressed file size. ">csize()</a> if the file is open for reading in raw mode, <a class="el" href="classQuaZipFile.html#a4814b5e6e39fb254737b81ea10964f50" title="Returns uncompressed file size. ">usize()</a> if it is open for reading in normal mode and <a class="el" href="classQuaZipFile.html#a90fd55dab83eca7f95df50b2c41b7f22" title="Returns current position in the file.  [...]
+<p>Returns -1 on error, call <a class="el" href="classQuaZipFile.html#a26d2ee56aad947193b73052f80597ef0" title="Returns the error code returned by the last ZIP/UNZIP API call. ">getZipError()</a> to get error code.</p>
+<dl class="section note"><dt>Note</dt><dd>This function returns file size despite that <a class="el" href="classQuaZipFile.html#quazipfile-sequential">QuaZipFile is considered to be sequential device</a>, for which <a class="el" href="classQuaZipFile.html#ad1a17cc690a01c3edfb82984c3a4c8f0" title="Returns file size. ">size()</a> should return <a class="el" href="classQuaZipFile.html#a29fbfb34677f69394ae7c986ffd3a0c1" title="Returns the number of bytes available for reading. ">bytesAvailab [...]
+
+<p>References <a class="el" href="classQuaZipFile.html#ac4da08e5cdec368a2a686775f7dc5639">csize()</a>, and <a class="el" href="classQuaZipFile.html#a4814b5e6e39fb254737b81ea10964f50">usize()</a>.</p>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a29fbfb34677f69394ae7c986ffd3a0c1">bytesAvailable()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac4da08e5cdec368a2a686775f7dc5639"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">qint64 QuaZipFile::csize </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns compressed file size. </p>
+<p>Equivalent to calling <a class="el" href="classQuaZipFile.html#ad3f5807329321be21b12c1ba5798b359" title="Gets information about current file. ">getFileInfo()</a> and then getting compressedSize field, but more convenient and faster.</p>
+<p>File must be open for reading before calling this function.</p>
+<p>Returns -1 on error, call <a class="el" href="classQuaZipFile.html#a26d2ee56aad947193b73052f80597ef0" title="Returns the error code returned by the last ZIP/UNZIP API call. ">getZipError()</a> to get error code. </p>
+
+<p>References <a class="el" href="classQuaZip.html#a129ceff04d28fb00531f7bf7f9329664">QuaZip::getMode()</a>, <a class="el" href="classQuaZip.html#a3b78a652f296ff4a678a791e8294e642">QuaZip::getUnzFile()</a>, and <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">QuaZip::mdUnzip</a>.</p>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#ad1a17cc690a01c3edfb82984c3a4c8f0">size()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4814b5e6e39fb254737b81ea10964f50"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">qint64 QuaZipFile::usize </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns uncompressed file size. </p>
+<p>Equivalent to calling <a class="el" href="classQuaZipFile.html#ad3f5807329321be21b12c1ba5798b359" title="Gets information about current file. ">getFileInfo()</a> and then getting uncompressedSize field, but more convenient and faster. See <a class="el" href="classQuaZipFile.html#ad3f5807329321be21b12c1ba5798b359" title="Gets information about current file. ">getFileInfo()</a> for a warning.</p>
+<p>File must be open for reading before calling this function.</p>
+<p>Returns -1 on error, call <a class="el" href="classQuaZipFile.html#a26d2ee56aad947193b73052f80597ef0" title="Returns the error code returned by the last ZIP/UNZIP API call. ">getZipError()</a> to get error code. </p>
+
+<p>References <a class="el" href="classQuaZip.html#a129ceff04d28fb00531f7bf7f9329664">QuaZip::getMode()</a>, <a class="el" href="classQuaZip.html#a3b78a652f296ff4a678a791e8294e642">QuaZip::getUnzFile()</a>, and <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">QuaZip::mdUnzip</a>.</p>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#ad1a17cc690a01c3edfb82984c3a4c8f0">size()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad3f5807329321be21b12c1ba5798b359"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZipFile::getFileInfo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> * </td>
+          <td class="paramname"><em>info</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Gets information about current file. </p>
+<p>This function does the same thing as calling <a class="el" href="classQuaZip.html#a9c91a53ed4c2038e153c64bdc097ebe8" title="Retrieves information about the current file. ">QuaZip::getCurrentFileInfo()</a> on the associated <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> object, but you can not call getCurrentFileInfo() if the associated <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> is internal (because you do not have access to it), whil [...]
+<p>File must be open for reading before calling this function.</p>
+<dl class="section return"><dt>Returns</dt><dd><code>false</code> in the case of an error.</dd></dl>
+<p>This function doesn't support zip64, but will still work fine on zip64 archives if file sizes are below 4 GB, otherwise the values will be set as if converted using <a class="el" href="structQuaZipFileInfo64.html#ada29945c7ee4c9df6fbe95864793aade" title="Converts to QuaZipFileInfo. ">QuaZipFileInfo64::toQuaZipFileInfo()</a>.</p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZipFile.html#af35876a5ac6e9c35234275a9e503110d" title="Gets information about current file with zip64 support. ">getFileInfo(QuaZipFileInfo64*)</a> </dd></dl>
+
+<p>References <a class="el" href="structQuaZipFileInfo64.html#ada29945c7ee4c9df6fbe95864793aade">QuaZipFileInfo64::toQuaZipFileInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af35876a5ac6e9c35234275a9e503110d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZipFile::getFileInfo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> * </td>
+          <td class="paramname"><em>info</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Gets information about current file with zip64 support. </p>
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.</p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classQuaZipFile.html#ad3f5807329321be21b12c1ba5798b359" title="Gets information about current file. ">getFileInfo(QuaZipFileInfo*)</a> </dd></dl>
+
+<p>References <a class="el" href="classQuaZip.html#a9c91a53ed4c2038e153c64bdc097ebe8">QuaZip::getCurrentFileInfo()</a>, <a class="el" href="classQuaZip.html#a129ceff04d28fb00531f7bf7f9329664">QuaZip::getMode()</a>, <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">QuaZip::getZipError()</a>, and <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">QuaZip::mdUnzip</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a42a39b12619bccd3d419ee60bbb3fcf6"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZipFile::close </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Closes the file. </p>
+<p>Call <a class="el" href="classQuaZipFile.html#a26d2ee56aad947193b73052f80597ef0" title="Returns the error code returned by the last ZIP/UNZIP API call. ">getZipError()</a> to determine if the close was successful. </p>
+
+<p>References <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f">QuaZip::close()</a>, <a class="el" href="classQuaZip.html#a3b78a652f296ff4a678a791e8294e642">QuaZip::getUnzFile()</a>, <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">QuaZip::getZipError()</a>, <a class="el" href="classQuaZip.html#a425043a4d7cc31e2fe2bba73d954f15c">QuaZip::getZipFile()</a>, <a class="el" href="classQuaZip.html#a5b869a9c0d4f49955b759592fec08888">QuaZip::isOpen()</ [...]
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#aa1e5a0cf491bafae6cc73e649caa97fc">~QuaZipFile()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>quazip/<a class="el" href="quazipfile_8h_source.html">quazipfile.h</a></li>
+<li>quazip/quazipfile.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZipFilePrivate-members.html b/3rdparty/quazip-0.7/doc/html/classQuaZipFilePrivate-members.html
new file mode 100644
index 0000000..71eb624
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZipFilePrivate-members.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QuaZipFilePrivate Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classQuaZipFilePrivate.html">QuaZipFilePrivate</a>, including all inherited members.</p>
+<table class="directory">
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>QuaZipFile</b> (defined in <a class="el" href="classQuaZipFilePrivate.html">QuaZipFilePrivate</a>)</td><td class="entry"><a class="el" href="classQuaZipFilePrivate.html">QuaZipFilePrivate</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZipFilePrivate.html b/3rdparty/quazip-0.7/doc/html/classQuaZipFilePrivate.html
new file mode 100644
index 0000000..1e21914
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZipFilePrivate.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaZipFilePrivate Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#friends">Friends</a> |
+<a href="classQuaZipFilePrivate-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">QuaZipFilePrivate Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>The implementation class for <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a>.  
+ <a href="classQuaZipFilePrivate.html#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a40bd4ccb6d2d00726e1de81329ebaa7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a40bd4ccb6d2d00726e1de81329ebaa7a"></a>
+class </td><td class="memItemRight" valign="bottom"><b>QuaZipFile</b></td></tr>
+<tr class="separator:a40bd4ccb6d2d00726e1de81329ebaa7a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>The implementation class for <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a>. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>quazip/quazipfile.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZipFile__coll__graph.map b/3rdparty/quazip-0.7/doc/html/classQuaZipFile__coll__graph.map
new file mode 100644
index 0000000..4dcdf8e
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZipFile__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="QuaZipFile" name="QuaZipFile">
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZipFile__coll__graph.md5 b/3rdparty/quazip-0.7/doc/html/classQuaZipFile__coll__graph.md5
new file mode 100644
index 0000000..de2cca2
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZipFile__coll__graph.md5
@@ -0,0 +1 @@
+0f27cd2f62b73e752c173777f208a383
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZipFile__coll__graph.png b/3rdparty/quazip-0.7/doc/html/classQuaZipFile__coll__graph.png
new file mode 100644
index 0000000..0d1ed36
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/classQuaZipFile__coll__graph.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZipFile__inherit__graph.map b/3rdparty/quazip-0.7/doc/html/classQuaZipFile__inherit__graph.map
new file mode 100644
index 0000000..4dcdf8e
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZipFile__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="QuaZipFile" name="QuaZipFile">
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZipFile__inherit__graph.md5 b/3rdparty/quazip-0.7/doc/html/classQuaZipFile__inherit__graph.md5
new file mode 100644
index 0000000..de2cca2
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZipFile__inherit__graph.md5
@@ -0,0 +1 @@
+0f27cd2f62b73e752c173777f208a383
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZipFile__inherit__graph.png b/3rdparty/quazip-0.7/doc/html/classQuaZipFile__inherit__graph.png
new file mode 100644
index 0000000..0d1ed36
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/classQuaZipFile__inherit__graph.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZipPrivate-members.html b/3rdparty/quazip-0.7/doc/html/classQuaZipPrivate-members.html
new file mode 100644
index 0000000..ba47dc3
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZipPrivate-members.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QuaZipPrivate Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classQuaZipPrivate.html">QuaZipPrivate</a>, including all inherited members.</p>
+<table class="directory">
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>QuaZip</b> (defined in <a class="el" href="classQuaZipPrivate.html">QuaZipPrivate</a>)</td><td class="entry"><a class="el" href="classQuaZipPrivate.html">QuaZipPrivate</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classQuaZipPrivate.html#aeb1d2d3263929b17d6b0608e35af2a88">unzFile_f</a></td><td class="entry"><a class="el" href="classQuaZipPrivate.html">QuaZipPrivate</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classQuaZipPrivate.html#ab83497156892d07e6a1514cef149a1e2">zipFile_f</a></td><td class="entry"><a class="el" href="classQuaZipPrivate.html">QuaZipPrivate</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classQuaZipPrivate.html b/3rdparty/quazip-0.7/doc/html/classQuaZipPrivate.html
new file mode 100644
index 0000000..cdc048e
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classQuaZipPrivate.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaZipPrivate Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#friends">Friends</a> |
+<a href="classQuaZipPrivate-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">QuaZipPrivate Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>All the internal stuff for the <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> class.  
+ <a href="classQuaZipPrivate.html#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a913fb7bbd3527119ebb8052d57132af2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a913fb7bbd3527119ebb8052d57132af2"></a>
+class </td><td class="memItemRight" valign="bottom"><b>QuaZip</b></td></tr>
+<tr class="separator:a913fb7bbd3527119ebb8052d57132af2"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>All the internal stuff for the <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> class. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>quazip/quazip.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/classes.html b/3rdparty/quazip-0.7/doc/html/classes.html
new file mode 100644
index 0000000..c09b5ec
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/classes.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Class Index</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_J">J</a> | <a class="qindex" href="#letter_Q">Q</a></div>
+<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
+<tr><td rowspan="2" valign="bottom"><a name="letter_J"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  J  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classQuaAdler32.html">QuaAdler32</a>   </td><td valign="top"><a class="el" href="classQuaZIODevice.html">QuaZIODevice</a>   </td><td valign="top"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a>   </td><td valign="top"><a class="el" href="classQuaZipPrivate.html">QuaZipPrivate</a>   </td></tr>
+<tr><td valign="top"><a class="el" href="classQuaChecksum32.html">QuaChecksum32</a>   </td><td valign="top"><a class="el" href="classQuaZip.html">QuaZip</a>   </td><td valign="top"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a>   </td><td></td></tr>
+<tr><td valign="top"><a class="el" href="classJlCompress.html">JlCompress</a>   </td><td valign="top"><a class="el" href="classQuaCrc32.html">QuaCrc32</a>   </td><td valign="top"><a class="el" href="classQuaZipDir.html">QuaZipDir</a>   </td><td valign="top"><a class="el" href="classQuaZipFilePrivate.html">QuaZipFilePrivate</a>   </td><td></td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_Q"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  Q  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classQuaGzipFile.html">QuaGzipFile</a>   </td><td valign="top"><a class="el" href="classQuaZipFile.html">QuaZipFile</a>   </td><td valign="top"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a>   </td><td></td></tr>
+<tr><td></td><td></td><td></td><td></td></tr>
+<tr><td valign="top"><a class="el" href="structQIODevice__descriptor.html">QIODevice_descriptor</a>   </td><td></td><td></td><td></td><td></td></tr>
+<tr><td></td><td></td><td></td><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_J">J</a> | <a class="qindex" href="#letter_Q">Q</a></div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/closed.png b/3rdparty/quazip-0.7/doc/html/closed.png
new file mode 100644
index 0000000..98cc2c9
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/closed.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/dir_94f3fdea1a650ed21d35813cdb37a339.html b/3rdparty/quazip-0.7/doc/html/dir_94f3fdea1a650ed21d35813cdb37a339.html
new file mode 100644
index 0000000..5d8a0eb
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/dir_94f3fdea1a650ed21d35813cdb37a339.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: quazip Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_94f3fdea1a650ed21d35813cdb37a339.html">quazip</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">quazip Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for quazip:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_94f3fdea1a650ed21d35813cdb37a339_dep.png" border="0" usemap="#dir__94f3fdea1a650ed21d35813cdb37a339__dep" alt="quazip"/></div>
+<map name="dir__94f3fdea1a650ed21d35813cdb37a339__dep" id="dir__94f3fdea1a650ed21d35813cdb37a339__dep">
+<area shape="rect" id="node1" href="dir_94f3fdea1a650ed21d35813cdb37a339.html" title="quazip" alt="" coords="5,5,77,53"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:JlCompress_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>JlCompress.cpp</b></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:JlCompress_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>JlCompress.h</b> <a href="JlCompress_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:qioapi_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>qioapi.cpp</b></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quaadler32_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quaadler32.cpp</b></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quaadler32_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quaadler32.h</b> <a href="quaadler32_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quachecksum32_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quachecksum32.h</b> <a href="quachecksum32_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quacrc32_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quacrc32.cpp</b></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quacrc32_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quacrc32.h</b> <a href="quacrc32_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quagzipfile_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quagzipfile.cpp</b></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quagzipfile_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quagzipfile.h</b> <a href="quagzipfile_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quaziodevice_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quaziodevice.cpp</b></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quaziodevice_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quaziodevice.h</b> <a href="quaziodevice_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quazip_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quazip.cpp</b></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quazip_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quazip.h</b> <a href="quazip_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quazip__global_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quazip_global.h</b> <a href="quazip__global_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quazipdir_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quazipdir.cpp</b></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quazipdir_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quazipdir.h</b> <a href="quazipdir_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quazipfile_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quazipfile.cpp</b></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quazipfile_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quazipfile.h</b> <a href="quazipfile_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quazipfileinfo_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quazipfileinfo.cpp</b></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quazipfileinfo_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quazipfileinfo.h</b> <a href="quazipfileinfo_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quazipnewinfo_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quazipnewinfo.cpp</b></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:quazipnewinfo_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quazipnewinfo.h</b> <a href="quazipnewinfo_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/dir_94f3fdea1a650ed21d35813cdb37a339_dep.map b/3rdparty/quazip-0.7/doc/html/dir_94f3fdea1a650ed21d35813cdb37a339_dep.map
new file mode 100644
index 0000000..6987f92
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/dir_94f3fdea1a650ed21d35813cdb37a339_dep.map
@@ -0,0 +1,3 @@
+<map id="quazip" name="quazip">
+<area shape="rect" id="node1" href="dir_94f3fdea1a650ed21d35813cdb37a339.html" title="quazip" alt="" coords="5,5,77,53"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/dir_94f3fdea1a650ed21d35813cdb37a339_dep.md5 b/3rdparty/quazip-0.7/doc/html/dir_94f3fdea1a650ed21d35813cdb37a339_dep.md5
new file mode 100644
index 0000000..d07b47e
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/dir_94f3fdea1a650ed21d35813cdb37a339_dep.md5
@@ -0,0 +1 @@
+b521f3e7499357b3270e414f244f2eff
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/dir_94f3fdea1a650ed21d35813cdb37a339_dep.png b/3rdparty/quazip-0.7/doc/html/dir_94f3fdea1a650ed21d35813cdb37a339_dep.png
new file mode 100644
index 0000000..f97ef1d
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/dir_94f3fdea1a650ed21d35813cdb37a339_dep.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/doxygen.css b/3rdparty/quazip-0.7/doc/html/doxygen.css
new file mode 100644
index 0000000..f0f36f8
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/doxygen.css
@@ -0,0 +1,1366 @@
+/* The standard CSS for doxygen 1.8.6 */
+
+body, table, div, p, dl {
+	font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+	font-size: 150%;
+}
+
+.title {
+	font: 400 14px/28px Roboto,sans-serif;
+	font-size: 150%;
+	font-weight: bold;
+	margin: 10px 2px;
+}
+
+h2.groupheader {
+	border-bottom: 1px solid #879ECB;
+	color: #354C7B;
+	font-size: 150%;
+	font-weight: normal;
+	margin-top: 1.75em;
+	padding-top: 8px;
+	padding-bottom: 4px;
+	width: 100%;
+}
+
+h3.groupheader {
+	font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+	-webkit-transition: text-shadow 0.5s linear;
+	-moz-transition: text-shadow 0.5s linear;
+	-ms-transition: text-shadow 0.5s linear;
+	-o-transition: text-shadow 0.5s linear;
+	transition: text-shadow 0.5s linear;
+	margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+	text-shadow: 0 0 15px cyan;
+}
+
+dt {
+	font-weight: bold;
+}
+
+div.multicol {
+	-moz-column-gap: 1em;
+	-webkit-column-gap: 1em;
+	-moz-column-count: 3;
+	-webkit-column-count: 3;
+}
+
+p.startli, p.startdd {
+	margin-top: 2px;
+}
+
+p.starttd {
+	margin-top: 0px;
+}
+
+p.endli {
+	margin-bottom: 0px;
+}
+
+p.enddd {
+	margin-bottom: 4px;
+}
+
+p.endtd {
+	margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+	font-weight: bold;
+}
+
+span.legend {
+        font-size: 70%;
+        text-align: center;
+}
+
+h3.version {
+        font-size: 90%;
+        text-align: center;
+}
+
+div.qindex, div.navtab{
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
+	text-align: center;
+}
+
+div.qindex, div.navpath {
+	width: 100%;
+	line-height: 140%;
+}
+
+div.navtab {
+	margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+	color: #3D578C;
+	font-weight: normal;
+	text-decoration: none;
+}
+
+.contents a:visited {
+	color: #4665A2;
+}
+
+a:hover {
+	text-decoration: underline;
+}
+
+a.qindex {
+	font-weight: bold;
+}
+
+a.qindexHL {
+	font-weight: bold;
+	background-color: #9CAFD4;
+	color: #ffffff;
+	border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+        color: #ffffff;
+}
+
+a.el {
+	font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+	color: #4665A2; 
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+	color: #4665A2; 
+}
+
+/* @end */
+
+dl.el {
+	margin-left: -1cm;
+}
+
+pre.fragment {
+        border: 1px solid #C4CFE5;
+        background-color: #FBFCFD;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: break-word;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+div.fragment {
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+	background-color: #FBFCFD;
+	border: 1px solid #C4CFE5;
+}
+
+div.line {
+	font-family: monospace, fixed;
+        font-size: 13px;
+	min-height: 13px;
+	line-height: 1.0;
+	text-wrap: unrestricted;
+	white-space: -moz-pre-wrap; /* Moz */
+	white-space: -pre-wrap;     /* Opera 4-6 */
+	white-space: -o-pre-wrap;   /* Opera 7 */
+	white-space: pre-wrap;      /* CSS3  */
+	word-wrap: break-word;      /* IE 5.5+ */
+	text-indent: -53px;
+	padding-left: 53px;
+	padding-bottom: 0px;
+	margin: 0px;
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+div.line.glow {
+	background-color: cyan;
+	box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+	padding-right: 4px;
+	text-align: right;
+	border-right: 2px solid #0F0;
+	background-color: #E8E8E8;
+        white-space: pre;
+}
+span.lineno a {
+	background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+	background-color: #C8C8C8;
+}
+
+div.ah {
+	background-color: black;
+	font-weight: bold;
+	color: #ffffff;
+	margin-bottom: 3px;
+	margin-top: 3px;
+	padding: 0.2em;
+	border: solid thin #333;
+	border-radius: 0.5em;
+	-webkit-border-radius: .5em;
+	-moz-border-radius: .5em;
+	box-shadow: 2px 2px 3px #999;
+	-webkit-box-shadow: 2px 2px 3px #999;
+	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
+}
+
+div.groupHeader {
+	margin-left: 16px;
+	margin-top: 12px;
+	font-weight: bold;
+}
+
+div.groupText {
+	margin-left: 16px;
+	font-style: italic;
+}
+
+body {
+	background-color: white;
+	color: black;
+        margin: 0;
+}
+
+div.contents {
+	margin-top: 10px;
+	margin-left: 12px;
+	margin-right: 8px;
+}
+
+td.indexkey {
+	background-color: #EBEFF6;
+	font-weight: bold;
+	border: 1px solid #C4CFE5;
+	margin: 2px 0px 2px 0;
+	padding: 2px 10px;
+        white-space: nowrap;
+        vertical-align: top;
+}
+
+td.indexvalue {
+	background-color: #EBEFF6;
+	border: 1px solid #C4CFE5;
+	padding: 2px 10px;
+	margin: 2px 0px;
+}
+
+tr.memlist {
+	background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+	text-align: center;
+}
+
+img.formulaDsp {
+	
+}
+
+img.formulaInl {
+	vertical-align: middle;
+}
+
+div.center {
+	text-align: center;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
+}
+
+div.center img {
+	border: 0px;
+}
+
+address.footer {
+	text-align: right;
+	padding-right: 12px;
+}
+
+img.footer {
+	border: 0px;
+	vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+	color: #008000
+}
+
+span.keywordtype {
+	color: #604020
+}
+
+span.keywordflow {
+	color: #e08000
+}
+
+span.comment {
+	color: #800000
+}
+
+span.preprocessor {
+	color: #806020
+}
+
+span.stringliteral {
+	color: #002080
+}
+
+span.charliteral {
+	color: #008080
+}
+
+span.vhdldigit { 
+	color: #ff00ff 
+}
+
+span.vhdlchar { 
+	color: #000000 
+}
+
+span.vhdlkeyword { 
+	color: #700070 
+}
+
+span.vhdllogic { 
+	color: #ff0000 
+}
+
+blockquote {
+        background-color: #F7F8FB;
+        border-left: 2px solid #9CAFD4;
+        margin: 0 24px 0 4px;
+        padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+	color: #003399;
+	font-weight: bold;
+}
+
+form.search {
+	margin-bottom: 0px;
+	margin-top: 0px;
+}
+
+input.search {
+	font-size: 75%;
+	color: #000080;
+	font-weight: normal;
+	background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+	font-size: 75%;
+}
+
+.dirtab {
+	padding: 4px;
+	border-collapse: collapse;
+	border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+	background: #EBEFF6;
+	font-weight: bold;
+}
+
+hr {
+	height: 0px;
+	border: none;
+	border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+	height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+	border-spacing: 0px;
+	padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+	background-color: cyan;
+	box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+	background-color: #F9FAFC;
+	border: none;
+	margin: 4px;
+	padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+	padding: 0px 8px 4px 8px;
+	color: #555;
+}
+
+.memSeparator {
+        border-bottom: 1px solid #DEE4F0;
+        line-height: 1px;
+        margin: 0px;
+        padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+        white-space: nowrap;
+}
+
+.memItemRight {
+	width: 100%;
+}
+
+.memTemplParams {
+	color: #4665A2;
+        white-space: nowrap;
+	font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+	font-size: 80%;
+	color: #4665A2;
+	font-weight: normal;
+	margin-left: 9px;
+}
+
+.memnav {
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
+	text-align: center;
+	margin: 2px;
+	margin-right: 15px;
+	padding: 2px;
+}
+
+.mempage {
+	width: 100%;
+}
+
+.memitem {
+	padding: 0;
+	margin-bottom: 10px;
+	margin-right: 5px;
+        -webkit-transition: box-shadow 0.5s linear;
+        -moz-transition: box-shadow 0.5s linear;
+        -ms-transition: box-shadow 0.5s linear;
+        -o-transition: box-shadow 0.5s linear;
+        transition: box-shadow 0.5s linear;
+        display: table !important;
+        width: 100%;
+}
+
+.memitem.glow {
+         box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+        font-weight: bold;
+        margin-left: 6px;
+}
+
+.memname td {
+	vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+        border-top: 1px solid #A8B8D9;
+        border-left: 1px solid #A8B8D9;
+        border-right: 1px solid #A8B8D9;
+        padding: 6px 0px 6px 0px;
+        color: #253555;
+        font-weight: bold;
+        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        /* opera specific markup */
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        /* firefox specific markup */
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        -moz-border-radius-topright: 4px;
+        -moz-border-radius-topleft: 4px;
+        /* webkit specific markup */
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        -webkit-border-top-right-radius: 4px;
+        -webkit-border-top-left-radius: 4px;
+
+}
+
+.memdoc, dl.reflist dd {
+        border-bottom: 1px solid #A8B8D9;      
+        border-left: 1px solid #A8B8D9;      
+        border-right: 1px solid #A8B8D9; 
+        padding: 6px 10px 2px 10px;
+        background-color: #FBFCFD;
+        border-top-width: 0;
+        background-image:url('nav_g.png');
+        background-repeat:repeat-x;
+        background-color: #FFFFFF;
+        /* opera specific markup */
+        border-bottom-left-radius: 4px;
+        border-bottom-right-radius: 4px;
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        /* firefox specific markup */
+        -moz-border-radius-bottomleft: 4px;
+        -moz-border-radius-bottomright: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        /* webkit specific markup */
+        -webkit-border-bottom-left-radius: 4px;
+        -webkit-border-bottom-right-radius: 4px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+        padding: 5px;
+}
+
+dl.reflist dd {
+        margin: 0px 0px 10px 0px;
+        padding: 5px;
+}
+
+.paramkey {
+	text-align: right;
+}
+
+.paramtype {
+	white-space: nowrap;
+}
+
+.paramname {
+	color: #602020;
+	white-space: nowrap;
+}
+.paramname em {
+	font-style: normal;
+}
+.paramname code {
+        line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+        margin-left: 0px;
+        padding-left: 0px;
+}       
+
+.params .paramname, .retval .paramname {
+        font-weight: bold;
+        vertical-align: top;
+}
+        
+.params .paramtype {
+        font-style: italic;
+        vertical-align: top;
+}       
+        
+.params .paramdir {
+        font-family: "courier new",courier,monospace;
+        vertical-align: top;
+}
+
+table.mlabels {
+	border-spacing: 0px;
+}
+
+td.mlabels-left {
+	width: 100%;
+	padding: 0px;
+}
+
+td.mlabels-right {
+	vertical-align: bottom;
+	padding: 0px;
+	white-space: nowrap;
+}
+
+span.mlabels {
+        margin-left: 8px;
+}
+
+span.mlabel {
+        background-color: #728DC1;
+        border-top:1px solid #5373B4;
+        border-left:1px solid #5373B4;
+        border-right:1px solid #C4CFE5;
+        border-bottom:1px solid #C4CFE5;
+	text-shadow: none;
+	color: white;
+	margin-right: 4px;
+	padding: 2px 3px;
+	border-radius: 3px;
+	font-size: 7pt;
+	white-space: nowrap;
+	vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view when not used as main index */
+
+div.directory {
+        margin: 10px 0px;
+        border-top: 1px solid #A8B8D9;
+        border-bottom: 1px solid #A8B8D9;
+        width: 100%;
+}
+
+.directory table {
+        border-collapse:collapse;
+}
+
+.directory td {
+        margin: 0px;
+        padding: 0px;
+	vertical-align: top;
+}
+
+.directory td.entry {
+        white-space: nowrap;
+        padding-right: 6px;
+	padding-top: 3px;
+}
+
+.directory td.entry a {
+        outline:none;
+}
+
+.directory td.entry a img {
+        border: none;
+}
+
+.directory td.desc {
+        width: 100%;
+        padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 3px;
+	border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+	padding-left: 6px;
+	background-color: #F7F8FB;
+}
+
+.directory img {
+	vertical-align: -30%;
+}
+
+.directory .levels {
+        white-space: nowrap;
+        width: 100%;
+        text-align: right;
+        font-size: 9pt;
+}
+
+.directory .levels span {
+        cursor: pointer;
+        padding-left: 2px;
+        padding-right: 2px;
+	color: #3D578C;
+}
+
+div.dynheader {
+        margin-top: 8px;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+address {
+	font-style: normal;
+	color: #2A3D61;
+}
+
+table.doxtable {
+	border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+	border: 1px solid #2D4068;
+	padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+	background-color: #374F7F;
+	color: #FFFFFF;
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+table.fieldtable {
+        /*width: 100%;*/
+        margin-bottom: 10px;
+        border: 1px solid #A8B8D9;
+        border-spacing: 0px;
+        -moz-border-radius: 4px;
+        -webkit-border-radius: 4px;
+        border-radius: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+        padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+        white-space: nowrap;
+        border-right: 1px solid #A8B8D9;
+        border-bottom: 1px solid #A8B8D9;
+        vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+        padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+        border-bottom: 1px solid #A8B8D9;
+        /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+        margin-top: 0px;
+}       
+        
+.fieldtable td.fielddoc p:last-child {
+        margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+        border-bottom: none;
+}
+
+.fieldtable th {
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        font-size: 90%;
+        color: #253555;
+        padding-bottom: 4px;
+        padding-top: 5px;
+        text-align:left;
+        -moz-border-radius-topleft: 4px;
+        -moz-border-radius-topright: 4px;
+        -webkit-border-top-left-radius: 4px;
+        -webkit-border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        border-top-right-radius: 4px;
+        border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+	top: 0px;
+	left: 10px;
+	height: 36px;
+	background-image: url('tab_b.png');
+	z-index: 101;
+	overflow: hidden;
+	font-size: 13px;
+}
+
+.navpath ul
+{
+	font-size: 11px;
+	background-image:url('tab_b.png');
+	background-repeat:repeat-x;
+	background-position: 0 -5px;
+	height:30px;
+	line-height:30px;
+	color:#8AA0CC;
+	border:solid 1px #C2CDE4;
+	overflow:hidden;
+	margin:0px;
+	padding:0px;
+}
+
+.navpath li
+{
+	list-style-type:none;
+	float:left;
+	padding-left:10px;
+	padding-right:15px;
+	background-image:url('bc_s.png');
+	background-repeat:no-repeat;
+	background-position:right;
+	color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+	height:32px;
+	display:block;
+	text-decoration: none;
+	outline: none;
+	color: #283A5D;
+	font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+	text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+	text-decoration: none;        
+}
+
+.navpath li.navelem a:hover
+{
+	color:#6884BD;
+}
+
+.navpath li.footer
+{
+        list-style-type:none;
+        float:right;
+        padding-left:10px;
+        padding-right:15px;
+        background-image:none;
+        background-repeat:no-repeat;
+        background-position:right;
+        color:#364D7C;
+        font-size: 8pt;
+}
+
+
+div.summary
+{
+	float: right;
+	font-size: 8pt;
+	padding-right: 5px;
+	width: 50%;
+	text-align: right;
+}       
+
+div.summary a
+{
+	white-space: nowrap;
+}
+
+div.ingroups
+{
+	font-size: 8pt;
+	width: 50%;
+	text-align: left;
+}
+
+div.ingroups a
+{
+	white-space: nowrap;
+}
+
+div.header
+{
+        background-image:url('nav_h.png');
+        background-repeat:repeat-x;
+	background-color: #F9FAFC;
+	margin:  0px;
+	border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+	padding: 5px 5px 5px 10px;
+}
+
+dl
+{
+        padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+	margin-left: 0px;
+	padding-left: 0px;
+}
+
+dl.note
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00D000;
+}
+
+dl.deprecated
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #505050;
+}
+
+dl.todo
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00C0E0;
+}
+
+dl.test
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #3030E0;
+}
+
+dl.bug
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #C08050;
+}
+
+dl.section dd {
+	margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+	text-align: center;
+	vertical-align: bottom;
+	border-collapse: separate;
+}
+ 
+#projectlogo img
+{ 
+	border: 0px none;
+}
+ 
+#projectname
+{
+	font: 300% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 2px 0px;
+}
+    
+#projectbrief
+{
+	font: 120% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#projectnumber
+{
+	font: 50% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#titlearea
+{
+	padding: 0px;
+	margin: 0px;
+	width: 100%;
+	border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+        text-align: center;
+}
+
+.dotgraph
+{
+        text-align: center;
+}
+
+.mscgraph
+{
+        text-align: center;
+}
+
+.diagraph
+{
+        text-align: center;
+}
+
+.caption
+{
+	font-weight: bold;
+}
+
+div.zoom
+{
+	border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+        margin-bottom:50px;
+}
+
+dl.citelist dt {
+        color:#334975;
+        float:left;
+        font-weight:bold;
+        margin-right:10px;
+        padding:5px;
+}
+
+dl.citelist dd {
+        margin:2px 0;
+        padding:5px 0;
+}
+
+div.toc {
+        padding: 14px 25px;
+        background-color: #F4F6FA;
+        border: 1px solid #D8DFEE;
+        border-radius: 7px 7px 7px 7px;
+        float: right;
+        height: auto;
+        margin: 0 20px 10px 10px;
+        width: 200px;
+}
+
+div.toc li {
+        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+        margin-top: 5px;
+        padding-left: 10px;
+        padding-top: 2px;
+}
+
+div.toc h3 {
+        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+	color: #4665A2;
+        border-bottom: 0 none;
+        margin: 0;
+}
+
+div.toc ul {
+        list-style: none outside none;
+        border: medium none;
+        padding: 0px;
+}       
+
+div.toc li.level1 {
+        margin-left: 0px;
+}
+
+div.toc li.level2 {
+        margin-left: 15px;
+}
+
+div.toc li.level3 {
+        margin-left: 30px;
+}
+
+div.toc li.level4 {
+        margin-left: 45px;
+}
+
+.inherit_header {
+        font-weight: bold;
+        color: gray;
+        cursor: pointer;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.inherit_header td {
+        padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+        display: none;
+}
+
+tr.heading h2 {
+        margin-top: 12px;
+        margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+        position: absolute;
+        display: none;
+}
+
+#powerTip {
+	cursor: default;
+	white-space: nowrap;
+	background-color: white;
+	border: 1px solid gray;
+	border-radius: 4px 4px 4px 4px;
+	box-shadow: 1px 1px 7px gray;
+	display: none;
+	font-size: smaller;
+	max-width: 80%;
+	opacity: 0.9;
+	padding: 1ex 1em 1em;
+	position: absolute;
+	z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+        color: grey;
+	font-style: italic;
+}
+
+#powerTip div.ttname a {
+        font-weight: bold;
+}
+
+#powerTip div.ttname {
+        font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+        color: #006318;
+}
+
+#powerTip div {
+        margin: 0px;
+        padding: 0px;
+        font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+	content: "";
+	position: absolute;
+	margin: 0px;
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.w:after,  #powerTip.w:before,
+#powerTip.e:after,  #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	border: solid transparent;
+	content: " ";
+	height: 0;
+	width: 0;
+	position: absolute;
+}
+
+#powerTip.n:after,  #powerTip.s:after,
+#powerTip.w:after,  #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+	border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before,  #powerTip.s:before,
+#powerTip.w:before,  #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+	border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+	top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+	border-top-color: #ffffff;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+#powerTip.n:before {
+	border-top-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+	left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+	right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+	left: 14px;
+}
+
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+	border-bottom-color: #ffffff;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+	border-bottom-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+	left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+	right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+	left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+	left: 100%;
+}
+#powerTip.e:after {
+	border-left-color: #ffffff;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.e:before {
+	border-left-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+	right: 100%;
+}
+#powerTip.w:after {
+	border-right-color: #ffffff;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.w:before {
+	border-right-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+ at media print
+{
+  #top { display: none; }
+  #side-nav { display: none; }
+  #nav-path { display: none; }
+  body { overflow:visible; }
+  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+  .summary { display: none; }
+  .memitem { page-break-inside: avoid; }
+  #doc-content
+  {
+    margin-left:0 !important;
+    height:auto !important;
+    width:auto !important;
+    overflow:inherit;
+    display:inline;
+  }
+}
+
diff --git a/3rdparty/quazip-0.7/doc/html/doxygen.png b/3rdparty/quazip-0.7/doc/html/doxygen.png
new file mode 100644
index 0000000..3ff17d8
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/doxygen.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/dynsections.js b/3rdparty/quazip-0.7/doc/html/dynsections.js
new file mode 100644
index 0000000..ed092c7
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/dynsections.js
@@ -0,0 +1,97 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+   content.hide();
+   summary.show();
+   $(linkObj).addClass('closed').removeClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+   content.show();
+   summary.hide();
+   $(linkObj).removeClass('closed').addClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ } 
+ return false;
+}
+
+function updateStripes()
+{
+  $('table.directory tr').
+       removeClass('even').filter(':visible:even').addClass('even');
+}
+function toggleLevel(level)
+{
+  $('table.directory tr').each(function(){ 
+    var l = this.id.split('_').length-1;
+    var i = $('#img'+this.id.substring(3));
+    var a = $('#arr'+this.id.substring(3));
+    if (l<level+1) {
+      i.attr('src','ftv2folderopen.png');
+      a.attr('src','ftv2mnode.png');
+      $(this).show();
+    } else if (l==level+1) {
+      i.attr('src','ftv2folderclosed.png');
+      a.attr('src','ftv2pnode.png');
+      $(this).show();
+    } else {
+      $(this).hide();
+    }
+  });
+  updateStripes();
+}
+
+function toggleFolder(id)
+{
+  //The clicked row
+  var currentRow = $('#row_'+id);
+  var currentRowImages = currentRow.find("img");
+
+  //All rows after the clicked row
+  var rows = currentRow.nextAll("tr");
+
+  //Only match elements AFTER this one (can't hide elements before)
+  var childRows = rows.filter(function() {
+    var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+    return this.id.match(re);
+  });
+
+  //First row is visible we are HIDING
+  if (childRows.filter(':first').is(':visible')===true) {
+    currentRowImages.filter("[id^=arr]").attr('src', 'ftv2pnode.png');
+    currentRowImages.filter("[id^=img]").attr('src', 'ftv2folderclosed.png');
+    rows.filter("[id^=row_"+id+"]").hide();
+  } else { //We are SHOWING
+    //All sub images
+    var childImages = childRows.find("img");
+    var childImg = childImages.filter("[id^=img]");
+    var childArr = childImages.filter("[id^=arr]");
+
+    currentRow.find("[id^=arr]").attr('src', 'ftv2mnode.png'); //open row
+    currentRow.find("[id^=img]").attr('src', 'ftv2folderopen.png'); //open row
+    childImg.attr('src','ftv2folderclosed.png'); //children closed
+    childArr.attr('src','ftv2pnode.png'); //children closed
+    childRows.show(); //show all children
+  }
+  updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+  var rows = $('tr.inherit.'+id);
+  var img = $('tr.inherit_header.'+id+' img');
+  var src = $(img).attr('src');
+  if (rows.filter(':first').is(':visible')===true) {
+    rows.css('display','none');
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+  } else {
+    rows.css('display','table-row'); // using show() causes jump in firefox
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+  }
+}
+
diff --git a/3rdparty/quazip-0.7/doc/html/faq.html b/3rdparty/quazip-0.7/doc/html/faq.html
new file mode 100644
index 0000000..3d49ad7
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/faq.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaZip FAQ</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title"><a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> FAQ </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p><a class="anchor" id="faq-non-QIODevice"></a>Q. Is there any way to use <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> in Qt where you are supposed to use normal (non-zipped) file, but not through QIODevice API?</p>
+<p>A. Usually not. For example, if you are passing file name to some database driver (like SQLite), Qt usually just passes this name down to the 3rd-party library, which is usually does not know anything about QIODevice and therefore there is no way to pass <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> as normal file. However, if we are talking about some place where you pass file name, and then indirectly use QFile to open it, then it is a  [...]
+<p><a class="anchor" id="faq-zip64"></a>Q. Can QuaZIP handle files larger than 4GB? What about zip64 standard?</p>
+<p>A. Starting with version 0.6, QuaZIP uses Minizip 1.1 with zip64 support which should handle large files perfectly. The zip64 support in Minizip looks like it's not 100% conforming to the standard, but 3rd party tools seem to have no problem with the resulting archives.</p>
+<p><a class="anchor" id="faq-seekable"></a>Q. Can QuaZIP write archives to a sequential QIODevice like QTcpSocket?</p>
+<p>A. Not yet. It is not supported by vanilla Minizip (the back-end QuaZIP uses), although theoretically possible according to the ZIP standard. It would require some Minizip modifications that would allow it to detect non-seekable I/O and produce necessary output structures. QuaZIP already writes data descriptor which is necessary for non-seekable I/O. The only thing that is apparently left is to make Minizip fill local headers with correct values and forget about seeking after closing  [...]
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/files.html b/3rdparty/quazip-0.7/doc/html/files.html
new file mode 100644
index 0000000..9aa3644
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/files.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File List</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">File List</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img id="arr_0_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('0_')"/><img id="img_0_" src="ftv2folderopen.png" alt="-" width="24" height="22" onclick="toggleFolder('0_')"/><a class="el" href="dir_94f3fdea1a650ed21d35813cdb37a339.html" target="_self">quazip</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="JlCompress_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>JlCompress.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="quaadler32_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>quaadler32.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_2_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="quachecksum32_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>quachecksum32.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_3_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="quacrc32_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>quacrc32.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_4_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="quagzipfile_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>quagzipfile.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_5_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="quaziodevice_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>quaziodevice.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_6_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="quazip_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>quazip.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_7_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="quazip__global_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>quazip_global.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_8_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="quazipdir_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>quazipdir.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_9_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="quazipfile_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>quazipfile.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_10_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="quazipfileinfo_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>quazipfileinfo.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_11_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="quazipnewinfo_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>quazipnewinfo.h</b></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:18 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2blank.png b/3rdparty/quazip-0.7/doc/html/ftv2blank.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2blank.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2cl.png b/3rdparty/quazip-0.7/doc/html/ftv2cl.png
new file mode 100644
index 0000000..132f657
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2cl.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2doc.png b/3rdparty/quazip-0.7/doc/html/ftv2doc.png
new file mode 100644
index 0000000..17edabf
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2doc.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2folderclosed.png b/3rdparty/quazip-0.7/doc/html/ftv2folderclosed.png
new file mode 100644
index 0000000..bb8ab35
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2folderclosed.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2folderopen.png b/3rdparty/quazip-0.7/doc/html/ftv2folderopen.png
new file mode 100644
index 0000000..d6c7f67
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2folderopen.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2lastnode.png b/3rdparty/quazip-0.7/doc/html/ftv2lastnode.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2lastnode.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2link.png b/3rdparty/quazip-0.7/doc/html/ftv2link.png
new file mode 100644
index 0000000..17edabf
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2link.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2mlastnode.png b/3rdparty/quazip-0.7/doc/html/ftv2mlastnode.png
new file mode 100644
index 0000000..0b63f6d
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2mlastnode.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2mnode.png b/3rdparty/quazip-0.7/doc/html/ftv2mnode.png
new file mode 100644
index 0000000..0b63f6d
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2mnode.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2mo.png b/3rdparty/quazip-0.7/doc/html/ftv2mo.png
new file mode 100644
index 0000000..4bfb80f
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2mo.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2node.png b/3rdparty/quazip-0.7/doc/html/ftv2node.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2node.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2ns.png b/3rdparty/quazip-0.7/doc/html/ftv2ns.png
new file mode 100644
index 0000000..72e3d71
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2ns.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2plastnode.png b/3rdparty/quazip-0.7/doc/html/ftv2plastnode.png
new file mode 100644
index 0000000..c6ee22f
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2plastnode.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2pnode.png b/3rdparty/quazip-0.7/doc/html/ftv2pnode.png
new file mode 100644
index 0000000..c6ee22f
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2pnode.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2splitbar.png b/3rdparty/quazip-0.7/doc/html/ftv2splitbar.png
new file mode 100644
index 0000000..fe895f2
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2splitbar.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/ftv2vertline.png b/3rdparty/quazip-0.7/doc/html/ftv2vertline.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/ftv2vertline.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/functions.html b/3rdparty/quazip-0.7/doc/html/functions.html
new file mode 100644
index 0000000..bf7013d
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>atEnd()
+: <a class="el" href="classQuaZipFile.html#a1e3f4c3c075da98af426fc167440cfc3">QuaZipFile</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_b.html b/3rdparty/quazip-0.7/doc/html/functions_b.html
new file mode 100644
index 0000000..ac2d85b
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_b.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li class="current"><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>bytesAvailable()
+: <a class="el" href="classQuaZipFile.html#a29fbfb34677f69394ae7c986ffd3a0c1">QuaZipFile</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_c.html b/3rdparty/quazip-0.7/doc/html/functions_c.html
new file mode 100644
index 0000000..047cbcb
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_c.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li class="current"><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>calculate()
+: <a class="el" href="classQuaAdler32.html#a350e84fd000ebfa3c33503336a7b21bb">QuaAdler32</a>
+, <a class="el" href="classQuaChecksum32.html#a14d800fcfd55b2ae11ef07d3924fe0b1">QuaChecksum32</a>
+, <a class="el" href="classQuaCrc32.html#aaf6fdf6e36e55c97bf9eab6ec65ecb9e">QuaCrc32</a>
+</li>
+<li>CaseSensitivity
+: <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip</a>
+</li>
+<li>caseSensitivity()
+: <a class="el" href="classQuaZipDir.html#ad7ab403a8d36a3b6149da86ea37178f8">QuaZipDir</a>
+</li>
+<li>cd()
+: <a class="el" href="classQuaZipDir.html#aa829afc0243f1d307302f1167edecc7b">QuaZipDir</a>
+</li>
+<li>cdUp()
+: <a class="el" href="classQuaZipDir.html#a62306db3f4c0866930fa35c7348b84b3">QuaZipDir</a>
+</li>
+<li>close()
+: <a class="el" href="classQuaGzipFile.html#a273205350b1235a242a1eb5cbf586434">QuaGzipFile</a>
+, <a class="el" href="classQuaZIODevice.html#ad27e447544d57f897316ee6f44535895">QuaZIODevice</a>
+, <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f">QuaZip</a>
+, <a class="el" href="classQuaZipFile.html#a42a39b12619bccd3d419ee60bbb3fcf6">QuaZipFile</a>
+</li>
+<li>comment
+: <a class="el" href="structQuaZipFileInfo64.html#aba3f5b982087c3e0343bb61e8814c7d1">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#adc2aad7bbd87ce3415e2a19851266bfc">QuaZipFileInfo</a>
+, <a class="el" href="structQuaZipNewInfo.html#ae24b1d38c3550b4724862ffcf8f20924">QuaZipNewInfo</a>
+</li>
+<li>compressDir()
+: <a class="el" href="classJlCompress.html#a8708eafcadc5c192a1d492e784cfc98f">JlCompress</a>
+</li>
+<li>compressedSize
+: <a class="el" href="structQuaZipFileInfo64.html#add8733946ea4af23aa32d85f10955b0f">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#af6116eaac1f36b2a4b3a6a39851a85cc">QuaZipFileInfo</a>
+</li>
+<li>compressFile()
+: <a class="el" href="classJlCompress.html#a4a4de9c62ecf161bb658d4d80495ea97">JlCompress</a>
+</li>
+<li>compressFiles()
+: <a class="el" href="classJlCompress.html#a9cdb92d29a94c6b13a718a3249685846">JlCompress</a>
+</li>
+<li>Constants
+: <a class="el" href="classQuaZip.html#adce46b942c341dbb5c851eadead65459">QuaZip</a>
+</li>
+<li>convertCaseSensitivity()
+: <a class="el" href="classQuaZip.html#a1d3fbd445a8e9d3449ded7371931c6b3">QuaZip</a>
+</li>
+<li>count()
+: <a class="el" href="classQuaZipDir.html#aa3f14665e3991351f4ef94ab8e0ab29d">QuaZipDir</a>
+</li>
+<li>crc
+: <a class="el" href="structQuaZipFileInfo64.html#aeb7b2757a0efa814b196b5280d000a14">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#aceee045c9ebce0b9724f40d342bc99ea">QuaZipFileInfo</a>
+</li>
+<li>csDefault
+: <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253">QuaZip</a>
+</li>
+<li>csInsensitive
+: <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbea3e492bcc3f64f41a74906cecc45fb366">QuaZip</a>
+</li>
+<li>csize()
+: <a class="el" href="classQuaZipFile.html#ac4da08e5cdec368a2a686775f7dc5639">QuaZipFile</a>
+</li>
+<li>csSensitive
+: <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbead8d86b0c34203336cad09348cfa5356e">QuaZip</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_d.html b/3rdparty/quazip-0.7/doc/html/functions_d.html
new file mode 100644
index 0000000..bbd5709
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_d.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li class="current"><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>dateTime
+: <a class="el" href="structQuaZipFileInfo64.html#a4d77c6aa6076703e858c938efeb551e4">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#ad6993d099436813a27fd31aebe42911a">QuaZipFileInfo</a>
+, <a class="el" href="structQuaZipNewInfo.html#aec7f3ac72c72a2e10b82ad64c2fa3453">QuaZipNewInfo</a>
+</li>
+<li>dirName()
+: <a class="el" href="classQuaZipDir.html#afd2f76410f7728a7166b7598926fbf96">QuaZipDir</a>
+</li>
+<li>diskNumberStart
+: <a class="el" href="structQuaZipFileInfo64.html#ac8945cf1ff54d39d28e755685b91e941">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#aa70157fdc2bd8de10405055b4233050b">QuaZipFileInfo</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_e.html b/3rdparty/quazip-0.7/doc/html/functions_e.html
new file mode 100644
index 0000000..c6aefb7
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_e.html
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li class="current"><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>entryInfoList()
+: <a class="el" href="classQuaZipDir.html#aef966735a146fc10c9527c236aa89261">QuaZipDir</a>
+</li>
+<li>entryInfoList64()
+: <a class="el" href="classQuaZipDir.html#a8c38ec214c300049685cbf71486636d5">QuaZipDir</a>
+</li>
+<li>entryList()
+: <a class="el" href="classQuaZipDir.html#a4a32faa77c4120cd3c6db4b683fa16d9">QuaZipDir</a>
+</li>
+<li>exists()
+: <a class="el" href="classQuaZipDir.html#a22c8f63ce874f5c0e958ae5f42e6d004">QuaZipDir</a>
+</li>
+<li>externalAttr
+: <a class="el" href="structQuaZipFileInfo64.html#a3a8bc40f1aa0cb0985c4e2f8a9678430">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#afeb65ffdacc4fc0ba7848d4b37f62ecf">QuaZipFileInfo</a>
+, <a class="el" href="structQuaZipNewInfo.html#affd1a9700d302e1395bd04f0864da7d0">QuaZipNewInfo</a>
+</li>
+<li>extra
+: <a class="el" href="structQuaZipFileInfo64.html#acf0b1b97f377208847c6912cd1bf1332">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#affc7b097de2c3c2ef5801c60f96adc72">QuaZipFileInfo</a>
+</li>
+<li>extractDir()
+: <a class="el" href="classJlCompress.html#a365a153baa4c11812d93cbca60b6a293">JlCompress</a>
+</li>
+<li>extractFile()
+: <a class="el" href="classJlCompress.html#a38c0d58bfe3bbbcb3cf4e98d126633a3">JlCompress</a>
+</li>
+<li>extractFiles()
+: <a class="el" href="classJlCompress.html#a309e9ee366719a4d8aa28f837fab73ae">JlCompress</a>
+</li>
+<li>extraGlobal
+: <a class="el" href="structQuaZipNewInfo.html#abda207eb3949db3a88761c1b06e6bd58">QuaZipNewInfo</a>
+</li>
+<li>extraLocal
+: <a class="el" href="structQuaZipNewInfo.html#ab377a81c51cf495c7aeee4f19340a43f">QuaZipNewInfo</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_enum.html b/3rdparty/quazip-0.7/doc/html/functions_enum.html
new file mode 100644
index 0000000..c7cac72
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_enum.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members - Enumerations</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li class="current"><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ <ul>
+<li>CaseSensitivity
+: <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip</a>
+</li>
+<li>Constants
+: <a class="el" href="classQuaZip.html#adce46b942c341dbb5c851eadead65459">QuaZip</a>
+</li>
+<li>Mode
+: <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4">QuaZip</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:18 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_eval.html b/3rdparty/quazip-0.7/doc/html/functions_eval.html
new file mode 100644
index 0000000..f896c2f
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_eval.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members - Enumerator</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li class="current"><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ <ul>
+<li>csDefault
+: <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253">QuaZip</a>
+</li>
+<li>csInsensitive
+: <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbea3e492bcc3f64f41a74906cecc45fb366">QuaZip</a>
+</li>
+<li>csSensitive
+: <a class="el" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbead8d86b0c34203336cad09348cfa5356e">QuaZip</a>
+</li>
+<li>MAX_FILE_NAME_LENGTH
+: <a class="el" href="classQuaZip.html#adce46b942c341dbb5c851eadead65459ab26ce1a9c9e94f901dc2cf90fa5baa4b">QuaZip</a>
+</li>
+<li>mdAdd
+: <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a22c745f349f06add449af523254fdaec">QuaZip</a>
+</li>
+<li>mdAppend
+: <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ab807f0c65653a16d77b365801fd25582">QuaZip</a>
+</li>
+<li>mdCreate
+: <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e">QuaZip</a>
+</li>
+<li>mdNotOpen
+: <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ac87ddb1e901e1ec700c16ee0d4d398ce">QuaZip</a>
+</li>
+<li>mdUnzip
+: <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">QuaZip</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:18 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_f.html b/3rdparty/quazip-0.7/doc/html/functions_f.html
new file mode 100644
index 0000000..b483a58
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_f.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li class="current"><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>filePath()
+: <a class="el" href="classQuaZipDir.html#ae8b576a150f8d62c902067603cbc97ae">QuaZipDir</a>
+</li>
+<li>filter()
+: <a class="el" href="classQuaZipDir.html#abeee1810c7c1c1af93364081dbf70d38">QuaZipDir</a>
+</li>
+<li>flags
+: <a class="el" href="structQuaZipFileInfo64.html#a6aa533dd4e02f52459e1e1a0df31e992">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#a56d36f777e4fc892c71e22d080622e2c">QuaZipFileInfo</a>
+</li>
+<li>flush()
+: <a class="el" href="classQuaGzipFile.html#ab745f345b727c81abbc3eb5af4dca844">QuaGzipFile</a>
+, <a class="el" href="classQuaZIODevice.html#a25f586eb564841b51c395fd17f1cc080">QuaZIODevice</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_func.html b/3rdparty/quazip-0.7/doc/html/functions_func.html
new file mode 100644
index 0000000..af2ced3
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_func.html
@@ -0,0 +1,532 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="#index_a"><span>a</span></a></li>
+      <li><a href="#index_b"><span>b</span></a></li>
+      <li><a href="#index_c"><span>c</span></a></li>
+      <li><a href="#index_d"><span>d</span></a></li>
+      <li><a href="#index_e"><span>e</span></a></li>
+      <li><a href="#index_f"><span>f</span></a></li>
+      <li><a href="#index_g"><span>g</span></a></li>
+      <li><a href="#index_h"><span>h</span></a></li>
+      <li><a href="#index_i"><span>i</span></a></li>
+      <li><a href="#index_n"><span>n</span></a></li>
+      <li><a href="#index_o"><span>o</span></a></li>
+      <li><a href="#index_p"><span>p</span></a></li>
+      <li><a href="#index_q"><span>q</span></a></li>
+      <li><a href="#index_r"><span>r</span></a></li>
+      <li><a href="#index_s"><span>s</span></a></li>
+      <li><a href="#index_t"><span>t</span></a></li>
+      <li><a href="#index_u"><span>u</span></a></li>
+      <li><a href="#index_v"><span>v</span></a></li>
+      <li><a href="#index_w"><span>w</span></a></li>
+      <li class="current"><a href="#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>atEnd()
+: <a class="el" href="classQuaZipFile.html#a1e3f4c3c075da98af426fc167440cfc3">QuaZipFile</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>bytesAvailable()
+: <a class="el" href="classQuaZipFile.html#a29fbfb34677f69394ae7c986ffd3a0c1">QuaZipFile</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>calculate()
+: <a class="el" href="classQuaAdler32.html#a350e84fd000ebfa3c33503336a7b21bb">QuaAdler32</a>
+, <a class="el" href="classQuaChecksum32.html#a14d800fcfd55b2ae11ef07d3924fe0b1">QuaChecksum32</a>
+, <a class="el" href="classQuaCrc32.html#aaf6fdf6e36e55c97bf9eab6ec65ecb9e">QuaCrc32</a>
+</li>
+<li>caseSensitivity()
+: <a class="el" href="classQuaZipDir.html#ad7ab403a8d36a3b6149da86ea37178f8">QuaZipDir</a>
+</li>
+<li>cd()
+: <a class="el" href="classQuaZipDir.html#aa829afc0243f1d307302f1167edecc7b">QuaZipDir</a>
+</li>
+<li>cdUp()
+: <a class="el" href="classQuaZipDir.html#a62306db3f4c0866930fa35c7348b84b3">QuaZipDir</a>
+</li>
+<li>close()
+: <a class="el" href="classQuaGzipFile.html#a273205350b1235a242a1eb5cbf586434">QuaGzipFile</a>
+, <a class="el" href="classQuaZIODevice.html#ad27e447544d57f897316ee6f44535895">QuaZIODevice</a>
+, <a class="el" href="classQuaZip.html#a7a4323b73e12f3b4470109f200728f9f">QuaZip</a>
+, <a class="el" href="classQuaZipFile.html#a42a39b12619bccd3d419ee60bbb3fcf6">QuaZipFile</a>
+</li>
+<li>compressDir()
+: <a class="el" href="classJlCompress.html#a8708eafcadc5c192a1d492e784cfc98f">JlCompress</a>
+</li>
+<li>compressFile()
+: <a class="el" href="classJlCompress.html#a4a4de9c62ecf161bb658d4d80495ea97">JlCompress</a>
+</li>
+<li>compressFiles()
+: <a class="el" href="classJlCompress.html#a9cdb92d29a94c6b13a718a3249685846">JlCompress</a>
+</li>
+<li>convertCaseSensitivity()
+: <a class="el" href="classQuaZip.html#a1d3fbd445a8e9d3449ded7371931c6b3">QuaZip</a>
+</li>
+<li>count()
+: <a class="el" href="classQuaZipDir.html#aa3f14665e3991351f4ef94ab8e0ab29d">QuaZipDir</a>
+</li>
+<li>csize()
+: <a class="el" href="classQuaZipFile.html#ac4da08e5cdec368a2a686775f7dc5639">QuaZipFile</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>dirName()
+: <a class="el" href="classQuaZipDir.html#afd2f76410f7728a7166b7598926fbf96">QuaZipDir</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>entryInfoList()
+: <a class="el" href="classQuaZipDir.html#aef966735a146fc10c9527c236aa89261">QuaZipDir</a>
+</li>
+<li>entryInfoList64()
+: <a class="el" href="classQuaZipDir.html#ae2b5a4b251db7aeb165c6656da0e3431">QuaZipDir</a>
+</li>
+<li>entryList()
+: <a class="el" href="classQuaZipDir.html#a4a32faa77c4120cd3c6db4b683fa16d9">QuaZipDir</a>
+</li>
+<li>exists()
+: <a class="el" href="classQuaZipDir.html#aacb488fec6e951ac80e5d473534fee97">QuaZipDir</a>
+</li>
+<li>extractDir()
+: <a class="el" href="classJlCompress.html#a365a153baa4c11812d93cbca60b6a293">JlCompress</a>
+</li>
+<li>extractFile()
+: <a class="el" href="classJlCompress.html#a38c0d58bfe3bbbcb3cf4e98d126633a3">JlCompress</a>
+</li>
+<li>extractFiles()
+: <a class="el" href="classJlCompress.html#a309e9ee366719a4d8aa28f837fab73ae">JlCompress</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>filePath()
+: <a class="el" href="classQuaZipDir.html#ae8b576a150f8d62c902067603cbc97ae">QuaZipDir</a>
+</li>
+<li>filter()
+: <a class="el" href="classQuaZipDir.html#abeee1810c7c1c1af93364081dbf70d38">QuaZipDir</a>
+</li>
+<li>flush()
+: <a class="el" href="classQuaGzipFile.html#ab745f345b727c81abbc3eb5af4dca844">QuaGzipFile</a>
+, <a class="el" href="classQuaZIODevice.html#a25f586eb564841b51c395fd17f1cc080">QuaZIODevice</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>getActualFileName()
+: <a class="el" href="classQuaZipFile.html#a7b8e3c39026855cd98661a1b2815c220">QuaZipFile</a>
+</li>
+<li>getCaseSensitivity()
+: <a class="el" href="classQuaZipFile.html#a25dbfddc589bf6b69b39905f3c3bcc73">QuaZipFile</a>
+</li>
+<li>getComment()
+: <a class="el" href="classQuaZip.html#ae55cfbf2296132df808c557b62433051">QuaZip</a>
+</li>
+<li>getCommentCodec()
+: <a class="el" href="classQuaZip.html#a008260161781d8b5d2a0a28493fddaf4">QuaZip</a>
+</li>
+<li>getCurrentFileInfo()
+: <a class="el" href="classQuaZip.html#a9c91a53ed4c2038e153c64bdc097ebe8">QuaZip</a>
+</li>
+<li>getCurrentFileName()
+: <a class="el" href="classQuaZip.html#a9783f8b4f39cd55e71e975aea78fd54a">QuaZip</a>
+</li>
+<li>getEntriesCount()
+: <a class="el" href="classQuaZip.html#a2ea4bd1fca948637c35c2d2752bb5a80">QuaZip</a>
+</li>
+<li>getFileInfo()
+: <a class="el" href="classQuaZipFile.html#ad3f5807329321be21b12c1ba5798b359">QuaZipFile</a>
+</li>
+<li>getFileInfoList()
+: <a class="el" href="classQuaZip.html#a7486af66bede8e131db0cd2e81881387">QuaZip</a>
+</li>
+<li>getFileInfoList64()
+: <a class="el" href="classQuaZip.html#a474e66b1b696a9e00edcc067484c36ad">QuaZip</a>
+</li>
+<li>getFileList()
+: <a class="el" href="classJlCompress.html#ab42422be913f817d7e04c1b1cd5d0156">JlCompress</a>
+</li>
+<li>getFileName()
+: <a class="el" href="classQuaGzipFile.html#a9a0954a1db1fcf2aeba0530239bce71c">QuaGzipFile</a>
+, <a class="el" href="classQuaZipFile.html#a6999362e70a5b2396fba5cfb30095ff9">QuaZipFile</a>
+</li>
+<li>getFileNameCodec()
+: <a class="el" href="classQuaZip.html#a27b866aa2c75ea6f9c438cbb6e32b43c">QuaZip</a>
+</li>
+<li>getFileNameList()
+: <a class="el" href="classQuaZip.html#abb38d8b4c9c4ae0728b48caae9dd82de">QuaZip</a>
+</li>
+<li>getIoDevice()
+: <a class="el" href="classQuaZIODevice.html#ad63e7f1717c7d91b3c2c5ace908c98b7">QuaZIODevice</a>
+, <a class="el" href="classQuaZip.html#afd3ba12fe68748acbf8b7cc14a5a1c29">QuaZip</a>
+</li>
+<li>getMode()
+: <a class="el" href="classQuaZip.html#a129ceff04d28fb00531f7bf7f9329664">QuaZip</a>
+</li>
+<li>getNTFSaTime()
+: <a class="el" href="structQuaZipFileInfo64.html#afe4c454de7d067a0095da0223f0cbec2">QuaZipFileInfo64</a>
+</li>
+<li>getNTFScTime()
+: <a class="el" href="structQuaZipFileInfo64.html#a409dcbbe1ecd88dadb51be1aec48819d">QuaZipFileInfo64</a>
+</li>
+<li>getNTFSmTime()
+: <a class="el" href="structQuaZipFileInfo64.html#af4b19399367cf5bf24026344e0631ccb">QuaZipFileInfo64</a>
+</li>
+<li>getPermissions()
+: <a class="el" href="structQuaZipFileInfo64.html#a099216bd8991a983168d91c06a689f61">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#af87f96a64d7c02b002622f81d13accdb">QuaZipFileInfo</a>
+</li>
+<li>getUnzFile()
+: <a class="el" href="classQuaZip.html#a3b78a652f296ff4a678a791e8294e642">QuaZip</a>
+</li>
+<li>getZip()
+: <a class="el" href="classQuaZipFile.html#a72daf8a9da14907a801a783603003205">QuaZipFile</a>
+</li>
+<li>getZipError()
+: <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">QuaZip</a>
+, <a class="el" href="classQuaZipFile.html#a26d2ee56aad947193b73052f80597ef0">QuaZipFile</a>
+</li>
+<li>getZipFile()
+: <a class="el" href="classQuaZip.html#a425043a4d7cc31e2fe2bba73d954f15c">QuaZip</a>
+</li>
+<li>getZipName()
+: <a class="el" href="classQuaZip.html#a4f7deef08ff40aeb1a7a04bcd7f228c2">QuaZip</a>
+, <a class="el" href="classQuaZipFile.html#a6f034a714aa94631367590de3f8f4e22">QuaZipFile</a>
+</li>
+<li>goToFirstFile()
+: <a class="el" href="classQuaZip.html#a745488f9177bcec3cdb858587584e033">QuaZip</a>
+</li>
+<li>goToNextFile()
+: <a class="el" href="classQuaZip.html#aee6779b6cd338420c2e8c5655fa8ba97">QuaZip</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>hasCurrentFile()
+: <a class="el" href="classQuaZip.html#a00b237d926648f45da86db25e7cfb697">QuaZip</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>isAutoClose()
+: <a class="el" href="classQuaZip.html#adc2cc762ab5744720ae4d33290b5f5bf">QuaZip</a>
+</li>
+<li>isDataDescriptorWritingEnabled()
+: <a class="el" href="classQuaZip.html#ae5c665a59447c2d30e63e9c6df48ebb7">QuaZip</a>
+</li>
+<li>isOpen()
+: <a class="el" href="classQuaZip.html#a5b869a9c0d4f49955b759592fec08888">QuaZip</a>
+</li>
+<li>isRaw()
+: <a class="el" href="classQuaZipFile.html#a0df3db94c2a34c8d17ddaa0f54fc32c1">QuaZipFile</a>
+</li>
+<li>isRoot()
+: <a class="el" href="classQuaZipDir.html#a598fdf23f1b37e1876476e5969040a32">QuaZipDir</a>
+</li>
+<li>isSequential()
+: <a class="el" href="classQuaGzipFile.html#ae97f4e15d86c965c156df33d00318176">QuaGzipFile</a>
+, <a class="el" href="classQuaZIODevice.html#af2697f58c228741d3715801bf48a9a8b">QuaZIODevice</a>
+, <a class="el" href="classQuaZipFile.html#a64430ec50820c8096f963a7e5f53001f">QuaZipFile</a>
+</li>
+<li>isZip64Enabled()
+: <a class="el" href="classQuaZip.html#a1b638566390d7599ba5982e844b151f4">QuaZip</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>nameFilters()
+: <a class="el" href="classQuaZipDir.html#a00f18e23abb8cac04f975e7f31553f2e">QuaZipDir</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>open()
+: <a class="el" href="classQuaGzipFile.html#a1d560babdfff3a3441d704099a5bc1e4">QuaGzipFile</a>
+, <a class="el" href="classQuaZIODevice.html#a175446c18eb20c9aff6faf23f09cc67a">QuaZIODevice</a>
+, <a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962">QuaZip</a>
+, <a class="el" href="classQuaZipFile.html#a0bff0d15bbcd70306dc4a553a55776b9">QuaZipFile</a>
+</li>
+<li>operator!=()
+: <a class="el" href="classQuaZipDir.html#a6e60d858d05774c958215ee7741eceed">QuaZipDir</a>
+</li>
+<li>operator=()
+: <a class="el" href="classQuaZipDir.html#aa603c69be0c1597add5951b19f8bc961">QuaZipDir</a>
+</li>
+<li>operator==()
+: <a class="el" href="classQuaZipDir.html#a4a2e07484c7159a3f469922ba2383547">QuaZipDir</a>
+</li>
+<li>operator[]()
+: <a class="el" href="classQuaZipDir.html#a9e37ef5318c44a4575c58d66110e535a">QuaZipDir</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>path()
+: <a class="el" href="classQuaZipDir.html#a68ac82ad605c0b10f9ee1a2d6d474f52">QuaZipDir</a>
+</li>
+<li>pos()
+: <a class="el" href="classQuaZipFile.html#a90fd55dab83eca7f95df50b2c41b7f22">QuaZipFile</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_q"></a>- q -</h3><ul>
+<li>QuaGzipFile()
+: <a class="el" href="classQuaGzipFile.html#a709608207b41ca81d5beed2b34982809">QuaGzipFile</a>
+</li>
+<li>QuaZIODevice()
+: <a class="el" href="classQuaZIODevice.html#a8321ed35ee9b57cf9b1104912e236361">QuaZIODevice</a>
+</li>
+<li>QuaZip()
+: <a class="el" href="classQuaZip.html#a970e0f401c7cfd7a78e78572f758eec4">QuaZip</a>
+</li>
+<li>QuaZipDir()
+: <a class="el" href="classQuaZipDir.html#a6c9cc8b74c52d3fe997b753370566690">QuaZipDir</a>
+</li>
+<li>QuaZipFile()
+: <a class="el" href="classQuaZipFile.html#ad31592e0e8a9eaa009c6c0e2040a2158">QuaZipFile</a>
+</li>
+<li>QuaZipNewInfo()
+: <a class="el" href="structQuaZipNewInfo.html#a46c0f551cf9e6b2131929beb39187aac">QuaZipNewInfo</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>readData()
+: <a class="el" href="classQuaGzipFile.html#a9eab41b46367e63e0c269c42ca883d82">QuaGzipFile</a>
+, <a class="el" href="classQuaZIODevice.html#aa12b8bc9c923e543eda9ae22dbd1ecbb">QuaZIODevice</a>
+, <a class="el" href="classQuaZipFile.html#aa1f2274e1579327855a17d67a9046ec2">QuaZipFile</a>
+</li>
+<li>relativeFilePath()
+: <a class="el" href="classQuaZipDir.html#a2ae89c2b85786a0168656fc7a3faaf01">QuaZipDir</a>
+</li>
+<li>reset()
+: <a class="el" href="classQuaAdler32.html#a2fe6ac9eb289bafda6a9fd20e6472ab5">QuaAdler32</a>
+, <a class="el" href="classQuaChecksum32.html#ad3f5db3c76b00069db9bda333cb49d57">QuaChecksum32</a>
+, <a class="el" href="classQuaCrc32.html#a3fe7ce6cb73512c963ffaabfbbc66363">QuaCrc32</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>setAutoClose()
+: <a class="el" href="classQuaZip.html#a54bfc924762774ccf9f99be075ba7b0e">QuaZip</a>
+</li>
+<li>setCaseSensitivity()
+: <a class="el" href="classQuaZipDir.html#ad53c720975bb0c49a823355f7d518793">QuaZipDir</a>
+</li>
+<li>setComment()
+: <a class="el" href="classQuaZip.html#a1b5d936a203859340574d5908ffa2222">QuaZip</a>
+</li>
+<li>setCommentCodec()
+: <a class="el" href="classQuaZip.html#a1c81fca7215a4374f6f03872ade4885b">QuaZip</a>
+</li>
+<li>setCurrentFile()
+: <a class="el" href="classQuaZip.html#a6c657bfcfccb59d728e0da24c677d899">QuaZip</a>
+</li>
+<li>setDataDescriptorWritingEnabled()
+: <a class="el" href="classQuaZip.html#a6c23a12af88f7ea5edd4f9c0a24b9453">QuaZip</a>
+</li>
+<li>setDefaultFileNameCodec()
+: <a class="el" href="classQuaZip.html#a317f5db89d84a80417338a3ab89770da">QuaZip</a>
+</li>
+<li>setFileDateTime()
+: <a class="el" href="structQuaZipNewInfo.html#a2b18b554d056877a2f33ffb9d241ed85">QuaZipNewInfo</a>
+</li>
+<li>setFileName()
+: <a class="el" href="classQuaGzipFile.html#a253fbaf410a3d4ae0a719505c5525149">QuaGzipFile</a>
+, <a class="el" href="classQuaZipFile.html#a3732ca7704379d457b6a27db8837de95">QuaZipFile</a>
+</li>
+<li>setFileNameCodec()
+: <a class="el" href="classQuaZip.html#a339010b5566704ba3c9cafbfe848d8fb">QuaZip</a>
+</li>
+<li>setFileNTFSaTime()
+: <a class="el" href="structQuaZipNewInfo.html#a1042ac3d55a9deed760eb357aaa8284c">QuaZipNewInfo</a>
+</li>
+<li>setFileNTFScTime()
+: <a class="el" href="structQuaZipNewInfo.html#a44675ac1e306eddefcaa35972c294d15">QuaZipNewInfo</a>
+</li>
+<li>setFileNTFSmTime()
+: <a class="el" href="structQuaZipNewInfo.html#a3af07365df1d67502ab1d0ca0d45df79">QuaZipNewInfo</a>
+</li>
+<li>setFileNTFSTimes()
+: <a class="el" href="structQuaZipNewInfo.html#a663a37c5a7a2d18900ba8b0199617eff">QuaZipNewInfo</a>
+</li>
+<li>setFilePermissions()
+: <a class="el" href="structQuaZipNewInfo.html#a08bee5211eb0b49da260c7a9e7a266b8">QuaZipNewInfo</a>
+</li>
+<li>setFilter()
+: <a class="el" href="classQuaZipDir.html#a779a43641f0f3802678e39c9acd1fddb">QuaZipDir</a>
+</li>
+<li>setIoDevice()
+: <a class="el" href="classQuaZip.html#a64642948b6531ee54f5522f29e388cc6">QuaZip</a>
+</li>
+<li>setNameFilters()
+: <a class="el" href="classQuaZipDir.html#abcf208bfd6136e14f36725ae79dce2be">QuaZipDir</a>
+</li>
+<li>setPath()
+: <a class="el" href="classQuaZipDir.html#ae82d06e43856414c30583205d337c111">QuaZipDir</a>
+</li>
+<li>setPermissions()
+: <a class="el" href="structQuaZipNewInfo.html#aed68dc20f7dc42b5056491cf3c1d2d20">QuaZipNewInfo</a>
+</li>
+<li>setSorting()
+: <a class="el" href="classQuaZipDir.html#ae43e9d717e3c4b1c0d4790cf558e7451">QuaZipDir</a>
+</li>
+<li>setZip()
+: <a class="el" href="classQuaZipFile.html#ab7939a26d1e8de2f6aca54f49a12b980">QuaZipFile</a>
+</li>
+<li>setZip64Enabled()
+: <a class="el" href="classQuaZip.html#ab99a22efae02ebb4b5c9cd8eedc1c0b0">QuaZip</a>
+</li>
+<li>setZipName()
+: <a class="el" href="classQuaZip.html#aa80b661de1262af905d1677dbcb008cc">QuaZip</a>
+, <a class="el" href="classQuaZipFile.html#ac8109e9a5c19bea75982ff6986b5cb1e">QuaZipFile</a>
+</li>
+<li>size()
+: <a class="el" href="classQuaZipFile.html#ad1a17cc690a01c3edfb82984c3a4c8f0">QuaZipFile</a>
+</li>
+<li>sorting()
+: <a class="el" href="classQuaZipDir.html#a4000523c961ab9e0cad08641ff10e3fa">QuaZipDir</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>toQuaZipFileInfo()
+: <a class="el" href="structQuaZipFileInfo64.html#ada29945c7ee4c9df6fbe95864793aade">QuaZipFileInfo64</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>update()
+: <a class="el" href="classQuaAdler32.html#aba24f7b16aa0cdc26f81a9ad687fc653">QuaAdler32</a>
+, <a class="el" href="classQuaChecksum32.html#a63a6ed3171f9243214d307da67557f7e">QuaChecksum32</a>
+, <a class="el" href="classQuaCrc32.html#a5015d80e04afe6e6d094155b7e99888e">QuaCrc32</a>
+</li>
+<li>usize()
+: <a class="el" href="classQuaZipFile.html#a4814b5e6e39fb254737b81ea10964f50">QuaZipFile</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>value()
+: <a class="el" href="classQuaAdler32.html#a2022e1db95c23cef220b335e44d74fb1">QuaAdler32</a>
+, <a class="el" href="classQuaChecksum32.html#afd836e7534194fce08356be6a8336da7">QuaChecksum32</a>
+, <a class="el" href="classQuaCrc32.html#a957ce46a53862f75c89d6a3ac4f73389">QuaCrc32</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>writeData()
+: <a class="el" href="classQuaGzipFile.html#a6dd09d41d8a51c96b0f2134eff37f676">QuaGzipFile</a>
+, <a class="el" href="classQuaZIODevice.html#aab23b6badbc3548eb71ca86bf6211902">QuaZIODevice</a>
+, <a class="el" href="classQuaZipFile.html#abd07949a6fcc2ef094d2be5398bc8e7c">QuaZipFile</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_~"></a>- ~ -</h3><ul>
+<li>~QuaGzipFile()
+: <a class="el" href="classQuaGzipFile.html#a1200bc76f36bb2e1991e1e0467befbf2">QuaGzipFile</a>
+</li>
+<li>~QuaZIODevice()
+: <a class="el" href="classQuaZIODevice.html#ab3524cef44c240c21e6b7680ee5f42de">QuaZIODevice</a>
+</li>
+<li>~QuaZip()
+: <a class="el" href="classQuaZip.html#af60a2d3930b90f3b25a3148baecad81e">QuaZip</a>
+</li>
+<li>~QuaZipDir()
+: <a class="el" href="classQuaZipDir.html#ae95d60e2c23e611723371bf8fff2b095">QuaZipDir</a>
+</li>
+<li>~QuaZipFile()
+: <a class="el" href="classQuaZipFile.html#aa1e5a0cf491bafae6cc73e649caa97fc">QuaZipFile</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:18 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_g.html b/3rdparty/quazip-0.7/doc/html/functions_g.html
new file mode 100644
index 0000000..35f1b33
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_g.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li class="current"><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>getActualFileName()
+: <a class="el" href="classQuaZipFile.html#a7b8e3c39026855cd98661a1b2815c220">QuaZipFile</a>
+</li>
+<li>getCaseSensitivity()
+: <a class="el" href="classQuaZipFile.html#a25dbfddc589bf6b69b39905f3c3bcc73">QuaZipFile</a>
+</li>
+<li>getComment()
+: <a class="el" href="classQuaZip.html#ae55cfbf2296132df808c557b62433051">QuaZip</a>
+</li>
+<li>getCommentCodec()
+: <a class="el" href="classQuaZip.html#a008260161781d8b5d2a0a28493fddaf4">QuaZip</a>
+</li>
+<li>getCurrentFileInfo()
+: <a class="el" href="classQuaZip.html#a9c91a53ed4c2038e153c64bdc097ebe8">QuaZip</a>
+</li>
+<li>getCurrentFileName()
+: <a class="el" href="classQuaZip.html#a9783f8b4f39cd55e71e975aea78fd54a">QuaZip</a>
+</li>
+<li>getEntriesCount()
+: <a class="el" href="classQuaZip.html#a2ea4bd1fca948637c35c2d2752bb5a80">QuaZip</a>
+</li>
+<li>getFileInfo()
+: <a class="el" href="classQuaZipFile.html#ad3f5807329321be21b12c1ba5798b359">QuaZipFile</a>
+</li>
+<li>getFileInfoList()
+: <a class="el" href="classQuaZip.html#a7486af66bede8e131db0cd2e81881387">QuaZip</a>
+</li>
+<li>getFileInfoList64()
+: <a class="el" href="classQuaZip.html#a474e66b1b696a9e00edcc067484c36ad">QuaZip</a>
+</li>
+<li>getFileList()
+: <a class="el" href="classJlCompress.html#ab42422be913f817d7e04c1b1cd5d0156">JlCompress</a>
+</li>
+<li>getFileName()
+: <a class="el" href="classQuaGzipFile.html#a9a0954a1db1fcf2aeba0530239bce71c">QuaGzipFile</a>
+, <a class="el" href="classQuaZipFile.html#a6999362e70a5b2396fba5cfb30095ff9">QuaZipFile</a>
+</li>
+<li>getFileNameCodec()
+: <a class="el" href="classQuaZip.html#a27b866aa2c75ea6f9c438cbb6e32b43c">QuaZip</a>
+</li>
+<li>getFileNameList()
+: <a class="el" href="classQuaZip.html#abb38d8b4c9c4ae0728b48caae9dd82de">QuaZip</a>
+</li>
+<li>getIoDevice()
+: <a class="el" href="classQuaZIODevice.html#ad63e7f1717c7d91b3c2c5ace908c98b7">QuaZIODevice</a>
+, <a class="el" href="classQuaZip.html#afd3ba12fe68748acbf8b7cc14a5a1c29">QuaZip</a>
+</li>
+<li>getMode()
+: <a class="el" href="classQuaZip.html#a129ceff04d28fb00531f7bf7f9329664">QuaZip</a>
+</li>
+<li>getNTFSaTime()
+: <a class="el" href="structQuaZipFileInfo64.html#afe4c454de7d067a0095da0223f0cbec2">QuaZipFileInfo64</a>
+</li>
+<li>getNTFScTime()
+: <a class="el" href="structQuaZipFileInfo64.html#a409dcbbe1ecd88dadb51be1aec48819d">QuaZipFileInfo64</a>
+</li>
+<li>getNTFSmTime()
+: <a class="el" href="structQuaZipFileInfo64.html#af4b19399367cf5bf24026344e0631ccb">QuaZipFileInfo64</a>
+</li>
+<li>getPermissions()
+: <a class="el" href="structQuaZipFileInfo64.html#a099216bd8991a983168d91c06a689f61">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#af87f96a64d7c02b002622f81d13accdb">QuaZipFileInfo</a>
+</li>
+<li>getUnzFile()
+: <a class="el" href="classQuaZip.html#a3b78a652f296ff4a678a791e8294e642">QuaZip</a>
+</li>
+<li>getZip()
+: <a class="el" href="classQuaZipFile.html#a72daf8a9da14907a801a783603003205">QuaZipFile</a>
+</li>
+<li>getZipError()
+: <a class="el" href="classQuaZip.html#a28b91a6282ddd9382c96a069572c6fb4">QuaZip</a>
+, <a class="el" href="classQuaZipFile.html#a26d2ee56aad947193b73052f80597ef0">QuaZipFile</a>
+</li>
+<li>getZipFile()
+: <a class="el" href="classQuaZip.html#a425043a4d7cc31e2fe2bba73d954f15c">QuaZip</a>
+</li>
+<li>getZipName()
+: <a class="el" href="classQuaZip.html#a4f7deef08ff40aeb1a7a04bcd7f228c2">QuaZip</a>
+, <a class="el" href="classQuaZipFile.html#a6f034a714aa94631367590de3f8f4e22">QuaZipFile</a>
+</li>
+<li>goToFirstFile()
+: <a class="el" href="classQuaZip.html#a745488f9177bcec3cdb858587584e033">QuaZip</a>
+</li>
+<li>goToNextFile()
+: <a class="el" href="classQuaZip.html#aee6779b6cd338420c2e8c5655fa8ba97">QuaZip</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_h.html b/3rdparty/quazip-0.7/doc/html/functions_h.html
new file mode 100644
index 0000000..293ac41
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_h.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li class="current"><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>hasCurrentFile()
+: <a class="el" href="classQuaZip.html#a00b237d926648f45da86db25e7cfb697">QuaZip</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_i.html b/3rdparty/quazip-0.7/doc/html/functions_i.html
new file mode 100644
index 0000000..962ebaf
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_i.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li class="current"><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>internalAttr
+: <a class="el" href="structQuaZipFileInfo64.html#aeb895613e76a4cc63f861b010c9e92c0">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#a36e681a93b041617addee78cb939c93d">QuaZipFileInfo</a>
+, <a class="el" href="structQuaZipNewInfo.html#a59ce9776c2ac7547ade8cb4c404c77ab">QuaZipNewInfo</a>
+</li>
+<li>isAutoClose()
+: <a class="el" href="classQuaZip.html#adc2cc762ab5744720ae4d33290b5f5bf">QuaZip</a>
+</li>
+<li>isDataDescriptorWritingEnabled()
+: <a class="el" href="classQuaZip.html#ae5c665a59447c2d30e63e9c6df48ebb7">QuaZip</a>
+</li>
+<li>isOpen()
+: <a class="el" href="classQuaZip.html#a5b869a9c0d4f49955b759592fec08888">QuaZip</a>
+</li>
+<li>isRaw()
+: <a class="el" href="classQuaZipFile.html#a0df3db94c2a34c8d17ddaa0f54fc32c1">QuaZipFile</a>
+</li>
+<li>isRoot()
+: <a class="el" href="classQuaZipDir.html#a598fdf23f1b37e1876476e5969040a32">QuaZipDir</a>
+</li>
+<li>isSequential()
+: <a class="el" href="classQuaGzipFile.html#ae97f4e15d86c965c156df33d00318176">QuaGzipFile</a>
+, <a class="el" href="classQuaZIODevice.html#af2697f58c228741d3715801bf48a9a8b">QuaZIODevice</a>
+, <a class="el" href="classQuaZipFile.html#a64430ec50820c8096f963a7e5f53001f">QuaZipFile</a>
+</li>
+<li>isZip64Enabled()
+: <a class="el" href="classQuaZip.html#a1b638566390d7599ba5982e844b151f4">QuaZip</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_m.html b/3rdparty/quazip-0.7/doc/html/functions_m.html
new file mode 100644
index 0000000..8455d67
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_m.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li class="current"><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>MAX_FILE_NAME_LENGTH
+: <a class="el" href="classQuaZip.html#adce46b942c341dbb5c851eadead65459ab26ce1a9c9e94f901dc2cf90fa5baa4b">QuaZip</a>
+</li>
+<li>mdAdd
+: <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a22c745f349f06add449af523254fdaec">QuaZip</a>
+</li>
+<li>mdAppend
+: <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ab807f0c65653a16d77b365801fd25582">QuaZip</a>
+</li>
+<li>mdCreate
+: <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e">QuaZip</a>
+</li>
+<li>mdNotOpen
+: <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ac87ddb1e901e1ec700c16ee0d4d398ce">QuaZip</a>
+</li>
+<li>mdUnzip
+: <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">QuaZip</a>
+</li>
+<li>method
+: <a class="el" href="structQuaZipFileInfo64.html#a445967ecbb5a3dd2a9d516db3e14a34a">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#af5c1bbda7f5dec2c358e7a543564de4c">QuaZipFileInfo</a>
+</li>
+<li>Mode
+: <a class="el" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4">QuaZip</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_n.html b/3rdparty/quazip-0.7/doc/html/functions_n.html
new file mode 100644
index 0000000..76df8b7
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_n.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li class="current"><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>name
+: <a class="el" href="structQuaZipFileInfo64.html#a2cadad4cb9a765e90b5422dae2388762">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#a16ac323965deccf0232bfae69d933a84">QuaZipFileInfo</a>
+, <a class="el" href="structQuaZipNewInfo.html#a2bdef01b6ac3326e48598e32bfa5fbe8">QuaZipNewInfo</a>
+</li>
+<li>nameFilters()
+: <a class="el" href="classQuaZipDir.html#a00f18e23abb8cac04f975e7f31553f2e">QuaZipDir</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_o.html b/3rdparty/quazip-0.7/doc/html/functions_o.html
new file mode 100644
index 0000000..025f774
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_o.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li class="current"><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>open()
+: <a class="el" href="classQuaGzipFile.html#a1d560babdfff3a3441d704099a5bc1e4">QuaGzipFile</a>
+, <a class="el" href="classQuaZIODevice.html#a175446c18eb20c9aff6faf23f09cc67a">QuaZIODevice</a>
+, <a class="el" href="classQuaZip.html#abfa4e6018b2964a3d10a4c54e5ab3962">QuaZip</a>
+, <a class="el" href="classQuaZipFile.html#a2429ea59c77371d7af56d739db130b18">QuaZipFile</a>
+</li>
+<li>operator!=()
+: <a class="el" href="classQuaZipDir.html#a6e60d858d05774c958215ee7741eceed">QuaZipDir</a>
+</li>
+<li>operator=()
+: <a class="el" href="classQuaZipDir.html#aa603c69be0c1597add5951b19f8bc961">QuaZipDir</a>
+</li>
+<li>operator==()
+: <a class="el" href="classQuaZipDir.html#a4a2e07484c7159a3f469922ba2383547">QuaZipDir</a>
+</li>
+<li>operator[]()
+: <a class="el" href="classQuaZipDir.html#a9e37ef5318c44a4575c58d66110e535a">QuaZipDir</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_p.html b/3rdparty/quazip-0.7/doc/html/functions_p.html
new file mode 100644
index 0000000..293daf3
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_p.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li class="current"><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>path()
+: <a class="el" href="classQuaZipDir.html#a68ac82ad605c0b10f9ee1a2d6d474f52">QuaZipDir</a>
+</li>
+<li>pos()
+: <a class="el" href="classQuaZipFile.html#a90fd55dab83eca7f95df50b2c41b7f22">QuaZipFile</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_q.html b/3rdparty/quazip-0.7/doc/html/functions_q.html
new file mode 100644
index 0000000..b643ec8
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_q.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li class="current"><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_q"></a>- q -</h3><ul>
+<li>QuaGzipFile()
+: <a class="el" href="classQuaGzipFile.html#a709608207b41ca81d5beed2b34982809">QuaGzipFile</a>
+</li>
+<li>QuaZIODevice()
+: <a class="el" href="classQuaZIODevice.html#a8321ed35ee9b57cf9b1104912e236361">QuaZIODevice</a>
+</li>
+<li>QuaZip()
+: <a class="el" href="classQuaZip.html#a970e0f401c7cfd7a78e78572f758eec4">QuaZip</a>
+</li>
+<li>QuaZipDir()
+: <a class="el" href="classQuaZipDir.html#a6c9cc8b74c52d3fe997b753370566690">QuaZipDir</a>
+</li>
+<li>QuaZipFile()
+: <a class="el" href="classQuaZipFile.html#a1349ad27f1947bc3e346d83dbf9586c4">QuaZipFile</a>
+</li>
+<li>QuaZipNewInfo()
+: <a class="el" href="structQuaZipNewInfo.html#ad47cf11f4277edcb09a8ba2b2963f2a9">QuaZipNewInfo</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_r.html b/3rdparty/quazip-0.7/doc/html/functions_r.html
new file mode 100644
index 0000000..9fa41a3
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_r.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li class="current"><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>readData()
+: <a class="el" href="classQuaGzipFile.html#a9eab41b46367e63e0c269c42ca883d82">QuaGzipFile</a>
+, <a class="el" href="classQuaZIODevice.html#aa12b8bc9c923e543eda9ae22dbd1ecbb">QuaZIODevice</a>
+, <a class="el" href="classQuaZipFile.html#aa1f2274e1579327855a17d67a9046ec2">QuaZipFile</a>
+</li>
+<li>relativeFilePath()
+: <a class="el" href="classQuaZipDir.html#a2ae89c2b85786a0168656fc7a3faaf01">QuaZipDir</a>
+</li>
+<li>reset()
+: <a class="el" href="classQuaAdler32.html#a2fe6ac9eb289bafda6a9fd20e6472ab5">QuaAdler32</a>
+, <a class="el" href="classQuaChecksum32.html#ad3f5db3c76b00069db9bda333cb49d57">QuaChecksum32</a>
+, <a class="el" href="classQuaCrc32.html#a3fe7ce6cb73512c963ffaabfbbc66363">QuaCrc32</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_s.html b/3rdparty/quazip-0.7/doc/html/functions_s.html
new file mode 100644
index 0000000..ac710d3
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_s.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li class="current"><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>setAutoClose()
+: <a class="el" href="classQuaZip.html#a54bfc924762774ccf9f99be075ba7b0e">QuaZip</a>
+</li>
+<li>setCaseSensitivity()
+: <a class="el" href="classQuaZipDir.html#ad53c720975bb0c49a823355f7d518793">QuaZipDir</a>
+</li>
+<li>setComment()
+: <a class="el" href="classQuaZip.html#a1b5d936a203859340574d5908ffa2222">QuaZip</a>
+</li>
+<li>setCommentCodec()
+: <a class="el" href="classQuaZip.html#a1c81fca7215a4374f6f03872ade4885b">QuaZip</a>
+</li>
+<li>setCurrentFile()
+: <a class="el" href="classQuaZip.html#a6c657bfcfccb59d728e0da24c677d899">QuaZip</a>
+</li>
+<li>setDataDescriptorWritingEnabled()
+: <a class="el" href="classQuaZip.html#a6c23a12af88f7ea5edd4f9c0a24b9453">QuaZip</a>
+</li>
+<li>setDefaultFileNameCodec()
+: <a class="el" href="classQuaZip.html#a317f5db89d84a80417338a3ab89770da">QuaZip</a>
+</li>
+<li>setFileDateTime()
+: <a class="el" href="structQuaZipNewInfo.html#a2b18b554d056877a2f33ffb9d241ed85">QuaZipNewInfo</a>
+</li>
+<li>setFileName()
+: <a class="el" href="classQuaGzipFile.html#a253fbaf410a3d4ae0a719505c5525149">QuaGzipFile</a>
+, <a class="el" href="classQuaZipFile.html#a3732ca7704379d457b6a27db8837de95">QuaZipFile</a>
+</li>
+<li>setFileNameCodec()
+: <a class="el" href="classQuaZip.html#a339010b5566704ba3c9cafbfe848d8fb">QuaZip</a>
+</li>
+<li>setFileNTFSaTime()
+: <a class="el" href="structQuaZipNewInfo.html#a1042ac3d55a9deed760eb357aaa8284c">QuaZipNewInfo</a>
+</li>
+<li>setFileNTFScTime()
+: <a class="el" href="structQuaZipNewInfo.html#a44675ac1e306eddefcaa35972c294d15">QuaZipNewInfo</a>
+</li>
+<li>setFileNTFSmTime()
+: <a class="el" href="structQuaZipNewInfo.html#a3af07365df1d67502ab1d0ca0d45df79">QuaZipNewInfo</a>
+</li>
+<li>setFileNTFSTimes()
+: <a class="el" href="structQuaZipNewInfo.html#a663a37c5a7a2d18900ba8b0199617eff">QuaZipNewInfo</a>
+</li>
+<li>setFilePermissions()
+: <a class="el" href="structQuaZipNewInfo.html#a08bee5211eb0b49da260c7a9e7a266b8">QuaZipNewInfo</a>
+</li>
+<li>setFilter()
+: <a class="el" href="classQuaZipDir.html#a779a43641f0f3802678e39c9acd1fddb">QuaZipDir</a>
+</li>
+<li>setIoDevice()
+: <a class="el" href="classQuaZip.html#a64642948b6531ee54f5522f29e388cc6">QuaZip</a>
+</li>
+<li>setNameFilters()
+: <a class="el" href="classQuaZipDir.html#abcf208bfd6136e14f36725ae79dce2be">QuaZipDir</a>
+</li>
+<li>setPath()
+: <a class="el" href="classQuaZipDir.html#ae82d06e43856414c30583205d337c111">QuaZipDir</a>
+</li>
+<li>setPermissions()
+: <a class="el" href="structQuaZipNewInfo.html#aed68dc20f7dc42b5056491cf3c1d2d20">QuaZipNewInfo</a>
+</li>
+<li>setSorting()
+: <a class="el" href="classQuaZipDir.html#ae43e9d717e3c4b1c0d4790cf558e7451">QuaZipDir</a>
+</li>
+<li>setZip()
+: <a class="el" href="classQuaZipFile.html#ab7939a26d1e8de2f6aca54f49a12b980">QuaZipFile</a>
+</li>
+<li>setZip64Enabled()
+: <a class="el" href="classQuaZip.html#ab99a22efae02ebb4b5c9cd8eedc1c0b0">QuaZip</a>
+</li>
+<li>setZipName()
+: <a class="el" href="classQuaZip.html#aa80b661de1262af905d1677dbcb008cc">QuaZip</a>
+, <a class="el" href="classQuaZipFile.html#ac8109e9a5c19bea75982ff6986b5cb1e">QuaZipFile</a>
+</li>
+<li>size()
+: <a class="el" href="classQuaZipFile.html#ad1a17cc690a01c3edfb82984c3a4c8f0">QuaZipFile</a>
+</li>
+<li>sorting()
+: <a class="el" href="classQuaZipDir.html#a4000523c961ab9e0cad08641ff10e3fa">QuaZipDir</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_t.html b/3rdparty/quazip-0.7/doc/html/functions_t.html
new file mode 100644
index 0000000..03cfffb
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_t.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li class="current"><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>toQuaZipFileInfo()
+: <a class="el" href="structQuaZipFileInfo64.html#ada29945c7ee4c9df6fbe95864793aade">QuaZipFileInfo64</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_u.html b/3rdparty/quazip-0.7/doc/html/functions_u.html
new file mode 100644
index 0000000..bde0054
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_u.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li class="current"><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>uncompressedSize
+: <a class="el" href="structQuaZipFileInfo64.html#a571ca077fe282c908e57b0bc82528d49">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#a0eb908e1b1ea637d1f1f4d6aa31db07f">QuaZipFileInfo</a>
+, <a class="el" href="structQuaZipNewInfo.html#a18c079b3f2f5ab6eecdd61d6dbe93be6">QuaZipNewInfo</a>
+</li>
+<li>unzFile_f
+: <a class="el" href="classQuaZipPrivate.html#aeb1d2d3263929b17d6b0608e35af2a88">QuaZipPrivate</a>
+</li>
+<li>update()
+: <a class="el" href="classQuaAdler32.html#aba24f7b16aa0cdc26f81a9ad687fc653">QuaAdler32</a>
+, <a class="el" href="classQuaChecksum32.html#a63a6ed3171f9243214d307da67557f7e">QuaChecksum32</a>
+, <a class="el" href="classQuaCrc32.html#a5015d80e04afe6e6d094155b7e99888e">QuaCrc32</a>
+</li>
+<li>usize()
+: <a class="el" href="classQuaZipFile.html#a4814b5e6e39fb254737b81ea10964f50">QuaZipFile</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_v.html b/3rdparty/quazip-0.7/doc/html/functions_v.html
new file mode 100644
index 0000000..a8e9a90
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_v.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li class="current"><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>value()
+: <a class="el" href="classQuaAdler32.html#a2022e1db95c23cef220b335e44d74fb1">QuaAdler32</a>
+, <a class="el" href="classQuaChecksum32.html#afd836e7534194fce08356be6a8336da7">QuaChecksum32</a>
+, <a class="el" href="classQuaCrc32.html#a957ce46a53862f75c89d6a3ac4f73389">QuaCrc32</a>
+</li>
+<li>versionCreated
+: <a class="el" href="structQuaZipFileInfo64.html#a95aeb06b080e483fde874ba2d06f203c">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#a52f3f1d960ebaa2acbc2a86458fa3e6e">QuaZipFileInfo</a>
+</li>
+<li>versionNeeded
+: <a class="el" href="structQuaZipFileInfo64.html#a27654f5ce3a75331e9c9a7900b407169">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#a8b73982808bded49e88e624a65e1a94f">QuaZipFileInfo</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_vars.html b/3rdparty/quazip-0.7/doc/html/functions_vars.html
new file mode 100644
index 0000000..c6020e2
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_vars.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members - Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="#index_c"><span>c</span></a></li>
+      <li><a href="#index_d"><span>d</span></a></li>
+      <li><a href="#index_e"><span>e</span></a></li>
+      <li><a href="#index_f"><span>f</span></a></li>
+      <li><a href="#index_i"><span>i</span></a></li>
+      <li><a href="#index_m"><span>m</span></a></li>
+      <li><a href="#index_n"><span>n</span></a></li>
+      <li><a href="#index_u"><span>u</span></a></li>
+      <li><a href="#index_v"><span>v</span></a></li>
+      <li class="current"><a href="#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>comment
+: <a class="el" href="structQuaZipFileInfo64.html#aba3f5b982087c3e0343bb61e8814c7d1">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#adc2aad7bbd87ce3415e2a19851266bfc">QuaZipFileInfo</a>
+, <a class="el" href="structQuaZipNewInfo.html#ae24b1d38c3550b4724862ffcf8f20924">QuaZipNewInfo</a>
+</li>
+<li>compressedSize
+: <a class="el" href="structQuaZipFileInfo64.html#add8733946ea4af23aa32d85f10955b0f">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#af6116eaac1f36b2a4b3a6a39851a85cc">QuaZipFileInfo</a>
+</li>
+<li>crc
+: <a class="el" href="structQuaZipFileInfo64.html#aeb7b2757a0efa814b196b5280d000a14">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#aceee045c9ebce0b9724f40d342bc99ea">QuaZipFileInfo</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>dateTime
+: <a class="el" href="structQuaZipFileInfo64.html#a4d77c6aa6076703e858c938efeb551e4">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#ad6993d099436813a27fd31aebe42911a">QuaZipFileInfo</a>
+, <a class="el" href="structQuaZipNewInfo.html#aec7f3ac72c72a2e10b82ad64c2fa3453">QuaZipNewInfo</a>
+</li>
+<li>diskNumberStart
+: <a class="el" href="structQuaZipFileInfo64.html#ac8945cf1ff54d39d28e755685b91e941">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#aa70157fdc2bd8de10405055b4233050b">QuaZipFileInfo</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>externalAttr
+: <a class="el" href="structQuaZipFileInfo64.html#a3a8bc40f1aa0cb0985c4e2f8a9678430">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#afeb65ffdacc4fc0ba7848d4b37f62ecf">QuaZipFileInfo</a>
+, <a class="el" href="structQuaZipNewInfo.html#affd1a9700d302e1395bd04f0864da7d0">QuaZipNewInfo</a>
+</li>
+<li>extra
+: <a class="el" href="structQuaZipFileInfo64.html#acf0b1b97f377208847c6912cd1bf1332">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#affc7b097de2c3c2ef5801c60f96adc72">QuaZipFileInfo</a>
+</li>
+<li>extraGlobal
+: <a class="el" href="structQuaZipNewInfo.html#abda207eb3949db3a88761c1b06e6bd58">QuaZipNewInfo</a>
+</li>
+<li>extraLocal
+: <a class="el" href="structQuaZipNewInfo.html#ab377a81c51cf495c7aeee4f19340a43f">QuaZipNewInfo</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>flags
+: <a class="el" href="structQuaZipFileInfo64.html#a6aa533dd4e02f52459e1e1a0df31e992">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#a56d36f777e4fc892c71e22d080622e2c">QuaZipFileInfo</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>internalAttr
+: <a class="el" href="structQuaZipFileInfo64.html#aeb895613e76a4cc63f861b010c9e92c0">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#a36e681a93b041617addee78cb939c93d">QuaZipFileInfo</a>
+, <a class="el" href="structQuaZipNewInfo.html#a59ce9776c2ac7547ade8cb4c404c77ab">QuaZipNewInfo</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>method
+: <a class="el" href="structQuaZipFileInfo64.html#a445967ecbb5a3dd2a9d516db3e14a34a">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#af5c1bbda7f5dec2c358e7a543564de4c">QuaZipFileInfo</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>name
+: <a class="el" href="structQuaZipFileInfo64.html#a2cadad4cb9a765e90b5422dae2388762">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#a16ac323965deccf0232bfae69d933a84">QuaZipFileInfo</a>
+, <a class="el" href="structQuaZipNewInfo.html#a2bdef01b6ac3326e48598e32bfa5fbe8">QuaZipNewInfo</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>uncompressedSize
+: <a class="el" href="structQuaZipFileInfo64.html#a571ca077fe282c908e57b0bc82528d49">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#a0eb908e1b1ea637d1f1f4d6aa31db07f">QuaZipFileInfo</a>
+, <a class="el" href="structQuaZipNewInfo.html#a18c079b3f2f5ab6eecdd61d6dbe93be6">QuaZipNewInfo</a>
+</li>
+<li>unzFile_f
+: <a class="el" href="classQuaZipPrivate.html#aeb1d2d3263929b17d6b0608e35af2a88">QuaZipPrivate</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>versionCreated
+: <a class="el" href="structQuaZipFileInfo64.html#a95aeb06b080e483fde874ba2d06f203c">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#a52f3f1d960ebaa2acbc2a86458fa3e6e">QuaZipFileInfo</a>
+</li>
+<li>versionNeeded
+: <a class="el" href="structQuaZipFileInfo64.html#a27654f5ce3a75331e9c9a7900b407169">QuaZipFileInfo64</a>
+, <a class="el" href="structQuaZipFileInfo.html#a8b73982808bded49e88e624a65e1a94f">QuaZipFileInfo</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_z"></a>- z -</h3><ul>
+<li>zipFile_f
+: <a class="el" href="classQuaZipPrivate.html#ab83497156892d07e6a1514cef149a1e2">QuaZipPrivate</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:18 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_w.html b/3rdparty/quazip-0.7/doc/html/functions_w.html
new file mode 100644
index 0000000..e8a1f98
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_w.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li class="current"><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>writeData()
+: <a class="el" href="classQuaGzipFile.html#a6dd09d41d8a51c96b0f2134eff37f676">QuaGzipFile</a>
+, <a class="el" href="classQuaZIODevice.html#aab23b6badbc3548eb71ca86bf6211902">QuaZIODevice</a>
+, <a class="el" href="classQuaZipFile.html#abd07949a6fcc2ef094d2be5398bc8e7c">QuaZipFile</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_z.html b/3rdparty/quazip-0.7/doc/html/functions_z.html
new file mode 100644
index 0000000..783b6b0
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_z.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li class="current"><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_z"></a>- z -</h3><ul>
+<li>zipFile_f
+: <a class="el" href="classQuaZipPrivate.html#ab83497156892d07e6a1514cef149a1e2">QuaZipPrivate</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/functions_~.html b/3rdparty/quazip-0.7/doc/html/functions_~.html
new file mode 100644
index 0000000..e2a2022
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/functions_~.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_b.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_c.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_d.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_e.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_f.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_g.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_h.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_i.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_m.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_n.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_o.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_p.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_q.html#index_q"><span>q</span></a></li>
+      <li><a href="functions_r.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_s.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_t.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_u.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_v.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_w.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_z.html#index_z"><span>z</span></a></li>
+      <li class="current"><a href="functions_~.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a class="anchor" id="index_~"></a>- ~ -</h3><ul>
+<li>~QuaGzipFile()
+: <a class="el" href="classQuaGzipFile.html#a1200bc76f36bb2e1991e1e0467befbf2">QuaGzipFile</a>
+</li>
+<li>~QuaZIODevice()
+: <a class="el" href="classQuaZIODevice.html#ab3524cef44c240c21e6b7680ee5f42de">QuaZIODevice</a>
+</li>
+<li>~QuaZip()
+: <a class="el" href="classQuaZip.html#af60a2d3930b90f3b25a3148baecad81e">QuaZip</a>
+</li>
+<li>~QuaZipDir()
+: <a class="el" href="classQuaZipDir.html#ae95d60e2c23e611723371bf8fff2b095">QuaZipDir</a>
+</li>
+<li>~QuaZipFile()
+: <a class="el" href="classQuaZipFile.html#aa1e5a0cf491bafae6cc73e649caa97fc">QuaZipFile</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/graph_legend.html b/3rdparty/quazip-0.7/doc/html/graph_legend.html
new file mode 100644
index 0000000..886eb7d
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/graph_legend.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Graph Legend</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Graph Legend</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>This page explains how to interpret the graphs that are generated by doxygen.</p>
+<p>Consider the following example: </p>
+<div class="fragment"><div class="line"><span class="comment">/*! Invisible class because of truncation */</span></div>
+<div class="line"><span class="keyword">class </span>Invisible { };</div>
+<div class="line"><span class="comment"></span></div>
+<div class="line"><span class="comment">/*! Truncated class, inheritance relation is hidden */</span></div>
+<div class="line"><span class="keyword">class </span>Truncated : <span class="keyword">public</span> Invisible { };</div>
+<div class="line"></div>
+<div class="line"><span class="comment">/* Class not documented with doxygen comments */</span></div>
+<div class="line"><span class="keyword">class </span>Undocumented { };</div>
+<div class="line"><span class="comment"></span></div>
+<div class="line"><span class="comment">/*! Class that is inherited using public inheritance */</span></div>
+<div class="line"><span class="keyword">class </span>PublicBase : <span class="keyword">public</span> Truncated { };</div>
+<div class="line"><span class="comment"></span></div>
+<div class="line"><span class="comment">/*! A template class */</span></div>
+<div class="line"><span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">class </span>Templ { };</div>
+<div class="line"><span class="comment"></span></div>
+<div class="line"><span class="comment">/*! Class that is inherited using protected inheritance */</span></div>
+<div class="line"><span class="keyword">class </span>ProtectedBase { };</div>
+<div class="line"><span class="comment"></span></div>
+<div class="line"><span class="comment">/*! Class that is inherited using private inheritance */</span></div>
+<div class="line"><span class="keyword">class </span>PrivateBase { };</div>
+<div class="line"><span class="comment"></span></div>
+<div class="line"><span class="comment">/*! Class that is used by the Inherited class */</span></div>
+<div class="line"><span class="keyword">class </span>Used { };</div>
+<div class="line"><span class="comment"></span></div>
+<div class="line"><span class="comment">/*! Super class that inherits a number of other classes */</span></div>
+<div class="line"><span class="keyword">class </span>Inherited : <span class="keyword">public</span> PublicBase,</div>
+<div class="line">                  <span class="keyword">protected</span> ProtectedBase,</div>
+<div class="line">                  <span class="keyword">private</span> PrivateBase,</div>
+<div class="line">                  <span class="keyword">public</span> Undocumented,</div>
+<div class="line">                  <span class="keyword">public</span> Templ<int></div>
+<div class="line">{</div>
+<div class="line">  <span class="keyword">private</span>:</div>
+<div class="line">    Used *m_usedClass;</div>
+<div class="line">};</div>
+</div><!-- fragment --><p> This will result in the following graph:</p>
+<center><div class="image">
+<img src="graph_legend.png" />
+</div>
+</center><p>The boxes in the above graph have the following meaning: </p>
+<ul>
+<li>
+A filled gray box represents the struct or class for which the graph is generated. </li>
+<li>
+A box with a black border denotes a documented struct or class. </li>
+<li>
+A box with a grey border denotes an undocumented struct or class. </li>
+<li>
+A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>
+</ul>
+<p>The arrows have the following meaning: </p>
+<ul>
+<li>
+A dark blue arrow is used to visualize a public inheritance relation between two classes. </li>
+<li>
+A dark green arrow is used for protected inheritance. </li>
+<li>
+A dark red arrow is used for private inheritance. </li>
+<li>
+A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible. </li>
+<li>
+A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance. </li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/graph_legend.md5 b/3rdparty/quazip-0.7/doc/html/graph_legend.md5
new file mode 100644
index 0000000..a06ed05
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/graph_legend.md5
@@ -0,0 +1 @@
+387ff8eb65306fa251338d3c9bd7bfff
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/graph_legend.png b/3rdparty/quazip-0.7/doc/html/graph_legend.png
new file mode 100644
index 0000000..6c1d0c2
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/graph_legend.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/hierarchy.html b/3rdparty/quazip-0.7/doc/html/hierarchy.html
new file mode 100644
index 0000000..308bb63
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/hierarchy.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Hierarchy</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li class="current"><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Class Hierarchy</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">
+<p><a href="inherits.html">Go to the graphical class hierarchy</a></p>
+This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classJlCompress.html" target="_self">JlCompress</a></td><td class="desc">Utility class for typical operations </td></tr>
+<tr id="row_1_"><td class="entry"><img id="arr_1_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>QIODevice</b></td><td class="desc"></td></tr>
+<tr id="row_1_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaGzipFile.html" target="_self">QuaGzipFile</a></td><td class="desc">GZIP file </td></tr>
+<tr id="row_1_1_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaZIODevice.html" target="_self">QuaZIODevice</a></td><td class="desc">A class to compress/decompress QIODevice </td></tr>
+<tr id="row_1_2_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaZipFile.html" target="_self">QuaZipFile</a></td><td class="desc">A file inside ZIP archive </td></tr>
+<tr id="row_2_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structQIODevice__descriptor.html" target="_self">QIODevice_descriptor</a></td><td class="desc"></td></tr>
+<tr id="row_3_" class="even"><td class="entry"><img id="arr_3_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('3_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaChecksum32.html" target="_self">QuaChecksum32</a></td><td class="desc">Checksum interface </td></tr>
+<tr id="row_3_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaAdler32.html" target="_self">QuaAdler32</a></td><td class="desc">Adler32 checksum </td></tr>
+<tr id="row_3_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaCrc32.html" target="_self">QuaCrc32</a></td><td class="desc">CRC32 checksum </td></tr>
+<tr id="row_4_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaZip.html" target="_self">QuaZip</a></td><td class="desc">ZIP archive </td></tr>
+<tr id="row_5_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaZipDir.html" target="_self">QuaZipDir</a></td><td class="desc">Provides ZIP archive navigation </td></tr>
+<tr id="row_6_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structQuaZipFileInfo.html" target="_self">QuaZipFileInfo</a></td><td class="desc">Information about a file inside archive </td></tr>
+<tr id="row_7_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structQuaZipFileInfo64.html" target="_self">QuaZipFileInfo64</a></td><td class="desc">Information about a file inside archive (with zip64 support) </td></tr>
+<tr id="row_8_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaZipFilePrivate.html" target="_self">QuaZipFilePrivate</a></td><td class="desc">The implementation class for <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> </td></tr>
+<tr id="row_9_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structQuaZipNewInfo.html" target="_self">QuaZipNewInfo</a></td><td class="desc">Information about a file to be created </td></tr>
+<tr id="row_10_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQuaZipPrivate.html" target="_self">QuaZipPrivate</a></td><td class="desc">All the internal stuff for the <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> class </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/index.html b/3rdparty/quazip-0.7/doc/html/index.html
new file mode 100644
index 0000000..4d1a5bb
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/index.html
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaZIP - Qt/C++ wrapper for ZIP/UNZIP package</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li class="current"><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QuaZIP - Qt/C++ wrapper for ZIP/UNZIP package </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"> 
+<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=142688&type=7" style="width:210; height:62; border:none; float:right;" alt="Powered by SourceForge.net" /></a>
+ <h1><a class="anchor" id="overview"></a>
+Overview</h1>
+<p>QuaZIP is a simple C++ wrapper over <a href="http://www.winimage.com/zLibDll/minizip.html">Gilles Vollant's ZIP/UNZIP package</a> that can be used to access ZIP archives. It uses <a href="http://qt.digia.com/">the Qt toolkit</a>.</p>
+<p>If you do not know what Qt is, you have two options:</p>
+<ul>
+<li>Just forget about QuaZIP.</li>
+<li>Learn more about Qt by downloading it and/or reading the excellent <a href="http://qt-project.org/doc/">official Qt documentation</a></li>
+</ul>
+<p>The choice is yours, but if you are really interested in cross-platform (Windows/Linux/BSD/UNIX/Mac/Others) software development, I would definitely recommend you the latter ^_^</p>
+<p>QuaZIP allows you to access files inside ZIP archives using QIODevice API, and - yes! - that means that you can also use QTextStream, QDataStream or whatever you would like to use on your zipped files.</p>
+<p>QuaZIP provides complete abstraction of the ZIP/UNZIP API, for both reading from and writing to ZIP archives.</p>
+<h1><a class="anchor" id="download"></a>
+Download QuaZIP</h1>
+<p>Downloads are available from <a href="http://sourceforge.net/projects/quazip/">QuaZIP project's page at SourceForge.net</a>.</p>
+<h1><a class="anchor" id="platforms"></a>
+Platforms supported</h1>
+<p>QuaZIP has been currently tested on the following platforms:</p>
+<ul>
+<li>linux-g++ (Ubuntu 11.10, Qt 4.7.4)</li>
+<li>freebsd-g++ (Qt 4.0.0</li>
+<li>hpux-acc (HP-UX 11.11)</li>
+<li>hpux-g++ (HP-UX 11.11)</li>
+<li>win32-g++ (MinGW)</li>
+<li>win32-msvc2010 (MS VS 2010 Express, Qt 4.8.4)</li>
+<li>win32-msvc2010 (Qt Creator, Qt 5.0.1)</li>
+<li>win32-msvc2012 (Qt Creator, Qt 5.2.0)</li>
+<li>some Symbian version, reportedly</li>
+</ul>
+<p>No testing has been officially done on other systems. Of course, patches to make it work on any platform that it currently does not work on are always welcome!</p>
+<h1><a class="anchor" id="whats-new"></a>
+What is new in this version of QuaZIP?</h1>
+<p>See the NEWS.txt file supplied with the distribution.</p>
+<h1><a class="anchor" id="Requirements"></a>
+Requirements</h1>
+<p>Just <a href="http://www.zlib.org/">zlib</a> and Qt 4/5. Well, Qt 4 depends on zlib anyway, but you will need zlib headers to compile QuaZIP. With Qt5 sometimes you need the zlib library as well (on Windows, for example).</p>
+<h1><a class="anchor" id="building"></a>
+Building, testing and installing</h1>
+<dl class="section note"><dt>Note</dt><dd>Instructions given in this section assume that you are using some UNIX dialect, but the build process should be very similar on win32-g++ platform too. On other platforms it's essentially the same process, maybe with some qmake adjustments not specific to QuaZIP itself.</dd></dl>
+<p>To build the library, run: </p>
+<pre class="fragment">$ cd /wherever/quazip/source/is/quazip-x.y.z/quazip
+$ qmake [PREFIX=where-to-install]
+$ make
+</pre><p>Make sure that you have Qt 4/5 installed with all required headers and utilities (that is, including the 'dev' or 'devel' package on Linux) and that you run qmake utility of the Qt 4, not some other version you may have already installed (you may need to type full path to qmake like /usr/local/qt4/bin/qmake).</p>
+<p>To reconfigure (with another PREFIX, for example), just run qmake with appropriate arguments again.</p>
+<p>If you need to specify additional include path or libraries, use qmake features (see qmake reference in the Qt documentation). For example:</p>
+<pre class="fragment">$ qmake LIBS+=-L/usr/local/zlib/lib INCLUDEPATH+=/usr/local/zlib/include
+</pre><p> (note abscence of "-I" before the include path and the presence of "-L" before the lib path)</p>
+<p>Also note that you may or may not need to define ZLIB_WINAPI (qmake DEFINES+=ZLIB_WINAPI) when linking to zlib on Windows, depending on how zlib was built (generally, if using zlibwapi.dll, this define is needed).</p>
+<p>To install compiled library: </p>
+<pre class="fragment">$ make install
+</pre><p>By default, QuaZIP compiles as a DLL/SO, but you have other options:</p>
+<ul>
+<li>Just copy appropriate source files to your project and use them, but you need to define QUAZIP_STATIC before including any QuaZIP headers (best done as a compiler option). This will save you from possible side effects of importing/exporting QuaZIP symbols.</li>
+<li>Compile it as a static library using CONFIG += staticlib qmake option. QUAZIP_STATIC is defined automatically by qmake in this case.</li>
+</ul>
+<p>Binary compatibility is guaranteed between minor releases starting with version 0.5, thanks to the Pimpl idiom. That is, the next binary incompatible version will be 1.x.</p>
+<h1><a class="anchor" id="test"></a>
+Testing</h1>
+<p>To check if QuaZIP's basic features work OK on your platform, you may wish to compile the test suite provided in test directory: </p>
+<pre class="fragment">$ cd /wherever/quazip/source/is/quazip-x.y.z/qztest
+$ qmake
+$ make
+$ ./qztest
+</pre><p>Note that the test suite looks for the quazip library in the "quazip" folder of the project ("../quazip"), but you may wish to use LIBS for some systems (Windows often puts the library in the separate "debug" or "release" directory). If you wish to use the quazip version that's already installed, provide the appropriate path.</p>
+<p>On some systems you may need to set PATH, LD_LIBRARY_PATH or SHLIB_PATH to get "qztest" to actually run.</p>
+<p>If everything went fine, the test suite should report a lot of PASS messages. If something goes wrong, it will provide details and a warning that some tests failed.</p>
+<h1><a class="anchor" id="using"></a>
+Using</h1>
+<p>See <a class="el" href="usage.html">usage page</a>.</p>
+<h1><a class="anchor" id="contacts"></a>
+Authors and contacts</h1>
+<p>This wrapper has been written by Sergey A. Tachenov, AKA Alqualos. This is my first open source project, so it may suck, but I did not find anything like that, so I just had no other choice but to write it.</p>
+<p>If you have anything to say to me about QuaZIP library, feel free to do so (read the <a class="el" href="faq.html">QuaZip FAQ</a> first, though). I can not promise, though, that I fix all the bugs you report in, add any features you want, or respond to your critics, or respond to your feedback at all. I may be busy, I may be tired of working on QuaZIP, I may be even dead already (you never know...).</p>
+<p>To report bugs or to post ideas about what should be done, use SourceForge.net's <a href="http://sourceforge.net/tracker/?group_id=142688">trackers</a>. If you want to send me a private message, use my e-mail address <a href="#" onclick="location.href='mai'+'lto:'+'sta'+'ch'+'eno'+'v@'+'gma'+'il'+'.co'+'m'; return false;">stach<span style="display: none;">.nosp at m.</span>enov<span style="display: none;">.nosp at m.</span>@gmai<span style="display: none;">.nosp at m.</span>l.co<span style="di [...]
+<p>Do not use e-mail to report bugs, please. Reporting bugs and problems with the SourceForge.net's bug report system has that advantage that it is visible to public, and I can always search for open tickets that were created long ago. It is highly unlikely that I will search my mail for that kind of stuff, so if a bug reported by mail isn't fixed immediately, it will likely be forgotten forever.</p>
+<p>Copyright (C) 2005-2014 Sergey A. Tachenov and contributors </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_0.map b/3rdparty/quazip-0.7/doc/html/inherit_graph_0.map
new file mode 100644
index 0000000..1df0aaf
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_0.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classJlCompress.html" title="Utility class for typical operations. " alt="" coords="6,5,98,32"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_0.md5 b/3rdparty/quazip-0.7/doc/html/inherit_graph_0.md5
new file mode 100644
index 0000000..bcde3ce
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_0.md5
@@ -0,0 +1 @@
+604c34fe4053b4b0723fa2c0961b67a6
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_0.png b/3rdparty/quazip-0.7/doc/html/inherit_graph_0.png
new file mode 100644
index 0000000..8ad5efd
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/inherit_graph_0.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_1.map b/3rdparty/quazip-0.7/doc/html/inherit_graph_1.map
new file mode 100644
index 0000000..bffce44
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_1.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structQIODevice__descriptor.html" title="QIODevice_descriptor" alt="" coords="6,5,157,32"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_1.md5 b/3rdparty/quazip-0.7/doc/html/inherit_graph_1.md5
new file mode 100644
index 0000000..94f4394
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_1.md5
@@ -0,0 +1 @@
+4f005cea63482f14ad91198af33b4e15
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_1.png b/3rdparty/quazip-0.7/doc/html/inherit_graph_1.png
new file mode 100644
index 0000000..5e550db
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/inherit_graph_1.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_10.map b/3rdparty/quazip-0.7/doc/html/inherit_graph_10.map
new file mode 100644
index 0000000..776dd45
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_10.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classQuaZipPrivate.html" title="All the internal stuff for the QuaZip class. " alt="" coords="6,5,111,32"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_10.md5 b/3rdparty/quazip-0.7/doc/html/inherit_graph_10.md5
new file mode 100644
index 0000000..5603530
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_10.md5
@@ -0,0 +1 @@
+d889f16826d333fc4daa5af88fc833cf
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_10.png b/3rdparty/quazip-0.7/doc/html/inherit_graph_10.png
new file mode 100644
index 0000000..3acd6bf
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/inherit_graph_10.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_2.map b/3rdparty/quazip-0.7/doc/html/inherit_graph_2.map
new file mode 100644
index 0000000..b9d18da
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_2.map
@@ -0,0 +1,5 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classQuaChecksum32.html" title="Checksum interface. " alt="" coords="5,31,128,57"/>
+<area shape="rect" id="node2" href="$classQuaAdler32.html" title="Adler32 checksum. " alt="" coords="176,5,267,32"/>
+<area shape="rect" id="node3" href="$classQuaCrc32.html" title="CRC32 checksum. " alt="" coords="181,56,262,83"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_2.md5 b/3rdparty/quazip-0.7/doc/html/inherit_graph_2.md5
new file mode 100644
index 0000000..191ef8b
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_2.md5
@@ -0,0 +1 @@
+523da2d6452a986d0a5cf8de4e711f1e
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_2.png b/3rdparty/quazip-0.7/doc/html/inherit_graph_2.png
new file mode 100644
index 0000000..ef86c49
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/inherit_graph_2.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_3.map b/3rdparty/quazip-0.7/doc/html/inherit_graph_3.map
new file mode 100644
index 0000000..6cb1c10
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_3.map
@@ -0,0 +1,5 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node2" href="$classQuaGzipFile.html" title="GZIP file. " alt="" coords="149,5,243,32"/>
+<area shape="rect" id="node3" href="$classQuaZIODevice.html" title="A class to compress/decompress QIODevice. " alt="" coords="141,56,251,83"/>
+<area shape="rect" id="node4" href="$classQuaZipFile.html" title="A file inside ZIP archive. " alt="" coords="153,107,239,133"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_3.md5 b/3rdparty/quazip-0.7/doc/html/inherit_graph_3.md5
new file mode 100644
index 0000000..beabd83
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_3.md5
@@ -0,0 +1 @@
+5af371c9d0a20651df64f2334a568f18
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_3.png b/3rdparty/quazip-0.7/doc/html/inherit_graph_3.png
new file mode 100644
index 0000000..e5e3ffe
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/inherit_graph_3.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_4.map b/3rdparty/quazip-0.7/doc/html/inherit_graph_4.map
new file mode 100644
index 0000000..98edb94
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_4.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classQuaZip.html" title="ZIP archive. " alt="" coords="5,5,69,32"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_4.md5 b/3rdparty/quazip-0.7/doc/html/inherit_graph_4.md5
new file mode 100644
index 0000000..a9c0bf1
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_4.md5
@@ -0,0 +1 @@
+13b45b42efd00a37b69aa1f1d8f765b2
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_4.png b/3rdparty/quazip-0.7/doc/html/inherit_graph_4.png
new file mode 100644
index 0000000..4f3a4ee
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/inherit_graph_4.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_5.map b/3rdparty/quazip-0.7/doc/html/inherit_graph_5.map
new file mode 100644
index 0000000..609053b
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_5.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classQuaZipDir.html" title="Provides ZIP archive navigation. " alt="" coords="6,5,87,32"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_5.md5 b/3rdparty/quazip-0.7/doc/html/inherit_graph_5.md5
new file mode 100644
index 0000000..6341597
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_5.md5
@@ -0,0 +1 @@
+86e1c51cca39eddf06726d40685e328a
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_5.png b/3rdparty/quazip-0.7/doc/html/inherit_graph_5.png
new file mode 100644
index 0000000..c30e07e
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/inherit_graph_5.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_6.map b/3rdparty/quazip-0.7/doc/html/inherit_graph_6.map
new file mode 100644
index 0000000..2c7f8f2
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_6.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structQuaZipFileInfo.html" title="Information about a file inside archive. " alt="" coords="5,5,112,32"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_6.md5 b/3rdparty/quazip-0.7/doc/html/inherit_graph_6.md5
new file mode 100644
index 0000000..fd8e0fe
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_6.md5
@@ -0,0 +1 @@
+e549a1a7ad10ce59ae8a49ce2b78b075
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_6.png b/3rdparty/quazip-0.7/doc/html/inherit_graph_6.png
new file mode 100644
index 0000000..8118836
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/inherit_graph_6.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_7.map b/3rdparty/quazip-0.7/doc/html/inherit_graph_7.map
new file mode 100644
index 0000000..3e4fa99
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_7.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structQuaZipFileInfo64.html" title="Information about a file inside archive (with zip64 support). " alt="" coords="6,5,127,32"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_7.md5 b/3rdparty/quazip-0.7/doc/html/inherit_graph_7.md5
new file mode 100644
index 0000000..6ca4ac0
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_7.md5
@@ -0,0 +1 @@
+68ee3638ad52bd74efb9f115337756e9
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_7.png b/3rdparty/quazip-0.7/doc/html/inherit_graph_7.png
new file mode 100644
index 0000000..de9a84a
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/inherit_graph_7.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_8.map b/3rdparty/quazip-0.7/doc/html/inherit_graph_8.map
new file mode 100644
index 0000000..4887b30
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_8.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classQuaZipFilePrivate.html" title="The implementation class for QuaZip. " alt="" coords="6,5,133,32"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_8.md5 b/3rdparty/quazip-0.7/doc/html/inherit_graph_8.md5
new file mode 100644
index 0000000..969cc55
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_8.md5
@@ -0,0 +1 @@
+02515861175708d2c0f029465604a2a2
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_8.png b/3rdparty/quazip-0.7/doc/html/inherit_graph_8.png
new file mode 100644
index 0000000..33b49b5
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/inherit_graph_8.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_9.map b/3rdparty/quazip-0.7/doc/html/inherit_graph_9.map
new file mode 100644
index 0000000..a642147
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_9.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structQuaZipNewInfo.html" title="Information about a file to be created. " alt="" coords="6,5,119,32"/>
+</map>
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_9.md5 b/3rdparty/quazip-0.7/doc/html/inherit_graph_9.md5
new file mode 100644
index 0000000..533ec63
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherit_graph_9.md5
@@ -0,0 +1 @@
+055970acedfd4e5fb689663f28ac64ee
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/html/inherit_graph_9.png b/3rdparty/quazip-0.7/doc/html/inherit_graph_9.png
new file mode 100644
index 0000000..058d5d0
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/inherit_graph_9.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/inherits.html b/3rdparty/quazip-0.7/doc/html/inherits.html
new file mode 100644
index 0000000..3f5f7eb
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/inherits.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Class Hierarchy</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li class="current"><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Class Hierarchy</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">
+<p><a href="hierarchy.html">Go to the textual class hierarchy</a></p>
+</div><table border="0" cellspacing="10" cellpadding="0">
+<tr><td><img src="inherit_graph_0.png" border="0" alt="" usemap="#JlCompress"/>
+<map name="JlCompress" id="JlCompress">
+<area shape="rect" id="node1" href="classJlCompress.html" title="Utility class for typical operations. " alt="" coords="6,5,98,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_1.png" border="0" alt="" usemap="#QIODevice__descriptor"/>
+<map name="QIODevice__descriptor" id="QIODevice__descriptor">
+<area shape="rect" id="node1" href="structQIODevice__descriptor.html" title="QIODevice_descriptor" alt="" coords="6,5,157,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_2.png" border="0" alt="" usemap="#QuaChecksum32"/>
+<map name="QuaChecksum32" id="QuaChecksum32">
+<area shape="rect" id="node1" href="classQuaChecksum32.html" title="Checksum interface. " alt="" coords="5,31,128,57"/><area shape="rect" id="node2" href="classQuaAdler32.html" title="Adler32 checksum. " alt="" coords="176,5,267,32"/><area shape="rect" id="node3" href="classQuaCrc32.html" title="CRC32 checksum. " alt="" coords="181,56,262,83"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_3.png" border="0" alt="" usemap="#QuaGzipFile"/>
+<map name="QuaGzipFile" id="QuaGzipFile">
+<area shape="rect" id="node2" href="classQuaGzipFile.html" title="GZIP file. " alt="" coords="149,5,243,32"/><area shape="rect" id="node3" href="classQuaZIODevice.html" title="A class to compress/decompress QIODevice. " alt="" coords="141,56,251,83"/><area shape="rect" id="node4" href="classQuaZipFile.html" title="A file inside ZIP archive. " alt="" coords="153,107,239,133"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_4.png" border="0" alt="" usemap="#QuaZip"/>
+<map name="QuaZip" id="QuaZip">
+<area shape="rect" id="node1" href="classQuaZip.html" title="ZIP archive. " alt="" coords="5,5,69,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_5.png" border="0" alt="" usemap="#QuaZipDir"/>
+<map name="QuaZipDir" id="QuaZipDir">
+<area shape="rect" id="node1" href="classQuaZipDir.html" title="Provides ZIP archive navigation. " alt="" coords="6,5,87,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_6.png" border="0" alt="" usemap="#QuaZipFileInfo"/>
+<map name="QuaZipFileInfo" id="QuaZipFileInfo">
+<area shape="rect" id="node1" href="structQuaZipFileInfo.html" title="Information about a file inside archive. " alt="" coords="5,5,112,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_7.png" border="0" alt="" usemap="#QuaZipFileInfo64"/>
+<map name="QuaZipFileInfo64" id="QuaZipFileInfo64">
+<area shape="rect" id="node1" href="structQuaZipFileInfo64.html" title="Information about a file inside archive (with zip64 support). " alt="" coords="6,5,127,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_8.png" border="0" alt="" usemap="#QuaZipFilePrivate"/>
+<map name="QuaZipFilePrivate" id="QuaZipFilePrivate">
+<area shape="rect" id="node1" href="classQuaZipFilePrivate.html" title="The implementation class for QuaZip. " alt="" coords="6,5,133,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_9.png" border="0" alt="" usemap="#QuaZipNewInfo"/>
+<map name="QuaZipNewInfo" id="QuaZipNewInfo">
+<area shape="rect" id="node1" href="structQuaZipNewInfo.html" title="Information about a file to be created. " alt="" coords="6,5,119,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_10.png" border="0" alt="" usemap="#QuaZipPrivate"/>
+<map name="QuaZipPrivate" id="QuaZipPrivate">
+<area shape="rect" id="node1" href="classQuaZipPrivate.html" title="All the internal stuff for the QuaZip class. " alt="" coords="6,5,111,32"/></map>
+</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/nav_f.png b/3rdparty/quazip-0.7/doc/html/nav_f.png
new file mode 100644
index 0000000..72a58a5
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/nav_f.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/nav_g.png b/3rdparty/quazip-0.7/doc/html/nav_g.png
new file mode 100644
index 0000000..8c6c13e
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/nav_g.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/nav_h.png b/3rdparty/quazip-0.7/doc/html/nav_h.png
new file mode 100644
index 0000000..33389b1
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/nav_h.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/open.png b/3rdparty/quazip-0.7/doc/html/open.png
new file mode 100644
index 0000000..30f75c7
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/open.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/pages.html b/3rdparty/quazip-0.7/doc/html/pages.html
new file mode 100644
index 0000000..1091d2a
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/pages.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Related Pages</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Related Pages</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="faq.html" target="_self">QuaZip FAQ</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="usage.html" target="_self">Usage</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/quaadler32_8h_source.html b/3rdparty/quazip-0.7/doc/html/quaadler32_8h_source.html
new file mode 100644
index 0000000..9892d45
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/quaadler32_8h_source.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: quazip/quaadler32.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_94f3fdea1a650ed21d35813cdb37a339.html">quazip</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">quaadler32.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef QUAADLER32_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define QUAADLER32_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">Copyright (C) 2010 Adam Walczak</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment">Copyright (C) 2005-2014 Sergey A. Tachenov</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"></span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment">This file is part of QuaZIP.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"></span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">QuaZIP is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">it under the terms of the GNU Lesser General Public License as published by</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment">QuaZIP is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment">GNU Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">You should have received a copy of the GNU Lesser General Public License</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">See COPYING file for the full LGPL text.</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">Original ZIP package is copyrighted by Gilles Vollant and contributors,</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">see quazip/(un)zip.h files for details. Basically it's the zlib license.</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <QByteArray></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "quachecksum32.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classQuaAdler32.html">   38</a></span> <span class="keyword">class </span>QUAZIP_EXPORT <a class="code" href="classQuaAdler32.html">QuaAdler32</a> : <span class="keyword">public</span> <a class="code" href="classQuaChecksum32.html">QuaChecksum32</a></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> {</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>         <a class="code" href="classQuaAdler32.html">QuaAdler32</a>();</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>         quint32 <a class="code" href="classQuaChecksum32.html#a14d800fcfd55b2ae11ef07d3924fe0b1">calculate</a>(<span class="keyword">const</span> QByteArray &data);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>         <span class="keywordtype">void</span> <a class="code" href="classQuaChecksum32.html#ad3f5db3c76b00069db9bda333cb49d57">reset</a>();</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>         <span class="keywordtype">void</span> <a class="code" href="classQuaChecksum32.html#a63a6ed3171f9243214d307da67557f7e">update</a>(<span class="keyword">const</span> QByteArray &buf);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>         quint32 <a class="code" href="classQuaChecksum32.html#afd836e7534194fce08356be6a8336da7">value</a>();</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         quint32 checksum;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> };</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#endif //QUAADLER32_H</span></div>
+<div class="ttc" id="classQuaAdler32_html"><div class="ttname"><a href="classQuaAdler32.html">QuaAdler32</a></div><div class="ttdoc">Adler32 checksum. </div><div class="ttdef"><b>Definition:</b> quaadler32.h:38</div></div>
+<div class="ttc" id="classQuaChecksum32_html_a14d800fcfd55b2ae11ef07d3924fe0b1"><div class="ttname"><a href="classQuaChecksum32.html#a14d800fcfd55b2ae11ef07d3924fe0b1">QuaChecksum32::calculate</a></div><div class="ttdeci">virtual quint32 calculate(const QByteArray &data)=0</div><div class="ttdoc">Calculates the checksum for data. </div></div>
+<div class="ttc" id="classQuaChecksum32_html_afd836e7534194fce08356be6a8336da7"><div class="ttname"><a href="classQuaChecksum32.html#afd836e7534194fce08356be6a8336da7">QuaChecksum32::value</a></div><div class="ttdeci">virtual quint32 value()=0</div><div class="ttdoc">Value of the checksum calculated for the stream passed throw update(). </div></div>
+<div class="ttc" id="classQuaChecksum32_html"><div class="ttname"><a href="classQuaChecksum32.html">QuaChecksum32</a></div><div class="ttdoc">Checksum interface. </div><div class="ttdef"><b>Definition:</b> quachecksum32.h:52</div></div>
+<div class="ttc" id="classQuaChecksum32_html_a63a6ed3171f9243214d307da67557f7e"><div class="ttname"><a href="classQuaChecksum32.html#a63a6ed3171f9243214d307da67557f7e">QuaChecksum32::update</a></div><div class="ttdeci">virtual void update(const QByteArray &buf)=0</div><div class="ttdoc">Updates the calculated checksum for the stream. </div></div>
+<div class="ttc" id="classQuaChecksum32_html_ad3f5db3c76b00069db9bda333cb49d57"><div class="ttname"><a href="classQuaChecksum32.html#ad3f5db3c76b00069db9bda333cb49d57">QuaChecksum32::reset</a></div><div class="ttdeci">virtual void reset()=0</div><div class="ttdoc">Resets the calculation on a checksun for a stream. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/quachecksum32_8h_source.html b/3rdparty/quazip-0.7/doc/html/quachecksum32_8h_source.html
new file mode 100644
index 0000000..0349b15
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/quachecksum32_8h_source.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: quazip/quachecksum32.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_94f3fdea1a650ed21d35813cdb37a339.html">quazip</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">quachecksum32.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef QUACHECKSUM32_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define QUACHECKSUM32_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">Copyright (C) 2005-2014 Sergey A. Tachenov</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">This file is part of QuaZIP.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"></span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">QuaZIP is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">it under the terms of the GNU Lesser General Public License as published by</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment">QuaZIP is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment">GNU Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">You should have received a copy of the GNU Lesser General Public License</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">See COPYING file for the full LGPL text.</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">Original ZIP package is copyrighted by Gilles Vollant and contributors,</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">see quazip/(un)zip.h files for details. Basically it's the zlib license.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <QByteArray></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "quazip_global.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classQuaChecksum32.html">   52</a></span> <span class="keyword">class </span>QUAZIP_EXPORT <a class="code" href="classQuaChecksum32.html">QuaChecksum32</a></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         <span class="keyword">virtual</span> quint32 calculate(<span class="keyword">const</span> QByteArray &data) = 0;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         <span class="keyword">virtual</span> <span class="keywordtype">void</span> reset() = 0;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="keyword">virtual</span> <span class="keywordtype">void</span> update(<span class="keyword">const</span> QByteArray &buf) = 0;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="keyword">virtual</span> quint32 value() = 0;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> };</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor">#endif //QUACHECKSUM32_H</span></div>
+<div class="ttc" id="classQuaChecksum32_html"><div class="ttname"><a href="classQuaChecksum32.html">QuaChecksum32</a></div><div class="ttdoc">Checksum interface. </div><div class="ttdef"><b>Definition:</b> quachecksum32.h:52</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/quacrc32_8h_source.html b/3rdparty/quazip-0.7/doc/html/quacrc32_8h_source.html
new file mode 100644
index 0000000..103931a
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/quacrc32_8h_source.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: quazip/quacrc32.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_94f3fdea1a650ed21d35813cdb37a339.html">quazip</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">quacrc32.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef QUACRC32_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define QUACRC32_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">Copyright (C) 2005-2014 Sergey A. Tachenov</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">This file is part of QuaZIP.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"></span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">QuaZIP is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">it under the terms of the GNU Lesser General Public License as published by</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment">QuaZIP is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment">GNU Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">You should have received a copy of the GNU Lesser General Public License</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">See COPYING file for the full LGPL text.</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">Original ZIP package is copyrighted by Gilles Vollant and contributors,</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">see quazip/(un)zip.h files for details. Basically it's the zlib license.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "quachecksum32.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classQuaCrc32.html">   35</a></span> <span class="keyword">class </span>QUAZIP_EXPORT <a class="code" href="classQuaCrc32.html">QuaCrc32</a> : <span class="keyword">public</span> <a class="code" href="classQuaChecksum32.html">QuaChecksum32</a> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>         <a class="code" href="classQuaCrc32.html">QuaCrc32</a>();</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>         quint32 <a class="code" href="classQuaChecksum32.html#a14d800fcfd55b2ae11ef07d3924fe0b1">calculate</a>(<span class="keyword">const</span> QByteArray &data);</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>         <span class="keywordtype">void</span> <a class="code" href="classQuaChecksum32.html#ad3f5db3c76b00069db9bda333cb49d57">reset</a>();</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>         <span class="keywordtype">void</span> <a class="code" href="classQuaChecksum32.html#a63a6ed3171f9243214d307da67557f7e">update</a>(<span class="keyword">const</span> QByteArray &buf);</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>         quint32 <a class="code" href="classQuaChecksum32.html#afd836e7534194fce08356be6a8336da7">value</a>();</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>         quint32 checksum;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> };</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#endif //QUACRC32_H</span></div>
+<div class="ttc" id="classQuaChecksum32_html_a14d800fcfd55b2ae11ef07d3924fe0b1"><div class="ttname"><a href="classQuaChecksum32.html#a14d800fcfd55b2ae11ef07d3924fe0b1">QuaChecksum32::calculate</a></div><div class="ttdeci">virtual quint32 calculate(const QByteArray &data)=0</div><div class="ttdoc">Calculates the checksum for data. </div></div>
+<div class="ttc" id="classQuaChecksum32_html_afd836e7534194fce08356be6a8336da7"><div class="ttname"><a href="classQuaChecksum32.html#afd836e7534194fce08356be6a8336da7">QuaChecksum32::value</a></div><div class="ttdeci">virtual quint32 value()=0</div><div class="ttdoc">Value of the checksum calculated for the stream passed throw update(). </div></div>
+<div class="ttc" id="classQuaChecksum32_html"><div class="ttname"><a href="classQuaChecksum32.html">QuaChecksum32</a></div><div class="ttdoc">Checksum interface. </div><div class="ttdef"><b>Definition:</b> quachecksum32.h:52</div></div>
+<div class="ttc" id="classQuaChecksum32_html_a63a6ed3171f9243214d307da67557f7e"><div class="ttname"><a href="classQuaChecksum32.html#a63a6ed3171f9243214d307da67557f7e">QuaChecksum32::update</a></div><div class="ttdeci">virtual void update(const QByteArray &buf)=0</div><div class="ttdoc">Updates the calculated checksum for the stream. </div></div>
+<div class="ttc" id="classQuaCrc32_html"><div class="ttname"><a href="classQuaCrc32.html">QuaCrc32</a></div><div class="ttdoc">CRC32 checksum. </div><div class="ttdef"><b>Definition:</b> quacrc32.h:35</div></div>
+<div class="ttc" id="classQuaChecksum32_html_ad3f5db3c76b00069db9bda333cb49d57"><div class="ttname"><a href="classQuaChecksum32.html#ad3f5db3c76b00069db9bda333cb49d57">QuaChecksum32::reset</a></div><div class="ttdeci">virtual void reset()=0</div><div class="ttdoc">Resets the calculation on a checksun for a stream. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/quagzipfile_8h_source.html b/3rdparty/quazip-0.7/doc/html/quagzipfile_8h_source.html
new file mode 100644
index 0000000..9352721
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/quagzipfile_8h_source.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: quazip/quagzipfile.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_94f3fdea1a650ed21d35813cdb37a339.html">quazip</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">quagzipfile.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef QUAZIP_QUAGZIPFILE_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define QUAZIP_QUAGZIPFILE_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">Copyright (C) 2005-2014 Sergey A. Tachenov</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">This file is part of QuaZIP.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"></span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">QuaZIP is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">it under the terms of the GNU Lesser General Public License as published by</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment">QuaZIP is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment">GNU Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">You should have received a copy of the GNU Lesser General Public License</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">See COPYING file for the full LGPL text.</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">Original ZIP package is copyrighted by Gilles Vollant and contributors,</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">see quazip/(un)zip.h files for details. Basically it's the zlib license.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <QIODevice></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "quazip_global.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <zlib.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="keyword">class </span>QuaGzipFilePrivate;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classQuaGzipFile.html">   39</a></span> <span class="keyword">class </span>QUAZIP_EXPORT <a class="code" href="classQuaGzipFile.html">QuaGzipFile</a>: <span class="keyword">public</span> QIODevice {</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   Q_OBJECT</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <a class="code" href="classQuaGzipFile.html">QuaGzipFile</a>();</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <a class="code" href="classQuaGzipFile.html">QuaGzipFile</a>(QObject *parent);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <a class="code" href="classQuaGzipFile.html">QuaGzipFile</a>(<span class="keyword">const</span> QString &fileName, QObject *parent = NULL);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   <span class="keyword">virtual</span> ~<a class="code" href="classQuaGzipFile.html">QuaGzipFile</a>();</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordtype">void</span> setFileName(<span class="keyword">const</span> QString& fileName);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   QString getFileName() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isSequential() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> open(QIODevice::OpenMode mode);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> open(<span class="keywordtype">int</span> fd, QIODevice::OpenMode mode);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> flush();</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="keyword">virtual</span> <span class="keywordtype">void</span> close();</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   <span class="keyword">virtual</span> qint64 readData(<span class="keywordtype">char</span> *data, qint64 maxSize);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   <span class="keyword">virtual</span> qint64 writeData(<span class="keyword">const</span> <span class="keywordtype">char</span> *data, qint64 maxSize);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="comment">// not implemented by design to disable copy</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <a class="code" href="classQuaGzipFile.html">QuaGzipFile</a>(<span class="keyword">const</span> <a class="code" href="classQuaGzipFile.html">QuaGzipFile</a> &that);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <a class="code" href="classQuaGzipFile.html">QuaGzipFile</a>& operator=(<span class="keyword">const</span> <a class="code" href="classQuaGzipFile.html">QuaGzipFile</a> &that);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     QuaGzipFilePrivate *d;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> };</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="preprocessor">#endif // QUAZIP_QUAGZIPFILE_H</span></div>
+<div class="ttc" id="classQuaGzipFile_html"><div class="ttname"><a href="classQuaGzipFile.html">QuaGzipFile</a></div><div class="ttdoc">GZIP file. </div><div class="ttdef"><b>Definition:</b> quagzipfile.h:39</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/quaziodevice_8h_source.html b/3rdparty/quazip-0.7/doc/html/quaziodevice_8h_source.html
new file mode 100644
index 0000000..74950b5
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/quaziodevice_8h_source.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: quazip/quaziodevice.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_94f3fdea1a650ed21d35813cdb37a339.html">quazip</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">quaziodevice.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef QUAZIP_QUAZIODEVICE_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define QUAZIP_QUAZIODEVICE_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">Copyright (C) 2005-2014 Sergey A. Tachenov</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">This file is part of QuaZIP.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"></span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">QuaZIP is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">it under the terms of the GNU Lesser General Public License as published by</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment">QuaZIP is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment">GNU Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">You should have received a copy of the GNU Lesser General Public License</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">See COPYING file for the full LGPL text.</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">Original ZIP package is copyrighted by Gilles Vollant and contributors,</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">see quazip/(un)zip.h files for details. Basically it's the zlib license.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <QIODevice></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "quazip_global.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <zlib.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="keyword">class </span>QuaZIODevicePrivate;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classQuaZIODevice.html">   41</a></span> <span class="keyword">class </span>QUAZIP_EXPORT <a class="code" href="classQuaZIODevice.html">QuaZIODevice</a>: <span class="keyword">public</span> QIODevice {</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   Q_OBJECT</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <a class="code" href="classQuaZIODevice.html">QuaZIODevice</a>(QIODevice *io, QObject *parent = NULL);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   ~<a class="code" href="classQuaZIODevice.html">QuaZIODevice</a>();</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> flush();</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> open(QIODevice::OpenMode mode);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keyword">virtual</span> <span class="keywordtype">void</span> close();</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   QIODevice *getIoDevice() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isSequential() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="keyword">virtual</span> qint64 readData(<span class="keywordtype">char</span> *data, qint64 maxSize);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <span class="keyword">virtual</span> qint64 writeData(<span class="keyword">const</span> <span class="keywordtype">char</span> *data, qint64 maxSize);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   QuaZIODevicePrivate *d;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> };</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor">#endif // QUAZIP_QUAZIODEVICE_H</span></div>
+<div class="ttc" id="classQuaZIODevice_html"><div class="ttname"><a href="classQuaZIODevice.html">QuaZIODevice</a></div><div class="ttdoc">A class to compress/decompress QIODevice. </div><div class="ttdef"><b>Definition:</b> quaziodevice.h:41</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/quazip_8h_source.html b/3rdparty/quazip-0.7/doc/html/quazip_8h_source.html
new file mode 100644
index 0000000..c1dae8f
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/quazip_8h_source.html
@@ -0,0 +1,225 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: quazip/quazip.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_94f3fdea1a650ed21d35813cdb37a339.html">quazip</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">quazip.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef QUA_ZIP_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define QUA_ZIP_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">Copyright (C) 2005-2014 Sergey A. Tachenov</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">This file is part of QuaZIP.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"></span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">QuaZIP is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">it under the terms of the GNU Lesser General Public License as published by</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment">QuaZIP is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment">GNU Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">You should have received a copy of the GNU Lesser General Public License</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">See COPYING file for the full LGPL text.</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">Original ZIP package is copyrighted by Gilles Vollant, see</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">quazip/(un)zip.h files for details, basically it's zlib license.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> **/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <QString></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <QStringList></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <QTextCodec></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "zip.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "unzip.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "quazip_global.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "quazipfileinfo.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">// just in case it will be defined in the later versions of the ZIP/UNZIP</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#ifndef UNZ_OPENERROR</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="comment">// define additional error code</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#define UNZ_OPENERROR -1000</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="keyword">class </span><a class="code" href="classQuaZipPrivate.html">QuaZipPrivate</a>;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classQuaZip.html">   84</a></span> <span class="keyword">class </span>QUAZIP_EXPORT <a class="code" href="classQuaZip.html">QuaZip</a> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classQuaZipPrivate.html">QuaZipPrivate</a>;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classQuaZip.html#adce46b942c341dbb5c851eadead65459">   88</a></span>     <span class="keyword">enum</span> <a class="code" href="classQuaZip.html#adce46b942c341dbb5c851eadead65459">Constants</a> {</div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classQuaZip.html#adce46b942c341dbb5c851eadead65459ab26ce1a9c9e94f901dc2cf90fa5baa4b">   89</a></span>       MAX_FILE_NAME_LENGTH=256 </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     };</div>
+<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4">   94</a></span>     <span class="keyword">enum</span> <a class="code" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4">Mode</a> {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ac87ddb1e901e1ec700c16ee0d4d398ce">   95</a></span>       <a class="code" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ac87ddb1e901e1ec700c16ee0d4d398ce">mdNotOpen</a>, </div>
+<div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">   96</a></span>       <a class="code" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">mdUnzip</a>, </div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e">   97</a></span>       <a class="code" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e">mdCreate</a>, </div>
+<div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ab807f0c65653a16d77b365801fd25582">   98</a></span>       mdAppend, </div>
+<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a22c745f349f06add449af523254fdaec">  106</a></span>       mdAdd </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     };</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">  114</a></span>     <span class="keyword">enum</span> <a class="code" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">CaseSensitivity</a> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253">  115</a></span>       csDefault=0, </div>
+<div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbead8d86b0c34203336cad09348cfa5356e">  116</a></span>       csSensitive=1, </div>
+<div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbea3e492bcc3f64f41a74906cecc45fb366">  117</a></span>       csInsensitive=2 </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     };</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="keyword">static</span> Qt::CaseSensitivity convertCaseSensitivity(</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>             CaseSensitivity cs);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <a class="code" href="classQuaZipPrivate.html">QuaZipPrivate</a> *p;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="comment">// not (and will not be) implemented</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <a class="code" href="classQuaZip.html">QuaZip</a>(<span class="keyword">const</span> <a class="code" href="classQuaZip.html">QuaZip</a>& that);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="comment">// not (and will not be) implemented</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <a class="code" href="classQuaZip.html">QuaZip</a>& operator=(<span class="keyword">const</span> <a class="code" href="classQuaZip.html">QuaZip</a>& that);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <a class="code" href="classQuaZip.html">QuaZip</a>();</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <a class="code" href="classQuaZip.html">QuaZip</a>(<span class="keyword">const</span> QString& zipName);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <a class="code" href="classQuaZip.html">QuaZip</a>(QIODevice *ioDevice);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     ~<a class="code" href="classQuaZip.html">QuaZip</a>();</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="keywordtype">bool</span> open(Mode mode, zlib_filefunc_def *ioApi =NULL);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="keywordtype">void</span> close();</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     <span class="keywordtype">void</span> setFileNameCodec(QTextCodec *fileNameCodec);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="keywordtype">void</span> setFileNameCodec(<span class="keyword">const</span> <span class="keywordtype">char</span> *fileNameCodecName);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     QTextCodec* getFileNameCodec() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="keywordtype">void</span> setCommentCodec(QTextCodec *commentCodec);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="keywordtype">void</span> setCommentCodec(<span class="keyword">const</span> <span class="keywordtype">char</span> *commentCodecName);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     QTextCodec* getCommentCodec() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     QString getZipName() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="keywordtype">void</span> setZipName(<span class="keyword">const</span> QString& zipName);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     QIODevice *getIoDevice() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     <span class="keywordtype">void</span> setIoDevice(QIODevice *ioDevice);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     Mode getMode() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     <span class="keywordtype">bool</span> isOpen() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     <span class="keywordtype">int</span> getZipError() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="keywordtype">int</span> getEntriesCount() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     QString getComment() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     <span class="keywordtype">void</span> setComment(<span class="keyword">const</span> QString& comment);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     <span class="keywordtype">bool</span> goToFirstFile();</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="keywordtype">bool</span> goToNextFile();</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     <span class="keywordtype">bool</span> setCurrentFile(<span class="keyword">const</span> QString& fileName, CaseSensitivity cs =csDefault);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     <span class="keywordtype">bool</span> hasCurrentFile() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     <span class="keywordtype">bool</span> getCurrentFileInfo(<a class="code" href="structQuaZipFileInfo.html">QuaZipFileInfo</a>* info)<span class="keyword">const</span>;</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     <span class="keywordtype">bool</span> getCurrentFileInfo(<a class="code" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a>* info)<span class="keyword">const</span>;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     QString getCurrentFileName()<span class="keyword">const</span>;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     unzFile getUnzFile();</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     zipFile getZipFile();</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     <span class="keywordtype">void</span> setDataDescriptorWritingEnabled(<span class="keywordtype">bool</span> enabled);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>     <span class="keywordtype">bool</span> isDataDescriptorWritingEnabled() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     QStringList getFileNameList() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     QList<QuaZipFileInfo> getFileInfoList() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     QList<QuaZipFileInfo64> getFileInfoList64() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     <span class="keywordtype">void</span> setZip64Enabled(<span class="keywordtype">bool</span> zip64);</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     <span class="keywordtype">bool</span> isZip64Enabled() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     <span class="keywordtype">bool</span> isAutoClose() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     <span class="keywordtype">void</span> setAutoClose(<span class="keywordtype">bool</span> autoClose) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     <span class="keyword">static</span> <span class="keywordtype">void</span> setDefaultFileNameCodec(QTextCodec *codec);</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>     <span class="keyword">static</span> <span class="keywordtype">void</span> setDefaultFileNameCodec(<span class="keyword">const</span> <span class="keywordtype">char</span> *codecName);</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> };</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> </div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="classQuaZip_html_adce46b942c341dbb5c851eadead65459"><div class="ttname"><a href="classQuaZip.html#adce46b942c341dbb5c851eadead65459">QuaZip::Constants</a></div><div class="ttdeci">Constants</div><div class="ttdoc">Useful constants. </div><div class="ttdef"><b>Definition:</b> quazip.h:88</div></div>
+<div class="ttc" id="classQuaZip_html_a47e28d4116ee716fdd6b431b821d0be4ac87ddb1e901e1ec700c16ee0d4d398ce"><div class="ttname"><a href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4ac87ddb1e901e1ec700c16ee0d4d398ce">QuaZip::mdNotOpen</a></div><div class="ttdoc">ZIP file is not open. This is the initial mode. </div><div class="ttdef"><b>Definition:</b> quazip.h:95</div></div>
+<div class="ttc" id="classQuaZip_html_a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e"><div class="ttname"><a href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e">QuaZip::mdCreate</a></div><div class="ttdoc">ZIP file was created with open() call. </div><div class="ttdef"><b>Definition:</b> quazip.h:97</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html"><div class="ttname"><a href="structQuaZipFileInfo.html">QuaZipFileInfo</a></div><div class="ttdoc">Information about a file inside archive. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:37</div></div>
+<div class="ttc" id="classQuaZip_html_a47e28d4116ee716fdd6b431b821d0be4"><div class="ttname"><a href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4">QuaZip::Mode</a></div><div class="ttdeci">Mode</div><div class="ttdoc">Open mode of the ZIP file. </div><div class="ttdef"><b>Definition:</b> quazip.h:94</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html"><div class="ttname"><a href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></div><div class="ttdoc">Information about a file inside archive (with zip64 support). </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:77</div></div>
+<div class="ttc" id="classQuaZip_html_a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897"><div class="ttname"><a href="classQuaZip.html#a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897">QuaZip::mdUnzip</a></div><div class="ttdoc">ZIP file is open for reading files inside it. </div><div class="ttdef"><b>Definition:</b> quazip.h:96</div></div>
+<div class="ttc" id="classQuaZip_html"><div class="ttname"><a href="classQuaZip.html">QuaZip</a></div><div class="ttdoc">ZIP archive. </div><div class="ttdef"><b>Definition:</b> quazip.h:84</div></div>
+<div class="ttc" id="classQuaZip_html_a6053a1d249ed210a85c9d5eb7cf9cdbe"><div class="ttname"><a href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a></div><div class="ttdeci">CaseSensitivity</div><div class="ttdoc">Case sensitivity for the file names. </div><div class="ttdef"><b>Definition:</b> quazip.h:114</div></div>
+<div class="ttc" id="classQuaZipPrivate_html"><div class="ttname"><a href="classQuaZipPrivate.html">QuaZipPrivate</a></div><div class="ttdoc">All the internal stuff for the QuaZip class. </div><div class="ttdef"><b>Definition:</b> quazip.cpp:39</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/quazip__global_8h_source.html b/3rdparty/quazip-0.7/doc/html/quazip__global_8h_source.html
new file mode 100644
index 0000000..6e3491e
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/quazip__global_8h_source.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: quazip/quazip_global.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_94f3fdea1a650ed21d35813cdb37a339.html">quazip</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">quazip_global.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef QUAZIP_GLOBAL_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define QUAZIP_GLOBAL_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">Copyright (C) 2005-2014 Sergey A. Tachenov</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">This file is part of QuaZIP.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"></span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">QuaZIP is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">it under the terms of the GNU Lesser General Public License as published by</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment">QuaZIP is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment">GNU Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">You should have received a copy of the GNU Lesser General Public License</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">See COPYING file for the full LGPL text.</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">Original ZIP package is copyrighted by Gilles Vollant and contributors,</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">see quazip/(un)zip.h files for details. Basically it's the zlib license.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <QtCore/qglobal.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#ifdef QUAZIP_STATIC</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#define QUAZIP_EXPORT</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#if defined(QUAZIP_BUILD)</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">        #define QUAZIP_EXPORT Q_DECL_EXPORT</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span><span class="preprocessor">        #define QUAZIP_EXPORT Q_DECL_IMPORT</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span><span class="preprocessor">#endif // QUAZIP_STATIC</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#ifdef __GNUC__</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#define UNUSED __attribute__((__unused__))</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span><span class="preprocessor">#define UNUSED</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#define QUAZIP_EXTRA_NTFS_MAGIC 0x000Au</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define QUAZIP_EXTRA_NTFS_TIME_MAGIC 0x0001u</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#endif // QUAZIP_GLOBAL_H</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/quazipdir_8h_source.html b/3rdparty/quazip-0.7/doc/html/quazipdir_8h_source.html
new file mode 100644
index 0000000..8dfe17a
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/quazipdir_8h_source.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: quazip/quazipdir.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_94f3fdea1a650ed21d35813cdb37a339.html">quazip</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">quazipdir.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef QUAZIP_QUAZIPDIR_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define QUAZIP_QUAZIPDIR_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">Copyright (C) 2005-2014 Sergey A. Tachenov</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">This file is part of QuaZIP.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"></span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">QuaZIP is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">it under the terms of the GNU Lesser General Public License as published by</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment">QuaZIP is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment">GNU Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">You should have received a copy of the GNU Lesser General Public License</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">See COPYING file for the full LGPL text.</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">Original ZIP package is copyrighted by Gilles Vollant and contributors,</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">see quazip/(un)zip.h files for details. Basically it's the zlib license.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="keyword">class </span>QuaZipDirPrivate;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "quazip.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "quazipfileinfo.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <QDir></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <QList></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <QSharedDataPointer></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classQuaZipDir.html">   54</a></span> <span class="keyword">class </span>QUAZIP_EXPORT <a class="code" href="classQuaZipDir.html">QuaZipDir</a> {</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     QSharedDataPointer<QuaZipDirPrivate> d;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>     <a class="code" href="classQuaZipDir.html">QuaZipDir</a>(<span class="keyword">const</span> <a class="code" href="classQuaZipDir.html">QuaZipDir</a> &that);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     <a class="code" href="classQuaZipDir.html">QuaZipDir</a>(<a class="code" href="classQuaZip.html">QuaZip</a> *zip, <span class="keyword">const</span> QString &dir = QString());</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     ~<a class="code" href="classQuaZipDir.html">QuaZipDir</a>();</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="classQuaZipDir.html">QuaZipDir</a> &that);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classQuaZipDir.html#a6e60d858d05774c958215ee7741eceed">   75</a></span>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classQuaZipDir.html#a6e60d858d05774c958215ee7741eceed">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classQuaZipDir.html">QuaZipDir</a> &that) {<span class="keywordflow">return</span> !operator==(that);}</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <a class="code" href="classQuaZipDir.html">QuaZipDir</a>& operator=(<span class="keyword">const</span> <a class="code" href="classQuaZipDir.html">QuaZipDir</a> &that);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     QString operator[](<span class="keywordtype">int</span> pos) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <a class="code" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a> caseSensitivity() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     <span class="keywordtype">bool</span> cd(<span class="keyword">const</span> QString &dirName);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordtype">bool</span> cdUp();</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     uint count() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     QString dirName() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     QList<QuaZipFileInfo> entryInfoList(<span class="keyword">const</span> QStringList &nameFilters,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>         QDir::Filters filters = QDir::NoFilter,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>         QDir::SortFlags sort = QDir::NoSort) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     QList<QuaZipFileInfo> entryInfoList(QDir::Filters filters = QDir::NoFilter,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>         QDir::SortFlags sort = QDir::NoSort) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     QList<QuaZipFileInfo64> entryInfoList64(<span class="keyword">const</span> QStringList &nameFilters,</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>         QDir::Filters filters = QDir::NoFilter,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>         QDir::SortFlags sort = QDir::NoSort) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     QList<QuaZipFileInfo64> entryInfoList64(QDir::Filters filters = QDir::NoFilter,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>         QDir::SortFlags sort = QDir::NoSort) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     QStringList entryList(<span class="keyword">const</span> QStringList &nameFilters,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>         QDir::Filters filters = QDir::NoFilter,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>         QDir::SortFlags sort = QDir::NoSort) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     QStringList entryList(QDir::Filters filters = QDir::NoFilter,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>         QDir::SortFlags sort = QDir::NoSort) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordtype">bool</span> exists(<span class="keyword">const</span> QString &fileName) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="keywordtype">bool</span> exists() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     QString filePath(<span class="keyword">const</span> QString &fileName) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     QDir::Filters filter();</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="keywordtype">bool</span> isRoot() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     QStringList nameFilters() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     QString path() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     QString relativeFilePath(<span class="keyword">const</span> QString &fileName) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keywordtype">void</span> setCaseSensitivity(<a class="code" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a> caseSensitivity);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     <span class="keywordtype">void</span> setFilter(QDir::Filters filters);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="keywordtype">void</span> setNameFilters(<span class="keyword">const</span> QStringList &nameFilters);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     <span class="keywordtype">void</span> setPath(<span class="keyword">const</span> QString &path);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordtype">void</span> setSorting(QDir::SortFlags sort);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     QDir::SortFlags sorting() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> };</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="preprocessor">#endif // QUAZIP_QUAZIPDIR_H</span></div>
+<div class="ttc" id="classQuaZipDir_html_a6e60d858d05774c958215ee7741eceed"><div class="ttname"><a href="classQuaZipDir.html#a6e60d858d05774c958215ee7741eceed">QuaZipDir::operator!=</a></div><div class="ttdeci">bool operator!=(const QuaZipDir &that)</div><div class="ttdoc">operator!= </div><div class="ttdef"><b>Definition:</b> quazipdir.h:75</div></div>
+<div class="ttc" id="classQuaZip_html"><div class="ttname"><a href="classQuaZip.html">QuaZip</a></div><div class="ttdoc">ZIP archive. </div><div class="ttdef"><b>Definition:</b> quazip.h:84</div></div>
+<div class="ttc" id="classQuaZip_html_a6053a1d249ed210a85c9d5eb7cf9cdbe"><div class="ttname"><a href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a></div><div class="ttdeci">CaseSensitivity</div><div class="ttdoc">Case sensitivity for the file names. </div><div class="ttdef"><b>Definition:</b> quazip.h:114</div></div>
+<div class="ttc" id="classQuaZipDir_html"><div class="ttname"><a href="classQuaZipDir.html">QuaZipDir</a></div><div class="ttdoc">Provides ZIP archive navigation. </div><div class="ttdef"><b>Definition:</b> quazipdir.h:54</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/quazipfile_8h_source.html b/3rdparty/quazip-0.7/doc/html/quazipfile_8h_source.html
new file mode 100644
index 0000000..594dc63
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/quazipfile_8h_source.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: quazip/quazipfile.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_94f3fdea1a650ed21d35813cdb37a339.html">quazip</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">quazipfile.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef QUA_ZIPFILE_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define QUA_ZIPFILE_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">Copyright (C) 2005-2014 Sergey A. Tachenov</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">This file is part of QuaZIP.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"></span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">QuaZIP is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">it under the terms of the GNU Lesser General Public License as published by</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment">QuaZIP is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment">GNU Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">You should have received a copy of the GNU Lesser General Public License</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">See COPYING file for the full LGPL text.</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">Original ZIP package is copyrighted by Gilles Vollant, see</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">quazip/(un)zip.h files for details, basically it's zlib license.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> **/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <QIODevice></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "quazip_global.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "quazip.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "quazipnewinfo.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="keyword">class </span><a class="code" href="classQuaZipFilePrivate.html">QuaZipFilePrivate</a>;</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classQuaZipFile.html">   74</a></span> <span class="keyword">class </span>QUAZIP_EXPORT <a class="code" href="classQuaZipFile.html">QuaZipFile</a>: <span class="keyword">public</span> QIODevice {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classQuaZipFilePrivate.html">QuaZipFilePrivate</a>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   Q_OBJECT</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <a class="code" href="classQuaZipFilePrivate.html">QuaZipFilePrivate</a> *p;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="comment">// these are not supported nor implemented</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     <a class="code" href="classQuaZipFile.html">QuaZipFile</a>(<span class="keyword">const</span> <a class="code" href="classQuaZipFile.html">QuaZipFile</a>& that);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <a class="code" href="classQuaZipFile.html">QuaZipFile</a>& operator=(<span class="keyword">const</span> <a class="code" href="classQuaZipFile.html">QuaZipFile</a>& that);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     qint64 readData(<span class="keywordtype">char</span> *data, qint64 maxSize);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     qint64 writeData(<span class="keyword">const</span> <span class="keywordtype">char</span> *data, qint64 maxSize);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     <a class="code" href="classQuaZipFile.html">QuaZipFile</a>();</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     <a class="code" href="classQuaZipFile.html">QuaZipFile</a>(QObject *parent);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <a class="code" href="classQuaZipFile.html">QuaZipFile</a>(<span class="keyword">const</span> QString& zipName, QObject *parent =NULL);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <a class="code" href="classQuaZipFile.html">QuaZipFile</a>(<span class="keyword">const</span> QString& zipName, <span class="keyword">const</span> QString& fileName,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>         <a class="code" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a> cs =<a class="code" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253">QuaZip::csDefault</a>, QObject *parent =NULL);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     <a class="code" href="classQuaZipFile.html">QuaZipFile</a>(<a class="code" href="classQuaZip.html">QuaZip</a> *zip, QObject *parent =NULL);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="keyword">virtual</span> ~<a class="code" href="classQuaZipFile.html">QuaZipFile</a>();</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     QString getZipName()<span class="keyword">const</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <a class="code" href="classQuaZip.html">QuaZip</a>* getZip()<span class="keyword">const</span>;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     QString getFileName() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <a class="code" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a> getCaseSensitivity() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     QString getActualFileName()<span class="keyword">const</span>;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="keywordtype">void</span> setZipName(<span class="keyword">const</span> QString& zipName);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keywordtype">bool</span> isRaw() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     <span class="keywordtype">void</span> setZip(<a class="code" href="classQuaZip.html">QuaZip</a> *zip);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     <span class="keywordtype">void</span> setFileName(<span class="keyword">const</span> QString& fileName, <a class="code" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a> cs =<a class="code" href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253">QuaZip::csDefault</a>);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> open(OpenMode mode);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classQuaZipFile.html#a0bff0d15bbcd70306dc4a553a55776b9">  298</a></span>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classQuaZipFile.html#a0bff0d15bbcd70306dc4a553a55776b9">open</a>(OpenMode mode, <span class="keyword">const</span> <span class="keywordtype">char</span> *password)</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     {<span class="keywordflow">return</span> open(mode, NULL, NULL, <span class="keyword">false</span>, password);}</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="keywordtype">bool</span> open(OpenMode mode, <span class="keywordtype">int</span> *method, <span class="keywordtype">int</span> *level, <span class="keywordtype">bool</span> raw, <span class="keyword">const</span> <span class="keywordtype">char</span> *password =NULL);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     <span class="keywordtype">bool</span> open(OpenMode mode, <span class="keyword">const</span> <a class="code" href="structQuaZipNewInfo.html">QuaZipNewInfo</a>& info,</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> *password =NULL, quint32 crc =0,</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>         <span class="keywordtype">int</span> method =Z_DEFLATED, <span class="keywordtype">int</span> level =Z_DEFAULT_COMPRESSION, <span class="keywordtype">bool</span> raw =<span class="keyword">false</span>,</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>         <span class="keywordtype">int</span> windowBits =-MAX_WBITS, <span class="keywordtype">int</span> memLevel =DEF_MEM_LEVEL, <span class="keywordtype">int</span> strategy =Z_DEFAULT_STRATEGY);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isSequential()<span class="keyword">const</span>;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     <span class="keyword">virtual</span> qint64 pos()<span class="keyword">const</span>;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> atEnd()<span class="keyword">const</span>;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     <span class="keyword">virtual</span> qint64 size()<span class="keyword">const</span>;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     qint64 csize()<span class="keyword">const</span>;</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     qint64 usize()<span class="keyword">const</span>;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     <span class="keywordtype">bool</span> getFileInfo(<a class="code" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> *info);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     <span class="keywordtype">bool</span> getFileInfo(<a class="code" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> *info);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     <span class="keyword">virtual</span> <span class="keywordtype">void</span> close();</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     <span class="keywordtype">int</span> getZipError() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     <span class="keyword">virtual</span> qint64 bytesAvailable() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> };</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="structQuaZipNewInfo_html"><div class="ttname"><a href="structQuaZipNewInfo.html">QuaZipNewInfo</a></div><div class="ttdoc">Information about a file to be created. </div><div class="ttdef"><b>Definition:</b> quazipnewinfo.h:50</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html"><div class="ttname"><a href="structQuaZipFileInfo.html">QuaZipFileInfo</a></div><div class="ttdoc">Information about a file inside archive. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:37</div></div>
+<div class="ttc" id="classQuaZipFile_html_a0bff0d15bbcd70306dc4a553a55776b9"><div class="ttname"><a href="classQuaZipFile.html#a0bff0d15bbcd70306dc4a553a55776b9">QuaZipFile::open</a></div><div class="ttdeci">bool open(OpenMode mode, const char *password)</div><div class="ttdoc">Opens a file for reading. </div><div class="ttdef"><b>Definition:</b> quazipfile.h:298</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html"><div class="ttname"><a href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></div><div class="ttdoc">Information about a file inside archive (with zip64 support). </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:77</div></div>
+<div class="ttc" id="classQuaZip_html"><div class="ttname"><a href="classQuaZip.html">QuaZip</a></div><div class="ttdoc">ZIP archive. </div><div class="ttdef"><b>Definition:</b> quazip.h:84</div></div>
+<div class="ttc" id="classQuaZipFile_html"><div class="ttname"><a href="classQuaZipFile.html">QuaZipFile</a></div><div class="ttdoc">A file inside ZIP archive. </div><div class="ttdef"><b>Definition:</b> quazipfile.h:74</div></div>
+<div class="ttc" id="classQuaZip_html_a6053a1d249ed210a85c9d5eb7cf9cdbe"><div class="ttname"><a href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbe">QuaZip::CaseSensitivity</a></div><div class="ttdeci">CaseSensitivity</div><div class="ttdoc">Case sensitivity for the file names. </div><div class="ttdef"><b>Definition:</b> quazip.h:114</div></div>
+<div class="ttc" id="classQuaZipFilePrivate_html"><div class="ttname"><a href="classQuaZipFilePrivate.html">QuaZipFilePrivate</a></div><div class="ttdoc">The implementation class for QuaZip. </div><div class="ttdef"><b>Definition:</b> quazipfile.cpp:37</div></div>
+<div class="ttc" id="classQuaZip_html_a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253"><div class="ttname"><a href="classQuaZip.html#a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253">QuaZip::csDefault</a></div><div class="ttdoc">Default for platform. Case sensitive for UNIX, not for Windows. </div><div class="ttdef"><b>Definition:</b> quazip.h:115</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/quazipfileinfo_8h_source.html b/3rdparty/quazip-0.7/doc/html/quazipfileinfo_8h_source.html
new file mode 100644
index 0000000..8e56bad
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/quazipfileinfo_8h_source.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: quazip/quazipfileinfo.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_94f3fdea1a650ed21d35813cdb37a339.html">quazip</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">quazipfileinfo.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef QUA_ZIPFILEINFO_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define QUA_ZIPFILEINFO_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">Copyright (C) 2005-2014 Sergey A. Tachenov</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">This file is part of QuaZIP.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"></span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">QuaZIP is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">it under the terms of the GNU Lesser General Public License as published by</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment">QuaZIP is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment">GNU Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">You should have received a copy of the GNU Lesser General Public License</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">See COPYING file for the full LGPL text.</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">Original ZIP package is copyrighted by Gilles Vollant and contributors,</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">see quazip/(un)zip.h files for details. Basically it's the zlib license.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <QByteArray></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <QDateTime></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <QFile></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "quazip_global.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html">   37</a></span> <span class="keyword">struct </span>QUAZIP_EXPORT <a class="code" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html#a16ac323965deccf0232bfae69d933a84">   39</a></span>   QString <a class="code" href="structQuaZipFileInfo.html#a16ac323965deccf0232bfae69d933a84">name</a>;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html#a52f3f1d960ebaa2acbc2a86458fa3e6e">   41</a></span>   quint16 <a class="code" href="structQuaZipFileInfo.html#a52f3f1d960ebaa2acbc2a86458fa3e6e">versionCreated</a>;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html#a8b73982808bded49e88e624a65e1a94f">   43</a></span>   quint16 <a class="code" href="structQuaZipFileInfo.html#a8b73982808bded49e88e624a65e1a94f">versionNeeded</a>;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html#a56d36f777e4fc892c71e22d080622e2c">   45</a></span>   quint16 <a class="code" href="structQuaZipFileInfo.html#a56d36f777e4fc892c71e22d080622e2c">flags</a>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html#af5c1bbda7f5dec2c358e7a543564de4c">   47</a></span>   quint16 <a class="code" href="structQuaZipFileInfo.html#af5c1bbda7f5dec2c358e7a543564de4c">method</a>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html#ad6993d099436813a27fd31aebe42911a">   49</a></span>   QDateTime <a class="code" href="structQuaZipFileInfo.html#ad6993d099436813a27fd31aebe42911a">dateTime</a>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html#aceee045c9ebce0b9724f40d342bc99ea">   51</a></span>   quint32 <a class="code" href="structQuaZipFileInfo.html#aceee045c9ebce0b9724f40d342bc99ea">crc</a>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html#af6116eaac1f36b2a4b3a6a39851a85cc">   53</a></span>   quint32 <a class="code" href="structQuaZipFileInfo.html#af6116eaac1f36b2a4b3a6a39851a85cc">compressedSize</a>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html#a0eb908e1b1ea637d1f1f4d6aa31db07f">   55</a></span>   quint32 <a class="code" href="structQuaZipFileInfo.html#a0eb908e1b1ea637d1f1f4d6aa31db07f">uncompressedSize</a>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html#aa70157fdc2bd8de10405055b4233050b">   57</a></span>   quint16 <a class="code" href="structQuaZipFileInfo.html#aa70157fdc2bd8de10405055b4233050b">diskNumberStart</a>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html#a36e681a93b041617addee78cb939c93d">   59</a></span>   quint16 <a class="code" href="structQuaZipFileInfo.html#a36e681a93b041617addee78cb939c93d">internalAttr</a>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html#afeb65ffdacc4fc0ba7848d4b37f62ecf">   61</a></span>   quint32 <a class="code" href="structQuaZipFileInfo.html#afeb65ffdacc4fc0ba7848d4b37f62ecf">externalAttr</a>;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html#adc2aad7bbd87ce3415e2a19851266bfc">   63</a></span>   QString <a class="code" href="structQuaZipFileInfo.html#adc2aad7bbd87ce3415e2a19851266bfc">comment</a>;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo.html#affc7b097de2c3c2ef5801c60f96adc72">   65</a></span>   QByteArray <a class="code" href="structQuaZipFileInfo.html#affc7b097de2c3c2ef5801c60f96adc72">extra</a>;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   QFile::Permissions getPermissions() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> };</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html">   77</a></span> <span class="keyword">struct </span>QUAZIP_EXPORT <a class="code" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html#a2cadad4cb9a765e90b5422dae2388762">   79</a></span>   QString <a class="code" href="structQuaZipFileInfo64.html#a2cadad4cb9a765e90b5422dae2388762">name</a>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html#a95aeb06b080e483fde874ba2d06f203c">   81</a></span>   quint16 <a class="code" href="structQuaZipFileInfo64.html#a95aeb06b080e483fde874ba2d06f203c">versionCreated</a>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html#a27654f5ce3a75331e9c9a7900b407169">   83</a></span>   quint16 <a class="code" href="structQuaZipFileInfo64.html#a27654f5ce3a75331e9c9a7900b407169">versionNeeded</a>;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html#a6aa533dd4e02f52459e1e1a0df31e992">   85</a></span>   quint16 <a class="code" href="structQuaZipFileInfo64.html#a6aa533dd4e02f52459e1e1a0df31e992">flags</a>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html#a445967ecbb5a3dd2a9d516db3e14a34a">   87</a></span>   quint16 <a class="code" href="structQuaZipFileInfo64.html#a445967ecbb5a3dd2a9d516db3e14a34a">method</a>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html#a4d77c6aa6076703e858c938efeb551e4">   96</a></span>   QDateTime <a class="code" href="structQuaZipFileInfo64.html#a4d77c6aa6076703e858c938efeb551e4">dateTime</a>;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html#aeb7b2757a0efa814b196b5280d000a14">   98</a></span>   quint32 <a class="code" href="structQuaZipFileInfo64.html#aeb7b2757a0efa814b196b5280d000a14">crc</a>;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html#add8733946ea4af23aa32d85f10955b0f">  100</a></span>   quint64 <a class="code" href="structQuaZipFileInfo64.html#add8733946ea4af23aa32d85f10955b0f">compressedSize</a>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html#a571ca077fe282c908e57b0bc82528d49">  102</a></span>   quint64 <a class="code" href="structQuaZipFileInfo64.html#a571ca077fe282c908e57b0bc82528d49">uncompressedSize</a>;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html#ac8945cf1ff54d39d28e755685b91e941">  104</a></span>   quint16 <a class="code" href="structQuaZipFileInfo64.html#ac8945cf1ff54d39d28e755685b91e941">diskNumberStart</a>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html#aeb895613e76a4cc63f861b010c9e92c0">  106</a></span>   quint16 <a class="code" href="structQuaZipFileInfo64.html#aeb895613e76a4cc63f861b010c9e92c0">internalAttr</a>;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html#a3a8bc40f1aa0cb0985c4e2f8a9678430">  108</a></span>   quint32 <a class="code" href="structQuaZipFileInfo64.html#a3a8bc40f1aa0cb0985c4e2f8a9678430">externalAttr</a>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html#aba3f5b982087c3e0343bb61e8814c7d1">  110</a></span>   QString <a class="code" href="structQuaZipFileInfo64.html#aba3f5b982087c3e0343bb61e8814c7d1">comment</a>;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="structQuaZipFileInfo64.html#acf0b1b97f377208847c6912cd1bf1332">  112</a></span>   QByteArray <a class="code" href="structQuaZipFileInfo64.html#acf0b1b97f377208847c6912cd1bf1332">extra</a>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   QFile::Permissions getPermissions() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordtype">bool</span> toQuaZipFileInfo(<a class="code" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> &info) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   QDateTime getNTFSmTime(<span class="keywordtype">int</span> *fineTicks = NULL) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   QDateTime getNTFSaTime(<span class="keywordtype">int</span> *fineTicks = NULL) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   QDateTime getNTFScTime(<span class="keywordtype">int</span> *fineTicks = NULL) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> };</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="structQuaZipFileInfo64_html_ac8945cf1ff54d39d28e755685b91e941"><div class="ttname"><a href="structQuaZipFileInfo64.html#ac8945cf1ff54d39d28e755685b91e941">QuaZipFileInfo64::diskNumberStart</a></div><div class="ttdeci">quint16 diskNumberStart</div><div class="ttdoc">Disk number start. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:104</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html_acf0b1b97f377208847c6912cd1bf1332"><div class="ttname"><a href="structQuaZipFileInfo64.html#acf0b1b97f377208847c6912cd1bf1332">QuaZipFileInfo64::extra</a></div><div class="ttdeci">QByteArray extra</div><div class="ttdoc">Extra field. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:112</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html_a95aeb06b080e483fde874ba2d06f203c"><div class="ttname"><a href="structQuaZipFileInfo64.html#a95aeb06b080e483fde874ba2d06f203c">QuaZipFileInfo64::versionCreated</a></div><div class="ttdeci">quint16 versionCreated</div><div class="ttdoc">Version created by. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:81</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html_aba3f5b982087c3e0343bb61e8814c7d1"><div class="ttname"><a href="structQuaZipFileInfo64.html#aba3f5b982087c3e0343bb61e8814c7d1">QuaZipFileInfo64::comment</a></div><div class="ttdeci">QString comment</div><div class="ttdoc">Comment. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:110</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html_a3a8bc40f1aa0cb0985c4e2f8a9678430"><div class="ttname"><a href="structQuaZipFileInfo64.html#a3a8bc40f1aa0cb0985c4e2f8a9678430">QuaZipFileInfo64::externalAttr</a></div><div class="ttdeci">quint32 externalAttr</div><div class="ttdoc">External file attributes. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:108</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html_a27654f5ce3a75331e9c9a7900b407169"><div class="ttname"><a href="structQuaZipFileInfo64.html#a27654f5ce3a75331e9c9a7900b407169">QuaZipFileInfo64::versionNeeded</a></div><div class="ttdeci">quint16 versionNeeded</div><div class="ttdoc">Version needed to extract. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:83</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html_affc7b097de2c3c2ef5801c60f96adc72"><div class="ttname"><a href="structQuaZipFileInfo.html#affc7b097de2c3c2ef5801c60f96adc72">QuaZipFileInfo::extra</a></div><div class="ttdeci">QByteArray extra</div><div class="ttdoc">Extra field. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:65</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html_a56d36f777e4fc892c71e22d080622e2c"><div class="ttname"><a href="structQuaZipFileInfo.html#a56d36f777e4fc892c71e22d080622e2c">QuaZipFileInfo::flags</a></div><div class="ttdeci">quint16 flags</div><div class="ttdoc">General purpose flags. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:45</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html_a16ac323965deccf0232bfae69d933a84"><div class="ttname"><a href="structQuaZipFileInfo.html#a16ac323965deccf0232bfae69d933a84">QuaZipFileInfo::name</a></div><div class="ttdeci">QString name</div><div class="ttdoc">File name. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:39</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html_a52f3f1d960ebaa2acbc2a86458fa3e6e"><div class="ttname"><a href="structQuaZipFileInfo.html#a52f3f1d960ebaa2acbc2a86458fa3e6e">QuaZipFileInfo::versionCreated</a></div><div class="ttdeci">quint16 versionCreated</div><div class="ttdoc">Version created by. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:41</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html_adc2aad7bbd87ce3415e2a19851266bfc"><div class="ttname"><a href="structQuaZipFileInfo.html#adc2aad7bbd87ce3415e2a19851266bfc">QuaZipFileInfo::comment</a></div><div class="ttdeci">QString comment</div><div class="ttdoc">Comment. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:63</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html_af6116eaac1f36b2a4b3a6a39851a85cc"><div class="ttname"><a href="structQuaZipFileInfo.html#af6116eaac1f36b2a4b3a6a39851a85cc">QuaZipFileInfo::compressedSize</a></div><div class="ttdeci">quint32 compressedSize</div><div class="ttdoc">Compressed file size. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:53</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html"><div class="ttname"><a href="structQuaZipFileInfo.html">QuaZipFileInfo</a></div><div class="ttdoc">Information about a file inside archive. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:37</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html_aeb7b2757a0efa814b196b5280d000a14"><div class="ttname"><a href="structQuaZipFileInfo64.html#aeb7b2757a0efa814b196b5280d000a14">QuaZipFileInfo64::crc</a></div><div class="ttdeci">quint32 crc</div><div class="ttdoc">CRC. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:98</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html_add8733946ea4af23aa32d85f10955b0f"><div class="ttname"><a href="structQuaZipFileInfo64.html#add8733946ea4af23aa32d85f10955b0f">QuaZipFileInfo64::compressedSize</a></div><div class="ttdeci">quint64 compressedSize</div><div class="ttdoc">Compressed file size. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:100</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html_a8b73982808bded49e88e624a65e1a94f"><div class="ttname"><a href="structQuaZipFileInfo.html#a8b73982808bded49e88e624a65e1a94f">QuaZipFileInfo::versionNeeded</a></div><div class="ttdeci">quint16 versionNeeded</div><div class="ttdoc">Version needed to extract. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:43</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html_a36e681a93b041617addee78cb939c93d"><div class="ttname"><a href="structQuaZipFileInfo.html#a36e681a93b041617addee78cb939c93d">QuaZipFileInfo::internalAttr</a></div><div class="ttdeci">quint16 internalAttr</div><div class="ttdoc">Internal file attributes. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:59</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html"><div class="ttname"><a href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></div><div class="ttdoc">Information about a file inside archive (with zip64 support). </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:77</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html_a445967ecbb5a3dd2a9d516db3e14a34a"><div class="ttname"><a href="structQuaZipFileInfo64.html#a445967ecbb5a3dd2a9d516db3e14a34a">QuaZipFileInfo64::method</a></div><div class="ttdeci">quint16 method</div><div class="ttdoc">Compression method. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:87</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html_ad6993d099436813a27fd31aebe42911a"><div class="ttname"><a href="structQuaZipFileInfo.html#ad6993d099436813a27fd31aebe42911a">QuaZipFileInfo::dateTime</a></div><div class="ttdeci">QDateTime dateTime</div><div class="ttdoc">Last modification date and time. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:49</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html_a571ca077fe282c908e57b0bc82528d49"><div class="ttname"><a href="structQuaZipFileInfo64.html#a571ca077fe282c908e57b0bc82528d49">QuaZipFileInfo64::uncompressedSize</a></div><div class="ttdeci">quint64 uncompressedSize</div><div class="ttdoc">Uncompressed file size. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:102</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html_a0eb908e1b1ea637d1f1f4d6aa31db07f"><div class="ttname"><a href="structQuaZipFileInfo.html#a0eb908e1b1ea637d1f1f4d6aa31db07f">QuaZipFileInfo::uncompressedSize</a></div><div class="ttdeci">quint32 uncompressedSize</div><div class="ttdoc">Uncompressed file size. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:55</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html_aceee045c9ebce0b9724f40d342bc99ea"><div class="ttname"><a href="structQuaZipFileInfo.html#aceee045c9ebce0b9724f40d342bc99ea">QuaZipFileInfo::crc</a></div><div class="ttdeci">quint32 crc</div><div class="ttdoc">CRC. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:51</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html_a4d77c6aa6076703e858c938efeb551e4"><div class="ttname"><a href="structQuaZipFileInfo64.html#a4d77c6aa6076703e858c938efeb551e4">QuaZipFileInfo64::dateTime</a></div><div class="ttdeci">QDateTime dateTime</div><div class="ttdoc">Last modification date and time. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:96</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html_a6aa533dd4e02f52459e1e1a0df31e992"><div class="ttname"><a href="structQuaZipFileInfo64.html#a6aa533dd4e02f52459e1e1a0df31e992">QuaZipFileInfo64::flags</a></div><div class="ttdeci">quint16 flags</div><div class="ttdoc">General purpose flags. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:85</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html_aa70157fdc2bd8de10405055b4233050b"><div class="ttname"><a href="structQuaZipFileInfo.html#aa70157fdc2bd8de10405055b4233050b">QuaZipFileInfo::diskNumberStart</a></div><div class="ttdeci">quint16 diskNumberStart</div><div class="ttdoc">Disk number start. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:57</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html_afeb65ffdacc4fc0ba7848d4b37f62ecf"><div class="ttname"><a href="structQuaZipFileInfo.html#afeb65ffdacc4fc0ba7848d4b37f62ecf">QuaZipFileInfo::externalAttr</a></div><div class="ttdeci">quint32 externalAttr</div><div class="ttdoc">External file attributes. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:61</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html_af5c1bbda7f5dec2c358e7a543564de4c"><div class="ttname"><a href="structQuaZipFileInfo.html#af5c1bbda7f5dec2c358e7a543564de4c">QuaZipFileInfo::method</a></div><div class="ttdeci">quint16 method</div><div class="ttdoc">Compression method. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:47</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html_a2cadad4cb9a765e90b5422dae2388762"><div class="ttname"><a href="structQuaZipFileInfo64.html#a2cadad4cb9a765e90b5422dae2388762">QuaZipFileInfo64::name</a></div><div class="ttdeci">QString name</div><div class="ttdoc">File name. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:79</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html_aeb895613e76a4cc63f861b010c9e92c0"><div class="ttname"><a href="structQuaZipFileInfo64.html#aeb895613e76a4cc63f861b010c9e92c0">QuaZipFileInfo64::internalAttr</a></div><div class="ttdeci">quint16 internalAttr</div><div class="ttdoc">Internal file attributes. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:106</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/quazipnewinfo_8h_source.html b/3rdparty/quazip-0.7/doc/html/quazipnewinfo_8h_source.html
new file mode 100644
index 0000000..52e2e1f
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/quazipnewinfo_8h_source.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: quazip/quazipnewinfo.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_94f3fdea1a650ed21d35813cdb37a339.html">quazip</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">quazipnewinfo.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef QUA_ZIPNEWINFO_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define QUA_ZIPNEWINFO_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">Copyright (C) 2005-2014 Sergey A. Tachenov</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">This file is part of QuaZIP.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"></span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">QuaZIP is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">it under the terms of the GNU Lesser General Public License as published by</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment">QuaZIP is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment">GNU Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">You should have received a copy of the GNU Lesser General Public License</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">See COPYING file for the full LGPL text.</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">Original ZIP package is copyrighted by Gilles Vollant, see</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">quazip/(un)zip.h files for details, basically it's zlib license.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> **/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <QDateTime></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <QFile></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <QString></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "quazip_global.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "quazipfileinfo.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="structQuaZipNewInfo.html">   50</a></span> <span class="keyword">struct </span>QUAZIP_EXPORT <a class="code" href="structQuaZipNewInfo.html">QuaZipNewInfo</a> {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="structQuaZipNewInfo.html#a2bdef01b6ac3326e48598e32bfa5fbe8">   55</a></span>   QString <a class="code" href="structQuaZipNewInfo.html#a2bdef01b6ac3326e48598e32bfa5fbe8">name</a>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="structQuaZipNewInfo.html#aec7f3ac72c72a2e10b82ad64c2fa3453">   62</a></span>   QDateTime <a class="code" href="structQuaZipNewInfo.html#aec7f3ac72c72a2e10b82ad64c2fa3453">dateTime</a>;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="structQuaZipNewInfo.html#a59ce9776c2ac7547ade8cb4c404c77ab">   64</a></span>   quint16 <a class="code" href="structQuaZipNewInfo.html#a59ce9776c2ac7547ade8cb4c404c77ab">internalAttr</a>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="structQuaZipNewInfo.html#affd1a9700d302e1395bd04f0864da7d0">   71</a></span>   quint32 <a class="code" href="structQuaZipNewInfo.html#affd1a9700d302e1395bd04f0864da7d0">externalAttr</a>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="structQuaZipNewInfo.html#ae24b1d38c3550b4724862ffcf8f20924">   75</a></span>   QString <a class="code" href="structQuaZipNewInfo.html#ae24b1d38c3550b4724862ffcf8f20924">comment</a>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="structQuaZipNewInfo.html#ab377a81c51cf495c7aeee4f19340a43f">   77</a></span>   QByteArray <a class="code" href="structQuaZipNewInfo.html#ab377a81c51cf495c7aeee4f19340a43f">extraLocal</a>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="structQuaZipNewInfo.html#abda207eb3949db3a88761c1b06e6bd58">   79</a></span>   QByteArray <a class="code" href="structQuaZipNewInfo.html#abda207eb3949db3a88761c1b06e6bd58">extraGlobal</a>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="structQuaZipNewInfo.html#a18c079b3f2f5ab6eecdd61d6dbe93be6">   84</a></span>   ulong <a class="code" href="structQuaZipNewInfo.html#a18c079b3f2f5ab6eecdd61d6dbe93be6">uncompressedSize</a>;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <a class="code" href="structQuaZipNewInfo.html">QuaZipNewInfo</a>(<span class="keyword">const</span> QString& name);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   <a class="code" href="structQuaZipNewInfo.html">QuaZipNewInfo</a>(<span class="keyword">const</span> QString& name, <span class="keyword">const</span> QString& file);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <a class="code" href="structQuaZipNewInfo.html">QuaZipNewInfo</a>(<span class="keyword">const</span> <a class="code" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> &existing);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <a class="code" href="structQuaZipNewInfo.html">QuaZipNewInfo</a>(<span class="keyword">const</span> <a class="code" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> &existing);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordtype">void</span> setFileDateTime(<span class="keyword">const</span> QString& file);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   <span class="keywordtype">void</span> setFilePermissions(<span class="keyword">const</span> QString &file);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <span class="keywordtype">void</span> setPermissions(QFile::Permissions permissions);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="keywordtype">void</span> setFileNTFSTimes(<span class="keyword">const</span> QString &fileName);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   <span class="keywordtype">void</span> setFileNTFSmTime(<span class="keyword">const</span> QDateTime &mTime, <span class="keywordtype">int</span> fineTicks = 0);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   <span class="keywordtype">void</span> setFileNTFSaTime(<span class="keyword">const</span> QDateTime &aTime, <span class="keywordtype">int</span> fineTicks = 0);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   <span class="keywordtype">void</span> setFileNTFScTime(<span class="keyword">const</span> QDateTime &cTime, <span class="keywordtype">int</span> fineTicks = 0);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> };</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="structQuaZipNewInfo_html"><div class="ttname"><a href="structQuaZipNewInfo.html">QuaZipNewInfo</a></div><div class="ttdoc">Information about a file to be created. </div><div class="ttdef"><b>Definition:</b> quazipnewinfo.h:50</div></div>
+<div class="ttc" id="structQuaZipNewInfo_html_a59ce9776c2ac7547ade8cb4c404c77ab"><div class="ttname"><a href="structQuaZipNewInfo.html#a59ce9776c2ac7547ade8cb4c404c77ab">QuaZipNewInfo::internalAttr</a></div><div class="ttdeci">quint16 internalAttr</div><div class="ttdoc">File internal attributes. </div><div class="ttdef"><b>Definition:</b> quazipnewinfo.h:64</div></div>
+<div class="ttc" id="structQuaZipNewInfo_html_ab377a81c51cf495c7aeee4f19340a43f"><div class="ttname"><a href="structQuaZipNewInfo.html#ab377a81c51cf495c7aeee4f19340a43f">QuaZipNewInfo::extraLocal</a></div><div class="ttdeci">QByteArray extraLocal</div><div class="ttdoc">File local extra field. </div><div class="ttdef"><b>Definition:</b> quazipnewinfo.h:77</div></div>
+<div class="ttc" id="structQuaZipNewInfo_html_a18c079b3f2f5ab6eecdd61d6dbe93be6"><div class="ttname"><a href="structQuaZipNewInfo.html#a18c079b3f2f5ab6eecdd61d6dbe93be6">QuaZipNewInfo::uncompressedSize</a></div><div class="ttdeci">ulong uncompressedSize</div><div class="ttdoc">Uncompressed file size. </div><div class="ttdef"><b>Definition:</b> quazipnewinfo.h:84</div></div>
+<div class="ttc" id="structQuaZipNewInfo_html_ae24b1d38c3550b4724862ffcf8f20924"><div class="ttname"><a href="structQuaZipNewInfo.html#ae24b1d38c3550b4724862ffcf8f20924">QuaZipNewInfo::comment</a></div><div class="ttdeci">QString comment</div><div class="ttdoc">File comment. </div><div class="ttdef"><b>Definition:</b> quazipnewinfo.h:75</div></div>
+<div class="ttc" id="structQuaZipFileInfo_html"><div class="ttname"><a href="structQuaZipFileInfo.html">QuaZipFileInfo</a></div><div class="ttdoc">Information about a file inside archive. </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:37</div></div>
+<div class="ttc" id="structQuaZipNewInfo_html_aec7f3ac72c72a2e10b82ad64c2fa3453"><div class="ttname"><a href="structQuaZipNewInfo.html#aec7f3ac72c72a2e10b82ad64c2fa3453">QuaZipNewInfo::dateTime</a></div><div class="ttdeci">QDateTime dateTime</div><div class="ttdoc">File timestamp. </div><div class="ttdef"><b>Definition:</b> quazipnewinfo.h:62</div></div>
+<div class="ttc" id="structQuaZipNewInfo_html_abda207eb3949db3a88761c1b06e6bd58"><div class="ttname"><a href="structQuaZipNewInfo.html#abda207eb3949db3a88761c1b06e6bd58">QuaZipNewInfo::extraGlobal</a></div><div class="ttdeci">QByteArray extraGlobal</div><div class="ttdoc">File global extra field. </div><div class="ttdef"><b>Definition:</b> quazipnewinfo.h:79</div></div>
+<div class="ttc" id="structQuaZipFileInfo64_html"><div class="ttname"><a href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></div><div class="ttdoc">Information about a file inside archive (with zip64 support). </div><div class="ttdef"><b>Definition:</b> quazipfileinfo.h:77</div></div>
+<div class="ttc" id="structQuaZipNewInfo_html_affd1a9700d302e1395bd04f0864da7d0"><div class="ttname"><a href="structQuaZipNewInfo.html#affd1a9700d302e1395bd04f0864da7d0">QuaZipNewInfo::externalAttr</a></div><div class="ttdeci">quint32 externalAttr</div><div class="ttdoc">File external attributes. </div><div class="ttdef"><b>Definition:</b> quazipnewinfo.h:71</div></div>
+<div class="ttc" id="structQuaZipNewInfo_html_a2bdef01b6ac3326e48598e32bfa5fbe8"><div class="ttname"><a href="structQuaZipNewInfo.html#a2bdef01b6ac3326e48598e32bfa5fbe8">QuaZipNewInfo::name</a></div><div class="ttdeci">QString name</div><div class="ttdoc">File name. </div><div class="ttdef"><b>Definition:</b> quazipnewinfo.h:55</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/structQIODevice__descriptor-members.html b/3rdparty/quazip-0.7/doc/html/structQIODevice__descriptor-members.html
new file mode 100644
index 0000000..adfe15b
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/structQIODevice__descriptor-members.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QIODevice_descriptor Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structQIODevice__descriptor.html">QIODevice_descriptor</a>, including all inherited members.</p>
+<table class="directory">
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pos</b> (defined in <a class="el" href="structQIODevice__descriptor.html">QIODevice_descriptor</a>)</td><td class="entry"><a class="el" href="structQIODevice__descriptor.html">QIODevice_descriptor</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>QIODevice_descriptor</b>() (defined in <a class="el" href="structQIODevice__descriptor.html">QIODevice_descriptor</a>)</td><td class="entry"><a class="el" href="structQIODevice__descriptor.html">QIODevice_descriptor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/structQIODevice__descriptor.html b/3rdparty/quazip-0.7/doc/html/structQIODevice__descriptor.html
new file mode 100644
index 0000000..b49b3bd
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/structQIODevice__descriptor.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QIODevice_descriptor Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="structQIODevice__descriptor-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">QIODevice_descriptor Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a21939844f92cd6936f2f2897c0a42695"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21939844f92cd6936f2f2897c0a42695"></a>
+qint64 </td><td class="memItemRight" valign="bottom"><b>pos</b></td></tr>
+<tr class="separator:a21939844f92cd6936f2f2897c0a42695"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>quazip/qioapi.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/structQuaZipFileInfo-members.html b/3rdparty/quazip-0.7/doc/html/structQuaZipFileInfo-members.html
new file mode 100644
index 0000000..4285944
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/structQuaZipFileInfo-members.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QuaZipFileInfo Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo.html#adc2aad7bbd87ce3415e2a19851266bfc">comment</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo.html#af6116eaac1f36b2a4b3a6a39851a85cc">compressedSize</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo.html#aceee045c9ebce0b9724f40d342bc99ea">crc</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo.html#ad6993d099436813a27fd31aebe42911a">dateTime</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo.html#aa70157fdc2bd8de10405055b4233050b">diskNumberStart</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo.html#afeb65ffdacc4fc0ba7848d4b37f62ecf">externalAttr</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo.html#affc7b097de2c3c2ef5801c60f96adc72">extra</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo.html#a56d36f777e4fc892c71e22d080622e2c">flags</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo.html#af87f96a64d7c02b002622f81d13accdb">getPermissions</a>() const </td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo.html#a36e681a93b041617addee78cb939c93d">internalAttr</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo.html#af5c1bbda7f5dec2c358e7a543564de4c">method</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo.html#a16ac323965deccf0232bfae69d933a84">name</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo.html#a0eb908e1b1ea637d1f1f4d6aa31db07f">uncompressedSize</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo.html#a52f3f1d960ebaa2acbc2a86458fa3e6e">versionCreated</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo.html#a8b73982808bded49e88e624a65e1a94f">versionNeeded</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/structQuaZipFileInfo.html b/3rdparty/quazip-0.7/doc/html/structQuaZipFileInfo.html
new file mode 100644
index 0000000..a4abe40
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/structQuaZipFileInfo.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaZipFileInfo Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="structQuaZipFileInfo-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">QuaZipFileInfo Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Information about a file inside archive.  
+ <a href="structQuaZipFileInfo.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="quazipfileinfo_8h_source.html">quazipfileinfo.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:af87f96a64d7c02b002622f81d13accdb"><td class="memItemLeft" align="right" valign="top">QFile::Permissions </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#af87f96a64d7c02b002622f81d13accdb">getPermissions</a> () const </td></tr>
+<tr class="memdesc:af87f96a64d7c02b002622f81d13accdb"><td class="mdescLeft"> </td><td class="mdescRight">Get the file permissions.  <a href="#af87f96a64d7c02b002622f81d13accdb">More...</a><br/></td></tr>
+<tr class="separator:af87f96a64d7c02b002622f81d13accdb"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a16ac323965deccf0232bfae69d933a84"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16ac323965deccf0232bfae69d933a84"></a>
+QString </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#a16ac323965deccf0232bfae69d933a84">name</a></td></tr>
+<tr class="memdesc:a16ac323965deccf0232bfae69d933a84"><td class="mdescLeft"> </td><td class="mdescRight">File name. <br/></td></tr>
+<tr class="separator:a16ac323965deccf0232bfae69d933a84"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a52f3f1d960ebaa2acbc2a86458fa3e6e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a52f3f1d960ebaa2acbc2a86458fa3e6e"></a>
+quint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#a52f3f1d960ebaa2acbc2a86458fa3e6e">versionCreated</a></td></tr>
+<tr class="memdesc:a52f3f1d960ebaa2acbc2a86458fa3e6e"><td class="mdescLeft"> </td><td class="mdescRight">Version created by. <br/></td></tr>
+<tr class="separator:a52f3f1d960ebaa2acbc2a86458fa3e6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8b73982808bded49e88e624a65e1a94f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b73982808bded49e88e624a65e1a94f"></a>
+quint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#a8b73982808bded49e88e624a65e1a94f">versionNeeded</a></td></tr>
+<tr class="memdesc:a8b73982808bded49e88e624a65e1a94f"><td class="mdescLeft"> </td><td class="mdescRight">Version needed to extract. <br/></td></tr>
+<tr class="separator:a8b73982808bded49e88e624a65e1a94f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56d36f777e4fc892c71e22d080622e2c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56d36f777e4fc892c71e22d080622e2c"></a>
+quint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#a56d36f777e4fc892c71e22d080622e2c">flags</a></td></tr>
+<tr class="memdesc:a56d36f777e4fc892c71e22d080622e2c"><td class="mdescLeft"> </td><td class="mdescRight">General purpose flags. <br/></td></tr>
+<tr class="separator:a56d36f777e4fc892c71e22d080622e2c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af5c1bbda7f5dec2c358e7a543564de4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af5c1bbda7f5dec2c358e7a543564de4c"></a>
+quint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#af5c1bbda7f5dec2c358e7a543564de4c">method</a></td></tr>
+<tr class="memdesc:af5c1bbda7f5dec2c358e7a543564de4c"><td class="mdescLeft"> </td><td class="mdescRight">Compression method. <br/></td></tr>
+<tr class="separator:af5c1bbda7f5dec2c358e7a543564de4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad6993d099436813a27fd31aebe42911a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad6993d099436813a27fd31aebe42911a"></a>
+QDateTime </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#ad6993d099436813a27fd31aebe42911a">dateTime</a></td></tr>
+<tr class="memdesc:ad6993d099436813a27fd31aebe42911a"><td class="mdescLeft"> </td><td class="mdescRight">Last modification date and time. <br/></td></tr>
+<tr class="separator:ad6993d099436813a27fd31aebe42911a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aceee045c9ebce0b9724f40d342bc99ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aceee045c9ebce0b9724f40d342bc99ea"></a>
+quint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#aceee045c9ebce0b9724f40d342bc99ea">crc</a></td></tr>
+<tr class="memdesc:aceee045c9ebce0b9724f40d342bc99ea"><td class="mdescLeft"> </td><td class="mdescRight">CRC. <br/></td></tr>
+<tr class="separator:aceee045c9ebce0b9724f40d342bc99ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af6116eaac1f36b2a4b3a6a39851a85cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6116eaac1f36b2a4b3a6a39851a85cc"></a>
+quint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#af6116eaac1f36b2a4b3a6a39851a85cc">compressedSize</a></td></tr>
+<tr class="memdesc:af6116eaac1f36b2a4b3a6a39851a85cc"><td class="mdescLeft"> </td><td class="mdescRight">Compressed file size. <br/></td></tr>
+<tr class="separator:af6116eaac1f36b2a4b3a6a39851a85cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0eb908e1b1ea637d1f1f4d6aa31db07f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0eb908e1b1ea637d1f1f4d6aa31db07f"></a>
+quint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#a0eb908e1b1ea637d1f1f4d6aa31db07f">uncompressedSize</a></td></tr>
+<tr class="memdesc:a0eb908e1b1ea637d1f1f4d6aa31db07f"><td class="mdescLeft"> </td><td class="mdescRight">Uncompressed file size. <br/></td></tr>
+<tr class="separator:a0eb908e1b1ea637d1f1f4d6aa31db07f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa70157fdc2bd8de10405055b4233050b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa70157fdc2bd8de10405055b4233050b"></a>
+quint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#aa70157fdc2bd8de10405055b4233050b">diskNumberStart</a></td></tr>
+<tr class="memdesc:aa70157fdc2bd8de10405055b4233050b"><td class="mdescLeft"> </td><td class="mdescRight">Disk number start. <br/></td></tr>
+<tr class="separator:aa70157fdc2bd8de10405055b4233050b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36e681a93b041617addee78cb939c93d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36e681a93b041617addee78cb939c93d"></a>
+quint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#a36e681a93b041617addee78cb939c93d">internalAttr</a></td></tr>
+<tr class="memdesc:a36e681a93b041617addee78cb939c93d"><td class="mdescLeft"> </td><td class="mdescRight">Internal file attributes. <br/></td></tr>
+<tr class="separator:a36e681a93b041617addee78cb939c93d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afeb65ffdacc4fc0ba7848d4b37f62ecf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afeb65ffdacc4fc0ba7848d4b37f62ecf"></a>
+quint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#afeb65ffdacc4fc0ba7848d4b37f62ecf">externalAttr</a></td></tr>
+<tr class="memdesc:afeb65ffdacc4fc0ba7848d4b37f62ecf"><td class="mdescLeft"> </td><td class="mdescRight">External file attributes. <br/></td></tr>
+<tr class="separator:afeb65ffdacc4fc0ba7848d4b37f62ecf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adc2aad7bbd87ce3415e2a19851266bfc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc2aad7bbd87ce3415e2a19851266bfc"></a>
+QString </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#adc2aad7bbd87ce3415e2a19851266bfc">comment</a></td></tr>
+<tr class="memdesc:adc2aad7bbd87ce3415e2a19851266bfc"><td class="mdescLeft"> </td><td class="mdescRight">Comment. <br/></td></tr>
+<tr class="separator:adc2aad7bbd87ce3415e2a19851266bfc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:affc7b097de2c3c2ef5801c60f96adc72"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="affc7b097de2c3c2ef5801c60f96adc72"></a>
+QByteArray </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo.html#affc7b097de2c3c2ef5801c60f96adc72">extra</a></td></tr>
+<tr class="memdesc:affc7b097de2c3c2ef5801c60f96adc72"><td class="mdescLeft"> </td><td class="mdescRight">Extra field. <br/></td></tr>
+<tr class="separator:affc7b097de2c3c2ef5801c60f96adc72"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Information about a file inside archive. </p>
+<p>Call <a class="el" href="classQuaZip.html#a9c91a53ed4c2038e153c64bdc097ebe8" title="Retrieves information about the current file. ">QuaZip::getCurrentFileInfo()</a> or <a class="el" href="classQuaZipFile.html#ad3f5807329321be21b12c1ba5798b359" title="Gets information about current file. ">QuaZipFile::getFileInfo()</a> to fill this structure. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="af87f96a64d7c02b002622f81d13accdb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QFile::Permissions QuaZipFileInfo::getPermissions </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the file permissions. </p>
+<p>Returns the high 16 bits of external attributes converted to QFile::Permissions. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following files:<ul>
+<li>quazip/<a class="el" href="quazipfileinfo_8h_source.html">quazipfileinfo.h</a></li>
+<li>quazip/quazipfileinfo.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/structQuaZipFileInfo64-members.html b/3rdparty/quazip-0.7/doc/html/structQuaZipFileInfo64-members.html
new file mode 100644
index 0000000..8a4d269
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/structQuaZipFileInfo64-members.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QuaZipFileInfo64 Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#aba3f5b982087c3e0343bb61e8814c7d1">comment</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#add8733946ea4af23aa32d85f10955b0f">compressedSize</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#aeb7b2757a0efa814b196b5280d000a14">crc</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#a4d77c6aa6076703e858c938efeb551e4">dateTime</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#ac8945cf1ff54d39d28e755685b91e941">diskNumberStart</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#a3a8bc40f1aa0cb0985c4e2f8a9678430">externalAttr</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#acf0b1b97f377208847c6912cd1bf1332">extra</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#a6aa533dd4e02f52459e1e1a0df31e992">flags</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#afe4c454de7d067a0095da0223f0cbec2">getNTFSaTime</a>(int *fineTicks=NULL) const </td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#a409dcbbe1ecd88dadb51be1aec48819d">getNTFScTime</a>(int *fineTicks=NULL) const </td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#af4b19399367cf5bf24026344e0631ccb">getNTFSmTime</a>(int *fineTicks=NULL) const </td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#a099216bd8991a983168d91c06a689f61">getPermissions</a>() const </td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#aeb895613e76a4cc63f861b010c9e92c0">internalAttr</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#a445967ecbb5a3dd2a9d516db3e14a34a">method</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#a2cadad4cb9a765e90b5422dae2388762">name</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#ada29945c7ee4c9df6fbe95864793aade">toQuaZipFileInfo</a>(QuaZipFileInfo &info) const </td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#a571ca077fe282c908e57b0bc82528d49">uncompressedSize</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#a95aeb06b080e483fde874ba2d06f203c">versionCreated</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipFileInfo64.html#a27654f5ce3a75331e9c9a7900b407169">versionNeeded</a></td><td class="entry"><a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/structQuaZipFileInfo64.html b/3rdparty/quazip-0.7/doc/html/structQuaZipFileInfo64.html
new file mode 100644
index 0000000..0140e04
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/structQuaZipFileInfo64.html
@@ -0,0 +1,306 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaZipFileInfo64 Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="structQuaZipFileInfo64-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">QuaZipFileInfo64 Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Information about a file inside archive (with zip64 support).  
+ <a href="structQuaZipFileInfo64.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="quazipfileinfo_8h_source.html">quazipfileinfo.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a099216bd8991a983168d91c06a689f61"><td class="memItemLeft" align="right" valign="top">QFile::Permissions </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#a099216bd8991a983168d91c06a689f61">getPermissions</a> () const </td></tr>
+<tr class="memdesc:a099216bd8991a983168d91c06a689f61"><td class="mdescLeft"> </td><td class="mdescRight">Get the file permissions.  <a href="#a099216bd8991a983168d91c06a689f61">More...</a><br/></td></tr>
+<tr class="separator:a099216bd8991a983168d91c06a689f61"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ada29945c7ee4c9df6fbe95864793aade"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#ada29945c7ee4c9df6fbe95864793aade">toQuaZipFileInfo</a> (<a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> &info) const </td></tr>
+<tr class="memdesc:ada29945c7ee4c9df6fbe95864793aade"><td class="mdescLeft"> </td><td class="mdescRight">Converts to <a class="el" href="structQuaZipFileInfo.html" title="Information about a file inside archive. ">QuaZipFileInfo</a>.  <a href="#ada29945c7ee4c9df6fbe95864793aade">More...</a><br/></td></tr>
+<tr class="separator:ada29945c7ee4c9df6fbe95864793aade"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4b19399367cf5bf24026344e0631ccb"><td class="memItemLeft" align="right" valign="top">QDateTime </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#af4b19399367cf5bf24026344e0631ccb">getNTFSmTime</a> (int *fineTicks=NULL) const </td></tr>
+<tr class="memdesc:af4b19399367cf5bf24026344e0631ccb"><td class="mdescLeft"> </td><td class="mdescRight">Returns the NTFS modification time.  <a href="#af4b19399367cf5bf24026344e0631ccb">More...</a><br/></td></tr>
+<tr class="separator:af4b19399367cf5bf24026344e0631ccb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afe4c454de7d067a0095da0223f0cbec2"><td class="memItemLeft" align="right" valign="top">QDateTime </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#afe4c454de7d067a0095da0223f0cbec2">getNTFSaTime</a> (int *fineTicks=NULL) const </td></tr>
+<tr class="memdesc:afe4c454de7d067a0095da0223f0cbec2"><td class="mdescLeft"> </td><td class="mdescRight">Returns the NTFS access time.  <a href="#afe4c454de7d067a0095da0223f0cbec2">More...</a><br/></td></tr>
+<tr class="separator:afe4c454de7d067a0095da0223f0cbec2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a409dcbbe1ecd88dadb51be1aec48819d"><td class="memItemLeft" align="right" valign="top">QDateTime </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#a409dcbbe1ecd88dadb51be1aec48819d">getNTFScTime</a> (int *fineTicks=NULL) const </td></tr>
+<tr class="memdesc:a409dcbbe1ecd88dadb51be1aec48819d"><td class="mdescLeft"> </td><td class="mdescRight">Returns the NTFS creation time.  <a href="#a409dcbbe1ecd88dadb51be1aec48819d">More...</a><br/></td></tr>
+<tr class="separator:a409dcbbe1ecd88dadb51be1aec48819d"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a2cadad4cb9a765e90b5422dae2388762"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cadad4cb9a765e90b5422dae2388762"></a>
+QString </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#a2cadad4cb9a765e90b5422dae2388762">name</a></td></tr>
+<tr class="memdesc:a2cadad4cb9a765e90b5422dae2388762"><td class="mdescLeft"> </td><td class="mdescRight">File name. <br/></td></tr>
+<tr class="separator:a2cadad4cb9a765e90b5422dae2388762"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a95aeb06b080e483fde874ba2d06f203c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95aeb06b080e483fde874ba2d06f203c"></a>
+quint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#a95aeb06b080e483fde874ba2d06f203c">versionCreated</a></td></tr>
+<tr class="memdesc:a95aeb06b080e483fde874ba2d06f203c"><td class="mdescLeft"> </td><td class="mdescRight">Version created by. <br/></td></tr>
+<tr class="separator:a95aeb06b080e483fde874ba2d06f203c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a27654f5ce3a75331e9c9a7900b407169"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a27654f5ce3a75331e9c9a7900b407169"></a>
+quint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#a27654f5ce3a75331e9c9a7900b407169">versionNeeded</a></td></tr>
+<tr class="memdesc:a27654f5ce3a75331e9c9a7900b407169"><td class="mdescLeft"> </td><td class="mdescRight">Version needed to extract. <br/></td></tr>
+<tr class="separator:a27654f5ce3a75331e9c9a7900b407169"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6aa533dd4e02f52459e1e1a0df31e992"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6aa533dd4e02f52459e1e1a0df31e992"></a>
+quint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#a6aa533dd4e02f52459e1e1a0df31e992">flags</a></td></tr>
+<tr class="memdesc:a6aa533dd4e02f52459e1e1a0df31e992"><td class="mdescLeft"> </td><td class="mdescRight">General purpose flags. <br/></td></tr>
+<tr class="separator:a6aa533dd4e02f52459e1e1a0df31e992"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a445967ecbb5a3dd2a9d516db3e14a34a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a445967ecbb5a3dd2a9d516db3e14a34a"></a>
+quint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#a445967ecbb5a3dd2a9d516db3e14a34a">method</a></td></tr>
+<tr class="memdesc:a445967ecbb5a3dd2a9d516db3e14a34a"><td class="mdescLeft"> </td><td class="mdescRight">Compression method. <br/></td></tr>
+<tr class="separator:a445967ecbb5a3dd2a9d516db3e14a34a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4d77c6aa6076703e858c938efeb551e4"><td class="memItemLeft" align="right" valign="top">QDateTime </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#a4d77c6aa6076703e858c938efeb551e4">dateTime</a></td></tr>
+<tr class="memdesc:a4d77c6aa6076703e858c938efeb551e4"><td class="mdescLeft"> </td><td class="mdescRight">Last modification date and time.  <a href="#a4d77c6aa6076703e858c938efeb551e4">More...</a><br/></td></tr>
+<tr class="separator:a4d77c6aa6076703e858c938efeb551e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeb7b2757a0efa814b196b5280d000a14"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb7b2757a0efa814b196b5280d000a14"></a>
+quint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#aeb7b2757a0efa814b196b5280d000a14">crc</a></td></tr>
+<tr class="memdesc:aeb7b2757a0efa814b196b5280d000a14"><td class="mdescLeft"> </td><td class="mdescRight">CRC. <br/></td></tr>
+<tr class="separator:aeb7b2757a0efa814b196b5280d000a14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:add8733946ea4af23aa32d85f10955b0f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add8733946ea4af23aa32d85f10955b0f"></a>
+quint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#add8733946ea4af23aa32d85f10955b0f">compressedSize</a></td></tr>
+<tr class="memdesc:add8733946ea4af23aa32d85f10955b0f"><td class="mdescLeft"> </td><td class="mdescRight">Compressed file size. <br/></td></tr>
+<tr class="separator:add8733946ea4af23aa32d85f10955b0f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a571ca077fe282c908e57b0bc82528d49"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a571ca077fe282c908e57b0bc82528d49"></a>
+quint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#a571ca077fe282c908e57b0bc82528d49">uncompressedSize</a></td></tr>
+<tr class="memdesc:a571ca077fe282c908e57b0bc82528d49"><td class="mdescLeft"> </td><td class="mdescRight">Uncompressed file size. <br/></td></tr>
+<tr class="separator:a571ca077fe282c908e57b0bc82528d49"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac8945cf1ff54d39d28e755685b91e941"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac8945cf1ff54d39d28e755685b91e941"></a>
+quint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#ac8945cf1ff54d39d28e755685b91e941">diskNumberStart</a></td></tr>
+<tr class="memdesc:ac8945cf1ff54d39d28e755685b91e941"><td class="mdescLeft"> </td><td class="mdescRight">Disk number start. <br/></td></tr>
+<tr class="separator:ac8945cf1ff54d39d28e755685b91e941"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeb895613e76a4cc63f861b010c9e92c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb895613e76a4cc63f861b010c9e92c0"></a>
+quint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#aeb895613e76a4cc63f861b010c9e92c0">internalAttr</a></td></tr>
+<tr class="memdesc:aeb895613e76a4cc63f861b010c9e92c0"><td class="mdescLeft"> </td><td class="mdescRight">Internal file attributes. <br/></td></tr>
+<tr class="separator:aeb895613e76a4cc63f861b010c9e92c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3a8bc40f1aa0cb0985c4e2f8a9678430"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3a8bc40f1aa0cb0985c4e2f8a9678430"></a>
+quint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#a3a8bc40f1aa0cb0985c4e2f8a9678430">externalAttr</a></td></tr>
+<tr class="memdesc:a3a8bc40f1aa0cb0985c4e2f8a9678430"><td class="mdescLeft"> </td><td class="mdescRight">External file attributes. <br/></td></tr>
+<tr class="separator:a3a8bc40f1aa0cb0985c4e2f8a9678430"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aba3f5b982087c3e0343bb61e8814c7d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba3f5b982087c3e0343bb61e8814c7d1"></a>
+QString </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#aba3f5b982087c3e0343bb61e8814c7d1">comment</a></td></tr>
+<tr class="memdesc:aba3f5b982087c3e0343bb61e8814c7d1"><td class="mdescLeft"> </td><td class="mdescRight">Comment. <br/></td></tr>
+<tr class="separator:aba3f5b982087c3e0343bb61e8814c7d1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf0b1b97f377208847c6912cd1bf1332"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf0b1b97f377208847c6912cd1bf1332"></a>
+QByteArray </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipFileInfo64.html#acf0b1b97f377208847c6912cd1bf1332">extra</a></td></tr>
+<tr class="memdesc:acf0b1b97f377208847c6912cd1bf1332"><td class="mdescLeft"> </td><td class="mdescRight">Extra field. <br/></td></tr>
+<tr class="separator:acf0b1b97f377208847c6912cd1bf1332"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Information about a file inside archive (with zip64 support). </p>
+<p>Call <a class="el" href="classQuaZip.html#a9c91a53ed4c2038e153c64bdc097ebe8" title="Retrieves information about the current file. ">QuaZip::getCurrentFileInfo()</a> or <a class="el" href="classQuaZipFile.html#ad3f5807329321be21b12c1ba5798b359" title="Gets information about current file. ">QuaZipFile::getFileInfo()</a> to fill this structure. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a099216bd8991a983168d91c06a689f61"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QFile::Permissions QuaZipFileInfo64::getPermissions </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the file permissions. </p>
+<p>Returns the high 16 bits of external attributes converted to QFile::Permissions. </p>
+
+</div>
+</div>
+<a class="anchor" id="ada29945c7ee4c9df6fbe95864793aade"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool QuaZipFileInfo64::toQuaZipFileInfo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> & </td>
+          <td class="paramname"><em>info</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Converts to <a class="el" href="structQuaZipFileInfo.html" title="Information about a file inside archive. ">QuaZipFileInfo</a>. </p>
+<p>If any of the fields are greater than 0xFFFFFFFFu, they are set to 0xFFFFFFFFu exactly, not just truncated. This function should be mainly used for compatibility with the old code expecting <a class="el" href="structQuaZipFileInfo.html" title="Information about a file inside archive. ">QuaZipFileInfo</a>, in the cases when it's impossible or otherwise unadvisable (due to ABI compatibility reasons, for example) to modify that old code to use <a class="el" href="structQuaZipFileInfo64.h [...]
+<dl class="section return"><dt>Returns</dt><dd><code>true</code> if all fields converted correctly, <code>false</code> if an overflow occured. </dd></dl>
+
+<p>References <a class="el" href="structQuaZipFileInfo.html#adc2aad7bbd87ce3415e2a19851266bfc">QuaZipFileInfo::comment</a>, <a class="el" href="structQuaZipFileInfo64.html#aba3f5b982087c3e0343bb61e8814c7d1">comment</a>, <a class="el" href="structQuaZipFileInfo.html#af6116eaac1f36b2a4b3a6a39851a85cc">QuaZipFileInfo::compressedSize</a>, <a class="el" href="structQuaZipFileInfo64.html#add8733946ea4af23aa32d85f10955b0f">compressedSize</a>, <a class="el" href="structQuaZipFileInfo.html#aceee0 [...]
+
+<p>Referenced by <a class="el" href="classQuaZip.html#a9c91a53ed4c2038e153c64bdc097ebe8">QuaZip::getCurrentFileInfo()</a>, and <a class="el" href="classQuaZipFile.html#ad3f5807329321be21b12c1ba5798b359">QuaZipFile::getFileInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af4b19399367cf5bf24026344e0631ccb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QDateTime QuaZipFileInfo64::getNTFSmTime </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>fineTicks</em> = <code>NULL</code></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the NTFS modification time. </p>
+<p>The getNTFS*Time() functions only work if there is an NTFS extra field present. Otherwise, they all return invalid null timestamps. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fineTicks</td><td>If not NULL, the fractional part of milliseconds returned there, measured in 100-nanosecond ticks. Will be set to zero if there is no NTFS extra field. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="structQuaZipFileInfo64.html#a4d77c6aa6076703e858c938efeb551e4" title="Last modification date and time. ">dateTime</a> </dd>
+<dd>
+<a class="el" href="structQuaZipFileInfo64.html#afe4c454de7d067a0095da0223f0cbec2" title="Returns the NTFS access time. ">getNTFSaTime()</a> </dd>
+<dd>
+<a class="el" href="structQuaZipFileInfo64.html#a409dcbbe1ecd88dadb51be1aec48819d" title="Returns the NTFS creation time. ">getNTFScTime()</a> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The NTFS modification time, UTC </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="afe4c454de7d067a0095da0223f0cbec2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QDateTime QuaZipFileInfo64::getNTFSaTime </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>fineTicks</em> = <code>NULL</code></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the NTFS access time. </p>
+<p>The getNTFS*Time() functions only work if there is an NTFS extra field present. Otherwise, they all return invalid null timestamps. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fineTicks</td><td>If not NULL, the fractional part of milliseconds returned there, measured in 100-nanosecond ticks. Will be set to zero if there is no NTFS extra field. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="structQuaZipFileInfo64.html#a4d77c6aa6076703e858c938efeb551e4" title="Last modification date and time. ">dateTime</a> </dd>
+<dd>
+<a class="el" href="structQuaZipFileInfo64.html#af4b19399367cf5bf24026344e0631ccb" title="Returns the NTFS modification time. ">getNTFSmTime()</a> </dd>
+<dd>
+<a class="el" href="structQuaZipFileInfo64.html#a409dcbbe1ecd88dadb51be1aec48819d" title="Returns the NTFS creation time. ">getNTFScTime()</a> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The NTFS access time, UTC </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a409dcbbe1ecd88dadb51be1aec48819d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QDateTime QuaZipFileInfo64::getNTFScTime </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>fineTicks</em> = <code>NULL</code></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the NTFS creation time. </p>
+<p>The getNTFS*Time() functions only work if there is an NTFS extra field present. Otherwise, they all return invalid null timestamps. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fineTicks</td><td>If not NULL, the fractional part of milliseconds returned there, measured in 100-nanosecond ticks. Will be set to zero if there is no NTFS extra field. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="structQuaZipFileInfo64.html#a4d77c6aa6076703e858c938efeb551e4" title="Last modification date and time. ">dateTime</a> </dd>
+<dd>
+<a class="el" href="structQuaZipFileInfo64.html#af4b19399367cf5bf24026344e0631ccb" title="Returns the NTFS modification time. ">getNTFSmTime()</a> </dd>
+<dd>
+<a class="el" href="structQuaZipFileInfo64.html#afe4c454de7d067a0095da0223f0cbec2" title="Returns the NTFS access time. ">getNTFSaTime()</a> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The NTFS creation time, UTC </dd></dl>
+
+</div>
+</div>
+<h2 class="groupheader">Member Data Documentation</h2>
+<a class="anchor" id="a4d77c6aa6076703e858c938efeb551e4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QDateTime QuaZipFileInfo64::dateTime</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Last modification date and time. </p>
+<p>This is the time stored in the standard ZIP header. This format only allows to store time with 2-second precision, so the seconds will always be even and the milliseconds will always be zero. If you need more precise date and time, you can try to call the <a class="el" href="structQuaZipFileInfo64.html#af4b19399367cf5bf24026344e0631ccb" title="Returns the NTFS modification time. ">getNTFSmTime()</a> function or its siblings, provided that the archive itself contains these NTFS times. </p>
+
+<p>Referenced by <a class="el" href="classQuaZip.html#a7ba6daf39263c308c683e7f72f74e0ae">QuaZip::getCurrentFileInfo()</a>, and <a class="el" href="structQuaZipFileInfo64.html#ada29945c7ee4c9df6fbe95864793aade">toQuaZipFileInfo()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following files:<ul>
+<li>quazip/<a class="el" href="quazipfileinfo_8h_source.html">quazipfileinfo.h</a></li>
+<li>quazip/quazipfileinfo.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/structQuaZipNewInfo-members.html b/3rdparty/quazip-0.7/doc/html/structQuaZipNewInfo-members.html
new file mode 100644
index 0000000..1837b85
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/structQuaZipNewInfo-members.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">QuaZipNewInfo Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipNewInfo.html#ae24b1d38c3550b4724862ffcf8f20924">comment</a></td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipNewInfo.html#aec7f3ac72c72a2e10b82ad64c2fa3453">dateTime</a></td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipNewInfo.html#affd1a9700d302e1395bd04f0864da7d0">externalAttr</a></td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipNewInfo.html#abda207eb3949db3a88761c1b06e6bd58">extraGlobal</a></td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipNewInfo.html#ab377a81c51cf495c7aeee4f19340a43f">extraLocal</a></td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipNewInfo.html#a59ce9776c2ac7547ade8cb4c404c77ab">internalAttr</a></td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipNewInfo.html#a2bdef01b6ac3326e48598e32bfa5fbe8">name</a></td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipNewInfo.html#a46c0f551cf9e6b2131929beb39187aac">QuaZipNewInfo</a>(const QString &name)</td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipNewInfo.html#ad47cf11f4277edcb09a8ba2b2963f2a9">QuaZipNewInfo</a>(const QString &name, const QString &file)</td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipNewInfo.html#a5f1a867f3b0d29d076f9014f70b59e5a">QuaZipNewInfo</a>(const QuaZipFileInfo &existing)</td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipNewInfo.html#a4afa2e8c282a801fc216f79026c2d062">QuaZipNewInfo</a>(const QuaZipFileInfo64 &existing)</td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipNewInfo.html#a2b18b554d056877a2f33ffb9d241ed85">setFileDateTime</a>(const QString &file)</td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipNewInfo.html#a1042ac3d55a9deed760eb357aaa8284c">setFileNTFSaTime</a>(const QDateTime &aTime, int fineTicks=0)</td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipNewInfo.html#a44675ac1e306eddefcaa35972c294d15">setFileNTFScTime</a>(const QDateTime &cTime, int fineTicks=0)</td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipNewInfo.html#a3af07365df1d67502ab1d0ca0d45df79">setFileNTFSmTime</a>(const QDateTime &mTime, int fineTicks=0)</td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipNewInfo.html#a663a37c5a7a2d18900ba8b0199617eff">setFileNTFSTimes</a>(const QString &fileName)</td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipNewInfo.html#a08bee5211eb0b49da260c7a9e7a266b8">setFilePermissions</a>(const QString &file)</td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structQuaZipNewInfo.html#aed68dc20f7dc42b5056491cf3c1d2d20">setPermissions</a>(QFile::Permissions permissions)</td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structQuaZipNewInfo.html#a18c079b3f2f5ab6eecdd61d6dbe93be6">uncompressedSize</a></td><td class="entry"><a class="el" href="structQuaZipNewInfo.html">QuaZipNewInfo</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/structQuaZipNewInfo.html b/3rdparty/quazip-0.7/doc/html/structQuaZipNewInfo.html
new file mode 100644
index 0000000..936a2e7
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/structQuaZipNewInfo.html
@@ -0,0 +1,551 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: QuaZipNewInfo Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="structQuaZipNewInfo-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">QuaZipNewInfo Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Information about a file to be created.  
+ <a href="structQuaZipNewInfo.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="quazipnewinfo_8h_source.html">quazipnewinfo.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a46c0f551cf9e6b2131929beb39187aac"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#a46c0f551cf9e6b2131929beb39187aac">QuaZipNewInfo</a> (const QString &<a class="el" href="structQuaZipNewInfo.html#a2bdef01b6ac3326e48598e32bfa5fbe8">name</a>)</td></tr>
+<tr class="memdesc:a46c0f551cf9e6b2131929beb39187aac"><td class="mdescLeft"> </td><td class="mdescRight">Constructs <a class="el" href="structQuaZipNewInfo.html" title="Information about a file to be created. ">QuaZipNewInfo</a> instance.  <a href="#a46c0f551cf9e6b2131929beb39187aac">More...</a><br/></td></tr>
+<tr class="separator:a46c0f551cf9e6b2131929beb39187aac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad47cf11f4277edcb09a8ba2b2963f2a9"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#ad47cf11f4277edcb09a8ba2b2963f2a9">QuaZipNewInfo</a> (const QString &<a class="el" href="structQuaZipNewInfo.html#a2bdef01b6ac3326e48598e32bfa5fbe8">name</a>, const QString &file)</td></tr>
+<tr class="memdesc:ad47cf11f4277edcb09a8ba2b2963f2a9"><td class="mdescLeft"> </td><td class="mdescRight">Constructs <a class="el" href="structQuaZipNewInfo.html" title="Information about a file to be created. ">QuaZipNewInfo</a> instance.  <a href="#ad47cf11f4277edcb09a8ba2b2963f2a9">More...</a><br/></td></tr>
+<tr class="separator:ad47cf11f4277edcb09a8ba2b2963f2a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5f1a867f3b0d29d076f9014f70b59e5a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#a5f1a867f3b0d29d076f9014f70b59e5a">QuaZipNewInfo</a> (const <a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> &existing)</td></tr>
+<tr class="memdesc:a5f1a867f3b0d29d076f9014f70b59e5a"><td class="mdescLeft"> </td><td class="mdescRight">Initializes the new instance from existing file info.  <a href="#a5f1a867f3b0d29d076f9014f70b59e5a">More...</a><br/></td></tr>
+<tr class="separator:a5f1a867f3b0d29d076f9014f70b59e5a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4afa2e8c282a801fc216f79026c2d062"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#a4afa2e8c282a801fc216f79026c2d062">QuaZipNewInfo</a> (const <a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> &existing)</td></tr>
+<tr class="memdesc:a4afa2e8c282a801fc216f79026c2d062"><td class="mdescLeft"> </td><td class="mdescRight">Initializes the new instance from existing file info.  <a href="#a4afa2e8c282a801fc216f79026c2d062">More...</a><br/></td></tr>
+<tr class="separator:a4afa2e8c282a801fc216f79026c2d062"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2b18b554d056877a2f33ffb9d241ed85"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#a2b18b554d056877a2f33ffb9d241ed85">setFileDateTime</a> (const QString &file)</td></tr>
+<tr class="memdesc:a2b18b554d056877a2f33ffb9d241ed85"><td class="mdescLeft"> </td><td class="mdescRight">Sets the file timestamp from the existing file.  <a href="#a2b18b554d056877a2f33ffb9d241ed85">More...</a><br/></td></tr>
+<tr class="separator:a2b18b554d056877a2f33ffb9d241ed85"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a08bee5211eb0b49da260c7a9e7a266b8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#a08bee5211eb0b49da260c7a9e7a266b8">setFilePermissions</a> (const QString &file)</td></tr>
+<tr class="memdesc:a08bee5211eb0b49da260c7a9e7a266b8"><td class="mdescLeft"> </td><td class="mdescRight">Sets the file permissions from the existing file.  <a href="#a08bee5211eb0b49da260c7a9e7a266b8">More...</a><br/></td></tr>
+<tr class="separator:a08bee5211eb0b49da260c7a9e7a266b8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aed68dc20f7dc42b5056491cf3c1d2d20"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#aed68dc20f7dc42b5056491cf3c1d2d20">setPermissions</a> (QFile::Permissions permissions)</td></tr>
+<tr class="memdesc:aed68dc20f7dc42b5056491cf3c1d2d20"><td class="mdescLeft"> </td><td class="mdescRight">Sets the file permissions.  <a href="#aed68dc20f7dc42b5056491cf3c1d2d20">More...</a><br/></td></tr>
+<tr class="separator:aed68dc20f7dc42b5056491cf3c1d2d20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a663a37c5a7a2d18900ba8b0199617eff"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#a663a37c5a7a2d18900ba8b0199617eff">setFileNTFSTimes</a> (const QString &fileName)</td></tr>
+<tr class="memdesc:a663a37c5a7a2d18900ba8b0199617eff"><td class="mdescLeft"> </td><td class="mdescRight">Sets the NTFS times from an existing file.  <a href="#a663a37c5a7a2d18900ba8b0199617eff">More...</a><br/></td></tr>
+<tr class="separator:a663a37c5a7a2d18900ba8b0199617eff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3af07365df1d67502ab1d0ca0d45df79"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#a3af07365df1d67502ab1d0ca0d45df79">setFileNTFSmTime</a> (const QDateTime &mTime, int fineTicks=0)</td></tr>
+<tr class="memdesc:a3af07365df1d67502ab1d0ca0d45df79"><td class="mdescLeft"> </td><td class="mdescRight">Sets the NTFS modification time.  <a href="#a3af07365df1d67502ab1d0ca0d45df79">More...</a><br/></td></tr>
+<tr class="separator:a3af07365df1d67502ab1d0ca0d45df79"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1042ac3d55a9deed760eb357aaa8284c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#a1042ac3d55a9deed760eb357aaa8284c">setFileNTFSaTime</a> (const QDateTime &aTime, int fineTicks=0)</td></tr>
+<tr class="memdesc:a1042ac3d55a9deed760eb357aaa8284c"><td class="mdescLeft"> </td><td class="mdescRight">Sets the NTFS access time.  <a href="#a1042ac3d55a9deed760eb357aaa8284c">More...</a><br/></td></tr>
+<tr class="separator:a1042ac3d55a9deed760eb357aaa8284c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a44675ac1e306eddefcaa35972c294d15"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#a44675ac1e306eddefcaa35972c294d15">setFileNTFScTime</a> (const QDateTime &cTime, int fineTicks=0)</td></tr>
+<tr class="memdesc:a44675ac1e306eddefcaa35972c294d15"><td class="mdescLeft"> </td><td class="mdescRight">Sets the NTFS creation time.  <a href="#a44675ac1e306eddefcaa35972c294d15">More...</a><br/></td></tr>
+<tr class="separator:a44675ac1e306eddefcaa35972c294d15"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a2bdef01b6ac3326e48598e32bfa5fbe8"><td class="memItemLeft" align="right" valign="top">QString </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#a2bdef01b6ac3326e48598e32bfa5fbe8">name</a></td></tr>
+<tr class="memdesc:a2bdef01b6ac3326e48598e32bfa5fbe8"><td class="mdescLeft"> </td><td class="mdescRight">File name.  <a href="#a2bdef01b6ac3326e48598e32bfa5fbe8">More...</a><br/></td></tr>
+<tr class="separator:a2bdef01b6ac3326e48598e32bfa5fbe8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aec7f3ac72c72a2e10b82ad64c2fa3453"><td class="memItemLeft" align="right" valign="top">QDateTime </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#aec7f3ac72c72a2e10b82ad64c2fa3453">dateTime</a></td></tr>
+<tr class="memdesc:aec7f3ac72c72a2e10b82ad64c2fa3453"><td class="mdescLeft"> </td><td class="mdescRight">File timestamp.  <a href="#aec7f3ac72c72a2e10b82ad64c2fa3453">More...</a><br/></td></tr>
+<tr class="separator:aec7f3ac72c72a2e10b82ad64c2fa3453"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59ce9776c2ac7547ade8cb4c404c77ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59ce9776c2ac7547ade8cb4c404c77ab"></a>
+quint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#a59ce9776c2ac7547ade8cb4c404c77ab">internalAttr</a></td></tr>
+<tr class="memdesc:a59ce9776c2ac7547ade8cb4c404c77ab"><td class="mdescLeft"> </td><td class="mdescRight">File internal attributes. <br/></td></tr>
+<tr class="separator:a59ce9776c2ac7547ade8cb4c404c77ab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:affd1a9700d302e1395bd04f0864da7d0"><td class="memItemLeft" align="right" valign="top">quint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#affd1a9700d302e1395bd04f0864da7d0">externalAttr</a></td></tr>
+<tr class="memdesc:affd1a9700d302e1395bd04f0864da7d0"><td class="mdescLeft"> </td><td class="mdescRight">File external attributes.  <a href="#affd1a9700d302e1395bd04f0864da7d0">More...</a><br/></td></tr>
+<tr class="separator:affd1a9700d302e1395bd04f0864da7d0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae24b1d38c3550b4724862ffcf8f20924"><td class="memItemLeft" align="right" valign="top">QString </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#ae24b1d38c3550b4724862ffcf8f20924">comment</a></td></tr>
+<tr class="memdesc:ae24b1d38c3550b4724862ffcf8f20924"><td class="mdescLeft"> </td><td class="mdescRight">File comment.  <a href="#ae24b1d38c3550b4724862ffcf8f20924">More...</a><br/></td></tr>
+<tr class="separator:ae24b1d38c3550b4724862ffcf8f20924"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab377a81c51cf495c7aeee4f19340a43f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab377a81c51cf495c7aeee4f19340a43f"></a>
+QByteArray </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#ab377a81c51cf495c7aeee4f19340a43f">extraLocal</a></td></tr>
+<tr class="memdesc:ab377a81c51cf495c7aeee4f19340a43f"><td class="mdescLeft"> </td><td class="mdescRight">File local extra field. <br/></td></tr>
+<tr class="separator:ab377a81c51cf495c7aeee4f19340a43f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abda207eb3949db3a88761c1b06e6bd58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abda207eb3949db3a88761c1b06e6bd58"></a>
+QByteArray </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#abda207eb3949db3a88761c1b06e6bd58">extraGlobal</a></td></tr>
+<tr class="memdesc:abda207eb3949db3a88761c1b06e6bd58"><td class="mdescLeft"> </td><td class="mdescRight">File global extra field. <br/></td></tr>
+<tr class="separator:abda207eb3949db3a88761c1b06e6bd58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a18c079b3f2f5ab6eecdd61d6dbe93be6"><td class="memItemLeft" align="right" valign="top">ulong </td><td class="memItemRight" valign="bottom"><a class="el" href="structQuaZipNewInfo.html#a18c079b3f2f5ab6eecdd61d6dbe93be6">uncompressedSize</a></td></tr>
+<tr class="memdesc:a18c079b3f2f5ab6eecdd61d6dbe93be6"><td class="mdescLeft"> </td><td class="mdescRight">Uncompressed file size.  <a href="#a18c079b3f2f5ab6eecdd61d6dbe93be6">More...</a><br/></td></tr>
+<tr class="separator:a18c079b3f2f5ab6eecdd61d6dbe93be6"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Information about a file to be created. </p>
+<p>This structure holds information about a file to be created inside ZIP archive. At least name should be set to something correct before passing this structure to QuaZipFile::open(OpenMode,const QuaZipNewInfo&,int,int,bool).</p>
+<p>Zip64 support of this structure is slightly limited: in the raw mode (when a pre-compressed file is written into a ZIP file as-is), it is necessary to specify the uncompressed file size and the appropriate field is 32 bit. Since the raw mode is used extremely rare, there is no real need to have a separate QuaZipNewInfo64 structure like <a class="el" href="structQuaZipFileInfo64.html" title="Information about a file inside archive (with zip64 support). ">QuaZipFileInfo64</a>. It may be [...]
+</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="a46c0f551cf9e6b2131929beb39187aac"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZipNewInfo::QuaZipNewInfo </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>name</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Constructs <a class="el" href="structQuaZipNewInfo.html" title="Information about a file to be created. ">QuaZipNewInfo</a> instance. </p>
+<p>Initializes name with <em>name</em>, dateTime with current date and time. Attributes are initialized with zeros, comment and extra field with null values. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad47cf11f4277edcb09a8ba2b2963f2a9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZipNewInfo::QuaZipNewInfo </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>file</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Constructs <a class="el" href="structQuaZipNewInfo.html" title="Information about a file to be created. ">QuaZipNewInfo</a> instance. </p>
+<p>Initializes name with <em>name</em>. Timestamp and permissions are taken from the specified file. If the <em>file</em> does not exists or its timestamp is inaccessible (e. g. you do not have read permission for the directory file in), uses current time and zero permissions. Other attributes are initialized with zeros, comment and extra field with null values.</p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="structQuaZipNewInfo.html#a2b18b554d056877a2f33ffb9d241ed85" title="Sets the file timestamp from the existing file. ">setFileDateTime()</a> </dd></dl>
+
+<p>References <a class="el" href="structQuaZipNewInfo.html#aec7f3ac72c72a2e10b82ad64c2fa3453">dateTime</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5f1a867f3b0d29d076f9014f70b59e5a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZipNewInfo::QuaZipNewInfo </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="structQuaZipFileInfo.html">QuaZipFileInfo</a> & </td>
+          <td class="paramname"><em>existing</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initializes the new instance from existing file info. </p>
+<p>Mainly used when copying files between archives.</p>
+<p>Both extra fields are initialized to existing.extra. <a class="el" href="structQuaZipNewInfo.html" title="Information about a file to be created. ">QuaZipNewInfo</a> </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">existing</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a4afa2e8c282a801fc216f79026c2d062"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QuaZipNewInfo::QuaZipNewInfo </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="structQuaZipFileInfo64.html">QuaZipFileInfo64</a> & </td>
+          <td class="paramname"><em>existing</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initializes the new instance from existing file info. </p>
+<p>Mainly used when copying files between archives.</p>
+<p>Both extra fields are initialized to existing.extra. <a class="el" href="structQuaZipNewInfo.html" title="Information about a file to be created. ">QuaZipNewInfo</a> </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">existing</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a2b18b554d056877a2f33ffb9d241ed85"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZipNewInfo::setFileDateTime </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>file</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the file timestamp from the existing file. </p>
+<p>Use this function to set the file timestamp from the existing file. Use it like this: </p>
+<div class="fragment"><div class="line"><a class="code" href="classQuaZipFile.html">QuaZipFile</a> zipFile(&zip);</div>
+<div class="line">QFile file(<span class="stringliteral">"file-to-add"</span>);</div>
+<div class="line">file.open(QIODevice::ReadOnly);</div>
+<div class="line"><a class="code" href="structQuaZipNewInfo.html">QuaZipNewInfo</a> info(<span class="stringliteral">"file-name-in-archive"</span>);</div>
+<div class="line">info.setFileDateTime(<span class="stringliteral">"file-to-add"</span>); <span class="comment">// take the timestamp from file</span></div>
+<div class="line">zipFile.open(QIODevice::WriteOnly, info);</div>
+</div><!-- fragment --><p>This function does not change dateTime if some error occured (e. g. file is inaccessible). </p>
+
+<p>References <a class="el" href="structQuaZipNewInfo.html#aec7f3ac72c72a2e10b82ad64c2fa3453">dateTime</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a08bee5211eb0b49da260c7a9e7a266b8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZipNewInfo::setFilePermissions </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>file</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the file permissions from the existing file. </p>
+<p>Takes permissions from the file and sets the high 16 bits of external attributes. Uses QFileInfo to get permissions on all platforms. </p>
+
+</div>
+</div>
+<a class="anchor" id="aed68dc20f7dc42b5056491cf3c1d2d20"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZipNewInfo::setPermissions </td>
+          <td>(</td>
+          <td class="paramtype">QFile::Permissions </td>
+          <td class="paramname"><em>permissions</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the file permissions. </p>
+<p>Modifies the highest 16 bits of external attributes. The type part is set to dir if the name ends with a slash, and to regular file otherwise. </p>
+
+<p>References <a class="el" href="structQuaZipNewInfo.html#a2bdef01b6ac3326e48598e32bfa5fbe8">name</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a663a37c5a7a2d18900ba8b0199617eff"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZipNewInfo::setFileNTFSTimes </td>
+          <td>(</td>
+          <td class="paramtype">const QString & </td>
+          <td class="paramname"><em>fileName</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the NTFS times from an existing file. </p>
+<p>If the file doesn't exist, a warning is printed to the stderr and nothing is done. Otherwise, all three times, as reported by QFileInfo::lastModified(), QFileInfo::lastRead() and QFileInfo::created(), are written to the NTFS extra field record.</p>
+<p>The NTFS record is written to both the local and the global extra fields, updating the existing record if there is one, or creating a new one and appending it to the end of each extra field.</p>
+<p>The microseconds will be zero, as they aren't reported by QFileInfo. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fileName</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>References <a class="el" href="structQuaZipNewInfo.html#a1042ac3d55a9deed760eb357aaa8284c">setFileNTFSaTime()</a>, <a class="el" href="structQuaZipNewInfo.html#a44675ac1e306eddefcaa35972c294d15">setFileNTFScTime()</a>, and <a class="el" href="structQuaZipNewInfo.html#a3af07365df1d67502ab1d0ca0d45df79">setFileNTFSmTime()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3af07365df1d67502ab1d0ca0d45df79"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZipNewInfo::setFileNTFSmTime </td>
+          <td>(</td>
+          <td class="paramtype">const QDateTime & </td>
+          <td class="paramname"><em>mTime</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>fineTicks</em> = <code>0</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the NTFS modification time. </p>
+<p>The time is written into the NTFS record in both the local and the global extra fields, updating the existing record if there is one, or creating a new one and appending it to the end of each extra field. When updating an existing record, all other fields are left intact. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">mTime</td><td>The new modification time. </td></tr>
+    <tr><td class="paramname">fineTicks</td><td>The fractional part of milliseconds, in 100-nanosecond ticks (i. e. 9999 ticks = 999.9 microsecond). Values greater than 9999 will add milliseconds or even seconds, but this can be confusing and therefore is discouraged. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>References <a class="el" href="structQuaZipNewInfo.html#abda207eb3949db3a88761c1b06e6bd58">extraGlobal</a>, and <a class="el" href="structQuaZipNewInfo.html#ab377a81c51cf495c7aeee4f19340a43f">extraLocal</a>.</p>
+
+<p>Referenced by <a class="el" href="structQuaZipNewInfo.html#a663a37c5a7a2d18900ba8b0199617eff">setFileNTFSTimes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1042ac3d55a9deed760eb357aaa8284c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZipNewInfo::setFileNTFSaTime </td>
+          <td>(</td>
+          <td class="paramtype">const QDateTime & </td>
+          <td class="paramname"><em>aTime</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>fineTicks</em> = <code>0</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the NTFS access time. </p>
+<p>The time is written into the NTFS record in both the local and the global extra fields, updating the existing record if there is one, or creating a new one and appending it to the end of each extra field. When updating an existing record, all other fields are left intact. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">aTime</td><td>The new access time. </td></tr>
+    <tr><td class="paramname">fineTicks</td><td>The fractional part of milliseconds, in 100-nanosecond ticks (i. e. 9999 ticks = 999.9 microsecond). Values greater than 9999 will add milliseconds or even seconds, but this can be confusing and therefore is discouraged. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>References <a class="el" href="structQuaZipNewInfo.html#abda207eb3949db3a88761c1b06e6bd58">extraGlobal</a>, and <a class="el" href="structQuaZipNewInfo.html#ab377a81c51cf495c7aeee4f19340a43f">extraLocal</a>.</p>
+
+<p>Referenced by <a class="el" href="structQuaZipNewInfo.html#a663a37c5a7a2d18900ba8b0199617eff">setFileNTFSTimes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a44675ac1e306eddefcaa35972c294d15"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void QuaZipNewInfo::setFileNTFScTime </td>
+          <td>(</td>
+          <td class="paramtype">const QDateTime & </td>
+          <td class="paramname"><em>cTime</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>fineTicks</em> = <code>0</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the NTFS creation time. </p>
+<p>The time is written into the NTFS record in both the local and the global extra fields, updating the existing record if there is one, or creating a new one and appending it to the end of each extra field. When updating an existing record, all other fields are left intact. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cTime</td><td>The new creation time. </td></tr>
+    <tr><td class="paramname">fineTicks</td><td>The fractional part of milliseconds, in 100-nanosecond ticks (i. e. 9999 ticks = 999.9 microsecond). Values greater than 9999 will add milliseconds or even seconds, but this can be confusing and therefore is discouraged. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>References <a class="el" href="structQuaZipNewInfo.html#abda207eb3949db3a88761c1b06e6bd58">extraGlobal</a>, and <a class="el" href="structQuaZipNewInfo.html#ab377a81c51cf495c7aeee4f19340a43f">extraLocal</a>.</p>
+
+<p>Referenced by <a class="el" href="structQuaZipNewInfo.html#a663a37c5a7a2d18900ba8b0199617eff">setFileNTFSTimes()</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Data Documentation</h2>
+<a class="anchor" id="a2bdef01b6ac3326e48598e32bfa5fbe8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QString QuaZipNewInfo::name</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>File name. </p>
+<p>This field holds file name inside archive, including path relative to archive root. </p>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a2429ea59c77371d7af56d739db130b18">QuaZipFile::open()</a>, and <a class="el" href="structQuaZipNewInfo.html#aed68dc20f7dc42b5056491cf3c1d2d20">setPermissions()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aec7f3ac72c72a2e10b82ad64c2fa3453"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QDateTime QuaZipNewInfo::dateTime</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>File timestamp. </p>
+<p>This is the last file modification date and time. Will be stored in the archive central directory. It is a good practice to set it to the source file timestamp instead of archive creating time. Use <a class="el" href="structQuaZipNewInfo.html#a2b18b554d056877a2f33ffb9d241ed85" title="Sets the file timestamp from the existing file. ">setFileDateTime()</a> or <a class="el" href="structQuaZipNewInfo.html#ad47cf11f4277edcb09a8ba2b2963f2a9" title="Constructs QuaZipNewInfo instance. ">QuaZi [...]
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a2429ea59c77371d7af56d739db130b18">QuaZipFile::open()</a>, <a class="el" href="structQuaZipNewInfo.html#ad47cf11f4277edcb09a8ba2b2963f2a9">QuaZipNewInfo()</a>, and <a class="el" href="structQuaZipNewInfo.html#a2b18b554d056877a2f33ffb9d241ed85">setFileDateTime()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="affd1a9700d302e1395bd04f0864da7d0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">quint32 QuaZipNewInfo::externalAttr</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>File external attributes. </p>
+<p>The highest 16 bits contain Unix file permissions and type (dir or file). The constructor <a class="el" href="structQuaZipNewInfo.html#ad47cf11f4277edcb09a8ba2b2963f2a9" title="Constructs QuaZipNewInfo instance. ">QuaZipNewInfo(const QString&, const QString&)</a> takes permissions from the provided file. </p>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a2429ea59c77371d7af56d739db130b18">QuaZipFile::open()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae24b1d38c3550b4724862ffcf8f20924"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">QString QuaZipNewInfo::comment</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>File comment. </p>
+<p>Will be encoded using <a class="el" href="classQuaZip.html#a008260161781d8b5d2a0a28493fddaf4" title="Returns the codec used to encode/decode comments inside archive. ">QuaZip::getCommentCodec()</a>. </p>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a2429ea59c77371d7af56d739db130b18">QuaZipFile::open()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a18c079b3f2f5ab6eecdd61d6dbe93be6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">ulong QuaZipNewInfo::uncompressedSize</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Uncompressed file size. </p>
+<p>This is only needed if you are using raw file zipping mode, i. e. adding precompressed file in the zip archive. </p>
+
+<p>Referenced by <a class="el" href="classQuaZipFile.html#a2429ea59c77371d7af56d739db130b18">QuaZipFile::open()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following files:<ul>
+<li>quazip/<a class="el" href="quazipnewinfo_8h_source.html">quazipnewinfo.h</a></li>
+<li>quazip/quazipnewinfo.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:17 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/html/sync_off.png b/3rdparty/quazip-0.7/doc/html/sync_off.png
new file mode 100644
index 0000000..3b443fc
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/sync_off.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/sync_on.png b/3rdparty/quazip-0.7/doc/html/sync_on.png
new file mode 100644
index 0000000..e08320f
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/sync_on.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/tab_a.png b/3rdparty/quazip-0.7/doc/html/tab_a.png
new file mode 100644
index 0000000..3b725c4
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/tab_a.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/tab_b.png b/3rdparty/quazip-0.7/doc/html/tab_b.png
new file mode 100644
index 0000000..e2b4a86
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/tab_b.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/tab_h.png b/3rdparty/quazip-0.7/doc/html/tab_h.png
new file mode 100644
index 0000000..fd5cb70
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/tab_h.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/tab_s.png b/3rdparty/quazip-0.7/doc/html/tab_s.png
new file mode 100644
index 0000000..ab478c9
Binary files /dev/null and b/3rdparty/quazip-0.7/doc/html/tab_s.png differ
diff --git a/3rdparty/quazip-0.7/doc/html/tabs.css b/3rdparty/quazip-0.7/doc/html/tabs.css
new file mode 100644
index 0000000..9cf578f
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/tabs.css
@@ -0,0 +1,60 @@
+.tabs, .tabs2, .tabs3 {
+    background-image: url('tab_b.png');
+    width: 100%;
+    z-index: 101;
+    font-size: 13px;
+    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+.tabs2 {
+    font-size: 10px;
+}
+.tabs3 {
+    font-size: 9px;
+}
+
+.tablist {
+    margin: 0;
+    padding: 0;
+    display: table;
+}
+
+.tablist li {
+    float: left;
+    display: table-cell;
+    background-image: url('tab_b.png');
+    line-height: 36px;
+    list-style: none;
+}
+
+.tablist a {
+    display: block;
+    padding: 0 20px;
+    font-weight: bold;
+    background-image:url('tab_s.png');
+    background-repeat:no-repeat;
+    background-position:right;
+    color: #283A5D;
+    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+    text-decoration: none;
+    outline: none;
+}
+
+.tabs3 .tablist a {
+    padding: 0 10px;
+}
+
+.tablist a:hover {
+    background-image: url('tab_h.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+    text-decoration: none;
+}
+
+.tablist li.current a {
+    background-image: url('tab_a.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
diff --git a/3rdparty/quazip-0.7/doc/html/usage.html b/3rdparty/quazip-0.7/doc/html/usage.html
new file mode 100644
index 0000000..3a7c54d
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/html/usage.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>QuaZIP: Usage</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">QuaZIP
+    <span id="projectnumber">quazip-0-7</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Usage </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>This page provides general information on QuaZIP usage. See classes <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> and <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> for the detailed documentation on what can QuaZIP do and what it can not. Also, reading comments in the zip.h and unzip.h files (taken from the original ZIP/UNZIP package) is always a good idea too. After all, QuaZIP is just a wra [...]
+<p><a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> is a class representing ZIP archive, <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> represents a file inside archive and subclasses QIODevice as well. One limitation is that there can be only one instance of <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> per <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip< [...]
+<h1><a class="anchor" id="terminology"></a>
+Terminology</h1>
+<p>"QuaZIP" means whole this library, while "QuaZip" (note the lower case) is just one class in it.</p>
+<p>"ZIP/UNZIP API" or "minizip" means the original API of the Gilles Vollant's ZIP/UNZIP package. It was slightly modified to better integrate with Qt. These modifications are not source or binary compatible with the official minizip release, which means you can't just drop the newer minizip version into QuaZIP sources and make it work.</p>
+<p>"ZIP", "ZIP archive" or "ZIP file" means any ZIP archive. Typically this is a plain file with ".zip" (or ".ZIP") file name suffix, but it can also be any seekable QIODevice (say, QBuffer, but not QTcpSocket).</p>
+<p>"A file inside archive", "a file inside ZIP" or something like that means file either being read or written from/to some ZIP archive.</p>
+<h1><a class="anchor" id="error-handling"></a>
+Error handling</h1>
+<p>Almost any call to ZIP/UNZIP API return some error code. Most of the original API's error checking could be done in this wrapper as well, but it would cause unnecessary code bloating without any benefit. So, QuaZIP only checks for situations that ZIP/UNZIP API can not check for. For example, ZIP/UNZIP API has no "ZIP open mode" concept because read and write modes are completely separated. On the other hand, to avoid creating classes like "QuaZipReader", "QuaZipWriter" or something li [...]
+<p>Therefore, error checking is two-level (QuaZIP's level and ZIP/UNZIP API level), which sometimes can be confusing, so here are some advices on how the error checking should be properly done:</p>
+<ul>
+<li>Both <a class="el" href="classQuaZip.html" title="ZIP archive. ">QuaZip</a> and <a class="el" href="classQuaZipFile.html" title="A file inside ZIP archive. ">QuaZipFile</a> have getZipError() function, which return error code of the last ZIP/UNZIP API call. Most function calls reset error code to UNZ_OK on success and set error code on failure. Some functions do not reset error code. Most of them are <code>const</code> and do not access ZIP archive in any way. Some, on the other hand [...]
+<li>Most functions have their own way to report errors, by returning a null string, negative value or <code>false</code>. If such a function returns error value, call getZipError() to get more information about error. See "zip.h" and "unzip.h" of the ZIP/UNZIP package for error codes.</li>
+<li>If the function returns error-stating value (like <code>false</code>), but getZipError() returns UNZ_OK, it means that you did something obviously wrong. For example, tried to write in the archive open for reading or not open at all. You better just not do that! Most functions also issue a warning using qWarning() function in such cases. See documentation for a specific function for details on when it should not be called.</li>
+</ul>
+<p>I know that this is somewhat messy, but I could not find a better way to do all the error handling. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Thu Jul 24 2014 20:35:16 for QuaZIP by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/3rdparty/quazip-0.7/doc/latex/annotated.tex b/3rdparty/quazip-0.7/doc/latex/annotated.tex
new file mode 100644
index 0000000..1ef672b
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/annotated.tex
@@ -0,0 +1,18 @@
+\section{Class List}
+Here are the classes, structs, unions and interfaces with brief descriptions\-:\begin{DoxyCompactList}
+\item\contentsline{section}{{\bf Jl\-Compress} \\*Utility class for typical operations }{\pageref{classJlCompress}}{}
+\item\contentsline{section}{{\bf Q\-I\-O\-Device\-\_\-descriptor} }{\pageref{structQIODevice__descriptor}}{}
+\item\contentsline{section}{{\bf Qua\-Adler32} \\*Adler32 checksum }{\pageref{classQuaAdler32}}{}
+\item\contentsline{section}{{\bf Qua\-Checksum32} \\*Checksum interface }{\pageref{classQuaChecksum32}}{}
+\item\contentsline{section}{{\bf Qua\-Crc32} \\*C\-R\-C32 checksum }{\pageref{classQuaCrc32}}{}
+\item\contentsline{section}{{\bf Qua\-Gzip\-File} \\*G\-Z\-I\-P file }{\pageref{classQuaGzipFile}}{}
+\item\contentsline{section}{{\bf Qua\-Z\-I\-O\-Device} \\*A class to compress/decompress Q\-I\-O\-Device }{\pageref{classQuaZIODevice}}{}
+\item\contentsline{section}{{\bf Qua\-Zip} \\*Z\-I\-P archive }{\pageref{classQuaZip}}{}
+\item\contentsline{section}{{\bf Qua\-Zip\-Dir} \\*Provides Z\-I\-P archive navigation }{\pageref{classQuaZipDir}}{}
+\item\contentsline{section}{{\bf Qua\-Zip\-File} \\*A file inside Z\-I\-P archive }{\pageref{classQuaZipFile}}{}
+\item\contentsline{section}{{\bf Qua\-Zip\-File\-Info} \\*Information about a file inside archive }{\pageref{structQuaZipFileInfo}}{}
+\item\contentsline{section}{{\bf Qua\-Zip\-File\-Info64} \\*Information about a file inside archive (with zip64 support) }{\pageref{structQuaZipFileInfo64}}{}
+\item\contentsline{section}{{\bf Qua\-Zip\-File\-Private} \\*The implementation class for \doxyref{Qua\-Zip}{p.}{classQuaZip} }{\pageref{classQuaZipFilePrivate}}{}
+\item\contentsline{section}{{\bf Qua\-Zip\-New\-Info} \\*Information about a file to be created }{\pageref{structQuaZipNewInfo}}{}
+\item\contentsline{section}{{\bf Qua\-Zip\-Private} \\*All the internal stuff for the \doxyref{Qua\-Zip}{p.}{classQuaZip} class }{\pageref{classQuaZipPrivate}}{}
+\end{DoxyCompactList}
diff --git a/3rdparty/quazip-0.7/doc/latex/classJlCompress.tex b/3rdparty/quazip-0.7/doc/latex/classJlCompress.tex
new file mode 100644
index 0000000..96da5bc
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classJlCompress.tex
@@ -0,0 +1,274 @@
+\section{Jl\-Compress Class Reference}
+\label{classJlCompress}\index{Jl\-Compress@{Jl\-Compress}}
+
+
+Utility class for typical operations.  
+
+
+
+
+{\ttfamily \#include $<$Jl\-Compress.\-h$>$}
+
+\subsection*{Static Public Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+static bool {\bf compress\-File} (Q\-String file\-Compressed, Q\-String file)
+\begin{DoxyCompactList}\small\item\em Compress a single file. \end{DoxyCompactList}\item 
+static bool {\bf compress\-Files} (Q\-String file\-Compressed, Q\-String\-List files)
+\begin{DoxyCompactList}\small\item\em Compress a list of files. \end{DoxyCompactList}\item 
+static bool {\bf compress\-Dir} (Q\-String file\-Compressed, Q\-String dir=Q\-String(), bool recursive=true)
+\begin{DoxyCompactList}\small\item\em Compress a whole directory. \end{DoxyCompactList}\item 
+static Q\-String {\bf extract\-File} (Q\-String file\-Compressed, Q\-String file\-Name, Q\-String file\-Dest=Q\-String())
+\begin{DoxyCompactList}\small\item\em Extract a single file. \end{DoxyCompactList}\item 
+static Q\-String\-List {\bf extract\-Files} (Q\-String file\-Compressed, Q\-String\-List files, Q\-String dir=Q\-String())
+\begin{DoxyCompactList}\small\item\em Extract a list of files. \end{DoxyCompactList}\item 
+static Q\-String\-List {\bf extract\-Dir} (Q\-String file\-Compressed, Q\-String dir=Q\-String())
+\begin{DoxyCompactList}\small\item\em Extract a whole archive. \end{DoxyCompactList}\item 
+static Q\-String\-List {\bf get\-File\-List} (Q\-String file\-Compressed)
+\begin{DoxyCompactList}\small\item\em Get the file list. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Utility class for typical operations. 
+
+This class contains a number of useful static functions to perform simple operations, such as mass Z\-I\-P packing or extraction. 
+
+\subsection{Member Function Documentation}
+\index{Jl\-Compress@{Jl\-Compress}!compress\-File@{compress\-File}}
+\index{compress\-File@{compress\-File}!JlCompress@{Jl\-Compress}}
+\subsubsection[{compress\-File}]{\setlength{\rightskip}{0pt plus 5cm}bool Jl\-Compress\-::compress\-File (
+\begin{DoxyParamCaption}
+\item[{Q\-String}]{file\-Compressed, }
+\item[{Q\-String}]{file}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [static]}}\label{classJlCompress_a4a4de9c62ecf161bb658d4d80495ea97}
+
+
+Compress a single file. 
+
+
+\begin{DoxyParams}{Parameters}
+{\em file\-Compressed} & The name of the archive. \\
+\hline
+{\em file} & The file to compress. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+true if success, false otherwise.
+\end{DoxyReturn}
+O\-K Comprime il file file\-Name nel file file\-Compressed. Se la funzione fallisce restituisce false e cancella il file che si e tentato di creare.
+
+La funzione fallisce se\-:
+\begin{DoxyItemize}
+\item non si riesce ad aprire l'oggetto zip;
+\item la compressione del file fallisce;
+\item non si riesce a chiudere l'oggetto zip; 
+\end{DoxyItemize}
+
+References Qua\-Zip\-::close(), Qua\-Zip\-::get\-Zip\-Error(), Qua\-Zip\-::md\-Create, and Qua\-Zip\-::open().
+
+\index{Jl\-Compress@{Jl\-Compress}!compress\-Files@{compress\-Files}}
+\index{compress\-Files@{compress\-Files}!JlCompress@{Jl\-Compress}}
+\subsubsection[{compress\-Files}]{\setlength{\rightskip}{0pt plus 5cm}bool Jl\-Compress\-::compress\-Files (
+\begin{DoxyParamCaption}
+\item[{Q\-String}]{file\-Compressed, }
+\item[{Q\-String\-List}]{files}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [static]}}\label{classJlCompress_a9cdb92d29a94c6b13a718a3249685846}
+
+
+Compress a list of files. 
+
+
+\begin{DoxyParams}{Parameters}
+{\em file\-Compressed} & The name of the archive. \\
+\hline
+{\em files} & The file list to compress. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+true if success, false otherwise.
+\end{DoxyReturn}
+O\-K Comprime i file specificati in files nel file file\-Compressed. Se la funzione fallisce restituisce false e cancella il file che si e tentato di creare.
+
+La funzione fallisce se\-:
+\begin{DoxyItemize}
+\item non si riesce ad aprire l'oggetto zip;
+\item la compressione di un file fallisce;
+\item non si riesce a chiudere l'oggetto zip; 
+\end{DoxyItemize}
+
+References Qua\-Zip\-::close(), Qua\-Zip\-::get\-Zip\-Error(), Qua\-Zip\-::md\-Create, and Qua\-Zip\-::open().
+
+\index{Jl\-Compress@{Jl\-Compress}!compress\-Dir@{compress\-Dir}}
+\index{compress\-Dir@{compress\-Dir}!JlCompress@{Jl\-Compress}}
+\subsubsection[{compress\-Dir}]{\setlength{\rightskip}{0pt plus 5cm}bool Jl\-Compress\-::compress\-Dir (
+\begin{DoxyParamCaption}
+\item[{Q\-String}]{file\-Compressed, }
+\item[{Q\-String}]{dir = {\ttfamily QString()}, }
+\item[{bool}]{recursive = {\ttfamily true}}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [static]}}\label{classJlCompress_a8708eafcadc5c192a1d492e784cfc98f}
+
+
+Compress a whole directory. 
+
+
+\begin{DoxyParams}{Parameters}
+{\em file\-Compressed} & The name of the archive. \\
+\hline
+{\em dir} & The directory to compress. \\
+\hline
+{\em recursive} & Whether to pack the subdirectories as well, or just regular files. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+true if success, false otherwise.
+\end{DoxyReturn}
+O\-K Comprime la cartella dir nel file file\-Compressed, se recursive e true allora comprime anche le sotto cartelle. Se la funzione fallisce restituisce false e cancella il file che si e tentato di creare.
+
+La funzione fallisce se\-:
+\begin{DoxyItemize}
+\item non si riesce ad aprire l'oggetto zip;
+\item la compressione di un file fallisce;
+\item non si riesce a chiudere l'oggetto zip; 
+\end{DoxyItemize}
+
+References Qua\-Zip\-::close(), Qua\-Zip\-::get\-Zip\-Error(), Qua\-Zip\-::md\-Create, and Qua\-Zip\-::open().
+
+\index{Jl\-Compress@{Jl\-Compress}!extract\-File@{extract\-File}}
+\index{extract\-File@{extract\-File}!JlCompress@{Jl\-Compress}}
+\subsubsection[{extract\-File}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String Jl\-Compress\-::extract\-File (
+\begin{DoxyParamCaption}
+\item[{Q\-String}]{file\-Compressed, }
+\item[{Q\-String}]{file\-Name, }
+\item[{Q\-String}]{file\-Dest = {\ttfamily QString()}}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [static]}}\label{classJlCompress_a38c0d58bfe3bbbcb3cf4e98d126633a3}
+
+
+Extract a single file. 
+
+
+\begin{DoxyParams}{Parameters}
+{\em file\-Compressed} & The name of the archive. \\
+\hline
+{\em file\-Name} & The file to extract. \\
+\hline
+{\em file\-Dest} & The destination file, assumed to be identical to {\itshape file} if left empty. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The list of the full paths of the files extracted, empty on failure.
+\end{DoxyReturn}
+O\-K Estrae il file file\-Name, contenuto nel file file\-Compressed, con il nome file\-Dest. Se file\-Dest = \char`\"{}\char`\"{} allora il file viene estratto con lo stesso nome con cui e stato compresso. Se la funzione fallisce cancella il file che si e tentato di estrarre. Restituisce il nome assoluto del file estratto.
+
+La funzione fallisce se\-:
+\begin{DoxyItemize}
+\item non si riesce ad aprire l'oggetto zip;
+\item l'estrazione del file fallisce;
+\item non si riesce a chiudere l'oggetto zip; 
+\end{DoxyItemize}
+
+References Qua\-Zip\-::close(), Qua\-Zip\-::get\-Zip\-Error(), Qua\-Zip\-::md\-Unzip, and Qua\-Zip\-::open().
+
+\index{Jl\-Compress@{Jl\-Compress}!extract\-Files@{extract\-Files}}
+\index{extract\-Files@{extract\-Files}!JlCompress@{Jl\-Compress}}
+\subsubsection[{extract\-Files}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String\-List Jl\-Compress\-::extract\-Files (
+\begin{DoxyParamCaption}
+\item[{Q\-String}]{file\-Compressed, }
+\item[{Q\-String\-List}]{files, }
+\item[{Q\-String}]{dir = {\ttfamily QString()}}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [static]}}\label{classJlCompress_a309e9ee366719a4d8aa28f837fab73ae}
+
+
+Extract a list of files. 
+
+
+\begin{DoxyParams}{Parameters}
+{\em file\-Compressed} & The name of the archive. \\
+\hline
+{\em files} & The file list to extract. \\
+\hline
+{\em dir} & The directory to put the files to, the current directory if left empty. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The list of the full paths of the files extracted, empty on failure.
+\end{DoxyReturn}
+O\-K Estrae i file specificati in files, contenuti nel file file\-Compressed, nella cartella dir. La struttura a cartelle del file compresso viene rispettata. Se dir = \char`\"{}\char`\"{} allora il file viene estratto nella cartella corrente. Se la funzione fallisce cancella i file che si e tentato di estrarre. Restituisce i nomi assoluti dei file estratti.
+
+La funzione fallisce se\-:
+\begin{DoxyItemize}
+\item non si riesce ad aprire l'oggetto zip;
+\item l'estrazione di un file fallisce;
+\item non si riesce a chiudere l'oggetto zip; 
+\end{DoxyItemize}
+
+References Qua\-Zip\-::close(), Qua\-Zip\-::get\-Zip\-Error(), Qua\-Zip\-::md\-Unzip, and Qua\-Zip\-::open().
+
+\index{Jl\-Compress@{Jl\-Compress}!extract\-Dir@{extract\-Dir}}
+\index{extract\-Dir@{extract\-Dir}!JlCompress@{Jl\-Compress}}
+\subsubsection[{extract\-Dir}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String\-List Jl\-Compress\-::extract\-Dir (
+\begin{DoxyParamCaption}
+\item[{Q\-String}]{file\-Compressed, }
+\item[{Q\-String}]{dir = {\ttfamily QString()}}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [static]}}\label{classJlCompress_a365a153baa4c11812d93cbca60b6a293}
+
+
+Extract a whole archive. 
+
+
+\begin{DoxyParams}{Parameters}
+{\em file\-Compressed} & The name of the archive. \\
+\hline
+{\em dir} & The directory to extract to, the current directory if left empty. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The list of the full paths of the files extracted, empty on failure.
+\end{DoxyReturn}
+O\-K Estrae il file file\-Compressed nella cartella dir. Se dir = \char`\"{}\char`\"{} allora il file viene estratto nella cartella corrente. Se la funzione fallisce cancella i file che si e tentato di estrarre. Restituisce i nomi assoluti dei file estratti.
+
+La funzione fallisce se\-:
+\begin{DoxyItemize}
+\item non si riesce ad aprire l'oggetto zip;
+\item la compressione di un file fallisce;
+\item non si riesce a chiudere l'oggetto zip; 
+\end{DoxyItemize}
+
+References Qua\-Zip\-::close(), Qua\-Zip\-::get\-Current\-File\-Name(), Qua\-Zip\-::get\-Zip\-Error(), Qua\-Zip\-::go\-To\-First\-File(), Qua\-Zip\-::go\-To\-Next\-File(), Qua\-Zip\-::md\-Unzip, and Qua\-Zip\-::open().
+
+\index{Jl\-Compress@{Jl\-Compress}!get\-File\-List@{get\-File\-List}}
+\index{get\-File\-List@{get\-File\-List}!JlCompress@{Jl\-Compress}}
+\subsubsection[{get\-File\-List}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String\-List Jl\-Compress\-::get\-File\-List (
+\begin{DoxyParamCaption}
+\item[{Q\-String}]{file\-Compressed}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [static]}}\label{classJlCompress_ab42422be913f817d7e04c1b1cd5d0156}
+
+
+Get the file list. 
+
+\begin{DoxyReturn}{Returns}
+The list of the files in the archive, or, more precisely, the list of the entries, including both files and directories if they are present separately.
+\end{DoxyReturn}
+O\-K Restituisce la lista dei file resenti nel file compresso file\-Compressed. Se la funzione fallisce, restituisce un elenco vuoto.
+
+La funzione fallisce se\-:
+\begin{DoxyItemize}
+\item non si riesce ad aprire l'oggetto zip;
+\item la richiesta di informazioni di un file fallisce;
+\item non si riesce a chiudere l'oggetto zip; 
+\end{DoxyItemize}
+
+References Qua\-Zip\-::close(), Qua\-Zip\-::get\-Current\-File\-Info(), Qua\-Zip\-::get\-Zip\-Error(), Qua\-Zip\-::go\-To\-First\-File(), Qua\-Zip\-::go\-To\-Next\-File(), Qua\-Zip\-::md\-Unzip, Qua\-Zip\-File\-Info64\-::name, and Qua\-Zip\-::open().
+
+
+
+The documentation for this class was generated from the following files\-:\begin{DoxyCompactItemize}
+\item 
+quazip/Jl\-Compress.\-h\item 
+quazip/Jl\-Compress.\-cpp\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaAdler32.tex b/3rdparty/quazip-0.7/doc/latex/classQuaAdler32.tex
new file mode 100644
index 0000000..102ea67
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaAdler32.tex
@@ -0,0 +1,108 @@
+\section{Qua\-Adler32 Class Reference}
+\label{classQuaAdler32}\index{Qua\-Adler32@{Qua\-Adler32}}
+
+
+Adler32 checksum.  
+
+
+
+
+{\ttfamily \#include $<$quazip/quaadler32.\-h$>$}
+
+
+
+Inheritance diagram for Qua\-Adler32\-:
+\nopagebreak
+\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[width=136pt]{classQuaAdler32__inherit__graph}
+\end{center}
+\end{figure}
+
+
+Collaboration diagram for Qua\-Adler32\-:
+\nopagebreak
+\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[width=136pt]{classQuaAdler32__coll__graph}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+quint32 {\bf calculate} (const Q\-Byte\-Array \&data)
+\begin{DoxyCompactList}\small\item\em Calculates the checksum for data. \end{DoxyCompactList}\item 
+void {\bf reset} ()\label{classQuaAdler32_a2fe6ac9eb289bafda6a9fd20e6472ab5}
+
+\begin{DoxyCompactList}\small\item\em Resets the calculation on a checksun for a stream. \end{DoxyCompactList}\item 
+void {\bf update} (const Q\-Byte\-Array \&buf)
+\begin{DoxyCompactList}\small\item\em Updates the calculated checksum for the stream. \end{DoxyCompactList}\item 
+quint32 {\bf value} ()
+\begin{DoxyCompactList}\small\item\em Value of the checksum calculated for the stream passed throw \doxyref{update()}{p.}{classQuaAdler32_aba24f7b16aa0cdc26f81a9ad687fc653}. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Adler32 checksum. 
+
+This class wrappers the adler32 function with the \doxyref{Qua\-Checksum32}{p.}{classQuaChecksum32} interface. See \doxyref{Qua\-Checksum32}{p.}{classQuaChecksum32} for more info. 
+
+\subsection{Member Function Documentation}
+\index{Qua\-Adler32@{Qua\-Adler32}!calculate@{calculate}}
+\index{calculate@{calculate}!QuaAdler32@{Qua\-Adler32}}
+\subsubsection[{calculate}]{\setlength{\rightskip}{0pt plus 5cm}quint32 Qua\-Adler32\-::calculate (
+\begin{DoxyParamCaption}
+\item[{const Q\-Byte\-Array \&}]{data}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaAdler32_a350e84fd000ebfa3c33503336a7b21bb}
+
+
+Calculates the checksum for data. 
+
+{\itshape data} source data \begin{DoxyReturn}{Returns}
+data checksum
+\end{DoxyReturn}
+This function has no efect on the value returned by \doxyref{value()}{p.}{classQuaAdler32_a2022e1db95c23cef220b335e44d74fb1}. 
+
+Implements {\bf Qua\-Checksum32} \doxyref{}{p.}{classQuaChecksum32_a14d800fcfd55b2ae11ef07d3924fe0b1}.
+
+\index{Qua\-Adler32@{Qua\-Adler32}!update@{update}}
+\index{update@{update}!QuaAdler32@{Qua\-Adler32}}
+\subsubsection[{update}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Adler32\-::update (
+\begin{DoxyParamCaption}
+\item[{const Q\-Byte\-Array \&}]{buf}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaAdler32_aba24f7b16aa0cdc26f81a9ad687fc653}
+
+
+Updates the calculated checksum for the stream. 
+
+{\itshape buf} next portion of data from the stream 
+
+Implements {\bf Qua\-Checksum32} \doxyref{}{p.}{classQuaChecksum32_a63a6ed3171f9243214d307da67557f7e}.
+
+\index{Qua\-Adler32@{Qua\-Adler32}!value@{value}}
+\index{value@{value}!QuaAdler32@{Qua\-Adler32}}
+\subsubsection[{value}]{\setlength{\rightskip}{0pt plus 5cm}quint32 Qua\-Adler32\-::value (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaAdler32_a2022e1db95c23cef220b335e44d74fb1}
+
+
+Value of the checksum calculated for the stream passed throw \doxyref{update()}{p.}{classQuaAdler32_aba24f7b16aa0cdc26f81a9ad687fc653}. 
+
+\begin{DoxyReturn}{Returns}
+checksum 
+\end{DoxyReturn}
+
+
+Implements {\bf Qua\-Checksum32} \doxyref{}{p.}{classQuaChecksum32_afd836e7534194fce08356be6a8336da7}.
+
+
+
+The documentation for this class was generated from the following files\-:\begin{DoxyCompactItemize}
+\item 
+quazip/quaadler32.\-h\item 
+quazip/quaadler32.\-cpp\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaAdler32__coll__graph.eps b/3rdparty/quazip-0.7/doc/latex/classQuaAdler32__coll__graph.eps
new file mode 100644
index 0000000..b644e1e
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaAdler32__coll__graph.eps
@@ -0,0 +1,264 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.36.0 (20140111.2315)
+%%Title: QuaAdler32
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 136 120
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 100 84 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% Node1
+gsave
+0 0 0.74902 nodecolor
+newpath 12 .5 moveto
+12 19.5 lineto
+80 19.5 lineto
+80 .5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 12 .5 moveto
+12 19.5 lineto
+80 19.5 lineto
+80 .5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+20 7.5 moveto 52 (QuaAdler32) alignedtext
+grestore
+% Node2
+gsave
+[ /Rect [ 0 56 92 76 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI ($classQuaChecksum32.html) >>
+  /Subtype /Link
+/ANN pdfmark
+0 0 1 nodecolor
+newpath 0 56.5 moveto
+0 75.5 lineto
+92 75.5 lineto
+92 56.5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 56.5 moveto
+0 75.5 lineto
+92 75.5 lineto
+92 56.5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+8 63.5 moveto 76 (QuaChecksum32) alignedtext
+grestore
+% Node2->Node1
+gsave
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 46 45.8 moveto
+46 36.91 46 26.78 46 19.75 curveto
+stroke
+0.66667 0.77647 0.43922 edgecolor
+newpath 42.5 46.08 moveto
+46 56.08 lineto
+49.5 46.08 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 42.5 46.08 moveto
+46 56.08 lineto
+49.5 46.08 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 136 120
+end
+restore
+%%EOF
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaAdler32__coll__graph.md5 b/3rdparty/quazip-0.7/doc/latex/classQuaAdler32__coll__graph.md5
new file mode 100644
index 0000000..6f8ebd3
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaAdler32__coll__graph.md5
@@ -0,0 +1 @@
+1da76ae022494627ad649d8af035c80a
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaAdler32__inherit__graph.eps b/3rdparty/quazip-0.7/doc/latex/classQuaAdler32__inherit__graph.eps
new file mode 100644
index 0000000..b644e1e
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaAdler32__inherit__graph.eps
@@ -0,0 +1,264 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.36.0 (20140111.2315)
+%%Title: QuaAdler32
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 136 120
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 100 84 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% Node1
+gsave
+0 0 0.74902 nodecolor
+newpath 12 .5 moveto
+12 19.5 lineto
+80 19.5 lineto
+80 .5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 12 .5 moveto
+12 19.5 lineto
+80 19.5 lineto
+80 .5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+20 7.5 moveto 52 (QuaAdler32) alignedtext
+grestore
+% Node2
+gsave
+[ /Rect [ 0 56 92 76 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI ($classQuaChecksum32.html) >>
+  /Subtype /Link
+/ANN pdfmark
+0 0 1 nodecolor
+newpath 0 56.5 moveto
+0 75.5 lineto
+92 75.5 lineto
+92 56.5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 56.5 moveto
+0 75.5 lineto
+92 75.5 lineto
+92 56.5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+8 63.5 moveto 76 (QuaChecksum32) alignedtext
+grestore
+% Node2->Node1
+gsave
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 46 45.8 moveto
+46 36.91 46 26.78 46 19.75 curveto
+stroke
+0.66667 0.77647 0.43922 edgecolor
+newpath 42.5 46.08 moveto
+46 56.08 lineto
+49.5 46.08 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 42.5 46.08 moveto
+46 56.08 lineto
+49.5 46.08 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 136 120
+end
+restore
+%%EOF
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaAdler32__inherit__graph.md5 b/3rdparty/quazip-0.7/doc/latex/classQuaAdler32__inherit__graph.md5
new file mode 100644
index 0000000..6f8ebd3
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaAdler32__inherit__graph.md5
@@ -0,0 +1 @@
+1da76ae022494627ad649d8af035c80a
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaChecksum32.tex b/3rdparty/quazip-0.7/doc/latex/classQuaChecksum32.tex
new file mode 100644
index 0000000..f1baee9
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaChecksum32.tex
@@ -0,0 +1,113 @@
+\section{Qua\-Checksum32 Class Reference}
+\label{classQuaChecksum32}\index{Qua\-Checksum32@{Qua\-Checksum32}}
+
+
+Checksum interface.  
+
+
+
+
+{\ttfamily \#include $<$quazip/quachecksum32.\-h$>$}
+
+
+
+Inheritance diagram for Qua\-Checksum32\-:
+\nopagebreak
+\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[width=191pt]{classQuaChecksum32__inherit__graph}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+virtual quint32 {\bf calculate} (const Q\-Byte\-Array \&data)=0
+\begin{DoxyCompactList}\small\item\em Calculates the checksum for data. \end{DoxyCompactList}\item 
+virtual void {\bf reset} ()=0\label{classQuaChecksum32_ad3f5db3c76b00069db9bda333cb49d57}
+
+\begin{DoxyCompactList}\small\item\em Resets the calculation on a checksun for a stream. \end{DoxyCompactList}\item 
+virtual void {\bf update} (const Q\-Byte\-Array \&buf)=0
+\begin{DoxyCompactList}\small\item\em Updates the calculated checksum for the stream. \end{DoxyCompactList}\item 
+virtual quint32 {\bf value} ()=0
+\begin{DoxyCompactList}\small\item\em Value of the checksum calculated for the stream passed throw \doxyref{update()}{p.}{classQuaChecksum32_a63a6ed3171f9243214d307da67557f7e}. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Checksum interface. 
+
+This is an interface for 32 bit checksums. Classes implementing this interface can calcunate a certin checksum in a single step\-: 
+\begin{DoxyCode}
+QChecksum32 *crc32 = \textcolor{keyword}{new} QuaCrc32(); 
+rasoult = crc32->calculate(data);
+\end{DoxyCode}
+ or by streaming the data\-: 
+\begin{DoxyCode}
+QChecksum32 *crc32 = \textcolor{keyword}{new} QuaCrc32(); 
+\textcolor{keywordflow}{while}(!fileA.atEnd())
+    crc32->update(fileA.read(bufSize));
+resoultA = crc32->value();
+crc32->reset();
+\textcolor{keywordflow}{while}(!fileB.atEnd())
+    crc32->update(fileB.read(bufSize));
+resoultB = crc32->value();
+\end{DoxyCode}
+ 
+
+\subsection{Member Function Documentation}
+\index{Qua\-Checksum32@{Qua\-Checksum32}!calculate@{calculate}}
+\index{calculate@{calculate}!QuaChecksum32@{Qua\-Checksum32}}
+\subsubsection[{calculate}]{\setlength{\rightskip}{0pt plus 5cm}virtual quint32 Qua\-Checksum32\-::calculate (
+\begin{DoxyParamCaption}
+\item[{const Q\-Byte\-Array \&}]{data}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [pure virtual]}}\label{classQuaChecksum32_a14d800fcfd55b2ae11ef07d3924fe0b1}
+
+
+Calculates the checksum for data. 
+
+{\itshape data} source data \begin{DoxyReturn}{Returns}
+data checksum
+\end{DoxyReturn}
+This function has no efect on the value returned by \doxyref{value()}{p.}{classQuaChecksum32_afd836e7534194fce08356be6a8336da7}. 
+
+Implemented in {\bf Qua\-Adler32} \doxyref{}{p.}{classQuaAdler32_a350e84fd000ebfa3c33503336a7b21bb}, and {\bf Qua\-Crc32} \doxyref{}{p.}{classQuaCrc32_aaf6fdf6e36e55c97bf9eab6ec65ecb9e}.
+
+\index{Qua\-Checksum32@{Qua\-Checksum32}!update@{update}}
+\index{update@{update}!QuaChecksum32@{Qua\-Checksum32}}
+\subsubsection[{update}]{\setlength{\rightskip}{0pt plus 5cm}virtual void Qua\-Checksum32\-::update (
+\begin{DoxyParamCaption}
+\item[{const Q\-Byte\-Array \&}]{buf}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [pure virtual]}}\label{classQuaChecksum32_a63a6ed3171f9243214d307da67557f7e}
+
+
+Updates the calculated checksum for the stream. 
+
+{\itshape buf} next portion of data from the stream 
+
+Implemented in {\bf Qua\-Adler32} \doxyref{}{p.}{classQuaAdler32_aba24f7b16aa0cdc26f81a9ad687fc653}, and {\bf Qua\-Crc32} \doxyref{}{p.}{classQuaCrc32_a5015d80e04afe6e6d094155b7e99888e}.
+
+\index{Qua\-Checksum32@{Qua\-Checksum32}!value@{value}}
+\index{value@{value}!QuaChecksum32@{Qua\-Checksum32}}
+\subsubsection[{value}]{\setlength{\rightskip}{0pt plus 5cm}virtual quint32 Qua\-Checksum32\-::value (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [pure virtual]}}\label{classQuaChecksum32_afd836e7534194fce08356be6a8336da7}
+
+
+Value of the checksum calculated for the stream passed throw \doxyref{update()}{p.}{classQuaChecksum32_a63a6ed3171f9243214d307da67557f7e}. 
+
+\begin{DoxyReturn}{Returns}
+checksum 
+\end{DoxyReturn}
+
+
+Implemented in {\bf Qua\-Adler32} \doxyref{}{p.}{classQuaAdler32_a2022e1db95c23cef220b335e44d74fb1}, and {\bf Qua\-Crc32} \doxyref{}{p.}{classQuaCrc32_a957ce46a53862f75c89d6a3ac4f73389}.
+
+
+
+The documentation for this class was generated from the following file\-:\begin{DoxyCompactItemize}
+\item 
+quazip/quachecksum32.\-h\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaChecksum32__inherit__graph.eps b/3rdparty/quazip-0.7/doc/latex/classQuaChecksum32__inherit__graph.eps
new file mode 100644
index 0000000..45d768f
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaChecksum32__inherit__graph.eps
@@ -0,0 +1,310 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.36.0 (20140111.2315)
+%%Title: QuaChecksum32
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 191 120
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 155 84 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% Node1
+gsave
+0 0 0.74902 nodecolor
+newpath 29 56.5 moveto
+29 75.5 lineto
+121 75.5 lineto
+121 56.5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 29 56.5 moveto
+29 75.5 lineto
+121 75.5 lineto
+121 56.5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+37 63.5 moveto 76 (QuaChecksum32) alignedtext
+grestore
+% Node2
+gsave
+[ /Rect [ 0 0 68 20 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI ($classQuaAdler32.html) >>
+  /Subtype /Link
+/ANN pdfmark
+0 0 1 nodecolor
+newpath 0 .5 moveto
+0 19.5 lineto
+68 19.5 lineto
+68 .5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 .5 moveto
+0 19.5 lineto
+68 19.5 lineto
+68 .5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+8 7.5 moveto 52 (QuaAdler32) alignedtext
+grestore
+% Node1->Node2
+gsave
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 61.98 47.86 moveto
+54.88 38.5 46.4 27.33 40.64 19.75 curveto
+stroke
+0.66667 0.77647 0.43922 edgecolor
+newpath 59.39 50.24 moveto
+68.23 56.08 lineto
+64.97 46 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 59.39 50.24 moveto
+68.23 56.08 lineto
+64.97 46 lineto
+closepath stroke
+grestore
+% Node3
+gsave
+[ /Rect [ 86.5 0 147 20 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI ($classQuaCrc32.html) >>
+  /Subtype /Link
+/ANN pdfmark
+0 0 1 nodecolor
+newpath 86.5 .5 moveto
+86.5 19.5 lineto
+147.5 19.5 lineto
+147.5 .5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 86.5 .5 moveto
+86.5 19.5 lineto
+147.5 19.5 lineto
+147.5 .5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+94.5 7.5 moveto 45 (QuaCrc32) alignedtext
+grestore
+% Node1->Node3
+gsave
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 88.11 48.14 moveto
+95.43 38.74 104.24 27.4 110.19 19.75 curveto
+stroke
+0.66667 0.77647 0.43922 edgecolor
+newpath 85.31 46.04 moveto
+81.94 56.08 lineto
+90.84 50.34 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 85.31 46.04 moveto
+81.94 56.08 lineto
+90.84 50.34 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 191 120
+end
+restore
+%%EOF
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaChecksum32__inherit__graph.md5 b/3rdparty/quazip-0.7/doc/latex/classQuaChecksum32__inherit__graph.md5
new file mode 100644
index 0000000..d5e37a6
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaChecksum32__inherit__graph.md5
@@ -0,0 +1 @@
+3650c77c47645e50e4f8afff14cdd718
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaCrc32.tex b/3rdparty/quazip-0.7/doc/latex/classQuaCrc32.tex
new file mode 100644
index 0000000..1fffac8
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaCrc32.tex
@@ -0,0 +1,108 @@
+\section{Qua\-Crc32 Class Reference}
+\label{classQuaCrc32}\index{Qua\-Crc32@{Qua\-Crc32}}
+
+
+C\-R\-C32 checksum.  
+
+
+
+
+{\ttfamily \#include $<$quazip/quacrc32.\-h$>$}
+
+
+
+Inheritance diagram for Qua\-Crc32\-:
+\nopagebreak
+\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[width=136pt]{classQuaCrc32__inherit__graph}
+\end{center}
+\end{figure}
+
+
+Collaboration diagram for Qua\-Crc32\-:
+\nopagebreak
+\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[width=136pt]{classQuaCrc32__coll__graph}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+quint32 {\bf calculate} (const Q\-Byte\-Array \&data)
+\begin{DoxyCompactList}\small\item\em Calculates the checksum for data. \end{DoxyCompactList}\item 
+void {\bf reset} ()\label{classQuaCrc32_a3fe7ce6cb73512c963ffaabfbbc66363}
+
+\begin{DoxyCompactList}\small\item\em Resets the calculation on a checksun for a stream. \end{DoxyCompactList}\item 
+void {\bf update} (const Q\-Byte\-Array \&buf)
+\begin{DoxyCompactList}\small\item\em Updates the calculated checksum for the stream. \end{DoxyCompactList}\item 
+quint32 {\bf value} ()
+\begin{DoxyCompactList}\small\item\em Value of the checksum calculated for the stream passed throw \doxyref{update()}{p.}{classQuaCrc32_a5015d80e04afe6e6d094155b7e99888e}. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+C\-R\-C32 checksum. 
+
+This class wrappers the crc32 function with the \doxyref{Qua\-Checksum32}{p.}{classQuaChecksum32} interface. See \doxyref{Qua\-Checksum32}{p.}{classQuaChecksum32} for more info. 
+
+\subsection{Member Function Documentation}
+\index{Qua\-Crc32@{Qua\-Crc32}!calculate@{calculate}}
+\index{calculate@{calculate}!QuaCrc32@{Qua\-Crc32}}
+\subsubsection[{calculate}]{\setlength{\rightskip}{0pt plus 5cm}quint32 Qua\-Crc32\-::calculate (
+\begin{DoxyParamCaption}
+\item[{const Q\-Byte\-Array \&}]{data}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaCrc32_aaf6fdf6e36e55c97bf9eab6ec65ecb9e}
+
+
+Calculates the checksum for data. 
+
+{\itshape data} source data \begin{DoxyReturn}{Returns}
+data checksum
+\end{DoxyReturn}
+This function has no efect on the value returned by \doxyref{value()}{p.}{classQuaCrc32_a957ce46a53862f75c89d6a3ac4f73389}. 
+
+Implements {\bf Qua\-Checksum32} \doxyref{}{p.}{classQuaChecksum32_a14d800fcfd55b2ae11ef07d3924fe0b1}.
+
+\index{Qua\-Crc32@{Qua\-Crc32}!update@{update}}
+\index{update@{update}!QuaCrc32@{Qua\-Crc32}}
+\subsubsection[{update}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Crc32\-::update (
+\begin{DoxyParamCaption}
+\item[{const Q\-Byte\-Array \&}]{buf}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaCrc32_a5015d80e04afe6e6d094155b7e99888e}
+
+
+Updates the calculated checksum for the stream. 
+
+{\itshape buf} next portion of data from the stream 
+
+Implements {\bf Qua\-Checksum32} \doxyref{}{p.}{classQuaChecksum32_a63a6ed3171f9243214d307da67557f7e}.
+
+\index{Qua\-Crc32@{Qua\-Crc32}!value@{value}}
+\index{value@{value}!QuaCrc32@{Qua\-Crc32}}
+\subsubsection[{value}]{\setlength{\rightskip}{0pt plus 5cm}quint32 Qua\-Crc32\-::value (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaCrc32_a957ce46a53862f75c89d6a3ac4f73389}
+
+
+Value of the checksum calculated for the stream passed throw \doxyref{update()}{p.}{classQuaCrc32_a5015d80e04afe6e6d094155b7e99888e}. 
+
+\begin{DoxyReturn}{Returns}
+checksum 
+\end{DoxyReturn}
+
+
+Implements {\bf Qua\-Checksum32} \doxyref{}{p.}{classQuaChecksum32_afd836e7534194fce08356be6a8336da7}.
+
+
+
+The documentation for this class was generated from the following files\-:\begin{DoxyCompactItemize}
+\item 
+quazip/quacrc32.\-h\item 
+quazip/quacrc32.\-cpp\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaCrc32__coll__graph.eps b/3rdparty/quazip-0.7/doc/latex/classQuaCrc32__coll__graph.eps
new file mode 100644
index 0000000..1f5b914
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaCrc32__coll__graph.eps
@@ -0,0 +1,264 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.36.0 (20140111.2315)
+%%Title: QuaCrc32
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 136 120
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 100 84 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% Node1
+gsave
+0 0 0.74902 nodecolor
+newpath 15.5 .5 moveto
+15.5 19.5 lineto
+76.5 19.5 lineto
+76.5 .5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 15.5 .5 moveto
+15.5 19.5 lineto
+76.5 19.5 lineto
+76.5 .5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+23.5 7.5 moveto 45 (QuaCrc32) alignedtext
+grestore
+% Node2
+gsave
+[ /Rect [ 0 56 92 76 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI ($classQuaChecksum32.html) >>
+  /Subtype /Link
+/ANN pdfmark
+0 0 1 nodecolor
+newpath 0 56.5 moveto
+0 75.5 lineto
+92 75.5 lineto
+92 56.5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 56.5 moveto
+0 75.5 lineto
+92 75.5 lineto
+92 56.5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+8 63.5 moveto 76 (QuaChecksum32) alignedtext
+grestore
+% Node2->Node1
+gsave
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 46 45.8 moveto
+46 36.91 46 26.78 46 19.75 curveto
+stroke
+0.66667 0.77647 0.43922 edgecolor
+newpath 42.5 46.08 moveto
+46 56.08 lineto
+49.5 46.08 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 42.5 46.08 moveto
+46 56.08 lineto
+49.5 46.08 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 136 120
+end
+restore
+%%EOF
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaCrc32__coll__graph.md5 b/3rdparty/quazip-0.7/doc/latex/classQuaCrc32__coll__graph.md5
new file mode 100644
index 0000000..4551902
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaCrc32__coll__graph.md5
@@ -0,0 +1 @@
+c03aa82ea7ceacd262ffb2c652464541
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaCrc32__inherit__graph.eps b/3rdparty/quazip-0.7/doc/latex/classQuaCrc32__inherit__graph.eps
new file mode 100644
index 0000000..1f5b914
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaCrc32__inherit__graph.eps
@@ -0,0 +1,264 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.36.0 (20140111.2315)
+%%Title: QuaCrc32
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 136 120
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 100 84 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% Node1
+gsave
+0 0 0.74902 nodecolor
+newpath 15.5 .5 moveto
+15.5 19.5 lineto
+76.5 19.5 lineto
+76.5 .5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 15.5 .5 moveto
+15.5 19.5 lineto
+76.5 19.5 lineto
+76.5 .5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+23.5 7.5 moveto 45 (QuaCrc32) alignedtext
+grestore
+% Node2
+gsave
+[ /Rect [ 0 56 92 76 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI ($classQuaChecksum32.html) >>
+  /Subtype /Link
+/ANN pdfmark
+0 0 1 nodecolor
+newpath 0 56.5 moveto
+0 75.5 lineto
+92 75.5 lineto
+92 56.5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 56.5 moveto
+0 75.5 lineto
+92 75.5 lineto
+92 56.5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+8 63.5 moveto 76 (QuaChecksum32) alignedtext
+grestore
+% Node2->Node1
+gsave
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 46 45.8 moveto
+46 36.91 46 26.78 46 19.75 curveto
+stroke
+0.66667 0.77647 0.43922 edgecolor
+newpath 42.5 46.08 moveto
+46 56.08 lineto
+49.5 46.08 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 42.5 46.08 moveto
+46 56.08 lineto
+49.5 46.08 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 136 120
+end
+restore
+%%EOF
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaCrc32__inherit__graph.md5 b/3rdparty/quazip-0.7/doc/latex/classQuaCrc32__inherit__graph.md5
new file mode 100644
index 0000000..4551902
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaCrc32__inherit__graph.md5
@@ -0,0 +1 @@
+c03aa82ea7ceacd262ffb2c652464541
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile.tex b/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile.tex
new file mode 100644
index 0000000..80d75cb
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile.tex
@@ -0,0 +1,189 @@
+\section{Qua\-Gzip\-File Class Reference}
+\label{classQuaGzipFile}\index{Qua\-Gzip\-File@{Qua\-Gzip\-File}}
+
+
+G\-Z\-I\-P file.  
+
+
+
+
+{\ttfamily \#include $<$quagzipfile.\-h$>$}
+
+
+
+Inheritance diagram for Qua\-Gzip\-File\-:
+\nopagebreak
+\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[width=114pt]{classQuaGzipFile__inherit__graph}
+\end{center}
+\end{figure}
+
+
+Collaboration diagram for Qua\-Gzip\-File\-:
+\nopagebreak
+\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[width=114pt]{classQuaGzipFile__coll__graph}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+{\bf Qua\-Gzip\-File} ()
+\begin{DoxyCompactList}\small\item\em Empty constructor. \end{DoxyCompactList}\item 
+{\bf Qua\-Gzip\-File} (Q\-Object $\ast$parent)
+\begin{DoxyCompactList}\small\item\em Empty constructor with a parent. \end{DoxyCompactList}\item 
+{\bf Qua\-Gzip\-File} (const Q\-String \&file\-Name, Q\-Object $\ast$parent=N\-U\-L\-L)
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item 
+virtual {\bf $\sim$\-Qua\-Gzip\-File} ()\label{classQuaGzipFile_a1200bc76f36bb2e1991e1e0467befbf2}
+
+\begin{DoxyCompactList}\small\item\em Destructor. \end{DoxyCompactList}\item 
+void {\bf set\-File\-Name} (const Q\-String \&file\-Name)\label{classQuaGzipFile_a253fbaf410a3d4ae0a719505c5525149}
+
+\begin{DoxyCompactList}\small\item\em Sets the name of the G\-Z\-I\-P file to be opened. \end{DoxyCompactList}\item 
+Q\-String {\bf get\-File\-Name} () const \label{classQuaGzipFile_a9a0954a1db1fcf2aeba0530239bce71c}
+
+\begin{DoxyCompactList}\small\item\em Returns the name of the G\-Z\-I\-P file. \end{DoxyCompactList}\item 
+virtual bool {\bf is\-Sequential} () const 
+\begin{DoxyCompactList}\small\item\em Returns true. \end{DoxyCompactList}\item 
+virtual bool {\bf open} (Q\-I\-O\-Device\-::\-Open\-Mode mode)
+\begin{DoxyCompactList}\small\item\em Opens the file. \end{DoxyCompactList}\item 
+virtual bool {\bf open} (int fd, Q\-I\-O\-Device\-::\-Open\-Mode mode)
+\begin{DoxyCompactList}\small\item\em Opens the file. \end{DoxyCompactList}\item 
+virtual bool {\bf flush} ()
+\begin{DoxyCompactList}\small\item\em Flushes data to file. \end{DoxyCompactList}\item 
+virtual void {\bf close} ()\label{classQuaGzipFile_a273205350b1235a242a1eb5cbf586434}
+
+\begin{DoxyCompactList}\small\item\em Closes the file. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\subsection*{Protected Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+virtual qint64 {\bf read\-Data} (char $\ast$data, qint64 max\-Size)\label{classQuaGzipFile_a9eab41b46367e63e0c269c42ca883d82}
+
+\begin{DoxyCompactList}\small\item\em Implementation of Q\-I\-O\-Device\-::read\-Data(). \end{DoxyCompactList}\item 
+virtual qint64 {\bf write\-Data} (const char $\ast$data, qint64 max\-Size)\label{classQuaGzipFile_a6dd09d41d8a51c96b0f2134eff37f676}
+
+\begin{DoxyCompactList}\small\item\em Implementation of Q\-I\-O\-Device\-::write\-Data(). \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+G\-Z\-I\-P file. 
+
+This class is a wrapper around G\-Z\-I\-P file access functions in zlib. Unlike \doxyref{Qua\-Zip}{p.}{classQuaZip} classes, it doesn't allow reading from a G\-Z\-I\-P file opened as Q\-I\-O\-Device, for example, if your G\-Z\-I\-P file is in Q\-Buffer. It only provides Q\-I\-O\-Device access to a G\-Z\-I\-P file contents, but the G\-Z\-I\-P file itself must be identified by its name on disk or by descriptor id. 
+
+\subsection{Constructor \& Destructor Documentation}
+\index{Qua\-Gzip\-File@{Qua\-Gzip\-File}!Qua\-Gzip\-File@{Qua\-Gzip\-File}}
+\index{Qua\-Gzip\-File@{Qua\-Gzip\-File}!QuaGzipFile@{Qua\-Gzip\-File}}
+\subsubsection[{Qua\-Gzip\-File}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Gzip\-File\-::\-Qua\-Gzip\-File (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)}\label{classQuaGzipFile_a709608207b41ca81d5beed2b34982809}
+
+
+Empty constructor. 
+
+Must call \doxyref{set\-File\-Name()}{p.}{classQuaGzipFile_a253fbaf410a3d4ae0a719505c5525149} before trying to open. \index{Qua\-Gzip\-File@{Qua\-Gzip\-File}!Qua\-Gzip\-File@{Qua\-Gzip\-File}}
+\index{Qua\-Gzip\-File@{Qua\-Gzip\-File}!QuaGzipFile@{Qua\-Gzip\-File}}
+\subsubsection[{Qua\-Gzip\-File}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Gzip\-File\-::\-Qua\-Gzip\-File (
+\begin{DoxyParamCaption}
+\item[{Q\-Object $\ast$}]{parent}
+\end{DoxyParamCaption}
+)}\label{classQuaGzipFile_a13996f5db660c4a29645f8d208b9ca6b}
+
+
+Empty constructor with a parent. 
+
+Must call \doxyref{set\-File\-Name()}{p.}{classQuaGzipFile_a253fbaf410a3d4ae0a719505c5525149} before trying to open. 
+\begin{DoxyParams}{Parameters}
+{\em parent} & The parent object, as per Q\-Object logic. \\
+\hline
+\end{DoxyParams}
+\index{Qua\-Gzip\-File@{Qua\-Gzip\-File}!Qua\-Gzip\-File@{Qua\-Gzip\-File}}
+\index{Qua\-Gzip\-File@{Qua\-Gzip\-File}!QuaGzipFile@{Qua\-Gzip\-File}}
+\subsubsection[{Qua\-Gzip\-File}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Gzip\-File\-::\-Qua\-Gzip\-File (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{file\-Name, }
+\item[{Q\-Object $\ast$}]{parent = {\ttfamily NULL}}
+\end{DoxyParamCaption}
+)}\label{classQuaGzipFile_ac7f7703bda9c6169c001aa15641bb2ea}
+
+
+Constructor. 
+
+
+\begin{DoxyParams}{Parameters}
+{\em file\-Name} & The name of the G\-Z\-I\-P file. \\
+\hline
+{\em parent} & The parent object, as per Q\-Object logic. \\
+\hline
+\end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\index{Qua\-Gzip\-File@{Qua\-Gzip\-File}!is\-Sequential@{is\-Sequential}}
+\index{is\-Sequential@{is\-Sequential}!QuaGzipFile@{Qua\-Gzip\-File}}
+\subsubsection[{is\-Sequential}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Gzip\-File\-::is\-Sequential (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaGzipFile_ae97f4e15d86c965c156df33d00318176}
+
+
+Returns true. 
+
+Strictly speaking, zlib supports seeking for G\-Z\-I\-P files, but it is poorly implemented, because there is no way to implement it properly. For reading, seeking backwards is very slow, and for writing, it is downright impossible. Therefore, \doxyref{Qua\-Gzip\-File}{p.}{classQuaGzipFile} does not support seeking at all. \index{Qua\-Gzip\-File@{Qua\-Gzip\-File}!open@{open}}
+\index{open@{open}!QuaGzipFile@{Qua\-Gzip\-File}}
+\subsubsection[{open}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Gzip\-File\-::open (
+\begin{DoxyParamCaption}
+\item[{Q\-I\-O\-Device\-::\-Open\-Mode}]{mode}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaGzipFile_a1d560babdfff3a3441d704099a5bc1e4}
+
+
+Opens the file. 
+
+
+\begin{DoxyParams}{Parameters}
+{\em mode} & Can be either Q\-I\-O\-Device\-::\-Write or Q\-I\-O\-Device\-::\-Read. Read\-Write and Append aren't supported. \\
+\hline
+\end{DoxyParams}
+\index{Qua\-Gzip\-File@{Qua\-Gzip\-File}!open@{open}}
+\index{open@{open}!QuaGzipFile@{Qua\-Gzip\-File}}
+\subsubsection[{open}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Gzip\-File\-::open (
+\begin{DoxyParamCaption}
+\item[{int}]{fd, }
+\item[{Q\-I\-O\-Device\-::\-Open\-Mode}]{mode}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaGzipFile_adf5a954bb9bfda2d33cd336a213e2549}
+
+
+Opens the file. 
+
+This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. 
+\begin{DoxyParams}{Parameters}
+{\em fd} & The file descriptor to read/write the G\-Z\-I\-P file from/to. \\
+\hline
+{\em mode} & Can be either Q\-I\-O\-Device\-::\-Write or Q\-I\-O\-Device\-::\-Read. Read\-Write and Append aren't supported. \\
+\hline
+\end{DoxyParams}
+\index{Qua\-Gzip\-File@{Qua\-Gzip\-File}!flush@{flush}}
+\index{flush@{flush}!QuaGzipFile@{Qua\-Gzip\-File}}
+\subsubsection[{flush}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Gzip\-File\-::flush (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaGzipFile_ab745f345b727c81abbc3eb5af4dca844}
+
+
+Flushes data to file. 
+
+The data is written using Z\-\_\-\-S\-Y\-N\-C\-\_\-\-F\-L\-U\-S\-H mode. Doesn't make any sense when reading. 
+
+The documentation for this class was generated from the following files\-:\begin{DoxyCompactItemize}
+\item 
+quazip/quagzipfile.\-h\item 
+quazip/quagzipfile.\-cpp\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile__coll__graph.eps b/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile__coll__graph.eps
new file mode 100644
index 0000000..3a5b392
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile__coll__graph.eps
@@ -0,0 +1,259 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.36.0 (20140111.2315)
+%%Title: QuaGzipFile
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 114 120
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 78 84 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% Node1
+gsave
+0 0 0.74902 nodecolor
+newpath -.5 .5 moveto
+-.5 19.5 lineto
+70.5 19.5 lineto
+70.5 .5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath -.5 .5 moveto
+-.5 19.5 lineto
+70.5 19.5 lineto
+70.5 .5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+7.5 7.5 moveto 55 (QuaGzipFile) alignedtext
+grestore
+% Node2
+gsave
+0 0 1 nodecolor
+newpath 2.5 56.5 moveto
+2.5 75.5 lineto
+67.5 75.5 lineto
+67.5 56.5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0.74902 nodecolor
+newpath 2.5 56.5 moveto
+2.5 75.5 lineto
+67.5 75.5 lineto
+67.5 56.5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+10.5 63.5 moveto 49 (QIODevice) alignedtext
+grestore
+% Node2->Node1
+gsave
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 35 45.8 moveto
+35 36.91 35 26.78 35 19.75 curveto
+stroke
+0.66667 0.77647 0.43922 edgecolor
+newpath 31.5 46.08 moveto
+35 56.08 lineto
+38.5 46.08 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 31.5 46.08 moveto
+35 56.08 lineto
+38.5 46.08 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 114 120
+end
+restore
+%%EOF
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile__coll__graph.md5 b/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile__coll__graph.md5
new file mode 100644
index 0000000..1e213ff
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile__coll__graph.md5
@@ -0,0 +1 @@
+b596b42a2d881ca771acc3ccdbbc37df
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile__inherit__graph.eps b/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile__inherit__graph.eps
new file mode 100644
index 0000000..3a5b392
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile__inherit__graph.eps
@@ -0,0 +1,259 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.36.0 (20140111.2315)
+%%Title: QuaGzipFile
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 114 120
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 78 84 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% Node1
+gsave
+0 0 0.74902 nodecolor
+newpath -.5 .5 moveto
+-.5 19.5 lineto
+70.5 19.5 lineto
+70.5 .5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath -.5 .5 moveto
+-.5 19.5 lineto
+70.5 19.5 lineto
+70.5 .5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+7.5 7.5 moveto 55 (QuaGzipFile) alignedtext
+grestore
+% Node2
+gsave
+0 0 1 nodecolor
+newpath 2.5 56.5 moveto
+2.5 75.5 lineto
+67.5 75.5 lineto
+67.5 56.5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0.74902 nodecolor
+newpath 2.5 56.5 moveto
+2.5 75.5 lineto
+67.5 75.5 lineto
+67.5 56.5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+10.5 63.5 moveto 49 (QIODevice) alignedtext
+grestore
+% Node2->Node1
+gsave
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 35 45.8 moveto
+35 36.91 35 26.78 35 19.75 curveto
+stroke
+0.66667 0.77647 0.43922 edgecolor
+newpath 31.5 46.08 moveto
+35 56.08 lineto
+38.5 46.08 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 31.5 46.08 moveto
+35 56.08 lineto
+38.5 46.08 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 114 120
+end
+restore
+%%EOF
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile__inherit__graph.md5 b/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile__inherit__graph.md5
new file mode 100644
index 0000000..1e213ff
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaGzipFile__inherit__graph.md5
@@ -0,0 +1 @@
+b596b42a2d881ca771acc3ccdbbc37df
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice.tex b/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice.tex
new file mode 100644
index 0000000..887b259
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice.tex
@@ -0,0 +1,156 @@
+\section{Qua\-Z\-I\-O\-Device Class Reference}
+\label{classQuaZIODevice}\index{Qua\-Z\-I\-O\-Device@{Qua\-Z\-I\-O\-Device}}
+
+
+A class to compress/decompress Q\-I\-O\-Device.  
+
+
+
+
+{\ttfamily \#include $<$quaziodevice.\-h$>$}
+
+
+
+Inheritance diagram for Qua\-Z\-I\-O\-Device\-:
+\nopagebreak
+\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[width=126pt]{classQuaZIODevice__inherit__graph}
+\end{center}
+\end{figure}
+
+
+Collaboration diagram for Qua\-Z\-I\-O\-Device\-:
+\nopagebreak
+\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[width=126pt]{classQuaZIODevice__coll__graph}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+{\bf Qua\-Z\-I\-O\-Device} (Q\-I\-O\-Device $\ast$io, Q\-Object $\ast$parent=N\-U\-L\-L)
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item 
+{\bf $\sim$\-Qua\-Z\-I\-O\-Device} ()\label{classQuaZIODevice_ab3524cef44c240c21e6b7680ee5f42de}
+
+\begin{DoxyCompactList}\small\item\em Destructor. \end{DoxyCompactList}\item 
+virtual bool {\bf flush} ()
+\begin{DoxyCompactList}\small\item\em Flushes data waiting to be written. \end{DoxyCompactList}\item 
+virtual bool {\bf open} (Q\-I\-O\-Device\-::\-Open\-Mode mode)
+\begin{DoxyCompactList}\small\item\em Opens the device. \end{DoxyCompactList}\item 
+virtual void {\bf close} ()
+\begin{DoxyCompactList}\small\item\em Closes this device, but not the underlying one. \end{DoxyCompactList}\item 
+Q\-I\-O\-Device $\ast$ {\bf get\-Io\-Device} () const \label{classQuaZIODevice_ad63e7f1717c7d91b3c2c5ace908c98b7}
+
+\begin{DoxyCompactList}\small\item\em Returns the underlying device. \end{DoxyCompactList}\item 
+virtual bool {\bf is\-Sequential} () const \label{classQuaZIODevice_af2697f58c228741d3715801bf48a9a8b}
+
+\begin{DoxyCompactList}\small\item\em Returns true. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\subsection*{Protected Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+virtual qint64 {\bf read\-Data} (char $\ast$data, qint64 max\-Size)\label{classQuaZIODevice_aa12b8bc9c923e543eda9ae22dbd1ecbb}
+
+\begin{DoxyCompactList}\small\item\em Implementation of Q\-I\-O\-Device\-::read\-Data(). \end{DoxyCompactList}\item 
+virtual qint64 {\bf write\-Data} (const char $\ast$data, qint64 max\-Size)\label{classQuaZIODevice_aab23b6badbc3548eb71ca86bf6211902}
+
+\begin{DoxyCompactList}\small\item\em Implementation of Q\-I\-O\-Device\-::write\-Data(). \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+A class to compress/decompress Q\-I\-O\-Device. 
+
+This class can be used to compress any data written to Q\-I\-O\-Device or decompress it back. Compressing data sent over a Q\-Tcp\-Socket is a good example. 
+
+\subsection{Constructor \& Destructor Documentation}
+\index{Qua\-Z\-I\-O\-Device@{Qua\-Z\-I\-O\-Device}!Qua\-Z\-I\-O\-Device@{Qua\-Z\-I\-O\-Device}}
+\index{Qua\-Z\-I\-O\-Device@{Qua\-Z\-I\-O\-Device}!QuaZIODevice@{Qua\-Z\-I\-O\-Device}}
+\subsubsection[{Qua\-Z\-I\-O\-Device}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Z\-I\-O\-Device\-::\-Qua\-Z\-I\-O\-Device (
+\begin{DoxyParamCaption}
+\item[{Q\-I\-O\-Device $\ast$}]{io, }
+\item[{Q\-Object $\ast$}]{parent = {\ttfamily NULL}}
+\end{DoxyParamCaption}
+)}\label{classQuaZIODevice_a8321ed35ee9b57cf9b1104912e236361}
+
+
+Constructor. 
+
+
+\begin{DoxyParams}{Parameters}
+{\em io} & The Q\-I\-O\-Device to read/write. \\
+\hline
+{\em parent} & The parent object, as per Q\-Object logic. \\
+\hline
+\end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\index{Qua\-Z\-I\-O\-Device@{Qua\-Z\-I\-O\-Device}!flush@{flush}}
+\index{flush@{flush}!QuaZIODevice@{Qua\-Z\-I\-O\-Device}}
+\subsubsection[{flush}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Z\-I\-O\-Device\-::flush (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaZIODevice_a25f586eb564841b51c395fd17f1cc080}
+
+
+Flushes data waiting to be written. 
+
+Unfortunately, as Q\-I\-O\-Device doesn't support \doxyref{flush()}{p.}{classQuaZIODevice_a25f586eb564841b51c395fd17f1cc080} by itself, the only thing this method does is write the compressed data into the device using Z\-\_\-\-S\-Y\-N\-C\-\_\-\-F\-L\-U\-S\-H mode. If you need the compressed data to actually be flushed from the buffer of the underlying Q\-I\-O\-Device, you need to call its \doxyref{flush()}{p.}{classQuaZIODevice_a25f586eb564841b51c395fd17f1cc080} method as well, providin [...]
+\begin{DoxyCode}
+QuaZIODevice dev(&sock);
+dev.open(QIODevice::Write);
+dev.write(yourDataGoesHere);
+dev.flush();
+sock->flush(); \textcolor{comment}{// this actually sends data to network}
+\end{DoxyCode}
+
+
+This may change in the future versions of Qua\-Z\-I\-P by implementing an ugly hack\-: trying to cast the Q\-I\-O\-Device using qobject\-\_\-cast to known \doxyref{flush()}{p.}{classQuaZIODevice_a25f586eb564841b51c395fd17f1cc080}-\/supporting subclasses, and calling flush if the resulting pointer is not zero. 
+
+Referenced by close().
+
+\index{Qua\-Z\-I\-O\-Device@{Qua\-Z\-I\-O\-Device}!open@{open}}
+\index{open@{open}!QuaZIODevice@{Qua\-Z\-I\-O\-Device}}
+\subsubsection[{open}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Z\-I\-O\-Device\-::open (
+\begin{DoxyParamCaption}
+\item[{Q\-I\-O\-Device\-::\-Open\-Mode}]{mode}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaZIODevice_a175446c18eb20c9aff6faf23f09cc67a}
+
+
+Opens the device. 
+
+
+\begin{DoxyParams}{Parameters}
+{\em mode} & Neither Q\-I\-O\-Device\-::\-Read\-Write nor Q\-I\-O\-Device\-::\-Append are not supported. \\
+\hline
+\end{DoxyParams}
+\index{Qua\-Z\-I\-O\-Device@{Qua\-Z\-I\-O\-Device}!close@{close}}
+\index{close@{close}!QuaZIODevice@{Qua\-Z\-I\-O\-Device}}
+\subsubsection[{close}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Z\-I\-O\-Device\-::close (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaZIODevice_ad27e447544d57f897316ee6f44535895}
+
+
+Closes this device, but not the underlying one. 
+
+The underlying Q\-I\-O\-Device is not closed in case you want to write something else to it. 
+
+References flush().
+
+
+
+Referenced by $\sim$\-Qua\-Z\-I\-O\-Device().
+
+
+
+The documentation for this class was generated from the following files\-:\begin{DoxyCompactItemize}
+\item 
+quazip/quaziodevice.\-h\item 
+quazip/quaziodevice.\-cpp\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice__coll__graph.eps b/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice__coll__graph.eps
new file mode 100644
index 0000000..51fa4e1
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice__coll__graph.eps
@@ -0,0 +1,259 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.36.0 (20140111.2315)
+%%Title: QuaZIODevice
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 126 120
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 90 84 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% Node1
+gsave
+0 0 0.74902 nodecolor
+newpath 0 .5 moveto
+0 19.5 lineto
+82 19.5 lineto
+82 .5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 .5 moveto
+0 19.5 lineto
+82 19.5 lineto
+82 .5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+8 7.5 moveto 66 (QuaZIODevice) alignedtext
+grestore
+% Node2
+gsave
+0 0 1 nodecolor
+newpath 8.5 56.5 moveto
+8.5 75.5 lineto
+73.5 75.5 lineto
+73.5 56.5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0.74902 nodecolor
+newpath 8.5 56.5 moveto
+8.5 75.5 lineto
+73.5 75.5 lineto
+73.5 56.5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+16.5 63.5 moveto 49 (QIODevice) alignedtext
+grestore
+% Node2->Node1
+gsave
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 41 45.8 moveto
+41 36.91 41 26.78 41 19.75 curveto
+stroke
+0.66667 0.77647 0.43922 edgecolor
+newpath 37.5 46.08 moveto
+41 56.08 lineto
+44.5 46.08 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 37.5 46.08 moveto
+41 56.08 lineto
+44.5 46.08 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 126 120
+end
+restore
+%%EOF
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice__coll__graph.md5 b/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice__coll__graph.md5
new file mode 100644
index 0000000..0c2e92d
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice__coll__graph.md5
@@ -0,0 +1 @@
+f1b807d1cee861a25fe9ec62b50a04e0
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice__inherit__graph.eps b/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice__inherit__graph.eps
new file mode 100644
index 0000000..51fa4e1
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice__inherit__graph.eps
@@ -0,0 +1,259 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.36.0 (20140111.2315)
+%%Title: QuaZIODevice
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 126 120
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 90 84 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% Node1
+gsave
+0 0 0.74902 nodecolor
+newpath 0 .5 moveto
+0 19.5 lineto
+82 19.5 lineto
+82 .5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 .5 moveto
+0 19.5 lineto
+82 19.5 lineto
+82 .5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+8 7.5 moveto 66 (QuaZIODevice) alignedtext
+grestore
+% Node2
+gsave
+0 0 1 nodecolor
+newpath 8.5 56.5 moveto
+8.5 75.5 lineto
+73.5 75.5 lineto
+73.5 56.5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0.74902 nodecolor
+newpath 8.5 56.5 moveto
+8.5 75.5 lineto
+73.5 75.5 lineto
+73.5 56.5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+16.5 63.5 moveto 49 (QIODevice) alignedtext
+grestore
+% Node2->Node1
+gsave
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 41 45.8 moveto
+41 36.91 41 26.78 41 19.75 curveto
+stroke
+0.66667 0.77647 0.43922 edgecolor
+newpath 37.5 46.08 moveto
+41 56.08 lineto
+44.5 46.08 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 37.5 46.08 moveto
+41 56.08 lineto
+44.5 46.08 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 126 120
+end
+restore
+%%EOF
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice__inherit__graph.md5 b/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice__inherit__graph.md5
new file mode 100644
index 0000000..0c2e92d
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaZIODevice__inherit__graph.md5
@@ -0,0 +1 @@
+f1b807d1cee861a25fe9ec62b50a04e0
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaZip.tex b/3rdparty/quazip-0.7/doc/latex/classQuaZip.tex
new file mode 100644
index 0000000..662fb77
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaZip.tex
@@ -0,0 +1,951 @@
+\section{Qua\-Zip Class Reference}
+\label{classQuaZip}\index{Qua\-Zip@{Qua\-Zip}}
+
+
+Z\-I\-P archive.  
+
+
+
+
+{\ttfamily \#include $<$quazip/quazip.\-h$>$}
+
+\subsection*{Public Types}
+\begin{DoxyCompactItemize}
+\item 
+enum {\bf Constants} \{ {\bf M\-A\-X\-\_\-\-F\-I\-L\-E\-\_\-\-N\-A\-M\-E\-\_\-\-L\-E\-N\-G\-T\-H} =256
+ \}
+\begin{DoxyCompactList}\small\item\em Useful constants. \end{DoxyCompactList}\item 
+enum {\bf Mode} \{ \\*
+{\bf md\-Not\-Open}, 
+{\bf md\-Unzip}, 
+{\bf md\-Create}, 
+{\bf md\-Append}, 
+\\*
+{\bf md\-Add}
+ \}
+\begin{DoxyCompactList}\small\item\em Open mode of the Z\-I\-P file. \end{DoxyCompactList}\item 
+enum {\bf Case\-Sensitivity} \{ {\bf cs\-Default} =0, 
+{\bf cs\-Sensitive} =1, 
+{\bf cs\-Insensitive} =2
+ \}
+\begin{DoxyCompactList}\small\item\em Case sensitivity for the file names. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+{\bf Qua\-Zip} ()
+\begin{DoxyCompactList}\small\item\em Constructs \doxyref{Qua\-Zip}{p.}{classQuaZip} object. \end{DoxyCompactList}\item 
+{\bf Qua\-Zip} (const Q\-String \&zip\-Name)\label{classQuaZip_aaea7294b02abd22379cc3a9fccb754b7}
+
+\begin{DoxyCompactList}\small\item\em Constructs \doxyref{Qua\-Zip}{p.}{classQuaZip} object associated with Z\-I\-P file {\itshape zip\-Name}. \end{DoxyCompactList}\item 
+{\bf Qua\-Zip} (Q\-I\-O\-Device $\ast$io\-Device)
+\begin{DoxyCompactList}\small\item\em Constructs \doxyref{Qua\-Zip}{p.}{classQuaZip} object associated with Z\-I\-P file represented by {\itshape io\-Device}. \end{DoxyCompactList}\item 
+{\bf $\sim$\-Qua\-Zip} ()
+\begin{DoxyCompactList}\small\item\em Destroys \doxyref{Qua\-Zip}{p.}{classQuaZip} object. \end{DoxyCompactList}\item 
+bool {\bf open} ({\bf Mode} mode, zlib\-\_\-filefunc\-\_\-def $\ast$io\-Api=N\-U\-L\-L)
+\begin{DoxyCompactList}\small\item\em Opens Z\-I\-P file. \end{DoxyCompactList}\item 
+void {\bf close} ()
+\begin{DoxyCompactList}\small\item\em Closes Z\-I\-P file. \end{DoxyCompactList}\item 
+void {\bf set\-File\-Name\-Codec} (Q\-Text\-Codec $\ast$file\-Name\-Codec)
+\begin{DoxyCompactList}\small\item\em Sets the codec used to encode/decode file names inside archive. \end{DoxyCompactList}\item 
+void {\bf set\-File\-Name\-Codec} (const char $\ast$file\-Name\-Codec\-Name)
+\begin{DoxyCompactList}\small\item\em Sets the codec used to encode/decode file names inside archive. \end{DoxyCompactList}\item 
+Q\-Text\-Codec $\ast$ {\bf get\-File\-Name\-Codec} () const \label{classQuaZip_a27b866aa2c75ea6f9c438cbb6e32b43c}
+
+\begin{DoxyCompactList}\small\item\em Returns the codec used to encode/decode comments inside archive. \end{DoxyCompactList}\item 
+void {\bf set\-Comment\-Codec} (Q\-Text\-Codec $\ast$comment\-Codec)
+\begin{DoxyCompactList}\small\item\em Sets the codec used to encode/decode comments inside archive. \end{DoxyCompactList}\item 
+void {\bf set\-Comment\-Codec} (const char $\ast$comment\-Codec\-Name)
+\begin{DoxyCompactList}\small\item\em Sets the codec used to encode/decode comments inside archive. \end{DoxyCompactList}\item 
+Q\-Text\-Codec $\ast$ {\bf get\-Comment\-Codec} () const \label{classQuaZip_a008260161781d8b5d2a0a28493fddaf4}
+
+\begin{DoxyCompactList}\small\item\em Returns the codec used to encode/decode comments inside archive. \end{DoxyCompactList}\item 
+Q\-String {\bf get\-Zip\-Name} () const 
+\begin{DoxyCompactList}\small\item\em Returns the name of the Z\-I\-P file. \end{DoxyCompactList}\item 
+void {\bf set\-Zip\-Name} (const Q\-String \&zip\-Name)
+\begin{DoxyCompactList}\small\item\em Sets the name of the Z\-I\-P file. \end{DoxyCompactList}\item 
+Q\-I\-O\-Device $\ast$ {\bf get\-Io\-Device} () const 
+\begin{DoxyCompactList}\small\item\em Returns the device representing this Z\-I\-P file. \end{DoxyCompactList}\item 
+void {\bf set\-Io\-Device} (Q\-I\-O\-Device $\ast$io\-Device)
+\begin{DoxyCompactList}\small\item\em Sets the device representing the Z\-I\-P file. \end{DoxyCompactList}\item 
+{\bf Mode} {\bf get\-Mode} () const \label{classQuaZip_a129ceff04d28fb00531f7bf7f9329664}
+
+\begin{DoxyCompactList}\small\item\em Returns the mode in which Z\-I\-P file was opened. \end{DoxyCompactList}\item 
+bool {\bf is\-Open} () const \label{classQuaZip_a5b869a9c0d4f49955b759592fec08888}
+
+\begin{DoxyCompactList}\small\item\em Returns {\ttfamily true} if Z\-I\-P file is open, {\ttfamily false} otherwise. \end{DoxyCompactList}\item 
+int {\bf get\-Zip\-Error} () const 
+\begin{DoxyCompactList}\small\item\em Returns the error code of the last operation. \end{DoxyCompactList}\item 
+int {\bf get\-Entries\-Count} () const 
+\begin{DoxyCompactList}\small\item\em Returns number of the entries in the Z\-I\-P central directory. \end{DoxyCompactList}\item 
+Q\-String {\bf get\-Comment} () const \label{classQuaZip_ae55cfbf2296132df808c557b62433051}
+
+\begin{DoxyCompactList}\small\item\em Returns global comment in the Z\-I\-P file. \end{DoxyCompactList}\item 
+void {\bf set\-Comment} (const Q\-String \&comment)
+\begin{DoxyCompactList}\small\item\em Sets the global comment in the Z\-I\-P file. \end{DoxyCompactList}\item 
+bool {\bf go\-To\-First\-File} ()
+\begin{DoxyCompactList}\small\item\em Sets the current file to the first file in the archive. \end{DoxyCompactList}\item 
+bool {\bf go\-To\-Next\-File} ()
+\begin{DoxyCompactList}\small\item\em Sets the current file to the next file in the archive. \end{DoxyCompactList}\item 
+bool {\bf set\-Current\-File} (const Q\-String \&file\-Name, {\bf Case\-Sensitivity} cs={\bf cs\-Default})
+\begin{DoxyCompactList}\small\item\em Sets current file by its name. \end{DoxyCompactList}\item 
+bool {\bf has\-Current\-File} () const \label{classQuaZip_a00b237d926648f45da86db25e7cfb697}
+
+\begin{DoxyCompactList}\small\item\em Returns {\ttfamily true} if the current file has been set. \end{DoxyCompactList}\item 
+bool {\bf get\-Current\-File\-Info} ({\bf Qua\-Zip\-File\-Info} $\ast$info) const 
+\begin{DoxyCompactList}\small\item\em Retrieves information about the current file. \end{DoxyCompactList}\item 
+bool {\bf get\-Current\-File\-Info} ({\bf Qua\-Zip\-File\-Info64} $\ast$info) const 
+\begin{DoxyCompactList}\small\item\em Retrieves information about the current file. \end{DoxyCompactList}\item 
+Q\-String {\bf get\-Current\-File\-Name} () const 
+\begin{DoxyCompactList}\small\item\em Returns the current file name. \end{DoxyCompactList}\item 
+unz\-File {\bf get\-Unz\-File} ()
+\begin{DoxyCompactList}\small\item\em Returns {\ttfamily unz\-File} handle. \end{DoxyCompactList}\item 
+zip\-File {\bf get\-Zip\-File} ()
+\begin{DoxyCompactList}\small\item\em Returns {\ttfamily zip\-File} handle. \end{DoxyCompactList}\item 
+void {\bf set\-Data\-Descriptor\-Writing\-Enabled} (bool enabled)
+\begin{DoxyCompactList}\small\item\em Changes the data descriptor writing mode. \end{DoxyCompactList}\item 
+bool {\bf is\-Data\-Descriptor\-Writing\-Enabled} () const 
+\begin{DoxyCompactList}\small\item\em Returns the data descriptor default writing mode. \end{DoxyCompactList}\item 
+Q\-String\-List {\bf get\-File\-Name\-List} () const 
+\begin{DoxyCompactList}\small\item\em Returns a list of files inside the archive. \end{DoxyCompactList}\item 
+Q\-List$<$ {\bf Qua\-Zip\-File\-Info} $>$ {\bf get\-File\-Info\-List} () const 
+\begin{DoxyCompactList}\small\item\em Returns information list about all files inside the archive. \end{DoxyCompactList}\item 
+Q\-List$<$ {\bf Qua\-Zip\-File\-Info64} $>$ {\bf get\-File\-Info\-List64} () const 
+\begin{DoxyCompactList}\small\item\em Returns information list about all files inside the archive. \end{DoxyCompactList}\item 
+void {\bf set\-Zip64\-Enabled} (bool zip64)
+\begin{DoxyCompactList}\small\item\em Enables the zip64 mode. \end{DoxyCompactList}\item 
+bool {\bf is\-Zip64\-Enabled} () const 
+\begin{DoxyCompactList}\small\item\em Returns whether the zip64 mode is enabled. \end{DoxyCompactList}\item 
+bool {\bf is\-Auto\-Close} () const 
+\begin{DoxyCompactList}\small\item\em Returns the auto-\/close flag. \end{DoxyCompactList}\item 
+void {\bf set\-Auto\-Close} (bool auto\-Close) const 
+\begin{DoxyCompactList}\small\item\em Sets or unsets the auto-\/close flag. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\subsection*{Static Public Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+static Qt\-::\-Case\-Sensitivity {\bf convert\-Case\-Sensitivity} ({\bf Case\-Sensitivity} cs)
+\begin{DoxyCompactList}\small\item\em Returns the actual case sensitivity for the specified Qua\-Z\-I\-P one. \end{DoxyCompactList}\item 
+static void {\bf set\-Default\-File\-Name\-Codec} (Q\-Text\-Codec $\ast$codec)
+\begin{DoxyCompactList}\small\item\em Sets the default file name codec to use. \end{DoxyCompactList}\item 
+static void {\bf set\-Default\-File\-Name\-Codec} (const char $\ast$codec\-Name)
+\end{DoxyCompactItemize}
+\subsection*{Friends}
+\begin{DoxyCompactItemize}
+\item 
+class {\bfseries Qua\-Zip\-Private}\label{classQuaZip_a5d400b33a69412e9d419a484aaf476cd}
+
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Z\-I\-P archive. 
+
+This class implements basic interface to the Z\-I\-P archive. It can be used to read table contents of the Z\-I\-P archive and retreiving information about the files inside it.
+
+You can also use this class to open files inside archive by passing pointer to the instance of this class to the constructor of the \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} class. But see \doxyref{Qua\-Zip\-File\-::\-Qua\-Zip\-File(\-Qua\-Zip$\ast$, Q\-Object$\ast$)}{p.}{classQuaZipFile_a54e944a6b3d27030f64c8f30d2cc33bb} for the possible pitfalls.
+
+This class is indended to provide interface to the Z\-I\-P subpackage of the Z\-I\-P/\-U\-N\-Z\-I\-P package as well as to the U\-N\-Z\-I\-P subpackage. But currently it supports only U\-N\-Z\-I\-P.
+
+The use of this class is simple -\/ just create instance using constructor, then set Z\-I\-P archive file name using set\-File() function (if you did not passed the name to the constructor), then \doxyref{open()}{p.}{classQuaZip_abfa4e6018b2964a3d10a4c54e5ab3962} and then use different functions to work with it! Well, if you are paranoid, you may also wish to call close before destructing the instance, to check for errors on close.
+
+You may also use \doxyref{get\-Unz\-File()}{p.}{classQuaZip_a3b78a652f296ff4a678a791e8294e642} and \doxyref{get\-Zip\-File()}{p.}{classQuaZip_a425043a4d7cc31e2fe2bba73d954f15c} functions to get the Z\-I\-P archive handle and use it with Z\-I\-P/\-U\-N\-Z\-I\-P package A\-P\-I directly.
+
+This class supports localized file names inside Z\-I\-P archive, but you have to set up proper codec with set\-Codec() function. By default, locale codec will be used, which is probably ok for U\-N\-I\-X systems, but will almost certainly fail with Z\-I\-P archives created in Windows. This is because Windows Z\-I\-P programs have strange habit of using D\-O\-S encoding for file names in Z\-I\-P archives. For example, Z\-I\-P archive with cyrillic names created in Windows will have file n [...]
+
+\subsection{Member Enumeration Documentation}
+\index{Qua\-Zip@{Qua\-Zip}!Constants@{Constants}}
+\index{Constants@{Constants}!QuaZip@{Qua\-Zip}}
+\subsubsection[{Constants}]{\setlength{\rightskip}{0pt plus 5cm}enum {\bf Qua\-Zip\-::\-Constants}}\label{classQuaZip_adce46b942c341dbb5c851eadead65459}
+
+
+Useful constants. 
+
+\begin{Desc}
+\item[Enumerator]\par
+\begin{description}
+\index{M\-A\-X\-\_\-\-F\-I\-L\-E\-\_\-\-N\-A\-M\-E\-\_\-\-L\-E\-N\-G\-T\-H@{M\-A\-X\-\_\-\-F\-I\-L\-E\-\_\-\-N\-A\-M\-E\-\_\-\-L\-E\-N\-G\-T\-H}!Qua\-Zip@{Qua\-Zip}}\index{Qua\-Zip@{Qua\-Zip}!M\-A\-X\-\_\-\-F\-I\-L\-E\-\_\-\-N\-A\-M\-E\-\_\-\-L\-E\-N\-G\-T\-H@{M\-A\-X\-\_\-\-F\-I\-L\-E\-\_\-\-N\-A\-M\-E\-\_\-\-L\-E\-N\-G\-T\-H}}\item[{\em 
+M\-A\-X\-\_\-\-F\-I\-L\-E\-\_\-\-N\-A\-M\-E\-\_\-\-L\-E\-N\-G\-T\-H\label{classQuaZip_adce46b942c341dbb5c851eadead65459ab26ce1a9c9e94f901dc2cf90fa5baa4b}
+}]Maximum file name length. Taken from {\ttfamily U\-N\-Z\-\_\-\-M\-A\-X\-F\-I\-L\-E\-N\-A\-M\-E\-I\-N\-Z\-I\-P} constant in unzip.\-c. \end{description}
+\end{Desc}
+\index{Qua\-Zip@{Qua\-Zip}!Mode@{Mode}}
+\index{Mode@{Mode}!QuaZip@{Qua\-Zip}}
+\subsubsection[{Mode}]{\setlength{\rightskip}{0pt plus 5cm}enum {\bf Qua\-Zip\-::\-Mode}}\label{classQuaZip_a47e28d4116ee716fdd6b431b821d0be4}
+
+
+Open mode of the Z\-I\-P file. 
+
+\begin{Desc}
+\item[Enumerator]\par
+\begin{description}
+\index{md\-Not\-Open@{md\-Not\-Open}!Qua\-Zip@{Qua\-Zip}}\index{Qua\-Zip@{Qua\-Zip}!md\-Not\-Open@{md\-Not\-Open}}\item[{\em 
+md\-Not\-Open\label{classQuaZip_a47e28d4116ee716fdd6b431b821d0be4ac87ddb1e901e1ec700c16ee0d4d398ce}
+}]Z\-I\-P file is not open. This is the initial mode. \index{md\-Unzip@{md\-Unzip}!Qua\-Zip@{Qua\-Zip}}\index{Qua\-Zip@{Qua\-Zip}!md\-Unzip@{md\-Unzip}}\item[{\em 
+md\-Unzip\label{classQuaZip_a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897}
+}]Z\-I\-P file is open for reading files inside it. \index{md\-Create@{md\-Create}!Qua\-Zip@{Qua\-Zip}}\index{Qua\-Zip@{Qua\-Zip}!md\-Create@{md\-Create}}\item[{\em 
+md\-Create\label{classQuaZip_a47e28d4116ee716fdd6b431b821d0be4a25ae05b12590540af8c66ae8298b928e}
+}]Z\-I\-P file was created with \doxyref{open()}{p.}{classQuaZip_abfa4e6018b2964a3d10a4c54e5ab3962} call. \index{md\-Append@{md\-Append}!Qua\-Zip@{Qua\-Zip}}\index{Qua\-Zip@{Qua\-Zip}!md\-Append@{md\-Append}}\item[{\em 
+md\-Append\label{classQuaZip_a47e28d4116ee716fdd6b431b821d0be4ab807f0c65653a16d77b365801fd25582}
+}]Z\-I\-P file was opened in append mode. This refers to {\ttfamily A\-P\-P\-E\-N\-D\-\_\-\-S\-T\-A\-T\-U\-S\-\_\-\-C\-R\-E\-A\-T\-E\-A\-F\-T\-E\-R} mode in Z\-I\-P/\-U\-N\-Z\-I\-P package and means that zip is appended to some existing file what is useful when that file contains self-\/extractor code. This is obviously {\itshape not} what you whant to use to add files to the existing Z\-I\-P archive. \index{md\-Add@{md\-Add}!Qua\-Zip@{Qua\-Zip}}\index{Qua\-Zip@{Qua\-Zip}!md\-Add@{md\-Ad [...]
+md\-Add\label{classQuaZip_a47e28d4116ee716fdd6b431b821d0be4a22c745f349f06add449af523254fdaec}
+}]Z\-I\-P file was opened for adding files in the archive. \end{description}
+\end{Desc}
+\index{Qua\-Zip@{Qua\-Zip}!Case\-Sensitivity@{Case\-Sensitivity}}
+\index{Case\-Sensitivity@{Case\-Sensitivity}!QuaZip@{Qua\-Zip}}
+\subsubsection[{Case\-Sensitivity}]{\setlength{\rightskip}{0pt plus 5cm}enum {\bf Qua\-Zip\-::\-Case\-Sensitivity}}\label{classQuaZip_a6053a1d249ed210a85c9d5eb7cf9cdbe}
+
+
+Case sensitivity for the file names. 
+
+This is what you specify when accessing files in the archive. Works perfectly fine with any characters thanks to Qt's great unicode support. This is different from Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I, where only U\-S-\/\-A\-S\-C\-I\-I characters was supported. \begin{Desc}
+\item[Enumerator]\par
+\begin{description}
+\index{cs\-Default@{cs\-Default}!Qua\-Zip@{Qua\-Zip}}\index{Qua\-Zip@{Qua\-Zip}!cs\-Default@{cs\-Default}}\item[{\em 
+cs\-Default\label{classQuaZip_a6053a1d249ed210a85c9d5eb7cf9cdbeac3cca8c0b976cf6397a28a5c84e75253}
+}]Default for platform. Case sensitive for U\-N\-I\-X, not for Windows. \index{cs\-Sensitive@{cs\-Sensitive}!Qua\-Zip@{Qua\-Zip}}\index{Qua\-Zip@{Qua\-Zip}!cs\-Sensitive@{cs\-Sensitive}}\item[{\em 
+cs\-Sensitive\label{classQuaZip_a6053a1d249ed210a85c9d5eb7cf9cdbead8d86b0c34203336cad09348cfa5356e}
+}]Case sensitive. \index{cs\-Insensitive@{cs\-Insensitive}!Qua\-Zip@{Qua\-Zip}}\index{Qua\-Zip@{Qua\-Zip}!cs\-Insensitive@{cs\-Insensitive}}\item[{\em 
+cs\-Insensitive\label{classQuaZip_a6053a1d249ed210a85c9d5eb7cf9cdbea3e492bcc3f64f41a74906cecc45fb366}
+}]Case insensitive. \end{description}
+\end{Desc}
+
+
+\subsection{Constructor \& Destructor Documentation}
+\index{Qua\-Zip@{Qua\-Zip}!Qua\-Zip@{Qua\-Zip}}
+\index{Qua\-Zip@{Qua\-Zip}!QuaZip@{Qua\-Zip}}
+\subsubsection[{Qua\-Zip}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Zip\-::\-Qua\-Zip (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_a970e0f401c7cfd7a78e78572f758eec4}
+
+
+Constructs \doxyref{Qua\-Zip}{p.}{classQuaZip} object. 
+
+Call set\-Name() before opening constructed object. \index{Qua\-Zip@{Qua\-Zip}!Qua\-Zip@{Qua\-Zip}}
+\index{Qua\-Zip@{Qua\-Zip}!QuaZip@{Qua\-Zip}}
+\subsubsection[{Qua\-Zip}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Zip\-::\-Qua\-Zip (
+\begin{DoxyParamCaption}
+\item[{Q\-I\-O\-Device $\ast$}]{io\-Device}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_ae52ebadd5ce64cdb49d7e198904b0b8c}
+
+
+Constructs \doxyref{Qua\-Zip}{p.}{classQuaZip} object associated with Z\-I\-P file represented by {\itshape io\-Device}. 
+
+The I\-O device must be seekable, otherwise an error will occur when opening. \index{Qua\-Zip@{Qua\-Zip}!$\sim$\-Qua\-Zip@{$\sim$\-Qua\-Zip}}
+\index{$\sim$\-Qua\-Zip@{$\sim$\-Qua\-Zip}!QuaZip@{Qua\-Zip}}
+\subsubsection[{$\sim$\-Qua\-Zip}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Zip\-::$\sim$\-Qua\-Zip (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_af60a2d3930b90f3b25a3148baecad81e}
+
+
+Destroys \doxyref{Qua\-Zip}{p.}{classQuaZip} object. 
+
+Calls \doxyref{close()}{p.}{classQuaZip_a7a4323b73e12f3b4470109f200728f9f} if necessary. 
+
+References close(), and is\-Open().
+
+
+
+\subsection{Member Function Documentation}
+\index{Qua\-Zip@{Qua\-Zip}!convert\-Case\-Sensitivity@{convert\-Case\-Sensitivity}}
+\index{convert\-Case\-Sensitivity@{convert\-Case\-Sensitivity}!QuaZip@{Qua\-Zip}}
+\subsubsection[{convert\-Case\-Sensitivity}]{\setlength{\rightskip}{0pt plus 5cm}Qt\-::\-Case\-Sensitivity Qua\-Zip\-::convert\-Case\-Sensitivity (
+\begin{DoxyParamCaption}
+\item[{{\bf Qua\-Zip\-::\-Case\-Sensitivity}}]{cs}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [static]}}\label{classQuaZip_a1d3fbd445a8e9d3449ded7371931c6b3}
+
+
+Returns the actual case sensitivity for the specified Qua\-Z\-I\-P one. 
+
+
+\begin{DoxyParams}{Parameters}
+{\em cs} & The value to convert. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+If Case\-Sensitivity\-::cs\-Default, then returns the default file name case sensitivity for the platform. Otherwise, just returns the appropriate value from the Qt\-::\-Case\-Sensitivity enum. 
+\end{DoxyReturn}
+
+
+References cs\-Default, and cs\-Sensitive.
+
+
+
+Referenced by Qua\-Zip\-Dir\-::exists(), and set\-Current\-File().
+
+\index{Qua\-Zip@{Qua\-Zip}!open@{open}}
+\index{open@{open}!QuaZip@{Qua\-Zip}}
+\subsubsection[{open}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-::open (
+\begin{DoxyParamCaption}
+\item[{{\bf Mode}}]{mode, }
+\item[{zlib\-\_\-filefunc\-\_\-def $\ast$}]{io\-Api = {\ttfamily NULL}}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_abfa4e6018b2964a3d10a4c54e5ab3962}
+
+
+Opens Z\-I\-P file. 
+
+Argument {\itshape mode} specifies open mode of the Z\-I\-P archive. See Mode for details. Note that there is zip\-Open2() function in the Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I which accepts {\itshape globalcomment} argument, but it does not use it anywhere, so this \doxyref{open()}{p.}{classQuaZip_abfa4e6018b2964a3d10a4c54e5ab3962} function does not have this argument. See \doxyref{set\-Comment()}{p.}{classQuaZip_a1b5d936a203859340574d5908ffa2222} if you need to set global comment.
+
+If the Z\-I\-P file is accessed via explicitly set Q\-I\-O\-Device, then this device is opened in the necessary mode. If the device was already opened by some other means, then Qua\-Z\-I\-P checks if the open mode is compatible to the mode needed for the requested operation. If necessary, seeking is performed to position the device properly.
+
+\begin{DoxyReturn}{Returns}
+{\ttfamily true} if successful, {\ttfamily false} otherwise.
+\end{DoxyReturn}
+\begin{DoxyNote}{Note}
+Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I open calls do not return error code -\/ they just return {\ttfamily N\-U\-L\-L} indicating an error. But to make things easier, \doxyref{quazip.\-h}{p.}{quazip_8h_source} header defines additional error code {\ttfamily U\-N\-Z\-\_\-\-E\-R\-R\-O\-R\-O\-P\-E\-N} and \doxyref{get\-Zip\-Error()}{p.}{classQuaZip_a28b91a6282ddd9382c96a069572c6fb4} will return it if the open call of the Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I returns {\ttfamily N\-U\-L\-L}.
+\end{DoxyNote}
+Argument {\itshape io\-Api} specifies I\-O function set for Z\-I\-P/\-U\-N\-Z\-I\-P package to use. See unzip.\-h, zip.\-h and ioapi.\-h for details. Note that I\-O A\-P\-I for \doxyref{Qua\-Zip}{p.}{classQuaZip} is different from the original package. The file path argument was changed to be of type {\ttfamily voidpf}, and \doxyref{Qua\-Zip}{p.}{classQuaZip} passes a Q\-I\-O\-Device pointer there. This Q\-I\-O\-Device is either set explicitly via \doxyref{set\-Io\-Device()}{p.}{classQua [...]
+
+\begin{DoxyNote}{Note}
+If the zip64 support is needed, the io\-Api argument {\itshape must} be N\-U\-L\-L because due to the backwards compatibility issues it can be used to provide a 32-\/bit A\-P\-I only.
+
+If the \doxyref{no-\/auto-\/close}{p.}{classQuaZip_a54bfc924762774ccf9f99be075ba7b0e} feature is used, then the {\itshape io\-Api} argument {\itshape should} be N\-U\-L\-L because the old A\-P\-I doesn't support the 'fake close' operation, causing slight memory leaks and other possible troubles (like closing the output device in case when an error occurs during opening).
+\end{DoxyNote}
+In short\-: just forget about the {\itshape io\-Api} argument and you'll be fine. 
+
+References is\-Open(), md\-Add, md\-Append, md\-Create, md\-Unzip, Qua\-Zip\-Private\-::unz\-File\-\_\-f, and Qua\-Zip\-Private\-::zip\-File\-\_\-f.
+
+
+
+Referenced by Jl\-Compress\-::compress\-Dir(), Jl\-Compress\-::compress\-File(), Jl\-Compress\-::compress\-Files(), Jl\-Compress\-::extract\-Dir(), Jl\-Compress\-::extract\-File(), Jl\-Compress\-::extract\-Files(), Jl\-Compress\-::get\-File\-List(), and Qua\-Zip\-File\-::open().
+
+\index{Qua\-Zip@{Qua\-Zip}!close@{close}}
+\index{close@{close}!QuaZip@{Qua\-Zip}}
+\subsubsection[{close}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-::close (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_a7a4323b73e12f3b4470109f200728f9f}
+
+
+Closes Z\-I\-P file. 
+
+Call \doxyref{get\-Zip\-Error()}{p.}{classQuaZip_a28b91a6282ddd9382c96a069572c6fb4} to determine if the close was successful.
+
+If the file was opened by name, then the underlying Q\-I\-O\-Device is closed and deleted.
+
+If the underlying Q\-I\-O\-Device was set explicitly using \doxyref{set\-Io\-Device()}{p.}{classQuaZip_a64642948b6531ee54f5522f29e388cc6} or the appropriate constructor, then it is closed if the auto-\/close flag is set (which it is by default). Call \doxyref{set\-Auto\-Close()}{p.}{classQuaZip_a54bfc924762774ccf9f99be075ba7b0e} to clear the auto-\/close flag if this behavior is undesirable.
+
+Since Qt 5.\-1, the Q\-Save\-File was introduced. It breaks the Q\-I\-O\-Device A\-P\-I by making \doxyref{close()}{p.}{classQuaZip_a7a4323b73e12f3b4470109f200728f9f} private and crashing the application if it is called from the base class where it is public. It is an excellent example of poor design that illustrates why you should never ever break an is-\/a relationship between the base class and a subclass. Qua\-Z\-I\-P works around this bug by checking if the Q\-I\-O\-Device is an ins [...]
+
+References md\-Add, md\-Append, md\-Create, md\-Not\-Open, md\-Unzip, Qua\-Zip\-Private\-::unz\-File\-\_\-f, and Qua\-Zip\-Private\-::zip\-File\-\_\-f.
+
+
+
+Referenced by Qua\-Zip\-File\-::close(), Jl\-Compress\-::compress\-Dir(), Jl\-Compress\-::compress\-File(), Jl\-Compress\-::compress\-Files(), Jl\-Compress\-::extract\-Dir(), Jl\-Compress\-::extract\-File(), Jl\-Compress\-::extract\-Files(), Jl\-Compress\-::get\-File\-List(), Qua\-Zip\-File\-::open(), and $\sim$\-Qua\-Zip().
+
+\index{Qua\-Zip@{Qua\-Zip}!set\-File\-Name\-Codec@{set\-File\-Name\-Codec}}
+\index{set\-File\-Name\-Codec@{set\-File\-Name\-Codec}!QuaZip@{Qua\-Zip}}
+\subsubsection[{set\-File\-Name\-Codec}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-::set\-File\-Name\-Codec (
+\begin{DoxyParamCaption}
+\item[{Q\-Text\-Codec $\ast$}]{file\-Name\-Codec}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_a339010b5566704ba3c9cafbfe848d8fb}
+
+
+Sets the codec used to encode/decode file names inside archive. 
+
+This is necessary to access files in the Z\-I\-P archive created under Windows with non-\/latin characters in file names. For example, file names with cyrillic letters will be in {\ttfamily I\-B\-M866} encoding. \index{Qua\-Zip@{Qua\-Zip}!set\-File\-Name\-Codec@{set\-File\-Name\-Codec}}
+\index{set\-File\-Name\-Codec@{set\-File\-Name\-Codec}!QuaZip@{Qua\-Zip}}
+\subsubsection[{set\-File\-Name\-Codec}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-::set\-File\-Name\-Codec (
+\begin{DoxyParamCaption}
+\item[{const char $\ast$}]{file\-Name\-Codec\-Name}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_a8f283519a195aa1d9076bbbb01ea0497}
+
+
+Sets the codec used to encode/decode file names inside archive. 
+
+This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Equivalent to calling set\-File\-Name\-Codec(\-Q\-Text\-Codec\-::codec\-For\-Name(codec\-Name)); \index{Qua\-Zip@{Qua\-Zip}!set\-Comment\-Codec@{set\-Comment\-Codec}}
+\index{set\-Comment\-Codec@{set\-Comment\-Codec}!QuaZip@{Qua\-Zip}}
+\subsubsection[{set\-Comment\-Codec}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-::set\-Comment\-Codec (
+\begin{DoxyParamCaption}
+\item[{Q\-Text\-Codec $\ast$}]{comment\-Codec}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_a1c81fca7215a4374f6f03872ade4885b}
+
+
+Sets the codec used to encode/decode comments inside archive. 
+
+This codec defaults to locale codec, which is probably ok. \index{Qua\-Zip@{Qua\-Zip}!set\-Comment\-Codec@{set\-Comment\-Codec}}
+\index{set\-Comment\-Codec@{set\-Comment\-Codec}!QuaZip@{Qua\-Zip}}
+\subsubsection[{set\-Comment\-Codec}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-::set\-Comment\-Codec (
+\begin{DoxyParamCaption}
+\item[{const char $\ast$}]{comment\-Codec\-Name}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_a413f3c56b54a9a47258d53802cb606e7}
+
+
+Sets the codec used to encode/decode comments inside archive. 
+
+This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Equivalent to calling set\-Comment\-Codec(\-Q\-Text\-Codec\-::codec\-For\-Name(codec\-Name)); \index{Qua\-Zip@{Qua\-Zip}!get\-Zip\-Name@{get\-Zip\-Name}}
+\index{get\-Zip\-Name@{get\-Zip\-Name}!QuaZip@{Qua\-Zip}}
+\subsubsection[{get\-Zip\-Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String Qua\-Zip\-::get\-Zip\-Name (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZip_a4f7deef08ff40aeb1a7a04bcd7f228c2}
+
+
+Returns the name of the Z\-I\-P file. 
+
+Returns null string if no Z\-I\-P file name has been set, for example when the \doxyref{Qua\-Zip}{p.}{classQuaZip} instance is set up to use a Q\-I\-O\-Device instead. \begin{DoxySeeAlso}{See Also}
+\doxyref{set\-Zip\-Name()}{p.}{classQuaZip_aa80b661de1262af905d1677dbcb008cc}, \doxyref{set\-Io\-Device()}{p.}{classQuaZip_a64642948b6531ee54f5522f29e388cc6}, \doxyref{get\-Io\-Device()}{p.}{classQuaZip_afd3ba12fe68748acbf8b7cc14a5a1c29} 
+\end{DoxySeeAlso}
+
+
+Referenced by Qua\-Zip\-File\-::get\-Zip\-Name().
+
+\index{Qua\-Zip@{Qua\-Zip}!set\-Zip\-Name@{set\-Zip\-Name}}
+\index{set\-Zip\-Name@{set\-Zip\-Name}!QuaZip@{Qua\-Zip}}
+\subsubsection[{set\-Zip\-Name}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-::set\-Zip\-Name (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{zip\-Name}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_aa80b661de1262af905d1677dbcb008cc}
+
+
+Sets the name of the Z\-I\-P file. 
+
+Does nothing if the Z\-I\-P file is open.
+
+Does not reset error code returned by \doxyref{get\-Zip\-Error()}{p.}{classQuaZip_a28b91a6282ddd9382c96a069572c6fb4}. \begin{DoxySeeAlso}{See Also}
+\doxyref{set\-Io\-Device()}{p.}{classQuaZip_a64642948b6531ee54f5522f29e388cc6}, \doxyref{get\-Io\-Device()}{p.}{classQuaZip_afd3ba12fe68748acbf8b7cc14a5a1c29}, \doxyref{get\-Zip\-Name()}{p.}{classQuaZip_a4f7deef08ff40aeb1a7a04bcd7f228c2} 
+\end{DoxySeeAlso}
+
+
+References is\-Open().
+
+\index{Qua\-Zip@{Qua\-Zip}!get\-Io\-Device@{get\-Io\-Device}}
+\index{get\-Io\-Device@{get\-Io\-Device}!QuaZip@{Qua\-Zip}}
+\subsubsection[{get\-Io\-Device}]{\setlength{\rightskip}{0pt plus 5cm}Q\-I\-O\-Device $\ast$ Qua\-Zip\-::get\-Io\-Device (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZip_afd3ba12fe68748acbf8b7cc14a5a1c29}
+
+
+Returns the device representing this Z\-I\-P file. 
+
+Returns null string if no device has been set explicitly, for example when opening a Z\-I\-P file by name. \begin{DoxySeeAlso}{See Also}
+\doxyref{set\-Io\-Device()}{p.}{classQuaZip_a64642948b6531ee54f5522f29e388cc6}, \doxyref{get\-Zip\-Name()}{p.}{classQuaZip_a4f7deef08ff40aeb1a7a04bcd7f228c2}, \doxyref{set\-Zip\-Name()}{p.}{classQuaZip_aa80b661de1262af905d1677dbcb008cc} 
+\end{DoxySeeAlso}
+\index{Qua\-Zip@{Qua\-Zip}!set\-Io\-Device@{set\-Io\-Device}}
+\index{set\-Io\-Device@{set\-Io\-Device}!QuaZip@{Qua\-Zip}}
+\subsubsection[{set\-Io\-Device}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-::set\-Io\-Device (
+\begin{DoxyParamCaption}
+\item[{Q\-I\-O\-Device $\ast$}]{io\-Device}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_a64642948b6531ee54f5522f29e388cc6}
+
+
+Sets the device representing the Z\-I\-P file. 
+
+Does nothing if the Z\-I\-P file is open.
+
+Does not reset error code returned by \doxyref{get\-Zip\-Error()}{p.}{classQuaZip_a28b91a6282ddd9382c96a069572c6fb4}. \begin{DoxySeeAlso}{See Also}
+\doxyref{get\-Io\-Device()}{p.}{classQuaZip_afd3ba12fe68748acbf8b7cc14a5a1c29}, \doxyref{get\-Zip\-Name()}{p.}{classQuaZip_a4f7deef08ff40aeb1a7a04bcd7f228c2}, \doxyref{set\-Zip\-Name()}{p.}{classQuaZip_aa80b661de1262af905d1677dbcb008cc} 
+\end{DoxySeeAlso}
+
+
+References is\-Open().
+
+\index{Qua\-Zip@{Qua\-Zip}!get\-Zip\-Error@{get\-Zip\-Error}}
+\index{get\-Zip\-Error@{get\-Zip\-Error}!QuaZip@{Qua\-Zip}}
+\subsubsection[{get\-Zip\-Error}]{\setlength{\rightskip}{0pt plus 5cm}int Qua\-Zip\-::get\-Zip\-Error (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZip_a28b91a6282ddd9382c96a069572c6fb4}
+
+
+Returns the error code of the last operation. 
+
+Returns {\ttfamily U\-N\-Z\-\_\-\-O\-K} if the last operation was successful.
+
+Error code resets to {\ttfamily U\-N\-Z\-\_\-\-O\-K} every time you call any function that accesses something inside Z\-I\-P archive, even if it is {\ttfamily const} (like \doxyref{get\-Entries\-Count()}{p.}{classQuaZip_a2ea4bd1fca948637c35c2d2752bb5a80}). \doxyref{open()}{p.}{classQuaZip_abfa4e6018b2964a3d10a4c54e5ab3962} and \doxyref{close()}{p.}{classQuaZip_a7a4323b73e12f3b4470109f200728f9f} calls reset error code too. See documentation for the specific functions for details on error  [...]
+
+Referenced by Qua\-Zip\-File\-::close(), Jl\-Compress\-::compress\-Dir(), Jl\-Compress\-::compress\-File(), Jl\-Compress\-::compress\-Files(), Jl\-Compress\-::extract\-Dir(), Jl\-Compress\-::extract\-File(), Jl\-Compress\-::extract\-Files(), Qua\-Zip\-File\-::get\-Actual\-File\-Name(), Qua\-Zip\-File\-::get\-File\-Info(), Jl\-Compress\-::get\-File\-List(), and Qua\-Zip\-File\-::open().
+
+\index{Qua\-Zip@{Qua\-Zip}!get\-Entries\-Count@{get\-Entries\-Count}}
+\index{get\-Entries\-Count@{get\-Entries\-Count}!QuaZip@{Qua\-Zip}}
+\subsubsection[{get\-Entries\-Count}]{\setlength{\rightskip}{0pt plus 5cm}int Qua\-Zip\-::get\-Entries\-Count (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZip_a2ea4bd1fca948637c35c2d2752bb5a80}
+
+
+Returns number of the entries in the Z\-I\-P central directory. 
+
+Returns negative error code in the case of error. The same error code will be returned by subsequent \doxyref{get\-Zip\-Error()}{p.}{classQuaZip_a28b91a6282ddd9382c96a069572c6fb4} call. 
+
+References md\-Unzip, and Qua\-Zip\-Private\-::unz\-File\-\_\-f.
+
+\index{Qua\-Zip@{Qua\-Zip}!set\-Comment@{set\-Comment}}
+\index{set\-Comment@{set\-Comment}!QuaZip@{Qua\-Zip}}
+\subsubsection[{set\-Comment}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-::set\-Comment (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{comment}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_a1b5d936a203859340574d5908ffa2222}
+
+
+Sets the global comment in the Z\-I\-P file. 
+
+The comment will be written to the archive on close operation. \doxyref{Qua\-Zip}{p.}{classQuaZip} makes a distinction between a null Q\-Byte\-Array() comment and an empty "" comment in the \doxyref{Qua\-Zip\-::md\-Add}{p.}{classQuaZip_a47e28d4116ee716fdd6b431b821d0be4a22c745f349f06add449af523254fdaec} mode. A null comment is the default and it means "don't change the comment". An empty comment removes the original comment.
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{open()}{p.}{classQuaZip_abfa4e6018b2964a3d10a4c54e5ab3962} 
+\end{DoxySeeAlso}
+\index{Qua\-Zip@{Qua\-Zip}!go\-To\-First\-File@{go\-To\-First\-File}}
+\index{go\-To\-First\-File@{go\-To\-First\-File}!QuaZip@{Qua\-Zip}}
+\subsubsection[{go\-To\-First\-File}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-::go\-To\-First\-File (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_a745488f9177bcec3cdb858587584e033}
+
+
+Sets the current file to the first file in the archive. 
+
+Returns {\ttfamily true} on success, {\ttfamily false} otherwise. Call \doxyref{get\-Zip\-Error()}{p.}{classQuaZip_a28b91a6282ddd9382c96a069572c6fb4} to get the error code. 
+
+References md\-Unzip, and Qua\-Zip\-Private\-::unz\-File\-\_\-f.
+
+
+
+Referenced by Jl\-Compress\-::extract\-Dir(), and Jl\-Compress\-::get\-File\-List().
+
+\index{Qua\-Zip@{Qua\-Zip}!go\-To\-Next\-File@{go\-To\-Next\-File}}
+\index{go\-To\-Next\-File@{go\-To\-Next\-File}!QuaZip@{Qua\-Zip}}
+\subsubsection[{go\-To\-Next\-File}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-::go\-To\-Next\-File (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_aee6779b6cd338420c2e8c5655fa8ba97}
+
+
+Sets the current file to the next file in the archive. 
+
+Returns {\ttfamily true} on success, {\ttfamily false} otherwise. Call \doxyref{get\-Zip\-Error()}{p.}{classQuaZip_a28b91a6282ddd9382c96a069572c6fb4} to determine if there was an error.
+
+Should be used only in \doxyref{Qua\-Zip\-::md\-Unzip}{p.}{classQuaZip_a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897} mode.
+
+\begin{DoxyNote}{Note}
+If the end of file was reached, \doxyref{get\-Zip\-Error()}{p.}{classQuaZip_a28b91a6282ddd9382c96a069572c6fb4} will return {\ttfamily U\-N\-Z\-\_\-\-O\-K} instead of {\ttfamily U\-N\-Z\-\_\-\-E\-N\-D\-\_\-\-O\-F\-\_\-\-L\-I\-S\-T\-\_\-\-O\-F\-\_\-\-F\-I\-L\-E}. This is to make things like this easier\-: 
+\begin{DoxyCode}
+\textcolor{keywordflow}{for}(\textcolor{keywordtype}{bool} more=zip.goToFirstFile(); more; more=zip.goToNextFile()) \{
+  \textcolor{comment}{// do something}
+\}
+\textcolor{keywordflow}{if}(zip.getZipError()==UNZ\_OK) \{
+  \textcolor{comment}{// ok, there was no error}
+\}
+\end{DoxyCode}
+ 
+\end{DoxyNote}
+
+
+References md\-Unzip, and Qua\-Zip\-Private\-::unz\-File\-\_\-f.
+
+
+
+Referenced by Jl\-Compress\-::extract\-Dir(), Jl\-Compress\-::get\-File\-List(), and set\-Current\-File().
+
+\index{Qua\-Zip@{Qua\-Zip}!set\-Current\-File@{set\-Current\-File}}
+\index{set\-Current\-File@{set\-Current\-File}!QuaZip@{Qua\-Zip}}
+\subsubsection[{set\-Current\-File}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-::set\-Current\-File (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{file\-Name, }
+\item[{{\bf Case\-Sensitivity}}]{cs = {\ttfamily {\bf cs\-Default}}}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_a6c657bfcfccb59d728e0da24c677d899}
+
+
+Sets current file by its name. 
+
+Returns {\ttfamily true} if successful, {\ttfamily false} otherwise. Argument {\itshape cs} specifies case sensitivity of the file name. Call \doxyref{get\-Zip\-Error()}{p.}{classQuaZip_a28b91a6282ddd9382c96a069572c6fb4} in the case of a failure to get error code.
+
+This is not a wrapper to unz\-Locate\-File() function. That is because I had to implement locale-\/specific case-\/insensitive comparison.
+
+Here are the differences from the original implementation\-:
+
+
+\begin{DoxyItemize}
+\item If the file was not found, error code is {\ttfamily U\-N\-Z\-\_\-\-O\-K}, not {\ttfamily U\-N\-Z\-\_\-\-E\-N\-D\-\_\-\-O\-F\-\_\-\-L\-I\-S\-T\-\_\-\-O\-F\-\_\-\-F\-I\-L\-E} (see also \doxyref{go\-To\-Next\-File()}{p.}{classQuaZip_aee6779b6cd338420c2e8c5655fa8ba97}).
+\item If this function fails, it unsets the current file rather than resetting it back to what it was before the call.
+\end{DoxyItemize}
+
+If {\itshape file\-Name} is null string then this function unsets the current file and return {\ttfamily true}. Note that you should close the file first if it is open! See \doxyref{Qua\-Zip\-File\-::\-Qua\-Zip\-File(\-Qua\-Zip$\ast$,\-Q\-Object$\ast$)}{p.}{classQuaZipFile_a54e944a6b3d27030f64c8f30d2cc33bb} for the details.
+
+Should be used only in \doxyref{Qua\-Zip\-::md\-Unzip}{p.}{classQuaZip_a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897} mode.
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{set\-File\-Name\-Codec()}{p.}{classQuaZip_a339010b5566704ba3c9cafbfe848d8fb}, \doxyref{Case\-Sensitivity}{p.}{classQuaZip_a6053a1d249ed210a85c9d5eb7cf9cdbe} 
+\end{DoxySeeAlso}
+
+
+References convert\-Case\-Sensitivity(), get\-Current\-File\-Name(), go\-To\-Next\-File(), M\-A\-X\-\_\-\-F\-I\-L\-E\-\_\-\-N\-A\-M\-E\-\_\-\-L\-E\-N\-G\-T\-H, md\-Unzip, and Qua\-Zip\-Private\-::unz\-File\-\_\-f.
+
+
+
+Referenced by Qua\-Zip\-File\-::open().
+
+\index{Qua\-Zip@{Qua\-Zip}!get\-Current\-File\-Info@{get\-Current\-File\-Info}}
+\index{get\-Current\-File\-Info@{get\-Current\-File\-Info}!QuaZip@{Qua\-Zip}}
+\subsubsection[{get\-Current\-File\-Info}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-::get\-Current\-File\-Info (
+\begin{DoxyParamCaption}
+\item[{{\bf Qua\-Zip\-File\-Info} $\ast$}]{info}
+\end{DoxyParamCaption}
+) const}\label{classQuaZip_a9c91a53ed4c2038e153c64bdc097ebe8}
+
+
+Retrieves information about the current file. 
+
+Fills the structure pointed by {\itshape info}. Returns {\ttfamily true} on success, {\ttfamily false} otherwise. In the latter case structure pointed by {\itshape info} remains untouched. If there was an error, \doxyref{get\-Zip\-Error()}{p.}{classQuaZip_a28b91a6282ddd9382c96a069572c6fb4} returns error code.
+
+Should be used only in \doxyref{Qua\-Zip\-::md\-Unzip}{p.}{classQuaZip_a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897} mode.
+
+Does nothing and returns {\ttfamily false} in any of the following cases.
+\begin{DoxyItemize}
+\item Z\-I\-P is not open;
+\item Z\-I\-P does not have current file.
+\end{DoxyItemize}
+
+In both cases \doxyref{get\-Zip\-Error()}{p.}{classQuaZip_a28b91a6282ddd9382c96a069572c6fb4} returns {\ttfamily U\-N\-Z\-\_\-\-O\-K} since there is no Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I call.
+
+This overload doesn't support zip64, but will work O\-K on zip64 archives except that if one of the sizes (compressed or uncompressed) is greater than 0x\-F\-F\-F\-F\-F\-F\-F\-Fu, it will be set to exactly 0x\-F\-F\-F\-F\-F\-F\-F\-Fu.
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{get\-Current\-File\-Info(\-Qua\-Zip\-File\-Info64$\ast$ info)const}{p.}{classQuaZip_a7ba6daf39263c308c683e7f72f74e0ae} 
+
+\doxyref{Qua\-Zip\-File\-Info64\-::to\-Qua\-Zip\-File\-Info(\-Qua\-Zip\-File\-Info\&)const}{p.}{structQuaZipFileInfo64_ada29945c7ee4c9df6fbe95864793aade} 
+\end{DoxySeeAlso}
+
+
+References Qua\-Zip\-File\-Info64\-::to\-Qua\-Zip\-File\-Info().
+
+
+
+Referenced by Qua\-Zip\-File\-::get\-File\-Info(), and Jl\-Compress\-::get\-File\-List().
+
+\index{Qua\-Zip@{Qua\-Zip}!get\-Current\-File\-Info@{get\-Current\-File\-Info}}
+\index{get\-Current\-File\-Info@{get\-Current\-File\-Info}!QuaZip@{Qua\-Zip}}
+\subsubsection[{get\-Current\-File\-Info}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-::get\-Current\-File\-Info (
+\begin{DoxyParamCaption}
+\item[{{\bf Qua\-Zip\-File\-Info64} $\ast$}]{info}
+\end{DoxyParamCaption}
+) const}\label{classQuaZip_a7ba6daf39263c308c683e7f72f74e0ae}
+
+
+Retrieves information about the current file. 
+
+This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
+
+This function supports zip64. If the archive doesn't use zip64, it is completely equivalent to get\-Current\-File\-Info(\-Qua\-Zip\-File\-Info$\ast$ info) except for the argument type.
+
+\begin{DoxySeeAlso}{See Also}
+
+\end{DoxySeeAlso}
+
+
+References Qua\-Zip\-File\-Info64\-::comment, Qua\-Zip\-File\-Info64\-::compressed\-Size, Qua\-Zip\-File\-Info64\-::crc, Qua\-Zip\-File\-Info64\-::date\-Time, Qua\-Zip\-File\-Info64\-::disk\-Number\-Start, Qua\-Zip\-File\-Info64\-::external\-Attr, Qua\-Zip\-File\-Info64\-::extra, Qua\-Zip\-File\-Info64\-::flags, has\-Current\-File(), Qua\-Zip\-File\-Info64\-::internal\-Attr, is\-Open(), md\-Unzip, Qua\-Zip\-File\-Info64\-::method, Qua\-Zip\-File\-Info64\-::name, Qua\-Zip\-File\-Info64\-: [...]
+
+\index{Qua\-Zip@{Qua\-Zip}!get\-Current\-File\-Name@{get\-Current\-File\-Name}}
+\index{get\-Current\-File\-Name@{get\-Current\-File\-Name}!QuaZip@{Qua\-Zip}}
+\subsubsection[{get\-Current\-File\-Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String Qua\-Zip\-::get\-Current\-File\-Name (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZip_a9783f8b4f39cd55e71e975aea78fd54a}
+
+
+Returns the current file name. 
+
+Equivalent to calling \doxyref{get\-Current\-File\-Info()}{p.}{classQuaZip_a9c91a53ed4c2038e153c64bdc097ebe8} and then getting {\ttfamily name} field of the \doxyref{Qua\-Zip\-File\-Info}{p.}{structQuaZipFileInfo} structure, but faster and more convenient.
+
+Should be used only in \doxyref{Qua\-Zip\-::md\-Unzip}{p.}{classQuaZip_a47e28d4116ee716fdd6b431b821d0be4a803a371910c2dc830d111e9ce5b58897} mode. 
+
+References has\-Current\-File(), is\-Open(), M\-A\-X\-\_\-\-F\-I\-L\-E\-\_\-\-N\-A\-M\-E\-\_\-\-L\-E\-N\-G\-T\-H, md\-Unzip, and Qua\-Zip\-Private\-::unz\-File\-\_\-f.
+
+
+
+Referenced by Jl\-Compress\-::extract\-Dir(), Qua\-Zip\-File\-::get\-Actual\-File\-Name(), and set\-Current\-File().
+
+\index{Qua\-Zip@{Qua\-Zip}!get\-Unz\-File@{get\-Unz\-File}}
+\index{get\-Unz\-File@{get\-Unz\-File}!QuaZip@{Qua\-Zip}}
+\subsubsection[{get\-Unz\-File}]{\setlength{\rightskip}{0pt plus 5cm}unz\-File Qua\-Zip\-::get\-Unz\-File (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_a3b78a652f296ff4a678a791e8294e642}
+
+
+Returns {\ttfamily unz\-File} handle. 
+
+You can use this handle to directly call U\-N\-Z\-I\-P part of the Z\-I\-P/\-U\-N\-Z\-I\-P package functions (see unzip.\-h).
+
+\begin{DoxyWarning}{Warning}
+When using the handle returned by this function, please keep in mind that \doxyref{Qua\-Zip}{p.}{classQuaZip} class is unable to detect any changes you make in the Z\-I\-P file state (e. g. changing current file, or closing the handle). So please do not do anything with this handle that is possible to do with the functions of this class. Or at least return the handle in the original state before calling some another function of this class (including implicit destructor calls and calls fr [...]
+\end{DoxyWarning}
+
+
+References Qua\-Zip\-Private\-::unz\-File\-\_\-f.
+
+
+
+Referenced by Qua\-Zip\-File\-::at\-End(), Qua\-Zip\-File\-::close(), Qua\-Zip\-File\-::csize(), Qua\-Zip\-File\-::open(), Qua\-Zip\-File\-::pos(), Qua\-Zip\-File\-::read\-Data(), and Qua\-Zip\-File\-::usize().
+
+\index{Qua\-Zip@{Qua\-Zip}!get\-Zip\-File@{get\-Zip\-File}}
+\index{get\-Zip\-File@{get\-Zip\-File}!QuaZip@{Qua\-Zip}}
+\subsubsection[{get\-Zip\-File}]{\setlength{\rightskip}{0pt plus 5cm}zip\-File Qua\-Zip\-::get\-Zip\-File (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_a425043a4d7cc31e2fe2bba73d954f15c}
+
+
+Returns {\ttfamily zip\-File} handle. 
+
+You can use this handle to directly call Z\-I\-P part of the Z\-I\-P/\-U\-N\-Z\-I\-P package functions (see zip.\-h). Warnings about the \doxyref{get\-Unz\-File()}{p.}{classQuaZip_a3b78a652f296ff4a678a791e8294e642} function also apply to this function. 
+
+References Qua\-Zip\-Private\-::zip\-File\-\_\-f.
+
+
+
+Referenced by Qua\-Zip\-File\-::close(), Qua\-Zip\-File\-::open(), and Qua\-Zip\-File\-::write\-Data().
+
+\index{Qua\-Zip@{Qua\-Zip}!set\-Data\-Descriptor\-Writing\-Enabled@{set\-Data\-Descriptor\-Writing\-Enabled}}
+\index{set\-Data\-Descriptor\-Writing\-Enabled@{set\-Data\-Descriptor\-Writing\-Enabled}!QuaZip@{Qua\-Zip}}
+\subsubsection[{set\-Data\-Descriptor\-Writing\-Enabled}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-::set\-Data\-Descriptor\-Writing\-Enabled (
+\begin{DoxyParamCaption}
+\item[{bool}]{enabled}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_a6c23a12af88f7ea5edd4f9c0a24b9453}
+
+
+Changes the data descriptor writing mode. 
+
+According to the Z\-I\-P format specification, a file inside archive may have a data descriptor immediately following the file data. This is reflected by a special flag in the local file header and in the central directory. By default, Qua\-Z\-I\-P sets this flag and writes the data descriptor unless both method and level were set to 0, in which case it operates in 1.\-0-\/compatible mode and never writes data descriptors.
+
+By setting this flag to false, it is possible to disable data descriptor writing, thus increasing compatibility with archive readers that don't understand this feature of the Z\-I\-P file format.
+
+Setting this flag affects all the \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instances that are opened after this flag is set.
+
+The data descriptor writing mode is enabled by default.
+
+Note that if the Z\-I\-P archive is written into a Q\-I\-O\-Device for which Q\-I\-O\-Device\-::is\-Sequential() returns {\ttfamily true}, then the data descriptor is mandatory and will be written even if this flag is set to false.
+
+
+\begin{DoxyParams}{Parameters}
+{\em enabled} & If {\ttfamily true}, enable local descriptor writing, disable it otherwise.\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See Also}
+Qua\-Zip\-File\-::is\-Data\-Descriptor\-Writing\-Enabled() 
+\end{DoxySeeAlso}
+\index{Qua\-Zip@{Qua\-Zip}!is\-Data\-Descriptor\-Writing\-Enabled@{is\-Data\-Descriptor\-Writing\-Enabled}}
+\index{is\-Data\-Descriptor\-Writing\-Enabled@{is\-Data\-Descriptor\-Writing\-Enabled}!QuaZip@{Qua\-Zip}}
+\subsubsection[{is\-Data\-Descriptor\-Writing\-Enabled}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-::is\-Data\-Descriptor\-Writing\-Enabled (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZip_ae5c665a59447c2d30e63e9c6df48ebb7}
+
+
+Returns the data descriptor default writing mode. 
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{set\-Data\-Descriptor\-Writing\-Enabled()}{p.}{classQuaZip_a6c23a12af88f7ea5edd4f9c0a24b9453} 
+\end{DoxySeeAlso}
+
+
+Referenced by Qua\-Zip\-File\-::open().
+
+\index{Qua\-Zip@{Qua\-Zip}!get\-File\-Name\-List@{get\-File\-Name\-List}}
+\index{get\-File\-Name\-List@{get\-File\-Name\-List}!QuaZip@{Qua\-Zip}}
+\subsubsection[{get\-File\-Name\-List}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String\-List Qua\-Zip\-::get\-File\-Name\-List (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZip_abb38d8b4c9c4ae0728b48caae9dd82de}
+
+
+Returns a list of files inside the archive. 
+
+\begin{DoxyReturn}{Returns}
+A list of file names or an empty list if there was an error or if the archive is empty (call \doxyref{get\-Zip\-Error()}{p.}{classQuaZip_a28b91a6282ddd9382c96a069572c6fb4} to figure out which). 
+\end{DoxyReturn}
+\begin{DoxySeeAlso}{See Also}
+\doxyref{get\-File\-Info\-List()}{p.}{classQuaZip_a7486af66bede8e131db0cd2e81881387} 
+\end{DoxySeeAlso}
+\index{Qua\-Zip@{Qua\-Zip}!get\-File\-Info\-List@{get\-File\-Info\-List}}
+\index{get\-File\-Info\-List@{get\-File\-Info\-List}!QuaZip@{Qua\-Zip}}
+\subsubsection[{get\-File\-Info\-List}]{\setlength{\rightskip}{0pt plus 5cm}Q\-List$<$ {\bf Qua\-Zip\-File\-Info} $>$ Qua\-Zip\-::get\-File\-Info\-List (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZip_a7486af66bede8e131db0cd2e81881387}
+
+
+Returns information list about all files inside the archive. 
+
+\begin{DoxyReturn}{Returns}
+A list of \doxyref{Qua\-Zip\-File\-Info}{p.}{structQuaZipFileInfo} objects or an empty list if there was an error or if the archive is empty (call \doxyref{get\-Zip\-Error()}{p.}{classQuaZip_a28b91a6282ddd9382c96a069572c6fb4} to figure out which).
+\end{DoxyReturn}
+This function doesn't support zip64, but will still work with zip64 archives, converting results using \doxyref{Qua\-Zip\-File\-Info64\-::to\-Qua\-Zip\-File\-Info()}{p.}{structQuaZipFileInfo64_ada29945c7ee4c9df6fbe95864793aade}. If all file sizes are below 4 G\-B, it will work just fine.
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{get\-File\-Name\-List()}{p.}{classQuaZip_abb38d8b4c9c4ae0728b48caae9dd82de} 
+
+\doxyref{get\-File\-Info\-List64()}{p.}{classQuaZip_a474e66b1b696a9e00edcc067484c36ad} 
+\end{DoxySeeAlso}
+\index{Qua\-Zip@{Qua\-Zip}!get\-File\-Info\-List64@{get\-File\-Info\-List64}}
+\index{get\-File\-Info\-List64@{get\-File\-Info\-List64}!QuaZip@{Qua\-Zip}}
+\subsubsection[{get\-File\-Info\-List64}]{\setlength{\rightskip}{0pt plus 5cm}Q\-List$<$ {\bf Qua\-Zip\-File\-Info64} $>$ Qua\-Zip\-::get\-File\-Info\-List64 (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZip_a474e66b1b696a9e00edcc067484c36ad}
+
+
+Returns information list about all files inside the archive. 
+
+This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
+
+This function supports zip64.
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{get\-File\-Name\-List()}{p.}{classQuaZip_abb38d8b4c9c4ae0728b48caae9dd82de} 
+
+\doxyref{get\-File\-Info\-List()}{p.}{classQuaZip_a7486af66bede8e131db0cd2e81881387} 
+\end{DoxySeeAlso}
+\index{Qua\-Zip@{Qua\-Zip}!set\-Zip64\-Enabled@{set\-Zip64\-Enabled}}
+\index{set\-Zip64\-Enabled@{set\-Zip64\-Enabled}!QuaZip@{Qua\-Zip}}
+\subsubsection[{set\-Zip64\-Enabled}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-::set\-Zip64\-Enabled (
+\begin{DoxyParamCaption}
+\item[{bool}]{zip64}
+\end{DoxyParamCaption}
+)}\label{classQuaZip_ab99a22efae02ebb4b5c9cd8eedc1c0b0}
+
+
+Enables the zip64 mode. 
+
+
+\begin{DoxyParams}{Parameters}
+{\em zip64} & If {\ttfamily true}, the zip64 mode is enabled, disabled otherwise.\\
+\hline
+\end{DoxyParams}
+Once this is enabled, all new files (until the mode is disabled again) will be created in the zip64 mode, thus enabling the ability to write files larger than 4 G\-B. By default, the zip64 mode is off due to compatibility reasons.
+
+Note that this does not affect the ability to read zip64 archives in any way.
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{is\-Zip64\-Enabled()}{p.}{classQuaZip_a1b638566390d7599ba5982e844b151f4} 
+\end{DoxySeeAlso}
+\index{Qua\-Zip@{Qua\-Zip}!is\-Zip64\-Enabled@{is\-Zip64\-Enabled}}
+\index{is\-Zip64\-Enabled@{is\-Zip64\-Enabled}!QuaZip@{Qua\-Zip}}
+\subsubsection[{is\-Zip64\-Enabled}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-::is\-Zip64\-Enabled (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZip_a1b638566390d7599ba5982e844b151f4}
+
+
+Returns whether the zip64 mode is enabled. 
+
+\begin{DoxyReturn}{Returns}
+{\ttfamily true} if and only if the zip64 mode is enabled.
+\end{DoxyReturn}
+\begin{DoxySeeAlso}{See Also}
+\doxyref{set\-Zip64\-Enabled()}{p.}{classQuaZip_ab99a22efae02ebb4b5c9cd8eedc1c0b0} 
+\end{DoxySeeAlso}
+
+
+Referenced by Qua\-Zip\-File\-::open().
+
+\index{Qua\-Zip@{Qua\-Zip}!is\-Auto\-Close@{is\-Auto\-Close}}
+\index{is\-Auto\-Close@{is\-Auto\-Close}!QuaZip@{Qua\-Zip}}
+\subsubsection[{is\-Auto\-Close}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-::is\-Auto\-Close (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZip_adc2cc762ab5744720ae4d33290b5f5bf}
+
+
+Returns the auto-\/close flag. 
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{set\-Auto\-Close()}{p.}{classQuaZip_a54bfc924762774ccf9f99be075ba7b0e} 
+\end{DoxySeeAlso}
+\index{Qua\-Zip@{Qua\-Zip}!set\-Auto\-Close@{set\-Auto\-Close}}
+\index{set\-Auto\-Close@{set\-Auto\-Close}!QuaZip@{Qua\-Zip}}
+\subsubsection[{set\-Auto\-Close}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-::set\-Auto\-Close (
+\begin{DoxyParamCaption}
+\item[{bool}]{auto\-Close}
+\end{DoxyParamCaption}
+) const}\label{classQuaZip_a54bfc924762774ccf9f99be075ba7b0e}
+
+
+Sets or unsets the auto-\/close flag. 
+
+By default, Qua\-Z\-I\-P opens the underlying Q\-I\-O\-Device when \doxyref{open()}{p.}{classQuaZip_abfa4e6018b2964a3d10a4c54e5ab3962} is called, and closes it when \doxyref{close()}{p.}{classQuaZip_a7a4323b73e12f3b4470109f200728f9f} is called. In some cases, when the device is set explicitly using \doxyref{set\-Io\-Device()}{p.}{classQuaZip_a64642948b6531ee54f5522f29e388cc6}, it may be desirable to leave the device open. If the auto-\/close flag is unset using this method, then the devi [...]
+
+If it is needed to clear this flag, it is recommended to do so before opening the archive because otherwise Qua\-Z\-I\-P may close the device during the \doxyref{open()}{p.}{classQuaZip_abfa4e6018b2964a3d10a4c54e5ab3962} call if an error is encountered after the device is opened.
+
+If the device was not set explicitly, but rather the \doxyref{set\-Zip\-Name()}{p.}{classQuaZip_aa80b661de1262af905d1677dbcb008cc} or the appropriate constructor was used to set the Z\-I\-P file name instead, then the auto-\/close flag has no effect, and the internal device is closed nevertheless because there is no other way to close it.
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{is\-Auto\-Close()}{p.}{classQuaZip_adc2cc762ab5744720ae4d33290b5f5bf} 
+
+\doxyref{set\-Io\-Device()}{p.}{classQuaZip_a64642948b6531ee54f5522f29e388cc6} 
+\end{DoxySeeAlso}
+\index{Qua\-Zip@{Qua\-Zip}!set\-Default\-File\-Name\-Codec@{set\-Default\-File\-Name\-Codec}}
+\index{set\-Default\-File\-Name\-Codec@{set\-Default\-File\-Name\-Codec}!QuaZip@{Qua\-Zip}}
+\subsubsection[{set\-Default\-File\-Name\-Codec}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-::set\-Default\-File\-Name\-Codec (
+\begin{DoxyParamCaption}
+\item[{Q\-Text\-Codec $\ast$}]{codec}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [static]}}\label{classQuaZip_a317f5db89d84a80417338a3ab89770da}
+
+
+Sets the default file name codec to use. 
+
+The default codec is used by the constructors, so calling this function won't affect the \doxyref{Qua\-Zip}{p.}{classQuaZip} instances already created at that moment.
+
+The codec specified here can be overriden by calling \doxyref{set\-File\-Name\-Codec()}{p.}{classQuaZip_a339010b5566704ba3c9cafbfe848d8fb}. If neither function is called, Q\-Text\-Codec\-::codec\-For\-Locale() will be used to decode or encode file names. Use this function with caution if the application uses other libraries that depend on Qua\-Z\-I\-P. Those libraries can either call this function by themselves, thus overriding your setting or can rely on the default encoding, thus faili [...]
+
+In most cases, using \doxyref{set\-File\-Name\-Codec()}{p.}{classQuaZip_a339010b5566704ba3c9cafbfe848d8fb} instead is the right choice. However, if you depend on third-\/party code that uses Qua\-Z\-I\-P, then the reasons stated above can actually become a reason to use this function in case the third-\/party code in question fails because it doesn't understand the encoding you need and doesn't provide a way to specify it. This applies to the \doxyref{Jl\-Compress}{p.}{classJlCompress} c [...]
+
+In short\-: use \doxyref{set\-File\-Name\-Codec()}{p.}{classQuaZip_a339010b5566704ba3c9cafbfe848d8fb} when you can, resort to \doxyref{set\-Default\-File\-Name\-Codec()}{p.}{classQuaZip_a317f5db89d84a80417338a3ab89770da} when you don't have access to the \doxyref{Qua\-Zip}{p.}{classQuaZip} instance.
+
+
+\begin{DoxyParams}{Parameters}
+{\em codec} & The codec to use by default. If N\-U\-L\-L, resets to default. \\
+\hline
+\end{DoxyParams}
+
+
+Referenced by set\-Default\-File\-Name\-Codec().
+
+\index{Qua\-Zip@{Qua\-Zip}!set\-Default\-File\-Name\-Codec@{set\-Default\-File\-Name\-Codec}}
+\index{set\-Default\-File\-Name\-Codec@{set\-Default\-File\-Name\-Codec}!QuaZip@{Qua\-Zip}}
+\subsubsection[{set\-Default\-File\-Name\-Codec}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-::set\-Default\-File\-Name\-Codec (
+\begin{DoxyParamCaption}
+\item[{const char $\ast$}]{codec\-Name}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [static]}}\label{classQuaZip_a694af3c0ab076fab7bf619952f6fbfea}
+This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Equivalent to calling set\-Deflt\-File\-Name\-Codec(\-Q\-Text\-Codec\-::codec\-For\-Name(codec\-Name)). 
+
+References set\-Default\-File\-Name\-Codec().
+
+
+
+The documentation for this class was generated from the following files\-:\begin{DoxyCompactItemize}
+\item 
+quazip/quazip.\-h\item 
+quazip/quazip.\-cpp\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaZipDir.tex b/3rdparty/quazip-0.7/doc/latex/classQuaZipDir.tex
new file mode 100644
index 0000000..8617c63
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaZipDir.tex
@@ -0,0 +1,419 @@
+\section{Qua\-Zip\-Dir Class Reference}
+\label{classQuaZipDir}\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}}
+
+
+Provides Z\-I\-P archive navigation.  
+
+
+
+
+{\ttfamily \#include $<$quazipdir.\-h$>$}
+
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+{\bf Qua\-Zip\-Dir} (const {\bf Qua\-Zip\-Dir} \&that)\label{classQuaZipDir_a6c9cc8b74c52d3fe997b753370566690}
+
+\begin{DoxyCompactList}\small\item\em The copy constructor. \end{DoxyCompactList}\item 
+{\bf Qua\-Zip\-Dir} ({\bf Qua\-Zip} $\ast$zip, const Q\-String \&dir=Q\-String())
+\begin{DoxyCompactList}\small\item\em Constructs a \doxyref{Qua\-Zip\-Dir}{p.}{classQuaZipDir} instance pointing to the specified directory. \end{DoxyCompactList}\item 
+{\bf $\sim$\-Qua\-Zip\-Dir} ()\label{classQuaZipDir_ae95d60e2c23e611723371bf8fff2b095}
+
+\begin{DoxyCompactList}\small\item\em Destructor. \end{DoxyCompactList}\item 
+bool {\bf operator==} (const {\bf Qua\-Zip\-Dir} \&that)\label{classQuaZipDir_a4a2e07484c7159a3f469922ba2383547}
+
+\begin{DoxyCompactList}\small\item\em The assignment operator. \end{DoxyCompactList}\item 
+bool {\bf operator!=} (const {\bf Qua\-Zip\-Dir} \&that)
+\begin{DoxyCompactList}\small\item\em operator!= \end{DoxyCompactList}\item 
+{\bf Qua\-Zip\-Dir} \& {\bf operator=} (const {\bf Qua\-Zip\-Dir} \&that)
+\begin{DoxyCompactList}\small\item\em operator== \end{DoxyCompactList}\item 
+Q\-String {\bf operator[$\,$]} (int pos) const \label{classQuaZipDir_a9e37ef5318c44a4575c58d66110e535a}
+
+\begin{DoxyCompactList}\small\item\em Returns the name of the entry at the specified position. \end{DoxyCompactList}\item 
+{\bf Qua\-Zip\-::\-Case\-Sensitivity} {\bf case\-Sensitivity} () const \label{classQuaZipDir_ad7ab403a8d36a3b6149da86ea37178f8}
+
+\begin{DoxyCompactList}\small\item\em Returns the current case sensitivity mode. \end{DoxyCompactList}\item 
+bool {\bf cd} (const Q\-String \&{\bf dir\-Name})
+\begin{DoxyCompactList}\small\item\em Changes the 'current' directory. \end{DoxyCompactList}\item 
+bool {\bf cd\-Up} ()\label{classQuaZipDir_a62306db3f4c0866930fa35c7348b84b3}
+
+\begin{DoxyCompactList}\small\item\em Goes up. \end{DoxyCompactList}\item 
+uint {\bf count} () const \label{classQuaZipDir_aa3f14665e3991351f4ef94ab8e0ab29d}
+
+\begin{DoxyCompactList}\small\item\em Returns the number of entries in the directory. \end{DoxyCompactList}\item 
+Q\-String {\bf dir\-Name} () const 
+\begin{DoxyCompactList}\small\item\em Returns the current directory name. \end{DoxyCompactList}\item 
+Q\-List$<$ {\bf Qua\-Zip\-File\-Info} $>$ {\bf entry\-Info\-List} (const Q\-String\-List \&{\bf name\-Filters}, Q\-Dir\-::\-Filters filters=Q\-Dir\-::\-No\-Filter, Q\-Dir\-::\-Sort\-Flags sort=Q\-Dir\-::\-No\-Sort) const 
+\begin{DoxyCompactList}\small\item\em Returns the list of the entries in the directory. \end{DoxyCompactList}\item 
+Q\-List$<$ {\bf Qua\-Zip\-File\-Info} $>$ {\bf entry\-Info\-List} (Q\-Dir\-::\-Filters filters=Q\-Dir\-::\-No\-Filter, Q\-Dir\-::\-Sort\-Flags sort=Q\-Dir\-::\-No\-Sort) const 
+\begin{DoxyCompactList}\small\item\em Returns the list of the entries in the directory. \end{DoxyCompactList}\item 
+Q\-List$<$ {\bf Qua\-Zip\-File\-Info64} $>$ {\bf entry\-Info\-List64} (const Q\-String\-List \&{\bf name\-Filters}, Q\-Dir\-::\-Filters filters=Q\-Dir\-::\-No\-Filter, Q\-Dir\-::\-Sort\-Flags sort=Q\-Dir\-::\-No\-Sort) const 
+\begin{DoxyCompactList}\small\item\em Returns the list of the entries in the directory with zip64 support. \end{DoxyCompactList}\item 
+Q\-List$<$ {\bf Qua\-Zip\-File\-Info64} $>$ {\bf entry\-Info\-List64} (Q\-Dir\-::\-Filters filters=Q\-Dir\-::\-No\-Filter, Q\-Dir\-::\-Sort\-Flags sort=Q\-Dir\-::\-No\-Sort) const 
+\begin{DoxyCompactList}\small\item\em Returns the list of the entries in the directory with zip64 support. \end{DoxyCompactList}\item 
+Q\-String\-List {\bf entry\-List} (const Q\-String\-List \&{\bf name\-Filters}, Q\-Dir\-::\-Filters filters=Q\-Dir\-::\-No\-Filter, Q\-Dir\-::\-Sort\-Flags sort=Q\-Dir\-::\-No\-Sort) const 
+\begin{DoxyCompactList}\small\item\em Returns the list of the entry names in the directory. \end{DoxyCompactList}\item 
+Q\-String\-List {\bf entry\-List} (Q\-Dir\-::\-Filters filters=Q\-Dir\-::\-No\-Filter, Q\-Dir\-::\-Sort\-Flags sort=Q\-Dir\-::\-No\-Sort) const 
+\begin{DoxyCompactList}\small\item\em Returns the list of the entry names in the directory. \end{DoxyCompactList}\item 
+bool {\bf exists} (const Q\-String \&file\-Name) const 
+\begin{DoxyCompactList}\small\item\em Returns {\ttfamily true} if the entry with the specified name exists. \end{DoxyCompactList}\item 
+bool {\bf exists} () const \label{classQuaZipDir_a22c8f63ce874f5c0e958ae5f42e6d004}
+
+\begin{DoxyCompactList}\small\item\em Return {\ttfamily true} if the directory pointed by this \doxyref{Qua\-Zip\-Dir}{p.}{classQuaZipDir} exists. \end{DoxyCompactList}\item 
+Q\-String {\bf file\-Path} (const Q\-String \&file\-Name) const 
+\begin{DoxyCompactList}\small\item\em Returns the full path to the specified file. \end{DoxyCompactList}\item 
+Q\-Dir\-::\-Filters {\bf filter} ()\label{classQuaZipDir_abeee1810c7c1c1af93364081dbf70d38}
+
+\begin{DoxyCompactList}\small\item\em Returns the default filter. \end{DoxyCompactList}\item 
+bool {\bf is\-Root} () const 
+\begin{DoxyCompactList}\small\item\em Returns if the \doxyref{Qua\-Zip\-Dir}{p.}{classQuaZipDir} points to the root of the archive. \end{DoxyCompactList}\item 
+Q\-String\-List {\bf name\-Filters} () const \label{classQuaZipDir_a00f18e23abb8cac04f975e7f31553f2e}
+
+\begin{DoxyCompactList}\small\item\em Return the default name filter. \end{DoxyCompactList}\item 
+Q\-String {\bf path} () const 
+\begin{DoxyCompactList}\small\item\em Returns the path to the current dir. \end{DoxyCompactList}\item 
+Q\-String {\bf relative\-File\-Path} (const Q\-String \&file\-Name) const 
+\begin{DoxyCompactList}\small\item\em Returns the path to the specified file relative to the current dir. \end{DoxyCompactList}\item 
+void {\bf set\-Case\-Sensitivity} ({\bf Qua\-Zip\-::\-Case\-Sensitivity} {\bf case\-Sensitivity})\label{classQuaZipDir_ad53c720975bb0c49a823355f7d518793}
+
+\begin{DoxyCompactList}\small\item\em Sets the default case sensitivity mode. \end{DoxyCompactList}\item 
+void {\bf set\-Filter} (Q\-Dir\-::\-Filters filters)\label{classQuaZipDir_a779a43641f0f3802678e39c9acd1fddb}
+
+\begin{DoxyCompactList}\small\item\em Sets the default filter. \end{DoxyCompactList}\item 
+void {\bf set\-Name\-Filters} (const Q\-String\-List \&{\bf name\-Filters})\label{classQuaZipDir_abcf208bfd6136e14f36725ae79dce2be}
+
+\begin{DoxyCompactList}\small\item\em Sets the default name filter. \end{DoxyCompactList}\item 
+void {\bf set\-Path} (const Q\-String \&{\bf path})
+\begin{DoxyCompactList}\small\item\em Goes to the specified path. \end{DoxyCompactList}\item 
+void {\bf set\-Sorting} (Q\-Dir\-::\-Sort\-Flags sort)\label{classQuaZipDir_ae43e9d717e3c4b1c0d4790cf558e7451}
+
+\begin{DoxyCompactList}\small\item\em Sets the default sorting mode. \end{DoxyCompactList}\item 
+Q\-Dir\-::\-Sort\-Flags {\bf sorting} () const \label{classQuaZipDir_a4000523c961ab9e0cad08641ff10e3fa}
+
+\begin{DoxyCompactList}\small\item\em Returns the default sorting mode. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Provides Z\-I\-P archive navigation. 
+
+This class is modelled after Q\-Dir, and is designed to provide similar features for Z\-I\-P archives.
+
+The only significant difference from Q\-Dir is that the root path is not '/', but an empty string since that's how the file paths are stored in the archive. However, \doxyref{Qua\-Zip\-Dir}{p.}{classQuaZipDir} understands the paths starting with '/'. It is important in a few places\-:
+
+
+\begin{DoxyItemize}
+\item In the \doxyref{cd()}{p.}{classQuaZipDir_aa829afc0243f1d307302f1167edecc7b} function.
+\item In the constructor.
+\item In the \doxyref{exists()}{p.}{classQuaZipDir_aacb488fec6e951ac80e5d473534fee97} function.
+\item In the relative\-Path() function.
+\end{DoxyItemize}
+
+Note that since Z\-I\-P uses '/' on all platforms, the '\textbackslash{}' separator is not supported. 
+
+\subsection{Constructor \& Destructor Documentation}
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!Qua\-Zip\-Dir@{Qua\-Zip\-Dir}}
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{Qua\-Zip\-Dir}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Zip\-Dir\-::\-Qua\-Zip\-Dir (
+\begin{DoxyParamCaption}
+\item[{{\bf Qua\-Zip} $\ast$}]{zip, }
+\item[{const Q\-String \&}]{dir = {\ttfamily QString()}}
+\end{DoxyParamCaption}
+)}\label{classQuaZipDir_a19e5e3a54f322ce03e7f7606a87a2ba1}
+
+
+Constructs a \doxyref{Qua\-Zip\-Dir}{p.}{classQuaZipDir} instance pointing to the specified directory. 
+
+If {\itshape dir} is not specified, points to the root of the archive. The same happens if the {\itshape dir} is "/". 
+
+\subsection{Member Function Documentation}
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!operator!=@{operator!=}}
+\index{operator!=@{operator!=}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{operator!=}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-Dir\-::operator!= (
+\begin{DoxyParamCaption}
+\item[{const {\bf Qua\-Zip\-Dir} \&}]{that}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [inline]}}\label{classQuaZipDir_a6e60d858d05774c958215ee7741eceed}
+
+
+operator!= 
+
+\begin{DoxyReturn}{Returns}
+{\ttfamily true} if either this and {\itshape that} use different \doxyref{Qua\-Zip}{p.}{classQuaZip} instances or if they point to different directories. 
+\end{DoxyReturn}
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!operator=@{operator=}}
+\index{operator=@{operator=}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{operator=}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Qua\-Zip\-Dir} \& Qua\-Zip\-Dir\-::operator= (
+\begin{DoxyParamCaption}
+\item[{const {\bf Qua\-Zip\-Dir} \&}]{that}
+\end{DoxyParamCaption}
+)}\label{classQuaZipDir_aa603c69be0c1597add5951b19f8bc961}
+
+
+operator== 
+
+\begin{DoxyReturn}{Returns}
+{\ttfamily true} if both this and {\itshape that} use the same \doxyref{Qua\-Zip}{p.}{classQuaZip} instance and point to the same directory. 
+\end{DoxyReturn}
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!cd@{cd}}
+\index{cd@{cd}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{cd}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-Dir\-::cd (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{dir\-Name}
+\end{DoxyParamCaption}
+)}\label{classQuaZipDir_aa829afc0243f1d307302f1167edecc7b}
+
+
+Changes the 'current' directory. 
+
+If the path starts with '/', it is interpreted as an absolute path from the root of the archive. Otherwise, it is interpreted as a path relative to the current directory as was set by the previous \doxyref{cd()}{p.}{classQuaZipDir_aa829afc0243f1d307302f1167edecc7b} or the constructor.
+
+Note that the subsequent \doxyref{path()}{p.}{classQuaZipDir_a68ac82ad605c0b10f9ee1a2d6d474f52} call will not return a path starting with '/' in all cases. 
+
+References cd(), dir\-Name(), exists(), is\-Root(), and path().
+
+
+
+Referenced by cd(), and cd\-Up().
+
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!dir\-Name@{dir\-Name}}
+\index{dir\-Name@{dir\-Name}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{dir\-Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String Qua\-Zip\-Dir\-::dir\-Name (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipDir_afd2f76410f7728a7166b7598926fbf96}
+
+
+Returns the current directory name. 
+
+The name doesn't include the path. 
+
+Referenced by cd().
+
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!entry\-Info\-List@{entry\-Info\-List}}
+\index{entry\-Info\-List@{entry\-Info\-List}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{entry\-Info\-List}]{\setlength{\rightskip}{0pt plus 5cm}Q\-List$<$ {\bf Qua\-Zip\-File\-Info} $>$ Qua\-Zip\-Dir\-::entry\-Info\-List (
+\begin{DoxyParamCaption}
+\item[{const Q\-String\-List \&}]{name\-Filters, }
+\item[{Q\-Dir\-::\-Filters}]{filters = {\ttfamily QDir\-:\-:NoFilter}, }
+\item[{Q\-Dir\-::\-Sort\-Flags}]{sort = {\ttfamily QDir\-:\-:NoSort}}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipDir_aef966735a146fc10c9527c236aa89261}
+
+
+Returns the list of the entries in the directory. 
+
+
+\begin{DoxyParams}{Parameters}
+{\em name\-Filters} & The list of file patterns to list, uses the same syntax as Q\-Dir. \\
+\hline
+{\em filters} & The entry type filters, only Files and Dirs are accepted. \\
+\hline
+{\em sort} & Sorting mode. \\
+\hline
+\end{DoxyParams}
+
+
+Referenced by entry\-Info\-List().
+
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!entry\-Info\-List@{entry\-Info\-List}}
+\index{entry\-Info\-List@{entry\-Info\-List}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{entry\-Info\-List}]{\setlength{\rightskip}{0pt plus 5cm}Q\-List$<$ {\bf Qua\-Zip\-File\-Info} $>$ Qua\-Zip\-Dir\-::entry\-Info\-List (
+\begin{DoxyParamCaption}
+\item[{Q\-Dir\-::\-Filters}]{filters = {\ttfamily QDir\-:\-:NoFilter}, }
+\item[{Q\-Dir\-::\-Sort\-Flags}]{sort = {\ttfamily QDir\-:\-:NoSort}}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipDir_abec530f15597ddf8c8d1f340a333f7aa}
+
+
+Returns the list of the entries in the directory. 
+
+This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
+
+The same as entry\-Info\-List(\-Q\-String\-List(), filters, sort). 
+
+References entry\-Info\-List().
+
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!entry\-Info\-List64@{entry\-Info\-List64}}
+\index{entry\-Info\-List64@{entry\-Info\-List64}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{entry\-Info\-List64}]{\setlength{\rightskip}{0pt plus 5cm}Q\-List$<$ {\bf Qua\-Zip\-File\-Info64} $>$ Qua\-Zip\-Dir\-::entry\-Info\-List64 (
+\begin{DoxyParamCaption}
+\item[{const Q\-String\-List \&}]{name\-Filters, }
+\item[{Q\-Dir\-::\-Filters}]{filters = {\ttfamily QDir\-:\-:NoFilter}, }
+\item[{Q\-Dir\-::\-Sort\-Flags}]{sort = {\ttfamily QDir\-:\-:NoSort}}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipDir_ae2b5a4b251db7aeb165c6656da0e3431}
+
+
+Returns the list of the entries in the directory with zip64 support. 
+
+
+\begin{DoxyParams}{Parameters}
+{\em name\-Filters} & The list of file patterns to list, uses the same syntax as Q\-Dir. \\
+\hline
+{\em filters} & The entry type filters, only Files and Dirs are accepted. \\
+\hline
+{\em sort} & Sorting mode. \\
+\hline
+\end{DoxyParams}
+
+
+Referenced by entry\-Info\-List64().
+
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!entry\-Info\-List64@{entry\-Info\-List64}}
+\index{entry\-Info\-List64@{entry\-Info\-List64}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{entry\-Info\-List64}]{\setlength{\rightskip}{0pt plus 5cm}Q\-List$<$ {\bf Qua\-Zip\-File\-Info64} $>$ Qua\-Zip\-Dir\-::entry\-Info\-List64 (
+\begin{DoxyParamCaption}
+\item[{Q\-Dir\-::\-Filters}]{filters = {\ttfamily QDir\-:\-:NoFilter}, }
+\item[{Q\-Dir\-::\-Sort\-Flags}]{sort = {\ttfamily QDir\-:\-:NoSort}}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipDir_a8c38ec214c300049685cbf71486636d5}
+
+
+Returns the list of the entries in the directory with zip64 support. 
+
+This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
+
+The same as entry\-Info\-List64(\-Q\-String\-List(), filters, sort). 
+
+References entry\-Info\-List64().
+
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!entry\-List@{entry\-List}}
+\index{entry\-List@{entry\-List}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{entry\-List}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String\-List Qua\-Zip\-Dir\-::entry\-List (
+\begin{DoxyParamCaption}
+\item[{const Q\-String\-List \&}]{name\-Filters, }
+\item[{Q\-Dir\-::\-Filters}]{filters = {\ttfamily QDir\-:\-:NoFilter}, }
+\item[{Q\-Dir\-::\-Sort\-Flags}]{sort = {\ttfamily QDir\-:\-:NoSort}}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipDir_a4a32faa77c4120cd3c6db4b683fa16d9}
+
+
+Returns the list of the entry names in the directory. 
+
+The same as entry\-Info\-List(name\-Filters, filters, sort), but only returns entry names. 
+
+Referenced by count(), entry\-List(), exists(), and operator[$\,$]().
+
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!entry\-List@{entry\-List}}
+\index{entry\-List@{entry\-List}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{entry\-List}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String\-List Qua\-Zip\-Dir\-::entry\-List (
+\begin{DoxyParamCaption}
+\item[{Q\-Dir\-::\-Filters}]{filters = {\ttfamily QDir\-:\-:NoFilter}, }
+\item[{Q\-Dir\-::\-Sort\-Flags}]{sort = {\ttfamily QDir\-:\-:NoSort}}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipDir_ab20e9d3de675b74fcacc98accbc1d766}
+
+
+Returns the list of the entry names in the directory. 
+
+This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
+
+The same as entry\-List(\-Q\-String\-List(), filters, sort). 
+
+References entry\-List().
+
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!exists@{exists}}
+\index{exists@{exists}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{exists}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-Dir\-::exists (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{file\-Name}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipDir_aacb488fec6e951ac80e5d473534fee97}
+
+
+Returns {\ttfamily true} if the entry with the specified name exists. 
+
+The ".." is considered to exist if the current directory is not root. The "." and "/" are considered to always exist. Paths starting with "/" are relative to the archive root, other paths are relative to the current dir. 
+
+References Qua\-Zip\-::convert\-Case\-Sensitivity(), entry\-List(), file\-Path(), and is\-Root().
+
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!file\-Path@{file\-Path}}
+\index{file\-Path@{file\-Path}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{file\-Path}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String Qua\-Zip\-Dir\-::file\-Path (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{file\-Name}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipDir_ae8b576a150f8d62c902067603cbc97ae}
+
+
+Returns the full path to the specified file. 
+
+Doesn't check if the file actually exists. 
+
+Referenced by exists().
+
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!is\-Root@{is\-Root}}
+\index{is\-Root@{is\-Root}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{is\-Root}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-Dir\-::is\-Root (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipDir_a598fdf23f1b37e1876476e5969040a32}
+
+
+Returns if the \doxyref{Qua\-Zip\-Dir}{p.}{classQuaZipDir} points to the root of the archive. 
+
+Not that the root path is the empty string, not '/'. 
+
+Referenced by cd(), and exists().
+
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!path@{path}}
+\index{path@{path}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{path}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String Qua\-Zip\-Dir\-::path (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipDir_a68ac82ad605c0b10f9ee1a2d6d474f52}
+
+
+Returns the path to the current dir. 
+
+The path never starts with '/', and the root path is an empty string. 
+
+Referenced by cd(), and set\-Path().
+
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!relative\-File\-Path@{relative\-File\-Path}}
+\index{relative\-File\-Path@{relative\-File\-Path}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{relative\-File\-Path}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String Qua\-Zip\-Dir\-::relative\-File\-Path (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{file\-Name}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipDir_a2ae89c2b85786a0168656fc7a3faaf01}
+
+
+Returns the path to the specified file relative to the current dir. 
+
+This function is mostly useless, provided only for the sake of completeness.
+
+
+\begin{DoxyParams}{Parameters}
+{\em file\-Name} & The path to the file, should start with "/" if relative to the archive root. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Path relative to the current dir. 
+\end{DoxyReturn}
+\index{Qua\-Zip\-Dir@{Qua\-Zip\-Dir}!set\-Path@{set\-Path}}
+\index{set\-Path@{set\-Path}!QuaZipDir@{Qua\-Zip\-Dir}}
+\subsubsection[{set\-Path}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-Dir\-::set\-Path (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{path}
+\end{DoxyParamCaption}
+)}\label{classQuaZipDir_ae82d06e43856414c30583205d337c111}
+
+
+Goes to the specified path. 
+
+The difference from \doxyref{cd()}{p.}{classQuaZipDir_aa829afc0243f1d307302f1167edecc7b} is that this function never checks if the path actually exists and doesn't use relative paths, so it's possible to go to the root directory with set\-Path("").
+
+Note that this function still chops the trailing and/or leading '/' and treats a single '/' as the root path (\doxyref{path()}{p.}{classQuaZipDir_a68ac82ad605c0b10f9ee1a2d6d474f52} will still return an empty string). 
+
+References path().
+
+
+
+The documentation for this class was generated from the following files\-:\begin{DoxyCompactItemize}
+\item 
+quazip/quazipdir.\-h\item 
+quazip/quazipdir.\-cpp\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaZipFile.tex b/3rdparty/quazip-0.7/doc/latex/classQuaZipFile.tex
new file mode 100644
index 0000000..cc8d596
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaZipFile.tex
@@ -0,0 +1,700 @@
+\section{Qua\-Zip\-File Class Reference}
+\label{classQuaZipFile}\index{Qua\-Zip\-File@{Qua\-Zip\-File}}
+
+
+A file inside Z\-I\-P archive.  
+
+
+
+
+{\ttfamily \#include $<$quazip/quazipfile.\-h$>$}
+
+
+
+Inheritance diagram for Qua\-Zip\-File\-:
+\nopagebreak
+\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[width=108pt]{classQuaZipFile__inherit__graph}
+\end{center}
+\end{figure}
+
+
+Collaboration diagram for Qua\-Zip\-File\-:
+\nopagebreak
+\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[width=108pt]{classQuaZipFile__coll__graph}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+{\bf Qua\-Zip\-File} ()
+\begin{DoxyCompactList}\small\item\em Constructs a \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instance. \end{DoxyCompactList}\item 
+{\bf Qua\-Zip\-File} (Q\-Object $\ast$parent)
+\begin{DoxyCompactList}\small\item\em Constructs a \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instance. \end{DoxyCompactList}\item 
+{\bf Qua\-Zip\-File} (const Q\-String \&zip\-Name, Q\-Object $\ast$parent=N\-U\-L\-L)
+\begin{DoxyCompactList}\small\item\em Constructs a \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instance. \end{DoxyCompactList}\item 
+{\bf Qua\-Zip\-File} (const Q\-String \&zip\-Name, const Q\-String \&file\-Name, {\bf Qua\-Zip\-::\-Case\-Sensitivity} cs={\bf Qua\-Zip\-::cs\-Default}, Q\-Object $\ast$parent=N\-U\-L\-L)
+\begin{DoxyCompactList}\small\item\em Constructs a \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instance. \end{DoxyCompactList}\item 
+{\bf Qua\-Zip\-File} ({\bf Qua\-Zip} $\ast$zip, Q\-Object $\ast$parent=N\-U\-L\-L)
+\begin{DoxyCompactList}\small\item\em Constructs a \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instance. \end{DoxyCompactList}\item 
+virtual {\bf $\sim$\-Qua\-Zip\-File} ()
+\begin{DoxyCompactList}\small\item\em Destroys a \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instance. \end{DoxyCompactList}\item 
+Q\-String {\bf get\-Zip\-Name} () const 
+\begin{DoxyCompactList}\small\item\em Returns the Z\-I\-P archive file name. \end{DoxyCompactList}\item 
+{\bf Qua\-Zip} $\ast$ {\bf get\-Zip} () const 
+\begin{DoxyCompactList}\small\item\em Returns a pointer to the associated \doxyref{Qua\-Zip}{p.}{classQuaZip} object. \end{DoxyCompactList}\item 
+Q\-String {\bf get\-File\-Name} () const 
+\begin{DoxyCompactList}\small\item\em Returns file name. \end{DoxyCompactList}\item 
+{\bf Qua\-Zip\-::\-Case\-Sensitivity} {\bf get\-Case\-Sensitivity} () const 
+\begin{DoxyCompactList}\small\item\em Returns case sensitivity of the file name. \end{DoxyCompactList}\item 
+Q\-String {\bf get\-Actual\-File\-Name} () const 
+\begin{DoxyCompactList}\small\item\em Returns the actual file name in the archive. \end{DoxyCompactList}\item 
+void {\bf set\-Zip\-Name} (const Q\-String \&zip\-Name)
+\begin{DoxyCompactList}\small\item\em Sets the Z\-I\-P archive file name. \end{DoxyCompactList}\item 
+bool {\bf is\-Raw} () const 
+\begin{DoxyCompactList}\small\item\em Returns {\ttfamily true} if the file was opened in raw mode. \end{DoxyCompactList}\item 
+void {\bf set\-Zip} ({\bf Qua\-Zip} $\ast$zip)
+\begin{DoxyCompactList}\small\item\em Binds to the existing \doxyref{Qua\-Zip}{p.}{classQuaZip} instance. \end{DoxyCompactList}\item 
+void {\bf set\-File\-Name} (const Q\-String \&file\-Name, {\bf Qua\-Zip\-::\-Case\-Sensitivity} cs={\bf Qua\-Zip\-::cs\-Default})
+\begin{DoxyCompactList}\small\item\em Sets the file name. \end{DoxyCompactList}\item 
+virtual bool {\bf open} (Open\-Mode mode)
+\begin{DoxyCompactList}\small\item\em Opens a file for reading. \end{DoxyCompactList}\item 
+bool {\bf open} (Open\-Mode mode, const char $\ast$password)
+\begin{DoxyCompactList}\small\item\em Opens a file for reading. \end{DoxyCompactList}\item 
+bool {\bf open} (Open\-Mode mode, int $\ast$method, int $\ast$level, bool raw, const char $\ast$password=N\-U\-L\-L)
+\begin{DoxyCompactList}\small\item\em Opens a file for reading. \end{DoxyCompactList}\item 
+bool {\bf open} (Open\-Mode mode, const {\bf Qua\-Zip\-New\-Info} \&info, const char $\ast$password=N\-U\-L\-L, quint32 crc=0, int method=Z\-\_\-\-D\-E\-F\-L\-A\-T\-E\-D, int level=Z\-\_\-\-D\-E\-F\-A\-U\-L\-T\-\_\-\-C\-O\-M\-P\-R\-E\-S\-S\-I\-O\-N, bool raw=false, int window\-Bits=-\/M\-A\-X\-\_\-\-W\-B\-I\-T\-S, int mem\-Level=D\-E\-F\-\_\-\-M\-E\-M\-\_\-\-L\-E\-V\-E\-L, int strategy=Z\-\_\-\-D\-E\-F\-A\-U\-L\-T\-\_\-\-S\-T\-R\-A\-T\-E\-G\-Y)
+\begin{DoxyCompactList}\small\item\em Opens a file for writing. \end{DoxyCompactList}\item 
+virtual bool {\bf is\-Sequential} () const \label{classQuaZipFile_a64430ec50820c8096f963a7e5f53001f}
+
+\begin{DoxyCompactList}\small\item\em Returns {\ttfamily true}, but \doxyref{beware}{p.}{classQuaZipFile_quazipfile-sequential}! \end{DoxyCompactList}\item 
+virtual qint64 {\bf pos} () const 
+\begin{DoxyCompactList}\small\item\em Returns current position in the file. \end{DoxyCompactList}\item 
+virtual bool {\bf at\-End} () const 
+\begin{DoxyCompactList}\small\item\em Returns {\ttfamily true} if the end of file was reached. \end{DoxyCompactList}\item 
+virtual qint64 {\bf size} () const 
+\begin{DoxyCompactList}\small\item\em Returns file size. \end{DoxyCompactList}\item 
+qint64 {\bf csize} () const 
+\begin{DoxyCompactList}\small\item\em Returns compressed file size. \end{DoxyCompactList}\item 
+qint64 {\bf usize} () const 
+\begin{DoxyCompactList}\small\item\em Returns uncompressed file size. \end{DoxyCompactList}\item 
+bool {\bf get\-File\-Info} ({\bf Qua\-Zip\-File\-Info} $\ast$info)
+\begin{DoxyCompactList}\small\item\em Gets information about current file. \end{DoxyCompactList}\item 
+bool {\bf get\-File\-Info} ({\bf Qua\-Zip\-File\-Info64} $\ast$info)
+\begin{DoxyCompactList}\small\item\em Gets information about current file with zip64 support. \end{DoxyCompactList}\item 
+virtual void {\bf close} ()
+\begin{DoxyCompactList}\small\item\em Closes the file. \end{DoxyCompactList}\item 
+int {\bf get\-Zip\-Error} () const \label{classQuaZipFile_a26d2ee56aad947193b73052f80597ef0}
+
+\begin{DoxyCompactList}\small\item\em Returns the error code returned by the last Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I call. \end{DoxyCompactList}\item 
+virtual qint64 {\bf bytes\-Available} () const \label{classQuaZipFile_a29fbfb34677f69394ae7c986ffd3a0c1}
+
+\begin{DoxyCompactList}\small\item\em Returns the number of bytes available for reading. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\subsection*{Protected Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+qint64 {\bf read\-Data} (char $\ast$data, qint64 max\-Size)\label{classQuaZipFile_aa1f2274e1579327855a17d67a9046ec2}
+
+\begin{DoxyCompactList}\small\item\em Implementation of the Q\-I\-O\-Device\-::read\-Data(). \end{DoxyCompactList}\item 
+qint64 {\bf write\-Data} (const char $\ast$data, qint64 max\-Size)\label{classQuaZipFile_abd07949a6fcc2ef094d2be5398bc8e7c}
+
+\begin{DoxyCompactList}\small\item\em Implementation of the Q\-I\-O\-Device\-::write\-Data(). \end{DoxyCompactList}\end{DoxyCompactItemize}
+\subsection*{Friends}
+\begin{DoxyCompactItemize}
+\item 
+class {\bfseries Qua\-Zip\-File\-Private}\label{classQuaZipFile_abeded291f2788ca39fe2256d78f95266}
+
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+A file inside Z\-I\-P archive. 
+
+This is the most interesting class. Not only it provides C++ interface to the Z\-I\-P/\-U\-N\-Z\-I\-P package, but also integrates it with Qt by subclassing Q\-I\-O\-Device. This makes possible to access files inside Z\-I\-P archive using Q\-Text\-Stream or Q\-Data\-Stream, for example. Actually, this is the main purpose of the whole Qua\-Z\-I\-P library.
+
+You can either use existing \doxyref{Qua\-Zip}{p.}{classQuaZip} instance to create instance of this class or pass Z\-I\-P archive file name to this class, in which case it will create internal \doxyref{Qua\-Zip}{p.}{classQuaZip} object. See constructors' descriptions for details. Writing is only possible with the existing instance.
+
+Note that due to the underlying library's limitation it is not possible to use multiple \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instances to open several files in the same archive at the same time. If you need to write to multiple files in parallel, then you should write to temporary files first, then pack them all at once when you have finished writing. If you need to read multiple files inside the same archive in parallel, you should extract them all into a temporary directory fi [...]
+At the first thought, \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} has fixed size, the start and the end and should be therefore considered random-\/access device. But there is one major obstacle to making it random-\/access\-: Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I does not support seek() operation and the only way to implement it is through reopening the file and re-\/reading to the required position, but this is prohibitively slow.
+
+Therefore, \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} is considered to be a sequential device. This has advantage of availability of the unget\-Char() operation (Q\-I\-O\-Device does not implement it properly for non-\/sequential devices unless they support seek()). Disadvantage is a somewhat strange behaviour of the \doxyref{size()}{p.}{classQuaZipFile_ad1a17cc690a01c3edfb82984c3a4c8f0} and \doxyref{pos()}{p.}{classQuaZipFile_a90fd55dab83eca7f95df50b2c41b7f22} functions. This should  [...]
+
+\subsection{Constructor \& Destructor Documentation}
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!Qua\-Zip\-File@{Qua\-Zip\-File}}
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{Qua\-Zip\-File}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Zip\-File\-::\-Qua\-Zip\-File (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)}\label{classQuaZipFile_ad31592e0e8a9eaa009c6c0e2040a2158}
+
+
+Constructs a \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instance. 
+
+You should use \doxyref{set\-Zip\-Name()}{p.}{classQuaZipFile_ac8109e9a5c19bea75982ff6986b5cb1e} and \doxyref{set\-File\-Name()}{p.}{classQuaZipFile_a3732ca7704379d457b6a27db8837de95} or \doxyref{set\-Zip()}{p.}{classQuaZipFile_ab7939a26d1e8de2f6aca54f49a12b980} before trying to call \doxyref{open()}{p.}{classQuaZipFile_a4c20c0ef00ae79c9a59eafe2906c9384} on the constructed object. \index{Qua\-Zip\-File@{Qua\-Zip\-File}!Qua\-Zip\-File@{Qua\-Zip\-File}}
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{Qua\-Zip\-File}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Zip\-File\-::\-Qua\-Zip\-File (
+\begin{DoxyParamCaption}
+\item[{Q\-Object $\ast$}]{parent}
+\end{DoxyParamCaption}
+)}\label{classQuaZipFile_a1349ad27f1947bc3e346d83dbf9586c4}
+
+
+Constructs a \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instance. 
+
+{\itshape parent} argument specifies this object's parent object.
+
+You should use \doxyref{set\-Zip\-Name()}{p.}{classQuaZipFile_ac8109e9a5c19bea75982ff6986b5cb1e} and \doxyref{set\-File\-Name()}{p.}{classQuaZipFile_a3732ca7704379d457b6a27db8837de95} or \doxyref{set\-Zip()}{p.}{classQuaZipFile_ab7939a26d1e8de2f6aca54f49a12b980} before trying to call \doxyref{open()}{p.}{classQuaZipFile_a4c20c0ef00ae79c9a59eafe2906c9384} on the constructed object. \index{Qua\-Zip\-File@{Qua\-Zip\-File}!Qua\-Zip\-File@{Qua\-Zip\-File}}
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{Qua\-Zip\-File}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Zip\-File\-::\-Qua\-Zip\-File (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{zip\-Name, }
+\item[{Q\-Object $\ast$}]{parent = {\ttfamily NULL}}
+\end{DoxyParamCaption}
+)}\label{classQuaZipFile_ae614495d6b2404a6c59d7cfca5c3f6fd}
+
+
+Constructs a \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instance. 
+
+{\itshape parent} argument specifies this object's parent object and {\itshape zip\-Name} specifies Z\-I\-P archive file name.
+
+You should use \doxyref{set\-File\-Name()}{p.}{classQuaZipFile_a3732ca7704379d457b6a27db8837de95} before trying to call \doxyref{open()}{p.}{classQuaZipFile_a4c20c0ef00ae79c9a59eafe2906c9384} on the constructed object.
+
+\doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} constructed by this constructor can be used for read only access. Use \doxyref{Qua\-Zip\-File(\-Qua\-Zip$\ast$,\-Q\-Object$\ast$)}{p.}{classQuaZipFile_a54e944a6b3d27030f64c8f30d2cc33bb} for writing. \index{Qua\-Zip\-File@{Qua\-Zip\-File}!Qua\-Zip\-File@{Qua\-Zip\-File}}
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{Qua\-Zip\-File}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Zip\-File\-::\-Qua\-Zip\-File (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{zip\-Name, }
+\item[{const Q\-String \&}]{file\-Name, }
+\item[{{\bf Qua\-Zip\-::\-Case\-Sensitivity}}]{cs = {\ttfamily {\bf Qua\-Zip\-::cs\-Default}}, }
+\item[{Q\-Object $\ast$}]{parent = {\ttfamily NULL}}
+\end{DoxyParamCaption}
+)}\label{classQuaZipFile_ac6e883b5a5d3a58c9c56eb497dd91220}
+
+
+Constructs a \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instance. 
+
+{\itshape parent} argument specifies this object's parent object, {\itshape zip\-Name} specifies Z\-I\-P archive file name and {\itshape file\-Name} and {\itshape cs} specify a name of the file to open inside archive.
+
+\doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} constructed by this constructor can be used for read only access. Use \doxyref{Qua\-Zip\-File(\-Qua\-Zip$\ast$,\-Q\-Object$\ast$)}{p.}{classQuaZipFile_a54e944a6b3d27030f64c8f30d2cc33bb} for writing.
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{Qua\-Zip\-::set\-Current\-File()}{p.}{classQuaZip_a6c657bfcfccb59d728e0da24c677d899} 
+\end{DoxySeeAlso}
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!Qua\-Zip\-File@{Qua\-Zip\-File}}
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{Qua\-Zip\-File}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Zip\-File\-::\-Qua\-Zip\-File (
+\begin{DoxyParamCaption}
+\item[{{\bf Qua\-Zip} $\ast$}]{zip, }
+\item[{Q\-Object $\ast$}]{parent = {\ttfamily NULL}}
+\end{DoxyParamCaption}
+)}\label{classQuaZipFile_a54e944a6b3d27030f64c8f30d2cc33bb}
+
+
+Constructs a \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instance. 
+
+{\itshape parent} argument specifies this object's parent object.
+
+{\itshape zip} is the pointer to the existing \doxyref{Qua\-Zip}{p.}{classQuaZip} object. This \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} object then can be used to read current file in the {\itshape zip} or to write to the file inside it.
+
+\begin{DoxyWarning}{Warning}
+Using this constructor for reading current file can be tricky. Let's take the following example\-: 
+\begin{DoxyCode}
+QuaZip zip(\textcolor{stringliteral}{"archive.zip"});
+zip.open(QuaZip::mdUnzip);
+zip.setCurrentFile(\textcolor{stringliteral}{"file-in-archive"});
+QuaZipFile file(&zip);
+file.open(QIODevice::ReadOnly);
+\textcolor{comment}{// ok, now we can read from the file}
+file.read(somewhere, some);
+zip.setCurrentFile(\textcolor{stringliteral}{"another-file-in-archive"}); \textcolor{comment}{// oops...}
+QuaZipFile anotherFile(&zip);
+anotherFile.open(QIODevice::ReadOnly);
+anotherFile.read(somewhere, some); \textcolor{comment}{// this is still ok...}
+file.read(somewhere, some); \textcolor{comment}{// and this is NOT}
+\end{DoxyCode}
+ So, what exactly happens here? When we change current file in the {\ttfamily zip} archive, {\ttfamily file} that references it becomes invalid (actually, as far as I understand Z\-I\-P/\-U\-N\-Z\-I\-P sources, it becomes closed, but \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} has no means to detect it).
+\end{DoxyWarning}
+Summary\-: do not close {\ttfamily zip} object or change its current file as long as \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} is open. Even better -\/ use another constructors which create internal \doxyref{Qua\-Zip}{p.}{classQuaZip} instances, one per object, and therefore do not cause unnecessary trouble. This constructor may be useful, though, if you already have a \doxyref{Qua\-Zip}{p.}{classQuaZip} instance and do not want to access several files at once. Good example\-: 
+\begin{DoxyCode}
+QuaZip zip(\textcolor{stringliteral}{"archive.zip"});
+zip.open(QuaZip::mdUnzip);
+\textcolor{comment}{// first, we need some information about archive itself}
+QByteArray comment=zip.getComment();
+\textcolor{comment}{// and now we are going to access files inside it}
+QuaZipFile file(&zip);
+\textcolor{keywordflow}{for}(\textcolor{keywordtype}{bool} more=zip.goToFirstFile(); more; more=zip.goToNextFile()) \{
+  file.open(QIODevice::ReadOnly);
+  \textcolor{comment}{// do something cool with file here}
+  file.close(); \textcolor{comment}{// do not forget to close!}
+\}
+zip.close();
+\end{DoxyCode}
+ \index{Qua\-Zip\-File@{Qua\-Zip\-File}!$\sim$\-Qua\-Zip\-File@{$\sim$\-Qua\-Zip\-File}}
+\index{$\sim$\-Qua\-Zip\-File@{$\sim$\-Qua\-Zip\-File}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{$\sim$\-Qua\-Zip\-File}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Zip\-File\-::$\sim$\-Qua\-Zip\-File (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaZipFile_aa1e5a0cf491bafae6cc73e649caa97fc}
+
+
+Destroys a \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instance. 
+
+Closes file if open, destructs internal \doxyref{Qua\-Zip}{p.}{classQuaZip} object (if it exists and {\itshape is} internal, of course). 
+
+References close().
+
+
+
+\subsection{Member Function Documentation}
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!get\-Zip\-Name@{get\-Zip\-Name}}
+\index{get\-Zip\-Name@{get\-Zip\-Name}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{get\-Zip\-Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String Qua\-Zip\-File\-::get\-Zip\-Name (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipFile_a6f034a714aa94631367590de3f8f4e22}
+
+
+Returns the Z\-I\-P archive file name. 
+
+If this object was created by passing \doxyref{Qua\-Zip}{p.}{classQuaZip} pointer to the constructor, this function will return that \doxyref{Qua\-Zip}{p.}{classQuaZip}'s file name (or null string if that object does not have file name yet).
+
+Otherwise, returns associated Z\-I\-P archive file name or null string if there are no name set yet.
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{set\-Zip\-Name()}{p.}{classQuaZipFile_ac8109e9a5c19bea75982ff6986b5cb1e} \doxyref{get\-File\-Name()}{p.}{classQuaZipFile_a6999362e70a5b2396fba5cfb30095ff9} 
+\end{DoxySeeAlso}
+
+
+References Qua\-Zip\-::get\-Zip\-Name().
+
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!get\-Zip@{get\-Zip}}
+\index{get\-Zip@{get\-Zip}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{get\-Zip}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Qua\-Zip} $\ast$ Qua\-Zip\-File\-::get\-Zip (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipFile_a72daf8a9da14907a801a783603003205}
+
+
+Returns a pointer to the associated \doxyref{Qua\-Zip}{p.}{classQuaZip} object. 
+
+Returns {\ttfamily N\-U\-L\-L} if there is no associated \doxyref{Qua\-Zip}{p.}{classQuaZip} or it is internal (so you will not mess with it). \index{Qua\-Zip\-File@{Qua\-Zip\-File}!get\-File\-Name@{get\-File\-Name}}
+\index{get\-File\-Name@{get\-File\-Name}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{get\-File\-Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String Qua\-Zip\-File\-::get\-File\-Name (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipFile_a6999362e70a5b2396fba5cfb30095ff9}
+
+
+Returns file name. 
+
+This function returns file name you passed to this object either by using \doxyref{Qua\-Zip\-File(const Q\-String\&,const Q\-String\&,\-Qua\-Zip\-::\-Case\-Sensitivity,\-Q\-Object$\ast$)}{p.}{classQuaZipFile_ac6e883b5a5d3a58c9c56eb497dd91220} or by calling \doxyref{set\-File\-Name()}{p.}{classQuaZipFile_a3732ca7704379d457b6a27db8837de95}. Real name of the file may differ in case if you used case-\/insensitivity.
+
+Returns null string if there is no file name set yet. This is the case when this \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} operates on the existing \doxyref{Qua\-Zip}{p.}{classQuaZip} object (constructor \doxyref{Qua\-Zip\-File(\-Qua\-Zip$\ast$,\-Q\-Object$\ast$)}{p.}{classQuaZipFile_a54e944a6b3d27030f64c8f30d2cc33bb} or \doxyref{set\-Zip()}{p.}{classQuaZipFile_ab7939a26d1e8de2f6aca54f49a12b980} was used).
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{get\-Actual\-File\-Name}{p.}{classQuaZipFile_a7b8e3c39026855cd98661a1b2815c220} 
+\end{DoxySeeAlso}
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!get\-Case\-Sensitivity@{get\-Case\-Sensitivity}}
+\index{get\-Case\-Sensitivity@{get\-Case\-Sensitivity}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{get\-Case\-Sensitivity}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Qua\-Zip\-::\-Case\-Sensitivity} Qua\-Zip\-File\-::get\-Case\-Sensitivity (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipFile_a25dbfddc589bf6b69b39905f3c3bcc73}
+
+
+Returns case sensitivity of the file name. 
+
+This function returns case sensitivity argument you passed to this object either by using \doxyref{Qua\-Zip\-File(const Q\-String\&,const Q\-String\&,\-Qua\-Zip\-::\-Case\-Sensitivity,\-Q\-Object$\ast$)}{p.}{classQuaZipFile_ac6e883b5a5d3a58c9c56eb497dd91220} or by calling \doxyref{set\-File\-Name()}{p.}{classQuaZipFile_a3732ca7704379d457b6a27db8837de95}.
+
+Returns unpredictable value if \doxyref{get\-File\-Name()}{p.}{classQuaZipFile_a6999362e70a5b2396fba5cfb30095ff9} returns null string (this is the case when you did not used \doxyref{set\-File\-Name()}{p.}{classQuaZipFile_a3732ca7704379d457b6a27db8837de95} or constructor above).
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{get\-File\-Name}{p.}{classQuaZipFile_a6999362e70a5b2396fba5cfb30095ff9} 
+\end{DoxySeeAlso}
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!get\-Actual\-File\-Name@{get\-Actual\-File\-Name}}
+\index{get\-Actual\-File\-Name@{get\-Actual\-File\-Name}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{get\-Actual\-File\-Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String Qua\-Zip\-File\-::get\-Actual\-File\-Name (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipFile_a7b8e3c39026855cd98661a1b2815c220}
+
+
+Returns the actual file name in the archive. 
+
+This is {\itshape not} a Z\-I\-P archive file name, but a name of file inside archive. It is not necessary the same name that you have passed to the \doxyref{Qua\-Zip\-File(const Q\-String\&,const Q\-String\&,\-Qua\-Zip\-::\-Case\-Sensitivity,\-Q\-Object$\ast$)}{p.}{classQuaZipFile_ac6e883b5a5d3a58c9c56eb497dd91220}, \doxyref{set\-File\-Name()}{p.}{classQuaZipFile_a3732ca7704379d457b6a27db8837de95} or \doxyref{Qua\-Zip\-::set\-Current\-File()}{p.}{classQuaZip_a6c657bfcfccb59d728e0da24c67 [...]
+
+Equivalent to calling get\-Current\-File\-Name() on the associated \doxyref{Qua\-Zip}{p.}{classQuaZip} object. Returns null string if there is no associated \doxyref{Qua\-Zip}{p.}{classQuaZip} object or if it does not have a current file yet. And this is the case if you called \doxyref{set\-File\-Name()}{p.}{classQuaZipFile_a3732ca7704379d457b6a27db8837de95} but did not open the file yet. So this is perfectly fine\-: 
+\begin{DoxyCode}
+QuaZipFile file(\textcolor{stringliteral}{"somezip.zip"});
+file.setFileName(\textcolor{stringliteral}{"somefile"});
+QString name=file.getName(); \textcolor{comment}{// name=="somefile"}
+QString actual=file.getActualFileName(); \textcolor{comment}{// actual is null string}
+file.open(QIODevice::ReadOnly);
+QString actual=file.getActualFileName(); \textcolor{comment}{// actual can be "SoMeFiLe" on Windows}
+\end{DoxyCode}
+
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{get\-Zip\-Name()}{p.}{classQuaZipFile_a6f034a714aa94631367590de3f8f4e22}, \doxyref{get\-File\-Name()}{p.}{classQuaZipFile_a6999362e70a5b2396fba5cfb30095ff9}, \doxyref{Qua\-Zip\-::\-Case\-Sensitivity}{p.}{classQuaZip_a6053a1d249ed210a85c9d5eb7cf9cdbe} 
+\end{DoxySeeAlso}
+
+
+References Qua\-Zip\-::get\-Current\-File\-Name(), and Qua\-Zip\-::get\-Zip\-Error().
+
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!set\-Zip\-Name@{set\-Zip\-Name}}
+\index{set\-Zip\-Name@{set\-Zip\-Name}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{set\-Zip\-Name}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-File\-::set\-Zip\-Name (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{zip\-Name}
+\end{DoxyParamCaption}
+)}\label{classQuaZipFile_ac8109e9a5c19bea75982ff6986b5cb1e}
+
+
+Sets the Z\-I\-P archive file name. 
+
+Automatically creates internal \doxyref{Qua\-Zip}{p.}{classQuaZip} object and destroys previously created internal \doxyref{Qua\-Zip}{p.}{classQuaZip} object, if any.
+
+Will do nothing if this file is already open. You must \doxyref{close()}{p.}{classQuaZipFile_a42a39b12619bccd3d419ee60bbb3fcf6} it first. \index{Qua\-Zip\-File@{Qua\-Zip\-File}!is\-Raw@{is\-Raw}}
+\index{is\-Raw@{is\-Raw}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{is\-Raw}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-File\-::is\-Raw (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipFile_a0df3db94c2a34c8d17ddaa0f54fc32c1}
+
+
+Returns {\ttfamily true} if the file was opened in raw mode. 
+
+If the file is not open, the returned value is undefined.
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{open(\-Open\-Mode,int$\ast$,int$\ast$,bool,const char$\ast$)}{p.}{classQuaZipFile_aed75bace51f2bb4c3e4f656ab4493aac} 
+\end{DoxySeeAlso}
+
+
+Referenced by close().
+
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!set\-Zip@{set\-Zip}}
+\index{set\-Zip@{set\-Zip}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{set\-Zip}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-File\-::set\-Zip (
+\begin{DoxyParamCaption}
+\item[{{\bf Qua\-Zip} $\ast$}]{zip}
+\end{DoxyParamCaption}
+)}\label{classQuaZipFile_ab7939a26d1e8de2f6aca54f49a12b980}
+
+
+Binds to the existing \doxyref{Qua\-Zip}{p.}{classQuaZip} instance. 
+
+This function destroys internal \doxyref{Qua\-Zip}{p.}{classQuaZip} object, if any, and makes this \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} to use current file in the {\itshape zip} object for any further operations. See \doxyref{Qua\-Zip\-File(\-Qua\-Zip$\ast$,\-Q\-Object$\ast$)}{p.}{classQuaZipFile_a54e944a6b3d27030f64c8f30d2cc33bb} for the possible pitfalls.
+
+Will do nothing if the file is currently open. You must \doxyref{close()}{p.}{classQuaZipFile_a42a39b12619bccd3d419ee60bbb3fcf6} it first. \index{Qua\-Zip\-File@{Qua\-Zip\-File}!set\-File\-Name@{set\-File\-Name}}
+\index{set\-File\-Name@{set\-File\-Name}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{set\-File\-Name}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-File\-::set\-File\-Name (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{file\-Name, }
+\item[{{\bf Qua\-Zip\-::\-Case\-Sensitivity}}]{cs = {\ttfamily {\bf Qua\-Zip\-::cs\-Default}}}
+\end{DoxyParamCaption}
+)}\label{classQuaZipFile_a3732ca7704379d457b6a27db8837de95}
+
+
+Sets the file name. 
+
+Will do nothing if at least one of the following conditions is met\-:
+\begin{DoxyItemize}
+\item Z\-I\-P name has not been set yet (\doxyref{get\-Zip\-Name()}{p.}{classQuaZipFile_a6f034a714aa94631367590de3f8f4e22} returns null string).
+\item This \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} is associated with external \doxyref{Qua\-Zip}{p.}{classQuaZip}. In this case you should call that \doxyref{Qua\-Zip}{p.}{classQuaZip}'s set\-Current\-File() function instead!
+\item File is already open so setting the name is meaningless.
+\end{DoxyItemize}
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{Qua\-Zip\-::set\-Current\-File}{p.}{classQuaZip_a6c657bfcfccb59d728e0da24c677d899} 
+\end{DoxySeeAlso}
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!open@{open}}
+\index{open@{open}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{open}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-File\-::open (
+\begin{DoxyParamCaption}
+\item[{Open\-Mode}]{mode}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaZipFile_a4c20c0ef00ae79c9a59eafe2906c9384}
+
+
+Opens a file for reading. 
+
+Returns {\ttfamily true} on success, {\ttfamily false} otherwise. Call \doxyref{get\-Zip\-Error()}{p.}{classQuaZipFile_a26d2ee56aad947193b73052f80597ef0} to get error code.
+
+\begin{DoxyNote}{Note}
+Since Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I provides buffered reading only, \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} does not support unbuffered reading. So do not pass Q\-I\-O\-Device\-::\-Unbuffered flag in {\itshape mode}, or open will fail. 
+\end{DoxyNote}
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!open@{open}}
+\index{open@{open}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{open}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-File\-::open (
+\begin{DoxyParamCaption}
+\item[{Open\-Mode}]{mode, }
+\item[{const char $\ast$}]{password}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [inline]}}\label{classQuaZipFile_a0bff0d15bbcd70306dc4a553a55776b9}
+
+
+Opens a file for reading. 
+
+This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Argument {\itshape password} specifies a password to decrypt the file. If it is N\-U\-L\-L then this function behaves just like \doxyref{open(\-Open\-Mode)}{p.}{classQuaZipFile_a4c20c0ef00ae79c9a59eafe2906c9384}. \index{Qua\-Zip\-File@{Qua\-Zip\-File}!open@{open}}
+\index{open@{open}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{open}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-File\-::open (
+\begin{DoxyParamCaption}
+\item[{Open\-Mode}]{mode, }
+\item[{int $\ast$}]{method, }
+\item[{int $\ast$}]{level, }
+\item[{bool}]{raw, }
+\item[{const char $\ast$}]{password = {\ttfamily NULL}}
+\end{DoxyParamCaption}
+)}\label{classQuaZipFile_aed75bace51f2bb4c3e4f656ab4493aac}
+
+
+Opens a file for reading. 
+
+This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Argument {\itshape password} specifies a password to decrypt the file.
+
+An integers pointed by {\itshape method} and {\itshape level} will receive codes of the compression method and level used. See unzip.\-h.
+
+If raw is {\ttfamily true} then no decompression is performed.
+
+{\itshape method} should not be {\ttfamily N\-U\-L\-L}. {\itshape level} can be {\ttfamily N\-U\-L\-L} if you don't want to know the compression level. 
+
+References Qua\-Zip\-::close(), Qua\-Zip\-::get\-Mode(), Qua\-Zip\-::get\-Unz\-File(), Qua\-Zip\-::get\-Zip\-Error(), Qua\-Zip\-::has\-Current\-File(), Qua\-Zip\-::md\-Unzip, Qua\-Zip\-::open(), and Qua\-Zip\-::set\-Current\-File().
+
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!open@{open}}
+\index{open@{open}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{open}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-File\-::open (
+\begin{DoxyParamCaption}
+\item[{Open\-Mode}]{mode, }
+\item[{const {\bf Qua\-Zip\-New\-Info} \&}]{info, }
+\item[{const char $\ast$}]{password = {\ttfamily NULL}, }
+\item[{quint32}]{crc = {\ttfamily 0}, }
+\item[{int}]{method = {\ttfamily Z\-\_\-DEFLATED}, }
+\item[{int}]{level = {\ttfamily Z\-\_\-DEFAULT\-\_\-COMPRESSION}, }
+\item[{bool}]{raw = {\ttfamily false}, }
+\item[{int}]{window\-Bits = {\ttfamily -\/MAX\-\_\-WBITS}, }
+\item[{int}]{mem\-Level = {\ttfamily DEF\-\_\-MEM\-\_\-LEVEL}, }
+\item[{int}]{strategy = {\ttfamily Z\-\_\-DEFAULT\-\_\-STRATEGY}}
+\end{DoxyParamCaption}
+)}\label{classQuaZipFile_a2429ea59c77371d7af56d739db130b18}
+
+
+Opens a file for writing. 
+
+{\itshape info} argument specifies information about file. It should at least specify a correct file name. Also, it is a good idea to specify correct timestamp (by default, current time will be used). See \doxyref{Qua\-Zip\-New\-Info}{p.}{structQuaZipNewInfo}.
+
+The {\itshape password} argument specifies the password for crypting. Pass N\-U\-L\-L if you don't need any crypting. The {\itshape crc} argument was supposed to be used for crypting too, but then it turned out that it's false information, so you need to set it to 0 unless you want to use the raw mode (see below).
+
+Arguments {\itshape method} and {\itshape level} specify compression method and level. The only method supported is Z\-\_\-\-D\-E\-F\-L\-A\-T\-E\-D, but you may also specify 0 for no compression. If all of the files in the archive use both method 0 and either level 0 is explicitly specified or data descriptor writing is disabled with \doxyref{Qua\-Zip\-::set\-Data\-Descriptor\-Writing\-Enabled()}{p.}{classQuaZip_a6c23a12af88f7ea5edd4f9c0a24b9453}, then the resulting archive is supposed t [...]
+
+If {\itshape raw} is {\ttfamily true}, no compression is performed. In this case, {\itshape crc} and uncompressed\-Size field of the {\itshape info} are required.
+
+Arguments {\itshape window\-Bits}, {\itshape mem\-Level}, {\itshape strategy} provide zlib algorithms tuning. See deflate\-Init2() in zlib. 
+
+References Qua\-Zip\-New\-Info\-::comment, Qua\-Zip\-New\-Info\-::date\-Time, Qua\-Zip\-New\-Info\-::external\-Attr, Qua\-Zip\-New\-Info\-::extra\-Global, Qua\-Zip\-New\-Info\-::extra\-Local, Qua\-Zip\-::get\-Comment\-Codec(), Qua\-Zip\-::get\-File\-Name\-Codec(), Qua\-Zip\-::get\-Mode(), Qua\-Zip\-::get\-Zip\-File(), Qua\-Zip\-New\-Info\-::internal\-Attr, Qua\-Zip\-::is\-Data\-Descriptor\-Writing\-Enabled(), Qua\-Zip\-::is\-Zip64\-Enabled(), Qua\-Zip\-::md\-Add, Qua\-Zip\-::md\-Append,  [...]
+
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!pos@{pos}}
+\index{pos@{pos}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{pos}]{\setlength{\rightskip}{0pt plus 5cm}qint64 Qua\-Zip\-File\-::pos (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaZipFile_a90fd55dab83eca7f95df50b2c41b7f22}
+
+
+Returns current position in the file. 
+
+Implementation of the Q\-I\-O\-Device\-::pos(). When reading, this function is a wrapper to the Z\-I\-P/\-U\-N\-Z\-I\-P unztell(), therefore it is unable to keep track of the unget\-Char() calls (which is non-\/virtual and therefore is dangerous to reimplement). So if you are using unget\-Char() feature of the Q\-I\-O\-Device, this function reports incorrect value until you get back characters which you ungot.
+
+When writing, \doxyref{pos()}{p.}{classQuaZipFile_a90fd55dab83eca7f95df50b2c41b7f22} returns number of bytes already written (uncompressed unless you use raw mode).
+
+\begin{DoxyNote}{Note}
+Although \doxyref{Qua\-Zip\-File is a sequential device}{p.}{classQuaZipFile_quazipfile-sequential} and therefore \doxyref{pos()}{p.}{classQuaZipFile_a90fd55dab83eca7f95df50b2c41b7f22} should always return zero, it does not, because it would be misguiding. Keep this in mind.
+\end{DoxyNote}
+This function returns -\/1 if the file or archive is not open.
+
+Error code returned by \doxyref{get\-Zip\-Error()}{p.}{classQuaZipFile_a26d2ee56aad947193b73052f80597ef0} is not affected by this function call. 
+
+References Qua\-Zip\-::get\-Unz\-File().
+
+
+
+Referenced by bytes\-Available().
+
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!at\-End@{at\-End}}
+\index{at\-End@{at\-End}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{at\-End}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-File\-::at\-End (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaZipFile_a1e3f4c3c075da98af426fc167440cfc3}
+
+
+Returns {\ttfamily true} if the end of file was reached. 
+
+This function returns {\ttfamily false} in the case of error. This means that you called this function on either not open file, or a file in the not open archive or even on a \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} instance that does not even have \doxyref{Qua\-Zip}{p.}{classQuaZip} instance associated. Do not do that because there is no means to determine whether {\ttfamily false} is returned because of error or because end of file was reached. Well, on the other side you may inte [...]
+no end of file therefore\char`\"{}.
+
+When writing, this function always returns {\ttfamily true} (because you are always writing to the end of file).
+
+Error code returned by \doxyref{get\-Zip\-Error()}{p.}{classQuaZipFile_a26d2ee56aad947193b73052f80597ef0} is not affected by this function call. 
+
+References Qua\-Zip\-::get\-Unz\-File().
+
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!size@{size}}
+\index{size@{size}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{size}]{\setlength{\rightskip}{0pt plus 5cm}qint64 Qua\-Zip\-File\-::size (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaZipFile_ad1a17cc690a01c3edfb82984c3a4c8f0}
+
+
+Returns file size. 
+
+This function returns \doxyref{csize()}{p.}{classQuaZipFile_ac4da08e5cdec368a2a686775f7dc5639} if the file is open for reading in raw mode, \doxyref{usize()}{p.}{classQuaZipFile_a4814b5e6e39fb254737b81ea10964f50} if it is open for reading in normal mode and \doxyref{pos()}{p.}{classQuaZipFile_a90fd55dab83eca7f95df50b2c41b7f22} if it is open for writing.
+
+Returns -\/1 on error, call \doxyref{get\-Zip\-Error()}{p.}{classQuaZipFile_a26d2ee56aad947193b73052f80597ef0} to get error code.
+
+\begin{DoxyNote}{Note}
+This function returns file size despite that \doxyref{Qua\-Zip\-File is considered to be sequential device}{p.}{classQuaZipFile_quazipfile-sequential}, for which \doxyref{size()}{p.}{classQuaZipFile_ad1a17cc690a01c3edfb82984c3a4c8f0} should return \doxyref{bytes\-Available()}{p.}{classQuaZipFile_a29fbfb34677f69394ae7c986ffd3a0c1} instead. But its name would be very misguiding otherwise, so just keep in mind this inconsistence. 
+\end{DoxyNote}
+
+
+References csize(), and usize().
+
+
+
+Referenced by bytes\-Available().
+
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!csize@{csize}}
+\index{csize@{csize}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{csize}]{\setlength{\rightskip}{0pt plus 5cm}qint64 Qua\-Zip\-File\-::csize (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipFile_ac4da08e5cdec368a2a686775f7dc5639}
+
+
+Returns compressed file size. 
+
+Equivalent to calling \doxyref{get\-File\-Info()}{p.}{classQuaZipFile_ad3f5807329321be21b12c1ba5798b359} and then getting compressed\-Size field, but more convenient and faster.
+
+File must be open for reading before calling this function.
+
+Returns -\/1 on error, call \doxyref{get\-Zip\-Error()}{p.}{classQuaZipFile_a26d2ee56aad947193b73052f80597ef0} to get error code. 
+
+References Qua\-Zip\-::get\-Mode(), Qua\-Zip\-::get\-Unz\-File(), and Qua\-Zip\-::md\-Unzip.
+
+
+
+Referenced by size().
+
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!usize@{usize}}
+\index{usize@{usize}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{usize}]{\setlength{\rightskip}{0pt plus 5cm}qint64 Qua\-Zip\-File\-::usize (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{classQuaZipFile_a4814b5e6e39fb254737b81ea10964f50}
+
+
+Returns uncompressed file size. 
+
+Equivalent to calling \doxyref{get\-File\-Info()}{p.}{classQuaZipFile_ad3f5807329321be21b12c1ba5798b359} and then getting uncompressed\-Size field, but more convenient and faster. See \doxyref{get\-File\-Info()}{p.}{classQuaZipFile_ad3f5807329321be21b12c1ba5798b359} for a warning.
+
+File must be open for reading before calling this function.
+
+Returns -\/1 on error, call \doxyref{get\-Zip\-Error()}{p.}{classQuaZipFile_a26d2ee56aad947193b73052f80597ef0} to get error code. 
+
+References Qua\-Zip\-::get\-Mode(), Qua\-Zip\-::get\-Unz\-File(), and Qua\-Zip\-::md\-Unzip.
+
+
+
+Referenced by size().
+
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!get\-File\-Info@{get\-File\-Info}}
+\index{get\-File\-Info@{get\-File\-Info}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{get\-File\-Info}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-File\-::get\-File\-Info (
+\begin{DoxyParamCaption}
+\item[{{\bf Qua\-Zip\-File\-Info} $\ast$}]{info}
+\end{DoxyParamCaption}
+)}\label{classQuaZipFile_ad3f5807329321be21b12c1ba5798b359}
+
+
+Gets information about current file. 
+
+This function does the same thing as calling \doxyref{Qua\-Zip\-::get\-Current\-File\-Info()}{p.}{classQuaZip_a9c91a53ed4c2038e153c64bdc097ebe8} on the associated \doxyref{Qua\-Zip}{p.}{classQuaZip} object, but you can not call get\-Current\-File\-Info() if the associated \doxyref{Qua\-Zip}{p.}{classQuaZip} is internal (because you do not have access to it), while you still can call this function in that case.
+
+File must be open for reading before calling this function.
+
+\begin{DoxyReturn}{Returns}
+{\ttfamily false} in the case of an error.
+\end{DoxyReturn}
+This function doesn't support zip64, but will still work fine on zip64 archives if file sizes are below 4 G\-B, otherwise the values will be set as if converted using \doxyref{Qua\-Zip\-File\-Info64\-::to\-Qua\-Zip\-File\-Info()}{p.}{structQuaZipFileInfo64_ada29945c7ee4c9df6fbe95864793aade}.
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{get\-File\-Info(\-Qua\-Zip\-File\-Info64$\ast$)}{p.}{classQuaZipFile_af35876a5ac6e9c35234275a9e503110d} 
+\end{DoxySeeAlso}
+
+
+References Qua\-Zip\-File\-Info64\-::to\-Qua\-Zip\-File\-Info().
+
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!get\-File\-Info@{get\-File\-Info}}
+\index{get\-File\-Info@{get\-File\-Info}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{get\-File\-Info}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-File\-::get\-File\-Info (
+\begin{DoxyParamCaption}
+\item[{{\bf Qua\-Zip\-File\-Info64} $\ast$}]{info}
+\end{DoxyParamCaption}
+)}\label{classQuaZipFile_af35876a5ac6e9c35234275a9e503110d}
+
+
+Gets information about current file with zip64 support. 
+
+This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{get\-File\-Info(\-Qua\-Zip\-File\-Info$\ast$)}{p.}{classQuaZipFile_ad3f5807329321be21b12c1ba5798b359} 
+\end{DoxySeeAlso}
+
+
+References Qua\-Zip\-::get\-Current\-File\-Info(), Qua\-Zip\-::get\-Mode(), Qua\-Zip\-::get\-Zip\-Error(), and Qua\-Zip\-::md\-Unzip.
+
+\index{Qua\-Zip\-File@{Qua\-Zip\-File}!close@{close}}
+\index{close@{close}!QuaZipFile@{Qua\-Zip\-File}}
+\subsubsection[{close}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-File\-::close (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [virtual]}}\label{classQuaZipFile_a42a39b12619bccd3d419ee60bbb3fcf6}
+
+
+Closes the file. 
+
+Call \doxyref{get\-Zip\-Error()}{p.}{classQuaZipFile_a26d2ee56aad947193b73052f80597ef0} to determine if the close was successful. 
+
+References Qua\-Zip\-::close(), Qua\-Zip\-::get\-Unz\-File(), Qua\-Zip\-::get\-Zip\-Error(), Qua\-Zip\-::get\-Zip\-File(), Qua\-Zip\-::is\-Open(), and is\-Raw().
+
+
+
+Referenced by $\sim$\-Qua\-Zip\-File().
+
+
+
+The documentation for this class was generated from the following files\-:\begin{DoxyCompactItemize}
+\item 
+quazip/quazipfile.\-h\item 
+quazip/quazipfile.\-cpp\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaZipFilePrivate.tex b/3rdparty/quazip-0.7/doc/latex/classQuaZipFilePrivate.tex
new file mode 100644
index 0000000..508f362
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaZipFilePrivate.tex
@@ -0,0 +1,21 @@
+\section{Qua\-Zip\-File\-Private Class Reference}
+\label{classQuaZipFilePrivate}\index{Qua\-Zip\-File\-Private@{Qua\-Zip\-File\-Private}}
+
+
+The implementation class for \doxyref{Qua\-Zip}{p.}{classQuaZip}.  
+
+
+\subsection*{Friends}
+\begin{DoxyCompactItemize}
+\item 
+class {\bfseries Qua\-Zip\-File}\label{classQuaZipFilePrivate_a40bd4ccb6d2d00726e1de81329ebaa7a}
+
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+The implementation class for \doxyref{Qua\-Zip}{p.}{classQuaZip}. 
+
+The documentation for this class was generated from the following file\-:\begin{DoxyCompactItemize}
+\item 
+quazip/quazipfile.\-cpp\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaZipFile__coll__graph.eps b/3rdparty/quazip-0.7/doc/latex/classQuaZipFile__coll__graph.eps
new file mode 100644
index 0000000..ca27589
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaZipFile__coll__graph.eps
@@ -0,0 +1,259 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.36.0 (20140111.2315)
+%%Title: QuaZipFile
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 108 120
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 72 84 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% Node1
+gsave
+0 0 0.74902 nodecolor
+newpath 0 .5 moveto
+0 19.5 lineto
+64 19.5 lineto
+64 .5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 .5 moveto
+0 19.5 lineto
+64 19.5 lineto
+64 .5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+8 7.5 moveto 48 (QuaZipFile) alignedtext
+grestore
+% Node2
+gsave
+0 0 1 nodecolor
+newpath -.5 56.5 moveto
+-.5 75.5 lineto
+64.5 75.5 lineto
+64.5 56.5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0.74902 nodecolor
+newpath -.5 56.5 moveto
+-.5 75.5 lineto
+64.5 75.5 lineto
+64.5 56.5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+7.5 63.5 moveto 49 (QIODevice) alignedtext
+grestore
+% Node2->Node1
+gsave
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 32 45.8 moveto
+32 36.91 32 26.78 32 19.75 curveto
+stroke
+0.66667 0.77647 0.43922 edgecolor
+newpath 28.5 46.08 moveto
+32 56.08 lineto
+35.5 46.08 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 28.5 46.08 moveto
+32 56.08 lineto
+35.5 46.08 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 108 120
+end
+restore
+%%EOF
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaZipFile__coll__graph.md5 b/3rdparty/quazip-0.7/doc/latex/classQuaZipFile__coll__graph.md5
new file mode 100644
index 0000000..a6f5da1
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaZipFile__coll__graph.md5
@@ -0,0 +1 @@
+28f5281397b620e43711ce86747f921d
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaZipFile__inherit__graph.eps b/3rdparty/quazip-0.7/doc/latex/classQuaZipFile__inherit__graph.eps
new file mode 100644
index 0000000..ca27589
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaZipFile__inherit__graph.eps
@@ -0,0 +1,259 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.36.0 (20140111.2315)
+%%Title: QuaZipFile
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 108 120
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 72 84 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% Node1
+gsave
+0 0 0.74902 nodecolor
+newpath 0 .5 moveto
+0 19.5 lineto
+64 19.5 lineto
+64 .5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 .5 moveto
+0 19.5 lineto
+64 19.5 lineto
+64 .5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+8 7.5 moveto 48 (QuaZipFile) alignedtext
+grestore
+% Node2
+gsave
+0 0 1 nodecolor
+newpath -.5 56.5 moveto
+-.5 75.5 lineto
+64.5 75.5 lineto
+64.5 56.5 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0.74902 nodecolor
+newpath -.5 56.5 moveto
+-.5 75.5 lineto
+64.5 75.5 lineto
+64.5 56.5 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+7.5 63.5 moveto 49 (QIODevice) alignedtext
+grestore
+% Node2->Node1
+gsave
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 32 45.8 moveto
+32 36.91 32 26.78 32 19.75 curveto
+stroke
+0.66667 0.77647 0.43922 edgecolor
+newpath 28.5 46.08 moveto
+32 56.08 lineto
+35.5 46.08 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 0.77647 0.43922 edgecolor
+newpath 28.5 46.08 moveto
+32 56.08 lineto
+35.5 46.08 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 108 120
+end
+restore
+%%EOF
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaZipFile__inherit__graph.md5 b/3rdparty/quazip-0.7/doc/latex/classQuaZipFile__inherit__graph.md5
new file mode 100644
index 0000000..a6f5da1
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaZipFile__inherit__graph.md5
@@ -0,0 +1 @@
+28f5281397b620e43711ce86747f921d
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/latex/classQuaZipPrivate.tex b/3rdparty/quazip-0.7/doc/latex/classQuaZipPrivate.tex
new file mode 100644
index 0000000..1bb741a
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/classQuaZipPrivate.tex
@@ -0,0 +1,21 @@
+\section{Qua\-Zip\-Private Class Reference}
+\label{classQuaZipPrivate}\index{Qua\-Zip\-Private@{Qua\-Zip\-Private}}
+
+
+All the internal stuff for the \doxyref{Qua\-Zip}{p.}{classQuaZip} class.  
+
+
+\subsection*{Friends}
+\begin{DoxyCompactItemize}
+\item 
+class {\bfseries Qua\-Zip}\label{classQuaZipPrivate_a913fb7bbd3527119ebb8052d57132af2}
+
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+All the internal stuff for the \doxyref{Qua\-Zip}{p.}{classQuaZip} class. 
+
+The documentation for this class was generated from the following file\-:\begin{DoxyCompactItemize}
+\item 
+quazip/quazip.\-cpp\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/dir_94f3fdea1a650ed21d35813cdb37a339.tex b/3rdparty/quazip-0.7/doc/latex/dir_94f3fdea1a650ed21d35813cdb37a339.tex
new file mode 100644
index 0000000..8424abc
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/dir_94f3fdea1a650ed21d35813cdb37a339.tex
@@ -0,0 +1,59 @@
+\section{quazip Directory Reference}
+\label{dir_94f3fdea1a650ed21d35813cdb37a339}\index{quazip Directory Reference@{quazip Directory Reference}}
+Directory dependency graph for quazip\-:
+\nopagebreak
+\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[width=98pt]{dir_94f3fdea1a650ed21d35813cdb37a339_dep}
+\end{center}
+\end{figure}
+\subsection*{Files}
+\begin{DoxyCompactItemize}
+\item 
+file {\bfseries Jl\-Compress.\-cpp}
+\item 
+file {\bfseries Jl\-Compress.\-h}
+\item 
+file {\bfseries qioapi.\-cpp}
+\item 
+file {\bfseries quaadler32.\-cpp}
+\item 
+file {\bfseries quaadler32.\-h}
+\item 
+file {\bfseries quachecksum32.\-h}
+\item 
+file {\bfseries quacrc32.\-cpp}
+\item 
+file {\bfseries quacrc32.\-h}
+\item 
+file {\bfseries quagzipfile.\-cpp}
+\item 
+file {\bfseries quagzipfile.\-h}
+\item 
+file {\bfseries quaziodevice.\-cpp}
+\item 
+file {\bfseries quaziodevice.\-h}
+\item 
+file {\bfseries quazip.\-cpp}
+\item 
+file {\bfseries quazip.\-h}
+\item 
+file {\bfseries quazip\-\_\-global.\-h}
+\item 
+file {\bfseries quazipdir.\-cpp}
+\item 
+file {\bfseries quazipdir.\-h}
+\item 
+file {\bfseries quazipfile.\-cpp}
+\item 
+file {\bfseries quazipfile.\-h}
+\item 
+file {\bfseries quazipfileinfo.\-cpp}
+\item 
+file {\bfseries quazipfileinfo.\-h}
+\item 
+file {\bfseries quazipnewinfo.\-cpp}
+\item 
+file {\bfseries quazipnewinfo.\-h}
+\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/dir_94f3fdea1a650ed21d35813cdb37a339_dep.eps b/3rdparty/quazip-0.7/doc/latex/dir_94f3fdea1a650ed21d35813cdb37a339_dep.eps
new file mode 100644
index 0000000..b664887
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/dir_94f3fdea1a650ed21d35813cdb37a339_dep.eps
@@ -0,0 +1,223 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.36.0 (20140111.2315)
+%%Title: quazip
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 98 80
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 62 44 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% dir_94f3fdea1a650ed21d35813cdb37a339
+gsave
+[ /Rect [ 0 0 54 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (dir_94f3fdea1a650ed21d35813cdb37a339.html) >>
+  /Subtype /Link
+/ANN pdfmark
+0.66667 0.066667 1 nodecolor
+newpath 54 36 moveto
+0 36 lineto
+0 0 lineto
+54 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 54 36 moveto
+0 36 lineto
+0 0 lineto
+54 0 lineto
+closepath stroke
+0 0 0 nodecolor
+10 /Helvetica set_font
+12.5 15.5 moveto 29 (quazip) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 98 80
+end
+restore
+%%EOF
diff --git a/3rdparty/quazip-0.7/doc/latex/dir_94f3fdea1a650ed21d35813cdb37a339_dep.md5 b/3rdparty/quazip-0.7/doc/latex/dir_94f3fdea1a650ed21d35813cdb37a339_dep.md5
new file mode 100644
index 0000000..d07b47e
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/dir_94f3fdea1a650ed21d35813cdb37a339_dep.md5
@@ -0,0 +1 @@
+b521f3e7499357b3270e414f244f2eff
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/latex/doxygen.sty b/3rdparty/quazip-0.7/doc/latex/doxygen.sty
new file mode 100644
index 0000000..199abf8
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/doxygen.sty
@@ -0,0 +1,464 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{doxygen}
+
+% Packages used by this style file
+\RequirePackage{alltt}
+\RequirePackage{array}
+\RequirePackage{calc}
+\RequirePackage{float}
+\RequirePackage{ifthen}
+\RequirePackage{verbatim}
+\RequirePackage[table]{xcolor}
+\RequirePackage{xtab}
+
+%---------- Internal commands used in this style file ----------------
+
+\newcommand{\ensurespace}[1]{%
+  \begingroup%
+    \setlength{\dimen@}{#1}%
+    \vskip\z@\@plus\dimen@%
+    \penalty -100\vskip\z@\@plus -\dimen@%
+    \vskip\dimen@%
+    \penalty 9999%
+    \vskip -\dimen@%
+    \vskip\z at skip% hide the previous |\vskip| from |\addvspace|
+  \endgroup%
+}
+
+\newcommand{\DoxyLabelFont}{}
+\newcommand{\entrylabel}[1]{%
+  {%
+    \parbox[b]{\labelwidth-4pt}{%
+      \makebox[0pt][l]{\DoxyLabelFont#1}%
+      \vspace{1.5\baselineskip}%
+    }%
+  }%
+}
+
+\newenvironment{DoxyDesc}[1]{%
+  \ensurespace{4\baselineskip}%
+  \begin{list}{}{%
+    \settowidth{\labelwidth}{20pt}%
+    \setlength{\parsep}{0pt}%
+    \setlength{\itemsep}{0pt}%
+    \setlength{\leftmargin}{\labelwidth+\labelsep}%
+    \renewcommand{\makelabel}{\entrylabel}%
+  }%
+  \item[#1]%
+}{%
+  \end{list}%
+}
+
+\newsavebox{\xrefbox}
+\newlength{\xreflength}
+\newcommand{\xreflabel}[1]{%
+  \sbox{\xrefbox}{#1}%
+  \setlength{\xreflength}{\wd\xrefbox}%
+  \ifthenelse{\xreflength>\labelwidth}{%
+    \begin{minipage}{\textwidth}%
+      \setlength{\parindent}{0pt}%
+      \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}%
+    \end{minipage}%
+  }{%
+   \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}%
+  }%
+}
+
+%---------- Commands used by doxygen LaTeX output generator ----------
+
+% Used by <pre> ... </pre>
+\newenvironment{DoxyPre}{%
+  \small%
+  \begin{alltt}%
+}{%
+  \end{alltt}%
+  \normalsize%
+}
+
+% Used by @code ... @endcode
+\newenvironment{DoxyCode}{%
+  \par%
+  \scriptsize%
+  \begin{alltt}%
+}{%
+  \end{alltt}%
+  \normalsize%
+}
+
+% Used by @example, @include, @includelineno and @dontinclude
+\newenvironment{DoxyCodeInclude}{%
+  \DoxyCode%
+}{%
+  \endDoxyCode%
+}
+
+% Used by @verbatim ... @endverbatim
+\newenvironment{DoxyVerb}{%
+  \footnotesize%
+  \verbatim%
+}{%
+  \endverbatim%
+  \normalsize%
+}
+
+% Used by @verbinclude
+\newenvironment{DoxyVerbInclude}{%
+  \DoxyVerb%
+}{%
+  \endDoxyVerb%
+}
+
+% Used by numbered lists (using '-#' or <ol> ... </ol>)
+\newenvironment{DoxyEnumerate}{%
+  \enumerate%
+}{%
+  \endenumerate%
+}
+
+% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)
+\newenvironment{DoxyItemize}{%
+  \itemize%
+}{%
+  \enditemize%
+}
+
+% Used by description lists (using <dl> ... </dl>)
+\newenvironment{DoxyDescription}{%
+  \description%
+}{%
+  \enddescription%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if caption is specified)
+\newenvironment{DoxyImage}{%
+  \begin{figure}[H]%
+    \begin{center}%
+}{%
+    \end{center}%
+  \end{figure}%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if no caption is specified)
+\newenvironment{DoxyImageNoCaption}{%
+}{%
+}
+
+% Used by @attention
+\newenvironment{DoxyAttention}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @author and @authors
+\newenvironment{DoxyAuthor}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @date
+\newenvironment{DoxyDate}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @invariant
+\newenvironment{DoxyInvariant}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @note
+\newenvironment{DoxyNote}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @post
+\newenvironment{DoxyPostcond}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @pre
+\newenvironment{DoxyPrecond}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @copyright
+\newenvironment{DoxyCopyright}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @remark
+\newenvironment{DoxyRemark}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @return and @returns
+\newenvironment{DoxyReturn}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @since
+\newenvironment{DoxySince}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @see
+\newenvironment{DoxySeeAlso}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @version
+\newenvironment{DoxyVersion}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @warning
+\newenvironment{DoxyWarning}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @internal
+\newenvironment{DoxyInternal}[1]{%
+  \paragraph*{#1}%
+}{%
+}
+
+% Used by @par and @paragraph
+\newenvironment{DoxyParagraph}[1]{%
+  \begin{list}{}{%
+    \settowidth{\labelwidth}{40pt}%
+    \setlength{\leftmargin}{\labelwidth}%
+    \setlength{\parsep}{0pt}%
+    \setlength{\itemsep}{-4pt}%
+    \renewcommand{\makelabel}{\entrylabel}%
+  }%
+  \item[#1]%
+}{%
+  \end{list}%
+}
+
+% Used by parameter lists
+\newenvironment{DoxyParams}[2][]{%
+    \par%
+    \tabletail{\hline}%
+    \tablelasttail{\hline}%
+    \tablefirsthead{}%
+    \tablehead{}%
+    \ifthenelse{\equal{#1}{}}%
+    {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}%
+     \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+                        p{0.805\textwidth}|}}%
+    {\ifthenelse{\equal{#1}{1}}%
+      {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}%
+       \begin{xtabular}{|>{\centering}p{0.10\textwidth}|%
+                         >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+                         p{0.678\textwidth}|}}%
+      {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}%
+       \begin{xtabular}{|>{\centering}p{0.10\textwidth}|%
+                         >{\centering\hspace{0pt}}p{0.15\textwidth}|%
+                         >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+                         p{0.501\textwidth}|}}%
+    }\hline%
+}{%
+    \end{xtabular}%
+    \tablefirsthead{}%
+    \vspace{6pt}%
+}
+
+% Used for fields of simple structs
+\newenvironment{DoxyFields}[1]{%
+    \par%
+    \tabletail{\hline}%
+    \tablelasttail{\hline}%
+    \tablehead{}%
+    \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
+    \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+                         p{0.15\textwidth}|%
+                         p{0.63\textwidth}|}%
+    \hline%
+}{%
+    \end{xtabular}%
+    \tablefirsthead{}%
+    \vspace{6pt}%
+}
+
+% Used for parameters within a detailed function description
+\newenvironment{DoxyParamCaption}{%
+  \renewcommand{\item}[2][]{##1 {\em ##2}}%
+}{%
+}
+
+% Used by return value lists
+\newenvironment{DoxyRetVals}[1]{%
+    \par%
+    \tabletail{\hline}%
+    \tablelasttail{\hline}%
+    \tablehead{}%
+    \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
+    \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
+                          p{0.705\textwidth}|}%
+    \hline%
+}{%
+    \end{xtabular}%
+    \tablefirsthead{}%
+    \vspace{6pt}%
+}
+
+% Used by exception lists
+\newenvironment{DoxyExceptions}[1]{%
+    \par%
+    \tabletail{\hline}%
+    \tablelasttail{\hline}%
+    \tablehead{}%
+    \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
+    \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
+                          p{0.705\textwidth}|}%
+    \hline%
+}{%
+    \end{xtabular}%
+    \tablefirsthead{}%
+    \vspace{6pt}%
+}
+
+% Used by template parameter lists
+\newenvironment{DoxyTemplParams}[1]{%
+    \par%
+    \tabletail{\hline}%
+    \tablelasttail{\hline}%
+    \tablehead{}%
+    \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
+    \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
+                          p{0.705\textwidth}|}%
+    \hline%
+}{%
+    \end{xtabular}%
+    \tablefirsthead{}%
+    \vspace{6pt}%
+}
+
+% Used for member lists
+\newenvironment{DoxyCompactItemize}{%
+  \begin{itemize}%
+    \setlength{\itemsep}{-3pt}%
+    \setlength{\parsep}{0pt}%
+    \setlength{\topsep}{0pt}%
+    \setlength{\partopsep}{0pt}%
+}{%
+  \end{itemize}%
+}
+
+% Used for member descriptions
+\newenvironment{DoxyCompactList}{%
+  \begin{list}{}{%
+    \setlength{\leftmargin}{0.5cm}%
+    \setlength{\itemsep}{0pt}%
+    \setlength{\parsep}{0pt}%
+    \setlength{\topsep}{0pt}%
+    \renewcommand{\makelabel}{\hfill}%
+  }%
+}{%
+  \end{list}%
+}
+
+% Used for reference lists (@bug, @deprecated, @todo, etc.)
+\newenvironment{DoxyRefList}{%
+  \begin{list}{}{%
+    \setlength{\labelwidth}{10pt}%
+    \setlength{\leftmargin}{\labelwidth}%
+    \addtolength{\leftmargin}{\labelsep}%
+    \renewcommand{\makelabel}{\xreflabel}%
+  }%
+}{%
+  \end{list}%
+}
+
+% Used by @bug, @deprecated, @todo, etc.
+\newenvironment{DoxyRefDesc}[1]{%
+  \begin{list}{}{%
+    \renewcommand\makelabel[1]{\textbf{##1}}%
+    \settowidth\labelwidth{\makelabel{#1}}%
+    \setlength\leftmargin{\labelwidth+\labelsep}%
+  }%
+}{%
+  \end{list}%
+}
+
+% Used by parameter lists and simple sections
+\newenvironment{Desc}
+{\begin{list}{}{%
+    \settowidth{\labelwidth}{40pt}%
+    \setlength{\leftmargin}{\labelwidth}%
+    \setlength{\parsep}{0pt}%
+    \setlength{\itemsep}{-4pt}%
+    \renewcommand{\makelabel}{\entrylabel}%
+  }
+}{%
+  \end{list}%
+}
+
+% Used by tables
+\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}%
+\newlength{\tmplength}%
+\newenvironment{TabularC}[1]%
+{%
+\setlength{\tmplength}%
+     {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}%
+      \par\begin{xtabular*}{\linewidth}%
+             {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}%
+}%
+{\end{xtabular*}\par}%
+
+% Used for member group headers
+\newenvironment{Indent}{%
+  \begin{list}{}{%
+    \setlength{\leftmargin}{0.5cm}%
+  }%
+  \item[]\ignorespaces%
+}{%
+  \unskip%
+  \end{list}%
+}
+
+% Used when hyperlinks are turned off
+\newcommand{\doxyref}[3]{%
+  \textbf{#1} (\textnormal{#2}\,\pageref{#3})%
+}
+
+% Used for syntax highlighting
+\definecolor{comment}{rgb}{0.5,0.0,0.0}
+\definecolor{keyword}{rgb}{0.0,0.5,0.0}
+\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
+\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
+\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
+\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
+\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
+\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
+\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
+\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
+\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}
diff --git a/3rdparty/quazip-0.7/doc/latex/faq.tex b/3rdparty/quazip-0.7/doc/latex/faq.tex
new file mode 100644
index 0000000..5d18852
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/faq.tex
@@ -0,0 +1,14 @@
+\label{faq_faq-non-QIODevice}%
+Q. Is there any way to use \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} in Qt where you are supposed to use normal (non-\/zipped) file, but not through Q\-I\-O\-Device A\-P\-I?
+
+A. Usually not. For example, if you are passing file name to some database driver (like S\-Q\-Lite), Qt usually just passes this name down to the 3rd-\/party library, which is usually does not know anything about Q\-I\-O\-Device and therefore there is no way to pass \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} as normal file. However, if we are talking about some place where you pass file name, and then indirectly use Q\-File to open it, then it is a good idea to make overloaded method, [...]
+
+\label{faq_faq-zip64}%
+Q. Can Qua\-Z\-I\-P handle files larger than 4\-G\-B? What about zip64 standard?
+
+A. Starting with version 0.\-6, Qua\-Z\-I\-P uses Minizip 1.\-1 with zip64 support which should handle large files perfectly. The zip64 support in Minizip looks like it's not 100\% conforming to the standard, but 3rd party tools seem to have no problem with the resulting archives.
+
+\label{faq_faq-seekable}%
+Q. Can Qua\-Z\-I\-P write archives to a sequential Q\-I\-O\-Device like Q\-Tcp\-Socket?
+
+A. Not yet. It is not supported by vanilla Minizip (the back-\/end Qua\-Z\-I\-P uses), although theoretically possible according to the Z\-I\-P standard. It would require some Minizip modifications that would allow it to detect non-\/seekable I/\-O and produce necessary output structures. Qua\-Z\-I\-P already writes data descriptor which is necessary for non-\/seekable I/\-O. The only thing that is apparently left is to make Minizip fill local headers with correct values and forget about [...]
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/latex/hierarchy.tex b/3rdparty/quazip-0.7/doc/latex/hierarchy.tex
new file mode 100644
index 0000000..916fc9f
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/hierarchy.tex
@@ -0,0 +1,22 @@
+\section{Class Hierarchy}
+This inheritance list is sorted roughly, but not completely, alphabetically\-:\begin{DoxyCompactList}
+\item \contentsline{section}{Jl\-Compress}{\pageref{classJlCompress}}{}
+\item Q\-I\-O\-Device\begin{DoxyCompactList}
+\item \contentsline{section}{Qua\-Gzip\-File}{\pageref{classQuaGzipFile}}{}
+\item \contentsline{section}{Qua\-Z\-I\-O\-Device}{\pageref{classQuaZIODevice}}{}
+\item \contentsline{section}{Qua\-Zip\-File}{\pageref{classQuaZipFile}}{}
+\end{DoxyCompactList}
+\item \contentsline{section}{Q\-I\-O\-Device\-\_\-descriptor}{\pageref{structQIODevice__descriptor}}{}
+\item \contentsline{section}{Qua\-Checksum32}{\pageref{classQuaChecksum32}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{Qua\-Adler32}{\pageref{classQuaAdler32}}{}
+\item \contentsline{section}{Qua\-Crc32}{\pageref{classQuaCrc32}}{}
+\end{DoxyCompactList}
+\item \contentsline{section}{Qua\-Zip}{\pageref{classQuaZip}}{}
+\item \contentsline{section}{Qua\-Zip\-Dir}{\pageref{classQuaZipDir}}{}
+\item \contentsline{section}{Qua\-Zip\-File\-Info}{\pageref{structQuaZipFileInfo}}{}
+\item \contentsline{section}{Qua\-Zip\-File\-Info64}{\pageref{structQuaZipFileInfo64}}{}
+\item \contentsline{section}{Qua\-Zip\-File\-Private}{\pageref{classQuaZipFilePrivate}}{}
+\item \contentsline{section}{Qua\-Zip\-New\-Info}{\pageref{structQuaZipNewInfo}}{}
+\item \contentsline{section}{Qua\-Zip\-Private}{\pageref{classQuaZipPrivate}}{}
+\end{DoxyCompactList}
diff --git a/3rdparty/quazip-0.7/doc/latex/index.tex b/3rdparty/quazip-0.7/doc/latex/index.tex
new file mode 100644
index 0000000..1df2135
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/index.tex
@@ -0,0 +1,85 @@
+ \section{Overview}\label{index_overview}
+Qua\-Z\-I\-P is a simple C++ wrapper over {\tt Gilles Vollant's Z\-I\-P/\-U\-N\-Z\-I\-P package} that can be used to access Z\-I\-P archives. It uses {\tt the Qt toolkit}.
+
+If you do not know what Qt is, you have two options\-:
+\begin{DoxyItemize}
+\item Just forget about Qua\-Z\-I\-P.
+\item Learn more about Qt by downloading it and/or reading the excellent {\tt official Qt documentation}
+\end{DoxyItemize}
+
+The choice is yours, but if you are really interested in cross-\/platform (Windows/\-Linux/\-B\-S\-D/\-U\-N\-I\-X/\-Mac/\-Others) software development, I would definitely recommend you the latter $^\wedge$\-\_\-$^\wedge$
+
+Qua\-Z\-I\-P allows you to access files inside Z\-I\-P archives using Q\-I\-O\-Device A\-P\-I, and -\/ yes! -\/ that means that you can also use Q\-Text\-Stream, Q\-Data\-Stream or whatever you would like to use on your zipped files.
+
+Qua\-Z\-I\-P provides complete abstraction of the Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I, for both reading from and writing to Z\-I\-P archives.\section{Download Qua\-Z\-I\-P}\label{index_download}
+Downloads are available from {\tt Qua\-Z\-I\-P project's page at Source\-Forge.\-net}.\section{Platforms supported}\label{index_platforms}
+Qua\-Z\-I\-P has been currently tested on the following platforms\-:
+\begin{DoxyItemize}
+\item linux-\/g++ (Ubuntu 11.\-10, Qt 4.\-7.\-4)
+\item freebsd-\/g++ (Qt 4.\-0.\-0
+\item hpux-\/acc (H\-P-\/\-U\-X 11.\-11)
+\item hpux-\/g++ (H\-P-\/\-U\-X 11.\-11)
+\item win32-\/g++ (Min\-G\-W)
+\item win32-\/msvc2010 (M\-S V\-S 2010 Express, Qt 4.\-8.\-4)
+\item win32-\/msvc2010 (Qt Creator, Qt 5.\-0.\-1)
+\item win32-\/msvc2012 (Qt Creator, Qt 5.\-2.\-0)
+\item some Symbian version, reportedly
+\end{DoxyItemize}
+
+No testing has been officially done on other systems. Of course, patches to make it work on any platform that it currently does not work on are always welcome!\section{What is new in this version of Qua\-Z\-I\-P?}\label{index_whats-new}
+See the N\-E\-W\-S.\-txt file supplied with the distribution.\section{Requirements}\label{index_Requirements}
+Just {\tt zlib} and Qt 4/5. Well, Qt 4 depends on zlib anyway, but you will need zlib headers to compile Qua\-Z\-I\-P. With Qt5 sometimes you need the zlib library as well (on Windows, for example).\section{Building, testing and installing}\label{index_building}
+\begin{DoxyNote}{Note}
+Instructions given in this section assume that you are using some U\-N\-I\-X dialect, but the build process should be very similar on win32-\/g++ platform too. On other platforms it's essentially the same process, maybe with some qmake adjustments not specific to Qua\-Z\-I\-P itself.
+\end{DoxyNote}
+To build the library, run\-: \begin{DoxyVerb}$ cd /wherever/quazip/source/is/quazip-x.y.z/quazip
+$ qmake [PREFIX=where-to-install]
+$ make
+\end{DoxyVerb}
+
+
+Make sure that you have Qt 4/5 installed with all required headers and utilities (that is, including the 'dev' or 'devel' package on Linux) and that you run qmake utility of the Qt 4, not some other version you may have already installed (you may need to type full path to qmake like /usr/local/qt4/bin/qmake).
+
+To reconfigure (with another P\-R\-E\-F\-I\-X, for example), just run qmake with appropriate arguments again.
+
+If you need to specify additional include path or libraries, use qmake features (see qmake reference in the Qt documentation). For example\-:
+
+\begin{DoxyVerb}$ qmake LIBS+=-L/usr/local/zlib/lib INCLUDEPATH+=/usr/local/zlib/include
+\end{DoxyVerb}
+ (note abscence of \char`\"{}-\/\-I\char`\"{} before the include path and the presence of \char`\"{}-\/\-L\char`\"{} before the lib path)
+
+Also note that you may or may not need to define Z\-L\-I\-B\-\_\-\-W\-I\-N\-A\-P\-I (qmake D\-E\-F\-I\-N\-E\-S+=Z\-L\-I\-B\-\_\-\-W\-I\-N\-A\-P\-I) when linking to zlib on Windows, depending on how zlib was built (generally, if using zlibwapi.\-dll, this define is needed).
+
+To install compiled library\-: \begin{DoxyVerb}$ make install
+\end{DoxyVerb}
+
+
+By default, Qua\-Z\-I\-P compiles as a D\-L\-L/\-S\-O, but you have other options\-:
+\begin{DoxyItemize}
+\item Just copy appropriate source files to your project and use them, but you need to define Q\-U\-A\-Z\-I\-P\-\_\-\-S\-T\-A\-T\-I\-C before including any Qua\-Z\-I\-P headers (best done as a compiler option). This will save you from possible side effects of importing/exporting Qua\-Z\-I\-P symbols.
+\item Compile it as a static library using C\-O\-N\-F\-I\-G += staticlib qmake option. Q\-U\-A\-Z\-I\-P\-\_\-\-S\-T\-A\-T\-I\-C is defined automatically by qmake in this case.
+\end{DoxyItemize}
+
+Binary compatibility is guaranteed between minor releases starting with version 0.\-5, thanks to the Pimpl idiom. That is, the next binary incompatible version will be 1.\-x.\section{Testing}\label{index_test}
+To check if Qua\-Z\-I\-P's basic features work O\-K on your platform, you may wish to compile the test suite provided in test directory\-: \begin{DoxyVerb}$ cd /wherever/quazip/source/is/quazip-x.y.z/qztest
+$ qmake
+$ make
+$ ./qztest
+\end{DoxyVerb}
+
+
+Note that the test suite looks for the quazip library in the \char`\"{}quazip\char`\"{} folder of the project (\char`\"{}../quazip\char`\"{}), but you may wish to use L\-I\-B\-S for some systems (Windows often puts the library in the separate \char`\"{}debug\char`\"{} or \char`\"{}release\char`\"{} directory). If you wish to use the quazip version that's already installed, provide the appropriate path.
+
+On some systems you may need to set P\-A\-T\-H, L\-D\-\_\-\-L\-I\-B\-R\-A\-R\-Y\-\_\-\-P\-A\-T\-H or S\-H\-L\-I\-B\-\_\-\-P\-A\-T\-H to get \char`\"{}qztest\char`\"{} to actually run.
+
+If everything went fine, the test suite should report a lot of P\-A\-S\-S messages. If something goes wrong, it will provide details and a warning that some tests failed.\section{Using}\label{index_using}
+See \doxyref{usage page}{p.}{usage}.\section{Authors and contacts}\label{index_contacts}
+This wrapper has been written by Sergey A. Tachenov, A\-K\-A Alqualos. This is my first open source project, so it may suck, but I did not find anything like that, so I just had no other choice but to write it.
+
+If you have anything to say to me about Qua\-Z\-I\-P library, feel free to do so (read the \doxyref{Qua\-Zip F\-A\-Q}{p.}{faq} first, though). I can not promise, though, that I fix all the bugs you report in, add any features you want, or respond to your critics, or respond to your feedback at all. I may be busy, I may be tired of working on Qua\-Z\-I\-P, I may be even dead already (you never know...).
+
+To report bugs or to post ideas about what should be done, use Source\-Forge.\-net's {\tt trackers}. If you want to send me a private message, use my e-\/mail address {\tt stachenov at gmail.\-com}.
+
+Do not use e-\/mail to report bugs, please. Reporting bugs and problems with the Source\-Forge.\-net's bug report system has that advantage that it is visible to public, and I can always search for open tickets that were created long ago. It is highly unlikely that I will search my mail for that kind of stuff, so if a bug reported by mail isn't fixed immediately, it will likely be forgotten forever.
+
+Copyright (C) 2005-\/2014 Sergey A. Tachenov and contributors 
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/doc/latex/refman.tex b/3rdparty/quazip-0.7/doc/latex/refman.tex
new file mode 100644
index 0000000..d9bb128
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/refman.tex
@@ -0,0 +1,153 @@
+\documentclass[twoside]{book}
+
+% Packages required by doxygen
+\usepackage{calc}
+\usepackage{doxygen}
+\usepackage{graphicx}
+\usepackage[utf8]{inputenc}
+\usepackage{makeidx}
+\usepackage{multicol}
+\usepackage{multirow}
+\usepackage{textcomp}
+\usepackage[table]{xcolor}
+
+% Font selection
+\usepackage[T1]{fontenc}
+\usepackage{mathptmx}
+\usepackage[scaled=.90]{helvet}
+\usepackage{courier}
+\usepackage{amssymb}
+\usepackage{sectsty}
+\renewcommand{\familydefault}{\sfdefault}
+\allsectionsfont{%
+  \fontseries{bc}\selectfont%
+  \color{darkgray}%
+}
+\renewcommand{\DoxyLabelFont}{%
+  \fontseries{bc}\selectfont%
+  \color{darkgray}%
+}
+
+% Page & text layout
+\usepackage{geometry}
+\geometry{%
+  a4paper,%
+  top=2.5cm,%
+  bottom=2.5cm,%
+  left=2.5cm,%
+  right=2.5cm%
+}
+\tolerance=750
+\hfuzz=15pt
+\hbadness=750
+\setlength{\emergencystretch}{15pt}
+\setlength{\parindent}{0cm}
+\setlength{\parskip}{0.2cm}
+\makeatletter
+\renewcommand{\paragraph}{%
+  \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{%
+    \normalfont\normalsize\bfseries\SS at parafont%
+  }%
+}
+\renewcommand{\subparagraph}{%
+  \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{%
+    \normalfont\normalsize\bfseries\SS at subparafont%
+  }%
+}
+\makeatother
+
+% Headers & footers
+\usepackage{fancyhdr}
+\pagestyle{fancyplain}
+\fancyhead[LE]{\fancyplain{}{\bfseries\thepage}}
+\fancyhead[CE]{\fancyplain{}{}}
+\fancyhead[RE]{\fancyplain{}{\bfseries\leftmark}}
+\fancyhead[LO]{\fancyplain{}{\bfseries\rightmark}}
+\fancyhead[CO]{\fancyplain{}{}}
+\fancyhead[RO]{\fancyplain{}{\bfseries\thepage}}
+\fancyfoot[LE]{\fancyplain{}{}}
+\fancyfoot[CE]{\fancyplain{}{}}
+\fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize Generated on Thu Jul 24 2014 20\-:35\-:17 for Qua\-Z\-I\-P by Doxygen }}
+\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated on Thu Jul 24 2014 20\-:35\-:17 for Qua\-Z\-I\-P by Doxygen }}
+\fancyfoot[CO]{\fancyplain{}{}}
+\fancyfoot[RO]{\fancyplain{}{}}
+\renewcommand{\footrulewidth}{0.4pt}
+\renewcommand{\chaptermark}[1]{%
+  \markboth{#1}{}%
+}
+\renewcommand{\sectionmark}[1]{%
+  \markright{\thesection\ #1}%
+}
+
+% Indices & bibliography
+\usepackage{natbib}
+\usepackage[titles]{tocloft}
+\setcounter{tocdepth}{3}
+\setcounter{secnumdepth}{5}
+\makeindex
+
+% Custom commands
+\newcommand{\clearemptydoublepage}{%
+  \newpage{\pagestyle{empty}\cleardoublepage}%
+}
+
+
+%===== C O N T E N T S =====
+
+\begin{document}
+
+% Titlepage & ToC
+\pagenumbering{roman}
+\begin{titlepage}
+\vspace*{7cm}
+\begin{center}%
+{\Large Qua\-Z\-I\-P \\[1ex]\large quazip-\/0-\/7 }\\
+\vspace*{1cm}
+{\large Generated by Doxygen 1.8.6}\\
+\vspace*{0.5cm}
+{\small Thu Jul 24 2014 20:35:17}\\
+\end{center}
+\end{titlepage}
+\clearemptydoublepage
+\tableofcontents
+\clearemptydoublepage
+\pagenumbering{arabic}
+
+%--- Begin generated contents ---
+\chapter{Qua\-Z\-I\-P -\/ Qt/\-C++ wrapper for Z\-I\-P/\-U\-N\-Z\-I\-P package}
+\label{index}\input{index}
+\chapter{Qua\-Zip F\-A\-Q}
+\label{faq}
+\input{faq}
+\chapter{Usage}
+\label{usage}
+\input{usage}
+\chapter{Hierarchical Index}
+\input{hierarchy}
+\chapter{Class Index}
+\input{annotated}
+\chapter{Class Documentation}
+\input{classJlCompress}
+\input{structQIODevice__descriptor}
+\input{classQuaAdler32}
+\input{classQuaChecksum32}
+\input{classQuaCrc32}
+\input{classQuaGzipFile}
+\input{classQuaZIODevice}
+\input{classQuaZip}
+\input{classQuaZipDir}
+\input{classQuaZipFile}
+\input{structQuaZipFileInfo}
+\input{structQuaZipFileInfo64}
+\input{classQuaZipFilePrivate}
+\input{structQuaZipNewInfo}
+\input{classQuaZipPrivate}
+%--- End generated contents ---
+
+% Index
+\newpage
+\phantomsection
+\addcontentsline{toc}{chapter}{Index}
+\printindex
+
+\end{document}
diff --git a/3rdparty/quazip-0.7/doc/latex/structQIODevice__descriptor.tex b/3rdparty/quazip-0.7/doc/latex/structQIODevice__descriptor.tex
new file mode 100644
index 0000000..86e874c
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/structQIODevice__descriptor.tex
@@ -0,0 +1,13 @@
+\section{Q\-I\-O\-Device\-\_\-descriptor Struct Reference}
+\label{structQIODevice__descriptor}\index{Q\-I\-O\-Device\-\_\-descriptor@{Q\-I\-O\-Device\-\_\-descriptor}}
+\subsection*{Public Attributes}
+\begin{DoxyCompactItemize}
+\item 
+qint64 {\bfseries pos}\label{structQIODevice__descriptor_a21939844f92cd6936f2f2897c0a42695}
+
+\end{DoxyCompactItemize}
+
+
+The documentation for this struct was generated from the following file\-:\begin{DoxyCompactItemize}
+\item 
+quazip/qioapi.\-cpp\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/structQuaZipFileInfo.tex b/3rdparty/quazip-0.7/doc/latex/structQuaZipFileInfo.tex
new file mode 100644
index 0000000..3f1b56b
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/structQuaZipFileInfo.tex
@@ -0,0 +1,86 @@
+\section{Qua\-Zip\-File\-Info Struct Reference}
+\label{structQuaZipFileInfo}\index{Qua\-Zip\-File\-Info@{Qua\-Zip\-File\-Info}}
+
+
+Information about a file inside archive.  
+
+
+
+
+{\ttfamily \#include $<$quazipfileinfo.\-h$>$}
+
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+Q\-File\-::\-Permissions {\bf get\-Permissions} () const 
+\begin{DoxyCompactList}\small\item\em Get the file permissions. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\subsection*{Public Attributes}
+\begin{DoxyCompactItemize}
+\item 
+Q\-String {\bf name}\label{structQuaZipFileInfo_a16ac323965deccf0232bfae69d933a84}
+
+\begin{DoxyCompactList}\small\item\em File name. \end{DoxyCompactList}\item 
+quint16 {\bf version\-Created}\label{structQuaZipFileInfo_a52f3f1d960ebaa2acbc2a86458fa3e6e}
+
+\begin{DoxyCompactList}\small\item\em Version created by. \end{DoxyCompactList}\item 
+quint16 {\bf version\-Needed}\label{structQuaZipFileInfo_a8b73982808bded49e88e624a65e1a94f}
+
+\begin{DoxyCompactList}\small\item\em Version needed to extract. \end{DoxyCompactList}\item 
+quint16 {\bf flags}\label{structQuaZipFileInfo_a56d36f777e4fc892c71e22d080622e2c}
+
+\begin{DoxyCompactList}\small\item\em General purpose flags. \end{DoxyCompactList}\item 
+quint16 {\bf method}\label{structQuaZipFileInfo_af5c1bbda7f5dec2c358e7a543564de4c}
+
+\begin{DoxyCompactList}\small\item\em Compression method. \end{DoxyCompactList}\item 
+Q\-Date\-Time {\bf date\-Time}\label{structQuaZipFileInfo_ad6993d099436813a27fd31aebe42911a}
+
+\begin{DoxyCompactList}\small\item\em Last modification date and time. \end{DoxyCompactList}\item 
+quint32 {\bf crc}\label{structQuaZipFileInfo_aceee045c9ebce0b9724f40d342bc99ea}
+
+\begin{DoxyCompactList}\small\item\em C\-R\-C. \end{DoxyCompactList}\item 
+quint32 {\bf compressed\-Size}\label{structQuaZipFileInfo_af6116eaac1f36b2a4b3a6a39851a85cc}
+
+\begin{DoxyCompactList}\small\item\em Compressed file size. \end{DoxyCompactList}\item 
+quint32 {\bf uncompressed\-Size}\label{structQuaZipFileInfo_a0eb908e1b1ea637d1f1f4d6aa31db07f}
+
+\begin{DoxyCompactList}\small\item\em Uncompressed file size. \end{DoxyCompactList}\item 
+quint16 {\bf disk\-Number\-Start}\label{structQuaZipFileInfo_aa70157fdc2bd8de10405055b4233050b}
+
+\begin{DoxyCompactList}\small\item\em Disk number start. \end{DoxyCompactList}\item 
+quint16 {\bf internal\-Attr}\label{structQuaZipFileInfo_a36e681a93b041617addee78cb939c93d}
+
+\begin{DoxyCompactList}\small\item\em Internal file attributes. \end{DoxyCompactList}\item 
+quint32 {\bf external\-Attr}\label{structQuaZipFileInfo_afeb65ffdacc4fc0ba7848d4b37f62ecf}
+
+\begin{DoxyCompactList}\small\item\em External file attributes. \end{DoxyCompactList}\item 
+Q\-String {\bf comment}\label{structQuaZipFileInfo_adc2aad7bbd87ce3415e2a19851266bfc}
+
+\begin{DoxyCompactList}\small\item\em Comment. \end{DoxyCompactList}\item 
+Q\-Byte\-Array {\bf extra}\label{structQuaZipFileInfo_affc7b097de2c3c2ef5801c60f96adc72}
+
+\begin{DoxyCompactList}\small\item\em Extra field. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Information about a file inside archive. 
+
+Call \doxyref{Qua\-Zip\-::get\-Current\-File\-Info()}{p.}{classQuaZip_a9c91a53ed4c2038e153c64bdc097ebe8} or \doxyref{Qua\-Zip\-File\-::get\-File\-Info()}{p.}{classQuaZipFile_ad3f5807329321be21b12c1ba5798b359} to fill this structure. 
+
+\subsection{Member Function Documentation}
+\index{Qua\-Zip\-File\-Info@{Qua\-Zip\-File\-Info}!get\-Permissions@{get\-Permissions}}
+\index{get\-Permissions@{get\-Permissions}!QuaZipFileInfo@{Qua\-Zip\-File\-Info}}
+\subsubsection[{get\-Permissions}]{\setlength{\rightskip}{0pt plus 5cm}Q\-File\-::\-Permissions Qua\-Zip\-File\-Info\-::get\-Permissions (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{structQuaZipFileInfo_af87f96a64d7c02b002622f81d13accdb}
+
+
+Get the file permissions. 
+
+Returns the high 16 bits of external attributes converted to Q\-File\-::\-Permissions. 
+
+The documentation for this struct was generated from the following files\-:\begin{DoxyCompactItemize}
+\item 
+quazip/quazipfileinfo.\-h\item 
+quazip/quazipfileinfo.\-cpp\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/structQuaZipFileInfo64.tex b/3rdparty/quazip-0.7/doc/latex/structQuaZipFileInfo64.tex
new file mode 100644
index 0000000..7a4798f
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/structQuaZipFileInfo64.tex
@@ -0,0 +1,209 @@
+\section{Qua\-Zip\-File\-Info64 Struct Reference}
+\label{structQuaZipFileInfo64}\index{Qua\-Zip\-File\-Info64@{Qua\-Zip\-File\-Info64}}
+
+
+Information about a file inside archive (with zip64 support).  
+
+
+
+
+{\ttfamily \#include $<$quazipfileinfo.\-h$>$}
+
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+Q\-File\-::\-Permissions {\bf get\-Permissions} () const 
+\begin{DoxyCompactList}\small\item\em Get the file permissions. \end{DoxyCompactList}\item 
+bool {\bf to\-Qua\-Zip\-File\-Info} ({\bf Qua\-Zip\-File\-Info} \&info) const 
+\begin{DoxyCompactList}\small\item\em Converts to \doxyref{Qua\-Zip\-File\-Info}{p.}{structQuaZipFileInfo}. \end{DoxyCompactList}\item 
+Q\-Date\-Time {\bf get\-N\-T\-F\-Sm\-Time} (int $\ast$fine\-Ticks=N\-U\-L\-L) const 
+\begin{DoxyCompactList}\small\item\em Returns the N\-T\-F\-S modification time. \end{DoxyCompactList}\item 
+Q\-Date\-Time {\bf get\-N\-T\-F\-Sa\-Time} (int $\ast$fine\-Ticks=N\-U\-L\-L) const 
+\begin{DoxyCompactList}\small\item\em Returns the N\-T\-F\-S access time. \end{DoxyCompactList}\item 
+Q\-Date\-Time {\bf get\-N\-T\-F\-Sc\-Time} (int $\ast$fine\-Ticks=N\-U\-L\-L) const 
+\begin{DoxyCompactList}\small\item\em Returns the N\-T\-F\-S creation time. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\subsection*{Public Attributes}
+\begin{DoxyCompactItemize}
+\item 
+Q\-String {\bf name}\label{structQuaZipFileInfo64_a2cadad4cb9a765e90b5422dae2388762}
+
+\begin{DoxyCompactList}\small\item\em File name. \end{DoxyCompactList}\item 
+quint16 {\bf version\-Created}\label{structQuaZipFileInfo64_a95aeb06b080e483fde874ba2d06f203c}
+
+\begin{DoxyCompactList}\small\item\em Version created by. \end{DoxyCompactList}\item 
+quint16 {\bf version\-Needed}\label{structQuaZipFileInfo64_a27654f5ce3a75331e9c9a7900b407169}
+
+\begin{DoxyCompactList}\small\item\em Version needed to extract. \end{DoxyCompactList}\item 
+quint16 {\bf flags}\label{structQuaZipFileInfo64_a6aa533dd4e02f52459e1e1a0df31e992}
+
+\begin{DoxyCompactList}\small\item\em General purpose flags. \end{DoxyCompactList}\item 
+quint16 {\bf method}\label{structQuaZipFileInfo64_a445967ecbb5a3dd2a9d516db3e14a34a}
+
+\begin{DoxyCompactList}\small\item\em Compression method. \end{DoxyCompactList}\item 
+Q\-Date\-Time {\bf date\-Time}
+\begin{DoxyCompactList}\small\item\em Last modification date and time. \end{DoxyCompactList}\item 
+quint32 {\bf crc}\label{structQuaZipFileInfo64_aeb7b2757a0efa814b196b5280d000a14}
+
+\begin{DoxyCompactList}\small\item\em C\-R\-C. \end{DoxyCompactList}\item 
+quint64 {\bf compressed\-Size}\label{structQuaZipFileInfo64_add8733946ea4af23aa32d85f10955b0f}
+
+\begin{DoxyCompactList}\small\item\em Compressed file size. \end{DoxyCompactList}\item 
+quint64 {\bf uncompressed\-Size}\label{structQuaZipFileInfo64_a571ca077fe282c908e57b0bc82528d49}
+
+\begin{DoxyCompactList}\small\item\em Uncompressed file size. \end{DoxyCompactList}\item 
+quint16 {\bf disk\-Number\-Start}\label{structQuaZipFileInfo64_ac8945cf1ff54d39d28e755685b91e941}
+
+\begin{DoxyCompactList}\small\item\em Disk number start. \end{DoxyCompactList}\item 
+quint16 {\bf internal\-Attr}\label{structQuaZipFileInfo64_aeb895613e76a4cc63f861b010c9e92c0}
+
+\begin{DoxyCompactList}\small\item\em Internal file attributes. \end{DoxyCompactList}\item 
+quint32 {\bf external\-Attr}\label{structQuaZipFileInfo64_a3a8bc40f1aa0cb0985c4e2f8a9678430}
+
+\begin{DoxyCompactList}\small\item\em External file attributes. \end{DoxyCompactList}\item 
+Q\-String {\bf comment}\label{structQuaZipFileInfo64_aba3f5b982087c3e0343bb61e8814c7d1}
+
+\begin{DoxyCompactList}\small\item\em Comment. \end{DoxyCompactList}\item 
+Q\-Byte\-Array {\bf extra}\label{structQuaZipFileInfo64_acf0b1b97f377208847c6912cd1bf1332}
+
+\begin{DoxyCompactList}\small\item\em Extra field. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Information about a file inside archive (with zip64 support). 
+
+Call \doxyref{Qua\-Zip\-::get\-Current\-File\-Info()}{p.}{classQuaZip_a9c91a53ed4c2038e153c64bdc097ebe8} or \doxyref{Qua\-Zip\-File\-::get\-File\-Info()}{p.}{classQuaZipFile_ad3f5807329321be21b12c1ba5798b359} to fill this structure. 
+
+\subsection{Member Function Documentation}
+\index{Qua\-Zip\-File\-Info64@{Qua\-Zip\-File\-Info64}!get\-Permissions@{get\-Permissions}}
+\index{get\-Permissions@{get\-Permissions}!QuaZipFileInfo64@{Qua\-Zip\-File\-Info64}}
+\subsubsection[{get\-Permissions}]{\setlength{\rightskip}{0pt plus 5cm}Q\-File\-::\-Permissions Qua\-Zip\-File\-Info64\-::get\-Permissions (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\label{structQuaZipFileInfo64_a099216bd8991a983168d91c06a689f61}
+
+
+Get the file permissions. 
+
+Returns the high 16 bits of external attributes converted to Q\-File\-::\-Permissions. \index{Qua\-Zip\-File\-Info64@{Qua\-Zip\-File\-Info64}!to\-Qua\-Zip\-File\-Info@{to\-Qua\-Zip\-File\-Info}}
+\index{to\-Qua\-Zip\-File\-Info@{to\-Qua\-Zip\-File\-Info}!QuaZipFileInfo64@{Qua\-Zip\-File\-Info64}}
+\subsubsection[{to\-Qua\-Zip\-File\-Info}]{\setlength{\rightskip}{0pt plus 5cm}bool Qua\-Zip\-File\-Info64\-::to\-Qua\-Zip\-File\-Info (
+\begin{DoxyParamCaption}
+\item[{{\bf Qua\-Zip\-File\-Info} \&}]{info}
+\end{DoxyParamCaption}
+) const}\label{structQuaZipFileInfo64_ada29945c7ee4c9df6fbe95864793aade}
+
+
+Converts to \doxyref{Qua\-Zip\-File\-Info}{p.}{structQuaZipFileInfo}. 
+
+If any of the fields are greater than 0x\-F\-F\-F\-F\-F\-F\-F\-Fu, they are set to 0x\-F\-F\-F\-F\-F\-F\-F\-Fu exactly, not just truncated. This function should be mainly used for compatibility with the old code expecting \doxyref{Qua\-Zip\-File\-Info}{p.}{structQuaZipFileInfo}, in the cases when it's impossible or otherwise unadvisable (due to A\-B\-I compatibility reasons, for example) to modify that old code to use \doxyref{Qua\-Zip\-File\-Info64}{p.}{structQuaZipFileInfo64}.
+
+\begin{DoxyReturn}{Returns}
+{\ttfamily true} if all fields converted correctly, {\ttfamily false} if an overflow occured. 
+\end{DoxyReturn}
+
+
+References Qua\-Zip\-File\-Info\-::comment, comment, Qua\-Zip\-File\-Info\-::compressed\-Size, compressed\-Size, Qua\-Zip\-File\-Info\-::crc, crc, Qua\-Zip\-File\-Info\-::date\-Time, date\-Time, Qua\-Zip\-File\-Info\-::disk\-Number\-Start, disk\-Number\-Start, Qua\-Zip\-File\-Info\-::external\-Attr, external\-Attr, Qua\-Zip\-File\-Info\-::extra, extra, Qua\-Zip\-File\-Info\-::flags, flags, Qua\-Zip\-File\-Info\-::internal\-Attr, internal\-Attr, Qua\-Zip\-File\-Info\-::method, method, Qua [...]
+
+
+
+Referenced by Qua\-Zip\-::get\-Current\-File\-Info(), and Qua\-Zip\-File\-::get\-File\-Info().
+
+\index{Qua\-Zip\-File\-Info64@{Qua\-Zip\-File\-Info64}!get\-N\-T\-F\-Sm\-Time@{get\-N\-T\-F\-Sm\-Time}}
+\index{get\-N\-T\-F\-Sm\-Time@{get\-N\-T\-F\-Sm\-Time}!QuaZipFileInfo64@{Qua\-Zip\-File\-Info64}}
+\subsubsection[{get\-N\-T\-F\-Sm\-Time}]{\setlength{\rightskip}{0pt plus 5cm}Q\-Date\-Time Qua\-Zip\-File\-Info64\-::get\-N\-T\-F\-Sm\-Time (
+\begin{DoxyParamCaption}
+\item[{int $\ast$}]{fine\-Ticks = {\ttfamily NULL}}
+\end{DoxyParamCaption}
+) const}\label{structQuaZipFileInfo64_af4b19399367cf5bf24026344e0631ccb}
+
+
+Returns the N\-T\-F\-S modification time. 
+
+The get\-N\-T\-F\-S$\ast$\-Time() functions only work if there is an N\-T\-F\-S extra field present. Otherwise, they all return invalid null timestamps. 
+\begin{DoxyParams}{Parameters}
+{\em fine\-Ticks} & If not N\-U\-L\-L, the fractional part of milliseconds returned there, measured in 100-\/nanosecond ticks. Will be set to zero if there is no N\-T\-F\-S extra field. \\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See Also}
+\doxyref{date\-Time}{p.}{structQuaZipFileInfo64_a4d77c6aa6076703e858c938efeb551e4} 
+
+\doxyref{get\-N\-T\-F\-Sa\-Time()}{p.}{structQuaZipFileInfo64_afe4c454de7d067a0095da0223f0cbec2} 
+
+\doxyref{get\-N\-T\-F\-Sc\-Time()}{p.}{structQuaZipFileInfo64_a409dcbbe1ecd88dadb51be1aec48819d} 
+\end{DoxySeeAlso}
+\begin{DoxyReturn}{Returns}
+The N\-T\-F\-S modification time, U\-T\-C 
+\end{DoxyReturn}
+\index{Qua\-Zip\-File\-Info64@{Qua\-Zip\-File\-Info64}!get\-N\-T\-F\-Sa\-Time@{get\-N\-T\-F\-Sa\-Time}}
+\index{get\-N\-T\-F\-Sa\-Time@{get\-N\-T\-F\-Sa\-Time}!QuaZipFileInfo64@{Qua\-Zip\-File\-Info64}}
+\subsubsection[{get\-N\-T\-F\-Sa\-Time}]{\setlength{\rightskip}{0pt plus 5cm}Q\-Date\-Time Qua\-Zip\-File\-Info64\-::get\-N\-T\-F\-Sa\-Time (
+\begin{DoxyParamCaption}
+\item[{int $\ast$}]{fine\-Ticks = {\ttfamily NULL}}
+\end{DoxyParamCaption}
+) const}\label{structQuaZipFileInfo64_afe4c454de7d067a0095da0223f0cbec2}
+
+
+Returns the N\-T\-F\-S access time. 
+
+The get\-N\-T\-F\-S$\ast$\-Time() functions only work if there is an N\-T\-F\-S extra field present. Otherwise, they all return invalid null timestamps. 
+\begin{DoxyParams}{Parameters}
+{\em fine\-Ticks} & If not N\-U\-L\-L, the fractional part of milliseconds returned there, measured in 100-\/nanosecond ticks. Will be set to zero if there is no N\-T\-F\-S extra field. \\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See Also}
+\doxyref{date\-Time}{p.}{structQuaZipFileInfo64_a4d77c6aa6076703e858c938efeb551e4} 
+
+\doxyref{get\-N\-T\-F\-Sm\-Time()}{p.}{structQuaZipFileInfo64_af4b19399367cf5bf24026344e0631ccb} 
+
+\doxyref{get\-N\-T\-F\-Sc\-Time()}{p.}{structQuaZipFileInfo64_a409dcbbe1ecd88dadb51be1aec48819d} 
+\end{DoxySeeAlso}
+\begin{DoxyReturn}{Returns}
+The N\-T\-F\-S access time, U\-T\-C 
+\end{DoxyReturn}
+\index{Qua\-Zip\-File\-Info64@{Qua\-Zip\-File\-Info64}!get\-N\-T\-F\-Sc\-Time@{get\-N\-T\-F\-Sc\-Time}}
+\index{get\-N\-T\-F\-Sc\-Time@{get\-N\-T\-F\-Sc\-Time}!QuaZipFileInfo64@{Qua\-Zip\-File\-Info64}}
+\subsubsection[{get\-N\-T\-F\-Sc\-Time}]{\setlength{\rightskip}{0pt plus 5cm}Q\-Date\-Time Qua\-Zip\-File\-Info64\-::get\-N\-T\-F\-Sc\-Time (
+\begin{DoxyParamCaption}
+\item[{int $\ast$}]{fine\-Ticks = {\ttfamily NULL}}
+\end{DoxyParamCaption}
+) const}\label{structQuaZipFileInfo64_a409dcbbe1ecd88dadb51be1aec48819d}
+
+
+Returns the N\-T\-F\-S creation time. 
+
+The get\-N\-T\-F\-S$\ast$\-Time() functions only work if there is an N\-T\-F\-S extra field present. Otherwise, they all return invalid null timestamps. 
+\begin{DoxyParams}{Parameters}
+{\em fine\-Ticks} & If not N\-U\-L\-L, the fractional part of milliseconds returned there, measured in 100-\/nanosecond ticks. Will be set to zero if there is no N\-T\-F\-S extra field. \\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See Also}
+\doxyref{date\-Time}{p.}{structQuaZipFileInfo64_a4d77c6aa6076703e858c938efeb551e4} 
+
+\doxyref{get\-N\-T\-F\-Sm\-Time()}{p.}{structQuaZipFileInfo64_af4b19399367cf5bf24026344e0631ccb} 
+
+\doxyref{get\-N\-T\-F\-Sa\-Time()}{p.}{structQuaZipFileInfo64_afe4c454de7d067a0095da0223f0cbec2} 
+\end{DoxySeeAlso}
+\begin{DoxyReturn}{Returns}
+The N\-T\-F\-S creation time, U\-T\-C 
+\end{DoxyReturn}
+
+
+\subsection{Member Data Documentation}
+\index{Qua\-Zip\-File\-Info64@{Qua\-Zip\-File\-Info64}!date\-Time@{date\-Time}}
+\index{date\-Time@{date\-Time}!QuaZipFileInfo64@{Qua\-Zip\-File\-Info64}}
+\subsubsection[{date\-Time}]{\setlength{\rightskip}{0pt plus 5cm}Q\-Date\-Time Qua\-Zip\-File\-Info64\-::date\-Time}\label{structQuaZipFileInfo64_a4d77c6aa6076703e858c938efeb551e4}
+
+
+Last modification date and time. 
+
+This is the time stored in the standard Z\-I\-P header. This format only allows to store time with 2-\/second precision, so the seconds will always be even and the milliseconds will always be zero. If you need more precise date and time, you can try to call the \doxyref{get\-N\-T\-F\-Sm\-Time()}{p.}{structQuaZipFileInfo64_af4b19399367cf5bf24026344e0631ccb} function or its siblings, provided that the archive itself contains these N\-T\-F\-S times. 
+
+Referenced by Qua\-Zip\-::get\-Current\-File\-Info(), and to\-Qua\-Zip\-File\-Info().
+
+
+
+The documentation for this struct was generated from the following files\-:\begin{DoxyCompactItemize}
+\item 
+quazip/quazipfileinfo.\-h\item 
+quazip/quazipfileinfo.\-cpp\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/structQuaZipNewInfo.tex b/3rdparty/quazip-0.7/doc/latex/structQuaZipNewInfo.tex
new file mode 100644
index 0000000..9428041
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/structQuaZipNewInfo.tex
@@ -0,0 +1,360 @@
+\section{Qua\-Zip\-New\-Info Struct Reference}
+\label{structQuaZipNewInfo}\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}}
+
+
+Information about a file to be created.  
+
+
+
+
+{\ttfamily \#include $<$quazipnewinfo.\-h$>$}
+
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item 
+{\bf Qua\-Zip\-New\-Info} (const Q\-String \&{\bf name})
+\begin{DoxyCompactList}\small\item\em Constructs \doxyref{Qua\-Zip\-New\-Info}{p.}{structQuaZipNewInfo} instance. \end{DoxyCompactList}\item 
+{\bf Qua\-Zip\-New\-Info} (const Q\-String \&{\bf name}, const Q\-String \&file)
+\begin{DoxyCompactList}\small\item\em Constructs \doxyref{Qua\-Zip\-New\-Info}{p.}{structQuaZipNewInfo} instance. \end{DoxyCompactList}\item 
+{\bf Qua\-Zip\-New\-Info} (const {\bf Qua\-Zip\-File\-Info} \&existing)
+\begin{DoxyCompactList}\small\item\em Initializes the new instance from existing file info. \end{DoxyCompactList}\item 
+{\bf Qua\-Zip\-New\-Info} (const {\bf Qua\-Zip\-File\-Info64} \&existing)
+\begin{DoxyCompactList}\small\item\em Initializes the new instance from existing file info. \end{DoxyCompactList}\item 
+void {\bf set\-File\-Date\-Time} (const Q\-String \&file)
+\begin{DoxyCompactList}\small\item\em Sets the file timestamp from the existing file. \end{DoxyCompactList}\item 
+void {\bf set\-File\-Permissions} (const Q\-String \&file)
+\begin{DoxyCompactList}\small\item\em Sets the file permissions from the existing file. \end{DoxyCompactList}\item 
+void {\bf set\-Permissions} (Q\-File\-::\-Permissions permissions)
+\begin{DoxyCompactList}\small\item\em Sets the file permissions. \end{DoxyCompactList}\item 
+void {\bf set\-File\-N\-T\-F\-S\-Times} (const Q\-String \&file\-Name)
+\begin{DoxyCompactList}\small\item\em Sets the N\-T\-F\-S times from an existing file. \end{DoxyCompactList}\item 
+void {\bf set\-File\-N\-T\-F\-Sm\-Time} (const Q\-Date\-Time \&m\-Time, int fine\-Ticks=0)
+\begin{DoxyCompactList}\small\item\em Sets the N\-T\-F\-S modification time. \end{DoxyCompactList}\item 
+void {\bf set\-File\-N\-T\-F\-Sa\-Time} (const Q\-Date\-Time \&a\-Time, int fine\-Ticks=0)
+\begin{DoxyCompactList}\small\item\em Sets the N\-T\-F\-S access time. \end{DoxyCompactList}\item 
+void {\bf set\-File\-N\-T\-F\-Sc\-Time} (const Q\-Date\-Time \&c\-Time, int fine\-Ticks=0)
+\begin{DoxyCompactList}\small\item\em Sets the N\-T\-F\-S creation time. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\subsection*{Public Attributes}
+\begin{DoxyCompactItemize}
+\item 
+Q\-String {\bf name}
+\begin{DoxyCompactList}\small\item\em File name. \end{DoxyCompactList}\item 
+Q\-Date\-Time {\bf date\-Time}
+\begin{DoxyCompactList}\small\item\em File timestamp. \end{DoxyCompactList}\item 
+quint16 {\bf internal\-Attr}\label{structQuaZipNewInfo_a59ce9776c2ac7547ade8cb4c404c77ab}
+
+\begin{DoxyCompactList}\small\item\em File internal attributes. \end{DoxyCompactList}\item 
+quint32 {\bf external\-Attr}
+\begin{DoxyCompactList}\small\item\em File external attributes. \end{DoxyCompactList}\item 
+Q\-String {\bf comment}
+\begin{DoxyCompactList}\small\item\em File comment. \end{DoxyCompactList}\item 
+Q\-Byte\-Array {\bf extra\-Local}\label{structQuaZipNewInfo_ab377a81c51cf495c7aeee4f19340a43f}
+
+\begin{DoxyCompactList}\small\item\em File local extra field. \end{DoxyCompactList}\item 
+Q\-Byte\-Array {\bf extra\-Global}\label{structQuaZipNewInfo_abda207eb3949db3a88761c1b06e6bd58}
+
+\begin{DoxyCompactList}\small\item\em File global extra field. \end{DoxyCompactList}\item 
+ulong {\bf uncompressed\-Size}
+\begin{DoxyCompactList}\small\item\em Uncompressed file size. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Information about a file to be created. 
+
+This structure holds information about a file to be created inside Z\-I\-P archive. At least name should be set to something correct before passing this structure to Qua\-Zip\-File\-::open(\-Open\-Mode,const Qua\-Zip\-New\-Info\&,int,int,bool).
+
+Zip64 support of this structure is slightly limited\-: in the raw mode (when a pre-\/compressed file is written into a Z\-I\-P file as-\/is), it is necessary to specify the uncompressed file size and the appropriate field is 32 bit. Since the raw mode is used extremely rare, there is no real need to have a separate Qua\-Zip\-New\-Info64 structure like \doxyref{Qua\-Zip\-File\-Info64}{p.}{structQuaZipFileInfo64}. It may be added in the future though, if there is a demand for the raw mode  [...]
+
+\subsection{Constructor \& Destructor Documentation}
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}}
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{Qua\-Zip\-New\-Info}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Zip\-New\-Info\-::\-Qua\-Zip\-New\-Info (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{name}
+\end{DoxyParamCaption}
+)}\label{structQuaZipNewInfo_a46c0f551cf9e6b2131929beb39187aac}
+
+
+Constructs \doxyref{Qua\-Zip\-New\-Info}{p.}{structQuaZipNewInfo} instance. 
+
+Initializes name with {\itshape name}, date\-Time with current date and time. Attributes are initialized with zeros, comment and extra field with null values. \index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}}
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{Qua\-Zip\-New\-Info}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Zip\-New\-Info\-::\-Qua\-Zip\-New\-Info (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{name, }
+\item[{const Q\-String \&}]{file}
+\end{DoxyParamCaption}
+)}\label{structQuaZipNewInfo_ad47cf11f4277edcb09a8ba2b2963f2a9}
+
+
+Constructs \doxyref{Qua\-Zip\-New\-Info}{p.}{structQuaZipNewInfo} instance. 
+
+Initializes name with {\itshape name}. Timestamp and permissions are taken from the specified file. If the {\itshape file} does not exists or its timestamp is inaccessible (e. g. you do not have read permission for the directory file in), uses current time and zero permissions. Other attributes are initialized with zeros, comment and extra field with null values.
+
+\begin{DoxySeeAlso}{See Also}
+\doxyref{set\-File\-Date\-Time()}{p.}{structQuaZipNewInfo_a2b18b554d056877a2f33ffb9d241ed85} 
+\end{DoxySeeAlso}
+
+
+References date\-Time.
+
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}}
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{Qua\-Zip\-New\-Info}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Zip\-New\-Info\-::\-Qua\-Zip\-New\-Info (
+\begin{DoxyParamCaption}
+\item[{const {\bf Qua\-Zip\-File\-Info} \&}]{existing}
+\end{DoxyParamCaption}
+)}\label{structQuaZipNewInfo_a5f1a867f3b0d29d076f9014f70b59e5a}
+
+
+Initializes the new instance from existing file info. 
+
+Mainly used when copying files between archives.
+
+Both extra fields are initialized to existing.\-extra. \doxyref{Qua\-Zip\-New\-Info}{p.}{structQuaZipNewInfo} 
+\begin{DoxyParams}{Parameters}
+{\em existing} & \\
+\hline
+\end{DoxyParams}
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}}
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{Qua\-Zip\-New\-Info}]{\setlength{\rightskip}{0pt plus 5cm}Qua\-Zip\-New\-Info\-::\-Qua\-Zip\-New\-Info (
+\begin{DoxyParamCaption}
+\item[{const {\bf Qua\-Zip\-File\-Info64} \&}]{existing}
+\end{DoxyParamCaption}
+)}\label{structQuaZipNewInfo_a4afa2e8c282a801fc216f79026c2d062}
+
+
+Initializes the new instance from existing file info. 
+
+Mainly used when copying files between archives.
+
+Both extra fields are initialized to existing.\-extra. \doxyref{Qua\-Zip\-New\-Info}{p.}{structQuaZipNewInfo} 
+\begin{DoxyParams}{Parameters}
+{\em existing} & \\
+\hline
+\end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!set\-File\-Date\-Time@{set\-File\-Date\-Time}}
+\index{set\-File\-Date\-Time@{set\-File\-Date\-Time}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{set\-File\-Date\-Time}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-New\-Info\-::set\-File\-Date\-Time (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{file}
+\end{DoxyParamCaption}
+)}\label{structQuaZipNewInfo_a2b18b554d056877a2f33ffb9d241ed85}
+
+
+Sets the file timestamp from the existing file. 
+
+Use this function to set the file timestamp from the existing file. Use it like this\-: 
+\begin{DoxyCode}
+QuaZipFile zipFile(&zip);
+QFile file(\textcolor{stringliteral}{"file-to-add"});
+file.open(QIODevice::ReadOnly);
+QuaZipNewInfo info(\textcolor{stringliteral}{"file-name-in-archive"});
+info.setFileDateTime(\textcolor{stringliteral}{"file-to-add"}); \textcolor{comment}{// take the timestamp from file}
+zipFile.open(QIODevice::WriteOnly, info);
+\end{DoxyCode}
+
+
+This function does not change date\-Time if some error occured (e. g. file is inaccessible). 
+
+References date\-Time.
+
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!set\-File\-Permissions@{set\-File\-Permissions}}
+\index{set\-File\-Permissions@{set\-File\-Permissions}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{set\-File\-Permissions}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-New\-Info\-::set\-File\-Permissions (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{file}
+\end{DoxyParamCaption}
+)}\label{structQuaZipNewInfo_a08bee5211eb0b49da260c7a9e7a266b8}
+
+
+Sets the file permissions from the existing file. 
+
+Takes permissions from the file and sets the high 16 bits of external attributes. Uses Q\-File\-Info to get permissions on all platforms. \index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!set\-Permissions@{set\-Permissions}}
+\index{set\-Permissions@{set\-Permissions}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{set\-Permissions}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-New\-Info\-::set\-Permissions (
+\begin{DoxyParamCaption}
+\item[{Q\-File\-::\-Permissions}]{permissions}
+\end{DoxyParamCaption}
+)}\label{structQuaZipNewInfo_aed68dc20f7dc42b5056491cf3c1d2d20}
+
+
+Sets the file permissions. 
+
+Modifies the highest 16 bits of external attributes. The type part is set to dir if the name ends with a slash, and to regular file otherwise. 
+
+References name.
+
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!set\-File\-N\-T\-F\-S\-Times@{set\-File\-N\-T\-F\-S\-Times}}
+\index{set\-File\-N\-T\-F\-S\-Times@{set\-File\-N\-T\-F\-S\-Times}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{set\-File\-N\-T\-F\-S\-Times}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-New\-Info\-::set\-File\-N\-T\-F\-S\-Times (
+\begin{DoxyParamCaption}
+\item[{const Q\-String \&}]{file\-Name}
+\end{DoxyParamCaption}
+)}\label{structQuaZipNewInfo_a663a37c5a7a2d18900ba8b0199617eff}
+
+
+Sets the N\-T\-F\-S times from an existing file. 
+
+If the file doesn't exist, a warning is printed to the stderr and nothing is done. Otherwise, all three times, as reported by Q\-File\-Info\-::last\-Modified(), Q\-File\-Info\-::last\-Read() and Q\-File\-Info\-::created(), are written to the N\-T\-F\-S extra field record.
+
+The N\-T\-F\-S record is written to both the local and the global extra fields, updating the existing record if there is one, or creating a new one and appending it to the end of each extra field.
+
+The microseconds will be zero, as they aren't reported by Q\-File\-Info. 
+\begin{DoxyParams}{Parameters}
+{\em file\-Name} & \\
+\hline
+\end{DoxyParams}
+
+
+References set\-File\-N\-T\-F\-Sa\-Time(), set\-File\-N\-T\-F\-Sc\-Time(), and set\-File\-N\-T\-F\-Sm\-Time().
+
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!set\-File\-N\-T\-F\-Sm\-Time@{set\-File\-N\-T\-F\-Sm\-Time}}
+\index{set\-File\-N\-T\-F\-Sm\-Time@{set\-File\-N\-T\-F\-Sm\-Time}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{set\-File\-N\-T\-F\-Sm\-Time}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-New\-Info\-::set\-File\-N\-T\-F\-Sm\-Time (
+\begin{DoxyParamCaption}
+\item[{const Q\-Date\-Time \&}]{m\-Time, }
+\item[{int}]{fine\-Ticks = {\ttfamily 0}}
+\end{DoxyParamCaption}
+)}\label{structQuaZipNewInfo_a3af07365df1d67502ab1d0ca0d45df79}
+
+
+Sets the N\-T\-F\-S modification time. 
+
+The time is written into the N\-T\-F\-S record in both the local and the global extra fields, updating the existing record if there is one, or creating a new one and appending it to the end of each extra field. When updating an existing record, all other fields are left intact. 
+\begin{DoxyParams}{Parameters}
+{\em m\-Time} & The new modification time. \\
+\hline
+{\em fine\-Ticks} & The fractional part of milliseconds, in 100-\/nanosecond ticks (i. e. 9999 ticks = 999.\-9 microsecond). Values greater than 9999 will add milliseconds or even seconds, but this can be confusing and therefore is discouraged. \\
+\hline
+\end{DoxyParams}
+
+
+References extra\-Global, and extra\-Local.
+
+
+
+Referenced by set\-File\-N\-T\-F\-S\-Times().
+
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!set\-File\-N\-T\-F\-Sa\-Time@{set\-File\-N\-T\-F\-Sa\-Time}}
+\index{set\-File\-N\-T\-F\-Sa\-Time@{set\-File\-N\-T\-F\-Sa\-Time}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{set\-File\-N\-T\-F\-Sa\-Time}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-New\-Info\-::set\-File\-N\-T\-F\-Sa\-Time (
+\begin{DoxyParamCaption}
+\item[{const Q\-Date\-Time \&}]{a\-Time, }
+\item[{int}]{fine\-Ticks = {\ttfamily 0}}
+\end{DoxyParamCaption}
+)}\label{structQuaZipNewInfo_a1042ac3d55a9deed760eb357aaa8284c}
+
+
+Sets the N\-T\-F\-S access time. 
+
+The time is written into the N\-T\-F\-S record in both the local and the global extra fields, updating the existing record if there is one, or creating a new one and appending it to the end of each extra field. When updating an existing record, all other fields are left intact. 
+\begin{DoxyParams}{Parameters}
+{\em a\-Time} & The new access time. \\
+\hline
+{\em fine\-Ticks} & The fractional part of milliseconds, in 100-\/nanosecond ticks (i. e. 9999 ticks = 999.\-9 microsecond). Values greater than 9999 will add milliseconds or even seconds, but this can be confusing and therefore is discouraged. \\
+\hline
+\end{DoxyParams}
+
+
+References extra\-Global, and extra\-Local.
+
+
+
+Referenced by set\-File\-N\-T\-F\-S\-Times().
+
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!set\-File\-N\-T\-F\-Sc\-Time@{set\-File\-N\-T\-F\-Sc\-Time}}
+\index{set\-File\-N\-T\-F\-Sc\-Time@{set\-File\-N\-T\-F\-Sc\-Time}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{set\-File\-N\-T\-F\-Sc\-Time}]{\setlength{\rightskip}{0pt plus 5cm}void Qua\-Zip\-New\-Info\-::set\-File\-N\-T\-F\-Sc\-Time (
+\begin{DoxyParamCaption}
+\item[{const Q\-Date\-Time \&}]{c\-Time, }
+\item[{int}]{fine\-Ticks = {\ttfamily 0}}
+\end{DoxyParamCaption}
+)}\label{structQuaZipNewInfo_a44675ac1e306eddefcaa35972c294d15}
+
+
+Sets the N\-T\-F\-S creation time. 
+
+The time is written into the N\-T\-F\-S record in both the local and the global extra fields, updating the existing record if there is one, or creating a new one and appending it to the end of each extra field. When updating an existing record, all other fields are left intact. 
+\begin{DoxyParams}{Parameters}
+{\em c\-Time} & The new creation time. \\
+\hline
+{\em fine\-Ticks} & The fractional part of milliseconds, in 100-\/nanosecond ticks (i. e. 9999 ticks = 999.\-9 microsecond). Values greater than 9999 will add milliseconds or even seconds, but this can be confusing and therefore is discouraged. \\
+\hline
+\end{DoxyParams}
+
+
+References extra\-Global, and extra\-Local.
+
+
+
+Referenced by set\-File\-N\-T\-F\-S\-Times().
+
+
+
+\subsection{Member Data Documentation}
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!name@{name}}
+\index{name@{name}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{name}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String Qua\-Zip\-New\-Info\-::name}\label{structQuaZipNewInfo_a2bdef01b6ac3326e48598e32bfa5fbe8}
+
+
+File name. 
+
+This field holds file name inside archive, including path relative to archive root. 
+
+Referenced by Qua\-Zip\-File\-::open(), and set\-Permissions().
+
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!date\-Time@{date\-Time}}
+\index{date\-Time@{date\-Time}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{date\-Time}]{\setlength{\rightskip}{0pt plus 5cm}Q\-Date\-Time Qua\-Zip\-New\-Info\-::date\-Time}\label{structQuaZipNewInfo_aec7f3ac72c72a2e10b82ad64c2fa3453}
+
+
+File timestamp. 
+
+This is the last file modification date and time. Will be stored in the archive central directory. It is a good practice to set it to the source file timestamp instead of archive creating time. Use \doxyref{set\-File\-Date\-Time()}{p.}{structQuaZipNewInfo_a2b18b554d056877a2f33ffb9d241ed85} or \doxyref{Qua\-Zip\-New\-Info(const Q\-String\&, const Q\-String\&)}{p.}{structQuaZipNewInfo_ad47cf11f4277edcb09a8ba2b2963f2a9}. 
+
+Referenced by Qua\-Zip\-File\-::open(), Qua\-Zip\-New\-Info(), and set\-File\-Date\-Time().
+
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!external\-Attr@{external\-Attr}}
+\index{external\-Attr@{external\-Attr}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{external\-Attr}]{\setlength{\rightskip}{0pt plus 5cm}quint32 Qua\-Zip\-New\-Info\-::external\-Attr}\label{structQuaZipNewInfo_affd1a9700d302e1395bd04f0864da7d0}
+
+
+File external attributes. 
+
+The highest 16 bits contain Unix file permissions and type (dir or file). The constructor \doxyref{Qua\-Zip\-New\-Info(const Q\-String\&, const Q\-String\&)}{p.}{structQuaZipNewInfo_ad47cf11f4277edcb09a8ba2b2963f2a9} takes permissions from the provided file. 
+
+Referenced by Qua\-Zip\-File\-::open().
+
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!comment@{comment}}
+\index{comment@{comment}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{comment}]{\setlength{\rightskip}{0pt plus 5cm}Q\-String Qua\-Zip\-New\-Info\-::comment}\label{structQuaZipNewInfo_ae24b1d38c3550b4724862ffcf8f20924}
+
+
+File comment. 
+
+Will be encoded using \doxyref{Qua\-Zip\-::get\-Comment\-Codec()}{p.}{classQuaZip_a008260161781d8b5d2a0a28493fddaf4}. 
+
+Referenced by Qua\-Zip\-File\-::open().
+
+\index{Qua\-Zip\-New\-Info@{Qua\-Zip\-New\-Info}!uncompressed\-Size@{uncompressed\-Size}}
+\index{uncompressed\-Size@{uncompressed\-Size}!QuaZipNewInfo@{Qua\-Zip\-New\-Info}}
+\subsubsection[{uncompressed\-Size}]{\setlength{\rightskip}{0pt plus 5cm}ulong Qua\-Zip\-New\-Info\-::uncompressed\-Size}\label{structQuaZipNewInfo_a18c079b3f2f5ab6eecdd61d6dbe93be6}
+
+
+Uncompressed file size. 
+
+This is only needed if you are using raw file zipping mode, i. e. adding precompressed file in the zip archive. 
+
+Referenced by Qua\-Zip\-File\-::open().
+
+
+
+The documentation for this struct was generated from the following files\-:\begin{DoxyCompactItemize}
+\item 
+quazip/quazipnewinfo.\-h\item 
+quazip/quazipnewinfo.\-cpp\end{DoxyCompactItemize}
diff --git a/3rdparty/quazip-0.7/doc/latex/usage.tex b/3rdparty/quazip-0.7/doc/latex/usage.tex
new file mode 100644
index 0000000..1c13ec7
--- /dev/null
+++ b/3rdparty/quazip-0.7/doc/latex/usage.tex
@@ -0,0 +1,22 @@
+This page provides general information on Qua\-Z\-I\-P usage. See classes \doxyref{Qua\-Zip}{p.}{classQuaZip} and \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} for the detailed documentation on what can Qua\-Z\-I\-P do and what it can not. Also, reading comments in the zip.\-h and unzip.\-h files (taken from the original Z\-I\-P/\-U\-N\-Z\-I\-P package) is always a good idea too. After all, Qua\-Z\-I\-P is just a wrapper with a few convenience extensions and reimplementations.
+
+\doxyref{Qua\-Zip}{p.}{classQuaZip} is a class representing Z\-I\-P archive, \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} represents a file inside archive and subclasses Q\-I\-O\-Device as well. One limitation is that there can be only one instance of \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} per \doxyref{Qua\-Zip}{p.}{classQuaZip} instance, which kind of makes it confusing why there are two classes instead of one. This is actually no more than an A\-P\-I design mistake.\section{Ter [...]
+\char`\"{}\-Qua\-Z\-I\-P\char`\"{} means whole this library, while \char`\"{}\-Qua\-Zip\char`\"{} (note the lower case) is just one class in it.
+
+\char`\"{}\-Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I\char`\"{} or \char`\"{}minizip\char`\"{} means the original A\-P\-I of the Gilles Vollant's Z\-I\-P/\-U\-N\-Z\-I\-P package. It was slightly modified to better integrate with Qt. These modifications are not source or binary compatible with the official minizip release, which means you can't just drop the newer minizip version into Qua\-Z\-I\-P sources and make it work.
+
+\char`\"{}\-Z\-I\-P\char`\"{}, \char`\"{}\-Z\-I\-P archive\char`\"{} or \char`\"{}\-Z\-I\-P file\char`\"{} means any Z\-I\-P archive. Typically this is a plain file with \char`\"{}.\-zip\char`\"{} (or \char`\"{}.\-Z\-I\-P\char`\"{}) file name suffix, but it can also be any seekable Q\-I\-O\-Device (say, Q\-Buffer, but not Q\-Tcp\-Socket).
+
+\char`\"{}\-A file inside archive\char`\"{}, \char`\"{}a file inside Z\-I\-P\char`\"{} or something like that means file either being read or written from/to some Z\-I\-P archive.\section{Error handling}\label{usage_error-handling}
+Almost any call to Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I return some error code. Most of the original A\-P\-I's error checking could be done in this wrapper as well, but it would cause unnecessary code bloating without any benefit. So, Qua\-Z\-I\-P only checks for situations that Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I can not check for. For example, Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I has no \char`\"{}\-Z\-I\-P open mode\char`\"{} concept because read and write modes are completely separated. On the othe [...]
+
+Therefore, error checking is two-\/level (Qua\-Z\-I\-P's level and Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I level), which sometimes can be confusing, so here are some advices on how the error checking should be properly done\-:
+
+
+\begin{DoxyItemize}
+\item Both \doxyref{Qua\-Zip}{p.}{classQuaZip} and \doxyref{Qua\-Zip\-File}{p.}{classQuaZipFile} have get\-Zip\-Error() function, which return error code of the last Z\-I\-P/\-U\-N\-Z\-I\-P A\-P\-I call. Most function calls reset error code to U\-N\-Z\-\_\-\-O\-K on success and set error code on failure. Some functions do not reset error code. Most of them are {\ttfamily const} and do not access Z\-I\-P archive in any way. Some, on the other hand, {\itshape do} access Z\-I\-P archive, bu [...]
+\item Most functions have their own way to report errors, by returning a null string, negative value or {\ttfamily false}. If such a function returns error value, call get\-Zip\-Error() to get more information about error. See \char`\"{}zip.\-h\char`\"{} and \char`\"{}unzip.\-h\char`\"{} of the Z\-I\-P/\-U\-N\-Z\-I\-P package for error codes.
+\item If the function returns error-\/stating value (like {\ttfamily false}), but get\-Zip\-Error() returns U\-N\-Z\-\_\-\-O\-K, it means that you did something obviously wrong. For example, tried to write in the archive open for reading or not open at all. You better just not do that! Most functions also issue a warning using q\-Warning() function in such cases. See documentation for a specific function for details on when it should not be called.
+\end{DoxyItemize}
+
+I know that this is somewhat messy, but I could not find a better way to do all the error handling. 
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/includes.pri b/3rdparty/quazip-0.7/includes.pri
new file mode 100644
index 0000000..8362f97
--- /dev/null
+++ b/3rdparty/quazip-0.7/includes.pri
@@ -0,0 +1,10 @@
+OBJECTS_DIR = .obj
+MOC_DIR = .moc
+
+unix {
+    isEmpty(PREFIX): PREFIX=/usr/local
+}
+
+win32 {
+    isEmpty(PREFIX): warning("PREFIX unspecified, make install won't work")
+}
diff --git a/3rdparty/quazip-0.7/quazip.pri b/3rdparty/quazip-0.7/quazip.pri
new file mode 100644
index 0000000..07cd9c0
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip.pri
@@ -0,0 +1,3 @@
+INCLUDEPATH+=$$PWD
+DEPENDPATH+=$$PWD/quazip
+include($$PWD/quazip/quazip.pri)
diff --git a/3rdparty/quazip-0.7/quazip.pro b/3rdparty/quazip-0.7/quazip.pro
new file mode 100644
index 0000000..86d4587
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip.pro
@@ -0,0 +1,3 @@
+TEMPLATE=subdirs
+SUBDIRS=quazip qztest
+qztest.depends = quazip
diff --git a/3rdparty/quazip-0.7/quazip.sln b/3rdparty/quazip-0.7/quazip.sln
new file mode 100644
index 0000000..efd3e9f
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip.sln
@@ -0,0 +1,26 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual C++ Express 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "quazip", "quazip\quazip.vcxproj", "{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qztest", "qztest\qztest.vcxproj", "{7632B767-D089-4F15-8B1E-C4B3F9EBF592}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}.Debug|Win32.Build.0 = Debug|Win32
+		{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}.Release|Win32.ActiveCfg = Release|Win32
+		{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}.Release|Win32.Build.0 = Release|Win32
+		{7632B767-D089-4F15-8B1E-C4B3F9EBF592}.Debug|Win32.ActiveCfg = Debug|Win32
+		{7632B767-D089-4F15-8B1E-C4B3F9EBF592}.Debug|Win32.Build.0 = Debug|Win32
+		{7632B767-D089-4F15-8B1E-C4B3F9EBF592}.Release|Win32.ActiveCfg = Release|Win32
+		{7632B767-D089-4F15-8B1E-C4B3F9EBF592}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/3rdparty/quazip-0.7/quazip/CMakeLists.txt b/3rdparty/quazip-0.7/quazip/CMakeLists.txt
new file mode 100644
index 0000000..dcb1cde
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/CMakeLists.txt
@@ -0,0 +1,23 @@
+# set all include directories for in and out of source builds
+include_directories(
+	${CMAKE_CURRENT_SOURCE_DIR}
+	${CMAKE_CURRENT_BINARY_DIR}
+	${ZLIB_INCLUDE_DIRS}
+)
+
+file(GLOB SRCS "*.c" "*.cpp")
+file(GLOB PUBLIC_HEADERS "*.h")
+
+# Must be added to enable export macro
+ADD_DEFINITIONS(-DQUAZIP_BUILD)
+
+qt_wrap_cpp(MOC_SRCS ${PUBLIC_HEADERS})
+set(SRCS ${SRCS} ${MOC_SRCS})
+
+add_library(quazip SHARED ${SRCS})
+set_target_properties(quazip PROPERTIES VERSION 1.0.0 SOVERSION 1)
+# Link against ZLIB_LIBRARIES if needed (on Windows this variable is empty)
+target_link_libraries(quazip ${QT_QTMAIN_LIBRARY} ${QT_QTCORE_LIBRARY} ${ZLIB_LIBRARIES})
+
+install(FILES ${PUBLIC_HEADERS} DESTINATION include/quazip)
+install(TARGETS quazip LIBRARY DESTINATION ${LIB_DESTINATION} ARCHIVE DESTINATION ${LIB_DESTINATION} RUNTIME DESTINATION ${LIB_DESTINATION})
diff --git a/3rdparty/quazip-0.7/quazip/JlCompress.cpp b/3rdparty/quazip-0.7/quazip/JlCompress.cpp
new file mode 100644
index 0000000..4be77b6
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/JlCompress.cpp
@@ -0,0 +1,522 @@
+/*
+Copyright (C) 2010 Roberto Pompermaier
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "JlCompress.h"
+#include <QDebug>
+
+static bool copyData(QIODevice &inFile, QIODevice &outFile)
+{
+    while (!inFile.atEnd()) {
+        char buf[4096];
+        qint64 readLen = inFile.read(buf, 4096);
+        if (readLen <= 0)
+            return false;
+        if (outFile.write(buf, readLen) != readLen)
+            return false;
+    }
+    return true;
+}
+
+/**OK
+ * Comprime il file fileName, nell'oggetto zip, con il nome fileDest.
+ *
+ * La funzione fallisce se:
+ * * zip==NULL;
+ * * l'oggetto zip e stato aperto in una modalita non compatibile con l'aggiunta di file;
+ * * non e possibile aprire il file d'origine;
+ * * non e possibile creare il file all'interno dell'oggetto zip;
+ * * si e rilevato un errore nella copia dei dati;
+ * * non e stato possibile chiudere il file all'interno dell'oggetto zip;
+ */
+bool JlCompress::compressFile(QuaZip* zip, QString fileName, QString fileDest) {
+    // zip: oggetto dove aggiungere il file
+    // fileName: nome del file reale
+    // fileDest: nome del file all'interno del file compresso
+
+    // Controllo l'apertura dello zip
+    if (!zip) return false;
+    if (zip->getMode()!=QuaZip::mdCreate &&
+        zip->getMode()!=QuaZip::mdAppend &&
+        zip->getMode()!=QuaZip::mdAdd) return false;
+
+    // Apro il file originale
+    QFile inFile;
+    inFile.setFileName(fileName);
+    if(!inFile.open(QIODevice::ReadOnly)) return false;
+
+    // Apro il file risulato
+    QuaZipFile outFile(zip);
+    if(!outFile.open(QIODevice::WriteOnly, QuaZipNewInfo(fileDest, inFile.fileName()))) return false;
+
+    // Copio i dati
+    if (!copyData(inFile, outFile) || outFile.getZipError()!=UNZ_OK) {
+        return false;
+    }
+
+    // Chiudo i file
+    outFile.close();
+    if (outFile.getZipError()!=UNZ_OK) return false;
+    inFile.close();
+
+    return true;
+}
+
+/**OK
+ * Comprime la cartella dir nel file fileCompressed, se recursive e true allora
+ * comprime anche le sotto cartelle. I nomi dei file preceduti dal path creato
+ * togliendo il pat della cartella origDir al path della cartella dir.
+ * Se la funzione fallisce restituisce false e cancella il file che si e tentato
+ * di creare.
+ *
+ * La funzione fallisce se:
+ * * zip==NULL;
+ * * l'oggetto zip e stato aperto in una modalita non compatibile con l'aggiunta di file;
+ * * la cartella dir non esiste;
+ * * la compressione di una sotto cartella fallisce (1);
+ * * la compressione di un file fallisce;
+ * (1) La funzione si richiama in maniera ricorsiva per comprimere le sotto cartelle
+ * dunque gli errori di compressione di una sotto cartella sono gli stessi di questa
+ * funzione.
+ */
+bool JlCompress::compressSubDir(QuaZip* zip, QString dir, QString origDir, bool recursive) {
+    // zip: oggetto dove aggiungere il file
+    // dir: cartella reale corrente
+    // origDir: cartella reale originale
+    // (path(dir)-path(origDir)) = path interno all'oggetto zip
+
+    // Controllo l'apertura dello zip
+    if (!zip) return false;
+    if (zip->getMode()!=QuaZip::mdCreate &&
+        zip->getMode()!=QuaZip::mdAppend &&
+        zip->getMode()!=QuaZip::mdAdd) return false;
+
+    // Controllo la cartella
+    QDir directory(dir);
+    if (!directory.exists()) return false;
+
+    QDir origDirectory(origDir);
+	if (dir != origDir) {
+		QuaZipFile dirZipFile(zip);
+		if (!dirZipFile.open(QIODevice::WriteOnly,
+			QuaZipNewInfo(origDirectory.relativeFilePath(dir) + "/", dir), 0, 0, 0)) {
+				return false;
+		}
+		dirZipFile.close();
+	}
+
+
+    // Se comprimo anche le sotto cartelle
+    if (recursive) {
+        // Per ogni sotto cartella
+        QFileInfoList files = directory.entryInfoList(QDir::AllDirs|QDir::NoDotAndDotDot);
+        Q_FOREACH (QFileInfo file, files) {
+            // Comprimo la sotto cartella
+            if(!compressSubDir(zip,file.absoluteFilePath(),origDir,recursive)) return false;
+        }
+    }
+
+    // Per ogni file nella cartella
+    QFileInfoList files = directory.entryInfoList(QDir::Files);
+    Q_FOREACH (QFileInfo file, files) {
+        // Se non e un file o e il file compresso che sto creando
+        if(!file.isFile()||file.absoluteFilePath()==zip->getZipName()) continue;
+
+        // Creo il nome relativo da usare all'interno del file compresso
+        QString filename = origDirectory.relativeFilePath(file.absoluteFilePath());
+
+        // Comprimo il file
+        if (!compressFile(zip,file.absoluteFilePath(),filename)) return false;
+    }
+
+    return true;
+}
+
+/**OK
+ * Estrae il file fileName, contenuto nell'oggetto zip, con il nome fileDest.
+ * Se la funzione fallisce restituisce false e cancella il file che si e tentato di estrarre.
+ *
+ * La funzione fallisce se:
+ * * zip==NULL;
+ * * l'oggetto zip e stato aperto in una modalita non compatibile con l'estrazione di file;
+ * * non e possibile aprire il file all'interno dell'oggetto zip;
+ * * non e possibile creare il file estratto;
+ * * si e rilevato un errore nella copia dei dati (1);
+ * * non e stato possibile chiudere il file all'interno dell'oggetto zip (1);
+ *
+ * (1): prima di uscire dalla funzione cancella il file estratto.
+ */
+bool JlCompress::extractFile(QuaZip* zip, QString fileName, QString fileDest) {
+    // zip: oggetto dove aggiungere il file
+    // filename: nome del file reale
+    // fileincompress: nome del file all'interno del file compresso
+
+    // Controllo l'apertura dello zip
+    if (!zip) return false;
+    if (zip->getMode()!=QuaZip::mdUnzip) return false;
+
+    // Apro il file compresso
+    if (!fileName.isEmpty())
+        zip->setCurrentFile(fileName);
+    QuaZipFile inFile(zip);
+    if(!inFile.open(QIODevice::ReadOnly) || inFile.getZipError()!=UNZ_OK) return false;
+
+    // Controllo esistenza cartella file risultato
+    QDir curDir;
+    if (fileDest.endsWith('/')) {
+        if (!curDir.mkpath(fileDest)) {
+            return false;
+        }
+    } else {
+        if (!curDir.mkpath(QFileInfo(fileDest).absolutePath())) {
+            return false;
+        }
+    }
+
+    QuaZipFileInfo64 info;
+    if (!zip->getCurrentFileInfo(&info))
+        return false;
+
+    QFile::Permissions srcPerm = info.getPermissions();
+    if (fileDest.endsWith('/') && QFileInfo(fileDest).isDir()) {
+        if (srcPerm != 0) {
+            QFile(fileDest).setPermissions(srcPerm);
+        }
+        return true;
+    }
+
+    // Apro il file risultato
+    QFile outFile;
+    outFile.setFileName(fileDest);
+    if(!outFile.open(QIODevice::WriteOnly)) return false;
+
+    // Copio i dati
+    if (!copyData(inFile, outFile) || inFile.getZipError()!=UNZ_OK) {
+        outFile.close();
+        removeFile(QStringList(fileDest));
+        return false;
+    }
+    outFile.close();
+
+    // Chiudo i file
+    inFile.close();
+    if (inFile.getZipError()!=UNZ_OK) {
+        removeFile(QStringList(fileDest));
+        return false;
+    }
+
+    if (srcPerm != 0) {
+        outFile.setPermissions(srcPerm);
+    }
+    return true;
+}
+
+/**
+ * Rimuove i file il cui nome e specificato all'interno di listFile.
+ * Restituisce true se tutti i file sono stati cancellati correttamente, attenzione
+ * perche puo restituire false anche se alcuni file non esistevano e si e tentato
+ * di cancellarli.
+ */
+bool JlCompress::removeFile(QStringList listFile) {
+    bool ret = true;
+    // Per ogni file
+    for (int i=0; i<listFile.count(); i++) {
+        // Lo elimino
+        ret = ret && QFile::remove(listFile.at(i));
+    }
+    return ret;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+/**OK
+ * Comprime il file fileName nel file fileCompressed.
+ * Se la funzione fallisce restituisce false e cancella il file che si e tentato
+ * di creare.
+ *
+ * La funzione fallisce se:
+ * * non si riesce ad aprire l'oggetto zip;
+ * * la compressione del file fallisce;
+ * * non si riesce a chiudere l'oggetto zip;
+ */
+bool JlCompress::compressFile(QString fileCompressed, QString file) {
+    // Creo lo zip
+    QuaZip zip(fileCompressed);
+    QDir().mkpath(QFileInfo(fileCompressed).absolutePath());
+    if(!zip.open(QuaZip::mdCreate)) {
+        QFile::remove(fileCompressed);
+        return false;
+    }
+
+    // Aggiungo il file
+    if (!compressFile(&zip,file,QFileInfo(file).fileName())) {
+        QFile::remove(fileCompressed);
+        return false;
+    }
+
+    // Chiudo il file zip
+    zip.close();
+    if(zip.getZipError()!=0) {
+        QFile::remove(fileCompressed);
+        return false;
+    }
+
+    return true;
+}
+
+/**OK
+ * Comprime i file specificati in files nel file fileCompressed.
+ * Se la funzione fallisce restituisce false e cancella il file che si e tentato
+ * di creare.
+ *
+ * La funzione fallisce se:
+ * * non si riesce ad aprire l'oggetto zip;
+ * * la compressione di un file fallisce;
+ * * non si riesce a chiudere l'oggetto zip;
+ */
+bool JlCompress::compressFiles(QString fileCompressed, QStringList files) {
+    // Creo lo zip
+    QuaZip zip(fileCompressed);
+    QDir().mkpath(QFileInfo(fileCompressed).absolutePath());
+    if(!zip.open(QuaZip::mdCreate)) {
+        QFile::remove(fileCompressed);
+        return false;
+    }
+
+    // Comprimo i file
+    QFileInfo info;
+    Q_FOREACH (QString file, files) {
+        info.setFile(file);
+        if (!info.exists() || !compressFile(&zip,file,info.fileName())) {
+            QFile::remove(fileCompressed);
+            return false;
+        }
+    }
+
+    // Chiudo il file zip
+    zip.close();
+    if(zip.getZipError()!=0) {
+        QFile::remove(fileCompressed);
+        return false;
+    }
+
+    return true;
+}
+
+/**OK
+ * Comprime la cartella dir nel file fileCompressed, se recursive e true allora
+ * comprime anche le sotto cartelle.
+ * Se la funzione fallisce restituisce false e cancella il file che si e tentato
+ * di creare.
+ *
+ * La funzione fallisce se:
+ * * non si riesce ad aprire l'oggetto zip;
+ * * la compressione di un file fallisce;
+ * * non si riesce a chiudere l'oggetto zip;
+ */
+bool JlCompress::compressDir(QString fileCompressed, QString dir, bool recursive) {
+    // Creo lo zip
+    QuaZip zip(fileCompressed);
+    QDir().mkpath(QFileInfo(fileCompressed).absolutePath());
+    if(!zip.open(QuaZip::mdCreate)) {
+        QFile::remove(fileCompressed);
+        return false;
+    }
+
+    // Aggiungo i file e le sotto cartelle
+    if (!compressSubDir(&zip,dir,dir,recursive)) {
+        QFile::remove(fileCompressed);
+        return false;
+    }
+
+    // Chiudo il file zip
+    zip.close();
+    if(zip.getZipError()!=0) {
+        QFile::remove(fileCompressed);
+        return false;
+    }
+
+    return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+/**OK
+ * Estrae il file fileName, contenuto nel file fileCompressed, con il nome fileDest.
+ * Se fileDest = "" allora il file viene estratto con lo stesso nome con cui e
+ * stato compresso.
+ * Se la funzione fallisce cancella il file che si e tentato di estrarre.
+ * Restituisce il nome assoluto del file estratto.
+ *
+ * La funzione fallisce se:
+ * * non si riesce ad aprire l'oggetto zip;
+ * * l'estrazione del file fallisce;
+ * * non si riesce a chiudere l'oggetto zip;
+ */
+QString JlCompress::extractFile(QString fileCompressed, QString fileName, QString fileDest) {
+    // Apro lo zip
+    QuaZip zip(fileCompressed);
+    if(!zip.open(QuaZip::mdUnzip)) {
+        return QString();
+    }
+
+    // Estraggo il file
+    if (fileDest.isEmpty()) 
+        fileDest = fileName;
+    if (!extractFile(&zip,fileName,fileDest)) {
+        return QString();
+    }
+
+    // Chiudo il file zip
+    zip.close();
+    if(zip.getZipError()!=0) {
+        removeFile(QStringList(fileDest));
+        return QString();
+    }
+    return QFileInfo(fileDest).absoluteFilePath();
+}
+
+/**OK
+ * Estrae i file specificati in files, contenuti nel file fileCompressed, nella
+ * cartella dir. La struttura a cartelle del file compresso viene rispettata.
+ * Se dir = "" allora il file viene estratto nella cartella corrente.
+ * Se la funzione fallisce cancella i file che si e tentato di estrarre.
+ * Restituisce i nomi assoluti dei file estratti.
+ *
+ * La funzione fallisce se:
+ * * non si riesce ad aprire l'oggetto zip;
+ * * l'estrazione di un file fallisce;
+ * * non si riesce a chiudere l'oggetto zip;
+ */
+QStringList JlCompress::extractFiles(QString fileCompressed, QStringList files, QString dir) {
+    // Creo lo zip
+    QuaZip zip(fileCompressed);
+    if(!zip.open(QuaZip::mdUnzip)) {
+        return QStringList();
+    }
+
+    // Estraggo i file
+    QStringList extracted;
+    for (int i=0; i<files.count(); i++) {
+        QString absPath = QDir(dir).absoluteFilePath(files.at(i));
+        if (!extractFile(&zip, files.at(i), absPath)) {
+            removeFile(extracted);
+            return QStringList();
+        }
+        extracted.append(absPath);
+    }
+
+    // Chiudo il file zip
+    zip.close();
+    if(zip.getZipError()!=0) {
+        removeFile(extracted);
+        return QStringList();
+    }
+
+    return extracted;
+}
+
+/**OK
+ * Estrae il file fileCompressed nella cartella dir.
+ * Se dir = "" allora il file viene estratto nella cartella corrente.
+ * Se la funzione fallisce cancella i file che si e tentato di estrarre.
+ * Restituisce i nomi assoluti dei file estratti.
+ *
+ * La funzione fallisce se:
+ * * non si riesce ad aprire l'oggetto zip;
+ * * la compressione di un file fallisce;
+ * * non si riesce a chiudere l'oggetto zip;
+ */
+QStringList JlCompress::extractDir(QString fileCompressed, QString dir) {
+    // Apro lo zip
+    QuaZip zip(fileCompressed);
+    if(!zip.open(QuaZip::mdUnzip)) {
+        return QStringList();
+    }
+
+    QDir directory(dir);
+    QStringList extracted;
+    if (!zip.goToFirstFile()) {
+        return QStringList();
+    }
+    do {
+        QString name = zip.getCurrentFileName();
+        QString absFilePath = directory.absoluteFilePath(name);
+        if (!extractFile(&zip, "", absFilePath)) {
+            removeFile(extracted);
+            return QStringList();
+        }
+        extracted.append(absFilePath);
+    } while (zip.goToNextFile());
+
+    // Chiudo il file zip
+    zip.close();
+    if(zip.getZipError()!=0) {
+        removeFile(extracted);
+        return QStringList();
+    }
+
+    return extracted;
+}
+
+/**OK
+ * Restituisce la lista dei file resenti nel file compresso fileCompressed.
+ * Se la funzione fallisce, restituisce un elenco vuoto.
+ *
+ * La funzione fallisce se:
+ * * non si riesce ad aprire l'oggetto zip;
+ * * la richiesta di informazioni di un file fallisce;
+ * * non si riesce a chiudere l'oggetto zip;
+ */
+QStringList JlCompress::getFileList(QString fileCompressed) {
+    // Apro lo zip
+    QuaZip* zip = new QuaZip(QFileInfo(fileCompressed).absoluteFilePath());
+    if(!zip->open(QuaZip::mdUnzip)) {
+        delete zip;
+        return QStringList();
+    }
+
+    // Estraggo i nomi dei file
+    QStringList lst;
+    QuaZipFileInfo64 info;
+    for(bool more=zip->goToFirstFile(); more; more=zip->goToNextFile()) {
+      if(!zip->getCurrentFileInfo(&info)) {
+          delete zip;
+          return QStringList();
+      }
+      lst << info.name;
+      //info.name.toLocal8Bit().constData()
+    }
+
+    // Chiudo il file zip
+    zip->close();
+    if(zip->getZipError()!=0) {
+        delete zip;
+        return QStringList();
+    }
+    delete zip;
+
+    return lst;
+}
+
diff --git a/3rdparty/quazip-0.7/quazip/JlCompress.h b/3rdparty/quazip-0.7/quazip/JlCompress.h
new file mode 100644
index 0000000..62543f7
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/JlCompress.h
@@ -0,0 +1,139 @@
+#ifndef JLCOMPRESSFOLDER_H_
+#define JLCOMPRESSFOLDER_H_
+
+/*
+Copyright (C) 2010 Roberto Pompermaier
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "quazip.h"
+#include "quazipfile.h"
+#include "quazipfileinfo.h"
+#include <QString>
+#include <QDir>
+#include <QFileInfo>
+#include <QFile>
+
+/// Utility class for typical operations.
+/**
+  This class contains a number of useful static functions to perform
+  simple operations, such as mass ZIP packing or extraction.
+  */
+class QUAZIP_EXPORT JlCompress {
+private:
+    /// Compress a single file.
+    /**
+      \param zip Opened zip to compress the file to.
+      \param fileName The full path to the source file.
+      \param fileDest The full name of the file inside the archive.
+      \return true if success, false otherwise.
+      */
+    static bool compressFile(QuaZip* zip, QString fileName, QString fileDest);
+    /// Compress a subdirectory.
+    /**
+      \param parentZip Opened zip containing the parent directory.
+      \param dir The full path to the directory to pack.
+      \param parentDir The full path to the directory corresponding to
+      the root of the ZIP.
+      \param recursive Whether to pack sub-directories as well or only
+      files.
+      \return true if success, false otherwise.
+      */
+    static bool compressSubDir(QuaZip* parentZip, QString dir, QString parentDir, bool recursive = true);
+    /// Extract a single file.
+    /**
+      \param zip The opened zip archive to extract from.
+      \param fileName The full name of the file to extract.
+      \param fileDest The full path to the destination file.
+      \return true if success, false otherwise.
+      */
+    static bool extractFile(QuaZip* zip, QString fileName, QString fileDest);
+    /// Remove some files.
+    /**
+      \param listFile The list of files to remove.
+      \return true if success, false otherwise.
+      */
+    static bool removeFile(QStringList listFile);
+
+public:
+    /// Compress a single file.
+    /**
+      \param fileCompressed The name of the archive.
+      \param file The file to compress.
+      \return true if success, false otherwise.
+      */
+    static bool compressFile(QString fileCompressed, QString file);
+    /// Compress a list of files.
+    /**
+      \param fileCompressed The name of the archive.
+      \param files The file list to compress.
+      \return true if success, false otherwise.
+      */
+    static bool compressFiles(QString fileCompressed, QStringList files);
+    /// Compress a whole directory.
+    /**
+      \param fileCompressed The name of the archive.
+      \param dir The directory to compress.
+      \param recursive Whether to pack the subdirectories as well, or
+      just regular files.
+      \return true if success, false otherwise.
+      */
+    static bool compressDir(QString fileCompressed, QString dir = QString(), bool recursive = true);
+
+public:
+    /// Extract a single file.
+    /**
+      \param fileCompressed The name of the archive.
+      \param fileName The file to extract.
+      \param fileDest The destination file, assumed to be identical to
+      \a file if left empty.
+      \return The list of the full paths of the files extracted, empty on failure.
+      */
+    static QString extractFile(QString fileCompressed, QString fileName, QString fileDest = QString());
+    /// Extract a list of files.
+    /**
+      \param fileCompressed The name of the archive.
+      \param files The file list to extract.
+      \param dir The directory to put the files to, the current
+      directory if left empty.
+      \return The list of the full paths of the files extracted, empty on failure.
+      */
+    static QStringList extractFiles(QString fileCompressed, QStringList files, QString dir = QString());
+    /// Extract a whole archive.
+    /**
+      \param fileCompressed The name of the archive.
+      \param dir The directory to extract to, the current directory if
+      left empty.
+      \return The list of the full paths of the files extracted, empty on failure.
+      */
+    static QStringList extractDir(QString fileCompressed, QString dir = QString());
+    /// Get the file list.
+    /**
+      \return The list of the files in the archive, or, more precisely, the
+      list of the entries, including both files and directories if they
+      are present separately.
+      */
+    static QStringList getFileList(QString fileCompressed);
+};
+
+#endif /* JLCOMPRESSFOLDER_H_ */
diff --git a/3rdparty/quazip-0.7/quazip/crypt.h b/3rdparty/quazip-0.7/quazip/crypt.h
new file mode 100644
index 0000000..ddee28e
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/crypt.h
@@ -0,0 +1,135 @@
+/* crypt.h -- base code for crypt/uncrypt ZIPfile
+
+
+   Version 1.01e, February 12th, 2005
+
+   Copyright (C) 1998-2005 Gilles Vollant
+
+   This code is a modified version of crypting code in Infozip distribution
+
+   The encryption/decryption parts of this source code (as opposed to the
+   non-echoing password parts) were originally written in Europe.  The
+   whole source package can be freely distributed, including from the USA.
+   (Prior to January 2000, re-export from the US was a violation of US law.)
+
+   This encryption code is a direct transcription of the algorithm from
+   Roger Schlafly, described by Phil Katz in the file appnote.txt.  This
+   file (appnote.txt) is distributed with the PKZIP program (even in the
+   version without encryption capabilities).
+
+   If you don't need crypting in your application, just define symbols
+   NOCRYPT and NOUNCRYPT.
+
+   This code support the "Traditional PKWARE Encryption".
+
+   The new AES encryption added on Zip format by Winzip (see the page
+   http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong
+   Encryption is not supported.
+*/
+
+#include "quazip_global.h"
+
+#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8))
+
+/***********************************************************************
+ * Return the next byte in the pseudo-random sequence
+ */
+static int decrypt_byte(unsigned long* pkeys, const z_crc_t FAR * pcrc_32_tab UNUSED)
+{
+    //(void) pcrc_32_tab; /* avoid "unused parameter" warning */
+    unsigned temp;  /* POTENTIAL BUG:  temp*(temp^1) may overflow in an
+                     * unpredictable manner on 16-bit systems; not a problem
+                     * with any known compiler so far, though */
+
+    temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;
+    return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
+}
+
+/***********************************************************************
+ * Update the encryption keys with the next byte of plain text
+ */
+static int update_keys(unsigned long* pkeys,const z_crc_t FAR * pcrc_32_tab,int c)
+{
+    (*(pkeys+0)) = CRC32((*(pkeys+0)), c);
+    (*(pkeys+1)) += (*(pkeys+0)) & 0xff;
+    (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1;
+    {
+      register int keyshift = (int)((*(pkeys+1)) >> 24);
+      (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift);
+    }
+    return c;
+}
+
+
+/***********************************************************************
+ * Initialize the encryption keys and the random header according to
+ * the given password.
+ */
+static void init_keys(const char* passwd,unsigned long* pkeys,const z_crc_t FAR * pcrc_32_tab)
+{
+    *(pkeys+0) = 305419896L;
+    *(pkeys+1) = 591751049L;
+    *(pkeys+2) = 878082192L;
+    while (*passwd != '\0') {
+        update_keys(pkeys,pcrc_32_tab,(int)*passwd);
+        passwd++;
+    }
+}
+
+#define zdecode(pkeys,pcrc_32_tab,c) \
+    (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
+
+#define zencode(pkeys,pcrc_32_tab,c,t) \
+    (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))
+
+#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
+
+#define RAND_HEAD_LEN  12
+   /* "last resort" source for second part of crypt seed pattern */
+#  ifndef ZCR_SEED2
+#    define ZCR_SEED2 3141592654UL     /* use PI as default pattern */
+#  endif
+
+static int crypthead(passwd, buf, bufSize, pkeys, pcrc_32_tab, crcForCrypting)
+    const char *passwd;         /* password string */
+    unsigned char *buf;         /* where to write header */
+    int bufSize;
+    unsigned long* pkeys;
+    const z_crc_t FAR * pcrc_32_tab;
+    unsigned long crcForCrypting;
+{
+    int n;                       /* index in random header */
+    int t;                       /* temporary */
+    int c;                       /* random byte */
+    unsigned char header[RAND_HEAD_LEN-2]; /* random header */
+    static unsigned calls = 0;   /* ensure different random header each time */
+
+    if (bufSize<RAND_HEAD_LEN)
+      return 0;
+
+    /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the
+     * output of rand() to get less predictability, since rand() is
+     * often poorly implemented.
+     */
+    if (++calls == 1)
+    {
+        srand((unsigned)(time(NULL) ^ ZCR_SEED2));
+    }
+    init_keys(passwd, pkeys, pcrc_32_tab);
+    for (n = 0; n < RAND_HEAD_LEN-2; n++)
+    {
+        c = (rand() >> 7) & 0xff;
+        header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t);
+    }
+    /* Encrypt random header (last two bytes is high word of crc) */
+    init_keys(passwd, pkeys, pcrc_32_tab);
+    for (n = 0; n < RAND_HEAD_LEN-2; n++)
+    {
+        buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t);
+    }
+    buf[n++] = zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t);
+    buf[n++] = zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t);
+    return n;
+}
+
+#endif
diff --git a/3rdparty/quazip-0.7/quazip/debian/libquazip0.symbols b/3rdparty/quazip-0.7/quazip/debian/libquazip0.symbols
new file mode 100644
index 0000000..ed3c09b
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/debian/libquazip0.symbols
@@ -0,0 +1,163 @@
+libquazip.so.0 libquazip0 #MINVER#
+ _Z24qiodevice_open_file_funcPvS_i at Base 0.4.4
+ _Z24qiodevice_read_file_funcPvS_S_m at Base 0.4.4
+ _Z24qiodevice_seek_file_funcPvS_mi at Base 0.4.4
+ _Z24qiodevice_tell_file_funcPvS_ at Base 0.4.4
+ _Z25qiodevice_close_file_funcPvS_ at Base 0.4.4
+ _Z25qiodevice_error_file_funcPvS_ at Base 0.4.4
+ _Z25qiodevice_write_file_funcPvS_PKvm at Base 0.4.4
+ _ZN10JlCompress10extractDirE7QStringS0_ at Base 0.4.4
+ _ZN10JlCompress11compressDirE7QStringS0_b at Base 0.4.4
+ _ZN10JlCompress11extractFileE7QStringS0_S0_ at Base 0.4.4
+ _ZN10JlCompress11getFileListE7QString at Base 0.4.4
+ _ZN10JlCompress12compressFileE7QStringS0_ at Base 0.4.4
+ _ZN10JlCompress12extractFilesE7QString11QStringListS0_ at Base 0.4.4
+ _ZN10JlCompress13compressFilesE7QString11QStringList at Base 0.4.4
+ _ZN10QuaAdler325resetEv at Base 0.4.4
+ _ZN10QuaAdler325valueEv at Base 0.4.4
+ _ZN10QuaAdler326updateERK10QByteArray at Base 0.4.4
+ _ZN10QuaAdler329calculateERK10QByteArray at Base 0.4.4
+ _ZN10QuaAdler32C1Ev at Base 0.4.4
+ _ZN10QuaAdler32C2Ev at Base 0.4.4
+ _ZN10QuaZipFile10setZipNameERK7QString at Base 0.4.4
+ _ZN10QuaZipFile11getFileInfoEP14QuaZipFileInfo at Base 0.4.4
+ _ZN10QuaZipFile11setFileNameERK7QStringN6QuaZip15CaseSensitivityE at Base 0.4.4
+ _ZN10QuaZipFile4openE6QFlagsIN9QIODevice12OpenModeFlagEE at Base 0.4.4
+ _ZN10QuaZipFile4openE6QFlagsIN9QIODevice12OpenModeFlagEEPiS4_bPKc at Base 0.4.4
+ _ZN10QuaZipFile4openE6QFlagsIN9QIODevice12OpenModeFlagEERK13QuaZipNewInfoPKcjiibiii at Base 0.4.4
+ _ZN10QuaZipFile5closeEv at Base 0.4.4
+ _ZN10QuaZipFile6setZipEP6QuaZip at Base 0.4.4
+ _ZN10QuaZipFile8readDataEPcx at Base 0.4.4
+ _ZN10QuaZipFile9writeDataEPKcx at Base 0.4.4
+ _ZN10QuaZipFileC1EP6QuaZipP7QObject at Base 0.4.4
+ _ZN10QuaZipFileC1EP7QObject at Base 0.4.4
+ _ZN10QuaZipFileC1ERK7QStringP7QObject at Base 0.4.4
+ _ZN10QuaZipFileC1ERK7QStringS2_N6QuaZip15CaseSensitivityEP7QObject at Base 0.4.4
+ _ZN10QuaZipFileC1Ev at Base 0.4.4
+ _ZN10QuaZipFileC2EP6QuaZipP7QObject at Base 0.4.4
+ _ZN10QuaZipFileC2EP7QObject at Base 0.4.4
+ _ZN10QuaZipFileC2ERK7QStringP7QObject at Base 0.4.4
+ _ZN10QuaZipFileC2ERK7QStringS2_N6QuaZip15CaseSensitivityEP7QObject at Base 0.4.4
+ _ZN10QuaZipFileC2Ev at Base 0.4.4
+ _ZN10QuaZipFileD0Ev at Base 0.4.4
+ _ZN10QuaZipFileD1Ev at Base 0.4.4
+ _ZN10QuaZipFileD2Ev at Base 0.4.4
+ _ZN13QuaZipNewInfo15setFileDateTimeERK7QString at Base 0.4.4
+ _ZN13QuaZipNewInfoC1ERK7QString at Base 0.4.4
+ _ZN13QuaZipNewInfoC1ERK7QStringS2_ at Base 0.4.4
+ _ZN13QuaZipNewInfoC2ERK7QString at Base 0.4.4
+ _ZN13QuaZipNewInfoC2ERK7QStringS2_ at Base 0.4.4
+ _ZN13QuaZipNewInfoD1Ev at Base 0.4.4
+ _ZN13QuaZipNewInfoD2Ev at Base 0.4.4
+ _ZN14QuaZipFileInfoD1Ev at Base 0.4.4
+ _ZN14QuaZipFileInfoD2Ev at Base 0.4.4
+ _ZN6QuaZip10getUnzFileEv at Base 0.4.4
+ _ZN6QuaZip10getZipFileEv at Base 0.4.4
+ _ZN6QuaZip10setCommentERK7QString at Base 0.4.4
+ _ZN6QuaZip10setZipNameERK7QString at Base 0.4.4
+ _ZN6QuaZip11setIoDeviceEP9QIODevice at Base 0.4.4
+ _ZN6QuaZip12goToNextFileEv at Base 0.4.4
+ _ZN6QuaZip13goToFirstFileEv at Base 0.4.4
+ _ZN6QuaZip14setCurrentFileERK7QStringNS_15CaseSensitivityE at Base 0.4.4
+ _ZN6QuaZip15setCommentCodecEP10QTextCodec at Base 0.4.4
+ _ZN6QuaZip15setCommentCodecEPKc at Base 0.4.4
+ _ZN6QuaZip16setFileNameCodecEP10QTextCodec at Base 0.4.4
+ _ZN6QuaZip16setFileNameCodecEPKc at Base 0.4.4
+ _ZN6QuaZip31setDataDescriptorWritingEnabledEb at Base 0.4.4
+ _ZN6QuaZip4openENS_4ModeEP19zlib_filefunc_def_s at Base 0.4.4
+ _ZN6QuaZip5closeEv at Base 0.4.4
+ _ZN6QuaZipC1EP9QIODevice at Base 0.4.4
+ _ZN6QuaZipC1ERK7QString at Base 0.4.4
+ _ZN6QuaZipC1Ev at Base 0.4.4
+ _ZN6QuaZipC2EP9QIODevice at Base 0.4.4
+ _ZN6QuaZipC2ERK7QString at Base 0.4.4
+ _ZN6QuaZipC2Ev at Base 0.4.4
+ _ZN6QuaZipD1Ev at Base 0.4.4
+ _ZN6QuaZipD2Ev at Base 0.4.4
+ _ZN7QStringD1Ev at Base 0.4.4
+ _ZN7QStringD2Ev at Base 0.4.4
+ _ZN8QuaCrc325resetEv at Base 0.4.4
+ _ZN8QuaCrc325valueEv at Base 0.4.4
+ _ZN8QuaCrc326updateERK10QByteArray at Base 0.4.4
+ _ZN8QuaCrc329calculateERK10QByteArray at Base 0.4.4
+ _ZN8QuaCrc32C1Ev at Base 0.4.4
+ _ZN8QuaCrc32C2Ev at Base 0.4.4
+ _ZNK10QuaZipFile10getZipNameEv at Base 0.4.4
+ _ZNK10QuaZipFile10metaObjectEv at Base 0.4.4
+ _ZNK10QuaZipFile11getFileNameEv at Base 0.4.4
+ _ZNK10QuaZipFile11getZipErrorEv at Base 0.4.4
+ _ZNK10QuaZipFile12isSequentialEv at Base 0.4.4
+ _ZNK10QuaZipFile14bytesAvailableEv at Base 0.4.4
+ _ZNK10QuaZipFile17getActualFileNameEv at Base 0.4.4
+ _ZNK10QuaZipFile18getCaseSensitivityEv at Base 0.4.4
+ _ZNK10QuaZipFile3posEv at Base 0.4.4
+ _ZNK10QuaZipFile4sizeEv at Base 0.4.4
+ _ZNK10QuaZipFile5atEndEv at Base 0.4.4
+ _ZNK10QuaZipFile5csizeEv at Base 0.4.4
+ _ZNK10QuaZipFile5isRawEv at Base 0.4.4
+ _ZNK10QuaZipFile5usizeEv at Base 0.4.4
+ _ZNK10QuaZipFile6getZipEv at Base 0.4.4
+ _ZNK6QuaZip10getCommentEv at Base 0.4.4
+ _ZNK6QuaZip10getZipNameEv at Base 0.4.4
+ _ZNK6QuaZip11getIoDeviceEv at Base 0.4.4
+ _ZNK6QuaZip11getZipErrorEv at Base 0.4.4
+ _ZNK6QuaZip14hasCurrentFileEv at Base 0.4.4
+ _ZNK6QuaZip15getCommentCodecEv at Base 0.4.4
+ _ZNK6QuaZip15getEntriesCountEv at Base 0.4.4
+ _ZNK6QuaZip15getFileInfoListEv at Base 0.4.4
+ _ZNK6QuaZip15getFileNameListEv at Base 0.4.4
+ _ZNK6QuaZip16getFileNameCodecEv at Base 0.4.4
+ _ZNK6QuaZip18getCurrentFileInfoEP14QuaZipFileInfo at Base 0.4.4
+ _ZNK6QuaZip18getCurrentFileNameEv at Base 0.4.4
+ _ZNK6QuaZip30isDataDescriptorWritingEnabledEv at Base 0.4.4
+ _ZNK6QuaZip6isOpenEv at Base 0.4.4
+ _ZNK6QuaZip7getModeEv at Base 0.4.4
+ _ZTI10QuaAdler32 at Base 0.4.4
+ _ZTI10QuaZipFile at Base 0.4.4
+ _ZTI13QuaChecksum32 at Base 0.4.4
+ _ZTI8QuaCrc32 at Base 0.4.4
+ _ZTS10QuaAdler32 at Base 0.4.4
+ _ZTS10QuaZipFile at Base 0.4.4
+ _ZTS13QuaChecksum32 at Base 0.4.4
+ _ZTS8QuaCrc32 at Base 0.4.4
+ _ZTV10QuaAdler32 at Base 0.4.4
+ _ZTV10QuaZipFile at Base 0.4.4
+ _ZTV13QuaChecksum32 at Base 0.4.4
+ _ZTV8QuaCrc32 at Base 0.4.4
+ fill_qiodevice_filefunc at Base 0.4.4
+ unzClose at Base 0.4.4
+ unzCloseCurrentFile at Base 0.4.4
+ unzGetCurrentFileInfo at Base 0.4.4
+ unzGetFilePos at Base 0.4.4
+ unzGetGlobalComment at Base 0.4.4
+ unzGetGlobalInfo at Base 0.4.4
+ unzGetLocalExtrafield at Base 0.4.4
+ unzGetOffset at Base 0.4.4
+ unzGoToFilePos at Base 0.4.4
+ unzGoToFirstFile at Base 0.4.4
+ unzGoToNextFile at Base 0.4.4
+ unzLocateFile at Base 0.4.4
+ unzOpen2 at Base 0.4.4
+ unzOpen at Base 0.4.4
+ unzOpenCurrentFile2 at Base 0.4.4
+ unzOpenCurrentFile3 at Base 0.4.4
+ unzOpenCurrentFile at Base 0.4.4
+ unzOpenCurrentFilePassword at Base 0.4.4
+ unzReadCurrentFile at Base 0.4.4
+ unzSetOffset at Base 0.4.4
+ unzStringFileNameCompare at Base 0.4.4
+ unz_copyright at Base 0.4.4
+ unzeof at Base 0.4.4
+ unztell at Base 0.4.4
+ zipClearFlags at Base 0.4.4
+ zipClose at Base 0.4.4
+ zipCloseFileInZip at Base 0.4.4
+ zipCloseFileInZipRaw at Base 0.4.4
+ zipOpen2 at Base 0.4.4
+ zipOpen at Base 0.4.4
+ zipOpenNewFileInZip2 at Base 0.4.4
+ zipOpenNewFileInZip3 at Base 0.4.4
+ zipOpenNewFileInZip at Base 0.4.4
+ zipSetFlags at Base 0.4.4
+ zipWriteInFileInZip at Base 0.4.4
+ zip_copyright at Base 0.4.4
diff --git a/3rdparty/quazip-0.7/quazip/doc/faq.dox b/3rdparty/quazip-0.7/quazip/doc/faq.dox
new file mode 100644
index 0000000..68fc52b
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/doc/faq.dox
@@ -0,0 +1,45 @@
+/**
+ * \page faq QuaZip FAQ
+ *
+ * <!--
+ *
+ * \ref faq-non-QIODevice "Q. Is there any way to use QuaZipFile in Qt where you are supposed to use normal (non-zipped) file, but not through QIODevice API?"
+ * \ref faq-zip64 "Q. Can QuaZIP handle files larger than 4GB? What about zip64 standard?"
+ *
+ * \ref faq-seekable "Q. Can QuaZIP write archives to a sequential QIODevice like QTcpSocket?"
+ *
+ * -->
+ *
+ * \anchor faq-non-QIODevice Q. Is there any way to use QuaZipFile in Qt
+ * where you are supposed to use normal (non-zipped) file, but not
+ * through QIODevice API?
+ *
+ * A. Usually not. For example, if you are passing file name to some
+ * database driver (like SQLite), Qt usually just passes this name down
+ * to the 3rd-party library, which is usually does not know anything
+ * about QIODevice and therefore there is no way to pass QuaZipFile as
+ * normal file. However, if we are talking about some place where you
+ * pass file name, and then indirectly use QFile to open it, then it is
+ * a good idea to make overloaded method, which accepts a QIODevice
+ * pointer. Then you would be able to pass QuaZipFile as well as many
+ * other nice things such as QBuffer or QProcess.
+ *
+ * \anchor faq-zip64 Q. Can QuaZIP handle files larger than 4GB? What
+ * about zip64 standard?
+ *
+ * A. Starting with version 0.6, QuaZIP uses Minizip 1.1 with zip64
+ * support which should handle large files perfectly. The zip64 support
+ * in Minizip looks like it's not 100% conforming to the standard, but
+ * 3rd party tools seem to have no problem with the resulting archives.
+ *
+ * \anchor faq-seekable Q. Can QuaZIP write archives to a sequential QIODevice like QTcpSocket?
+ *
+ * A. Not yet. It is not supported by vanilla Minizip (the back-end
+ * QuaZIP uses), although theoretically possible according to the ZIP
+ * standard. It would require some Minizip modifications that would
+ * allow it to detect non-seekable I/O and produce necessary output
+ * structures. QuaZIP already writes data descriptor which is necessary
+ * for non-seekable I/O. The only thing that is apparently left is to
+ * make Minizip fill local headers with correct values and forget about
+ * seeking after closing the file.
+ **/
diff --git a/3rdparty/quazip-0.7/quazip/doc/index.dox b/3rdparty/quazip-0.7/quazip/doc/index.dox
new file mode 100644
index 0000000..ae45c5c
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/doc/index.dox
@@ -0,0 +1,177 @@
+/**
+ * \mainpage QuaZIP - Qt/C++ wrapper for ZIP/UNZIP package
+ *
+\htmlonly
+<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=142688&type=7" style="width:210; height:62; border:none; float:right;" alt="Powered by SourceForge.net" /></a>
+\endhtmlonly
+ * \section overview Overview
+ * 
+ * QuaZIP is a simple C++ wrapper over <a
+ * href="http://www.winimage.com/zLibDll/minizip.html">Gilles Vollant's ZIP/UNZIP
+ * package</a> that can be used to access ZIP archives. It uses <a
+ * href="http://qt.digia.com/">the Qt toolkit</a>.
+ *
+ * If you do not know what Qt is, you have two options:
+ * - Just forget about QuaZIP.
+ * - Learn more about Qt by downloading it and/or reading the excellent <a
+ *   href="http://qt-project.org/doc/">official Qt documentation</a>
+ *
+ * The choice is yours, but if you are really interested in
+ * cross-platform (Windows/Linux/BSD/UNIX/Mac/Others) software
+ * development, I would definitely recommend you the latter ^_^
+ *
+ * QuaZIP allows you to access files inside ZIP archives using QIODevice
+ * API, and - yes! - that means that you can also use QTextStream,
+ * QDataStream or whatever you would like to use on your zipped files.
+ *
+ * QuaZIP provides complete abstraction of the ZIP/UNZIP API, for both
+ * reading from and writing to ZIP archives.
+ *
+ * \section download Download QuaZIP
+ *
+ * Downloads are available from <a
+ * href="http://sourceforge.net/projects/quazip/">QuaZIP project's page
+ * at SourceForge.net</a>.
+ *
+ * \section platforms Platforms supported
+ *
+ * QuaZIP has been currently tested on the following platforms:
+ * - linux-g++ (Ubuntu 11.10, Qt 4.7.4)
+ * - freebsd-g++ (Qt 4.0.0
+ * - hpux-acc (HP-UX 11.11)
+ * - hpux-g++ (HP-UX 11.11)
+ * - win32-g++ (MinGW)
+ * - win32-msvc2010 (MS VS 2010 Express, Qt 4.8.4)
+ * - win32-msvc2010 (Qt Creator, Qt 5.0.1)
+ * - win32-msvc2012 (Qt Creator, Qt 5.2.0)
+ * - some Symbian version, reportedly
+ * 
+ * No testing has been officially done on other systems. Of course, patches to
+ * make it work on any platform that it currently does not work on are
+ * always welcome!
+ *
+ * \section whats-new What is new in this version of QuaZIP?
+ *
+ * See the NEWS.txt file supplied with the distribution.
+ *
+ * \section Requirements
+ *
+ * Just <a href="http://www.zlib.org/">zlib</a> and Qt 4/5. Well, Qt 4
+ * depends on zlib anyway, but you will need zlib headers to compile
+ * QuaZIP. With Qt5 sometimes you need the zlib library as well (on
+ * Windows, for example).
+ *
+ * \section building Building, testing and installing
+ *
+ * \note Instructions given in this section assume that you are
+ * using some UNIX dialect, but the build process should be very similar
+ * on win32-g++ platform too. On other platforms it's essentially the
+ * same process, maybe with some qmake adjustments not specific to
+ * QuaZIP itself.
+ *
+ * To build the library, run:
+\verbatim
+$ cd /wherever/quazip/source/is/quazip-x.y.z/quazip
+$ qmake [PREFIX=where-to-install]
+$ make
+\endverbatim
+ *
+ * Make sure that you have Qt 4/5 installed with all required headers and
+ * utilities (that is, including the 'dev' or 'devel' package on Linux)
+ * and that you run qmake utility of the Qt 4, not some other version
+ * you may have already installed (you may need to type full path to
+ * qmake like /usr/local/qt4/bin/qmake).
+ *
+ * To reconfigure (with another PREFIX, for example), just run qmake
+ * with appropriate arguments again.
+ *
+ * If you need to specify additional include path or libraries, use
+ * qmake features (see qmake reference in the Qt documentation). For
+ * example:
+ *
+\verbatim
+$ qmake LIBS+=-L/usr/local/zlib/lib INCLUDEPATH+=/usr/local/zlib/include
+\endverbatim
+ * (note abscence of "-I" before the include path and the presence of "-L"
+ * before the lib path)
+ *
+ * Also note that you may or may not need to define ZLIB_WINAPI (qmake
+ * DEFINES+=ZLIB_WINAPI) when linking to zlib on Windows, depending on
+ * how zlib was built (generally, if using zlibwapi.dll, this define is
+ * needed).
+ *
+ * To install compiled library:
+\verbatim
+$ make install
+\endverbatim
+ *
+ * By default, QuaZIP compiles as a DLL/SO, but you have other
+ * options:
+ * - Just copy appropriate source files to your project and use them,
+ * but you need to define QUAZIP_STATIC before including any QuaZIP
+ * headers (best done as a compiler option). This will save you from
+ * possible side effects of importing/exporting QuaZIP symbols.
+ * - Compile it as a static library using CONFIG += staticlib qmake
+ * option. QUAZIP_STATIC is defined automatically by qmake in this case.
+ *
+ * Binary compatibility is guaranteed between minor releases starting
+ * with version 0.5, thanks to the Pimpl idiom. That is, the next binary
+ * incompatible version will be 1.x.
+ *
+ * \section test Testing
+ *
+ * To check if QuaZIP's basic features work OK on your platform, you may
+ * wish to compile the test suite provided in test directory:
+\verbatim
+$ cd /wherever/quazip/source/is/quazip-x.y.z/qztest
+$ qmake
+$ make
+$ ./qztest
+\endverbatim
+ *
+ * Note that the test suite looks for the quazip library in the "quazip"
+ * folder of the project ("../quazip"), but you may wish to use LIBS
+ * for some systems (Windows often puts the library in the separate
+ * "debug" or "release" directory). If you wish to use the quazip
+ * version that's already installed, provide the appropriate path.
+ *
+ * On some systems you may need to set PATH, LD_LIBRARY_PATH or
+ * SHLIB_PATH to get "qztest" to actually run.
+ *
+ * If everything went fine, the test suite should report a lot of PASS
+ * messages. If something goes wrong, it will provide details and a
+ * warning that some tests failed.
+ *
+ * \section using Using
+ *
+ * See \ref usage "usage page".
+ * 
+ * \section contacts Authors and contacts
+ *
+ * This wrapper has been written by Sergey A. Tachenov, AKA Alqualos.
+ * This is my first open source project, so it may suck, but I did not
+ * find anything like that, so I just had no other choice but to write
+ * it.
+ *
+ * If you have anything to say to me about QuaZIP library, feel free to
+ * do so (read the \ref faq first, though). I can not promise,
+ * though, that I fix all the bugs you report in, add any features you
+ * want, or respond to your critics, or respond to your feedback at all.
+ * I may be busy, I may be tired of working on QuaZIP, I may be even
+ * dead already (you never know...).
+ *
+ * To report bugs or to post ideas about what should be done, use
+ * SourceForge.net's <a
+ * href="http://sourceforge.net/tracker/?group_id=142688">trackers</a>.
+ * If you want to send me a private message, use my e-mail address
+ * stachenov at gmail.com.
+ *
+ * Do not use e-mail to report bugs, please. Reporting bugs and problems
+ * with the SourceForge.net's bug report system has that advantage that
+ * it is visible to public, and I can always search for open tickets
+ * that were created long ago. It is highly unlikely that I will search
+ * my mail for that kind of stuff, so if a bug reported by mail isn't
+ * fixed immediately, it will likely be forgotten forever.
+ *
+ * Copyright (C) 2005-2014 Sergey A. Tachenov and contributors
+ **/
diff --git a/3rdparty/quazip-0.7/quazip/doc/usage.dox b/3rdparty/quazip-0.7/quazip/doc/usage.dox
new file mode 100644
index 0000000..108f6cb
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/doc/usage.dox
@@ -0,0 +1,77 @@
+/** \page usage Usage
+ * 
+ * This page provides general information on QuaZIP usage. See classes
+ * QuaZip and QuaZipFile for the detailed documentation on what can
+ * QuaZIP do and what it can not. Also, reading comments in the zip.h and
+ * unzip.h files (taken from the original ZIP/UNZIP package) is always a
+ * good idea too. After all, QuaZIP is just a wrapper with a few
+ * convenience extensions and reimplementations.
+ *
+ * QuaZip is a class representing ZIP archive, QuaZipFile represents a
+ * file inside archive and subclasses QIODevice as well. One limitation
+ * is that there can be only one instance of QuaZipFile per QuaZip
+ * instance, which kind of makes it confusing why there are two classes
+ * instead of one. This is actually no more than an API design mistake.
+ *
+ * \section terminology Terminology
+ *
+ * "QuaZIP" means whole this library, while "QuaZip" (note the
+ * lower case) is just one class in it.
+ *
+ * "ZIP/UNZIP API" or "minizip" means the original API of the Gilles
+ * Vollant's ZIP/UNZIP package. It was slightly modified to better
+ * integrate with Qt. These modifications are not source or binary
+ * compatible with the official minizip release, which means you can't
+ * just drop the newer minizip version into QuaZIP sources and make it
+ * work.
+ *
+ * "ZIP", "ZIP archive" or "ZIP file" means any ZIP archive. Typically
+ * this is a plain file with ".zip" (or ".ZIP") file name suffix, but it
+ * can also be any seekable QIODevice (say, QBuffer, but not
+ * QTcpSocket).
+ *
+ * "A file inside archive", "a file inside ZIP" or something like that
+ * means file either being read or written from/to some ZIP archive.
+ *
+ * \section error-handling Error handling
+ *
+ * Almost any call to ZIP/UNZIP API return some error code. Most of the
+ * original API's error checking could be done in this wrapper as well,
+ * but it would cause unnecessary code bloating without any benefit. So,
+ * QuaZIP only checks for situations that ZIP/UNZIP API can not check
+ * for. For example, ZIP/UNZIP API has no "ZIP open mode" concept
+ * because read and write modes are completely separated. On the other
+ * hand, to avoid creating classes like "QuaZipReader", "QuaZipWriter"
+ * or something like that, QuaZIP introduces "ZIP open mode" concept
+ * instead, thus making it possible to use one class (QuaZip) for both
+ * reading and writing. But this leads to additional open mode checks
+ * which are not done in ZIP/UNZIP package.
+ *
+ * Therefore, error checking is two-level (QuaZIP's level and ZIP/UNZIP
+ * API level), which sometimes can be confusing, so here are some
+ * advices on how the error checking should be properly done:
+ *
+ * - Both QuaZip and QuaZipFile have getZipError() function, which return
+ *   error code of the last ZIP/UNZIP API call. Most function calls
+ *   reset error code to UNZ_OK on success and set error code on
+ *   failure. Some functions do not reset error code. Most of them are
+ *   \c const and do not access ZIP archive in any way. Some, on the
+ *   other hand, \em do access ZIP archive, but do not reset or set
+ *   error code. For example, QuaZipFile::pos() function. Such functions
+ *   are explicitly marked in the documentation.
+ * - Most functions have their own way to report errors, by returning a
+ *   null string, negative value or \c false. If such a function returns
+ *   error value, call getZipError() to get more information about
+ *   error. See "zip.h" and "unzip.h" of the ZIP/UNZIP package for error
+ *   codes.
+ * - If the function returns error-stating value (like \c false), but
+ *   getZipError() returns UNZ_OK, it means that you did something
+ *   obviously wrong. For example, tried to write in the archive open
+ *   for reading or not open at all. You better just not do that!
+ *   Most functions also issue a warning using qWarning() function in
+ *   such cases. See documentation for a specific function for details
+ *   on when it should not be called.
+ *
+ * I know that this is somewhat messy, but I could not find a better way
+ * to do all the error handling.
+ **/
diff --git a/3rdparty/quazip-0.7/quazip/ioapi.h b/3rdparty/quazip-0.7/quazip/ioapi.h
new file mode 100644
index 0000000..bbb94c8
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/ioapi.h
@@ -0,0 +1,207 @@
+/* ioapi.h -- IO base function header for compress/uncompress .zip
+   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+         Modifications for Zip64 support
+         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+         Modified by Sergey A. Tachenov to allow QIODevice API usage.
+
+         For more info read MiniZip_info.txt
+
+         Changes
+
+    Oct-2009 - Defined ZPOS64_T to fpos_t on windows and u_int64_t on linux. (might need to find a better why for this)
+    Oct-2009 - Change to fseeko64, ftello64 and fopen64 so large files would work on linux.
+               More if/def section may be needed to support other platforms
+    Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows.
+                          (but you should use iowin32.c for windows instead)
+
+*/
+
+#ifndef _ZLIBIOAPI64_H
+#define _ZLIBIOAPI64_H
+
+#if (!defined(_WIN32)) && (!defined(WIN32))
+
+  // Linux needs this to support file operation on files larger then 4+GB
+  // But might need better if/def to select just the platforms that needs them.
+
+        #ifndef __USE_FILE_OFFSET64
+                #define __USE_FILE_OFFSET64
+        #endif
+        #ifndef __USE_LARGEFILE64
+                #define __USE_LARGEFILE64
+        #endif
+        #ifndef _LARGEFILE64_SOURCE
+                #define _LARGEFILE64_SOURCE
+        #endif
+        #ifndef _FILE_OFFSET_BIT
+                #define _FILE_OFFSET_BIT 64
+        #endif
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "zlib.h"
+
+#if defined(USE_FILE32API)
+#define fopen64 fopen
+#define ftello64 ftell
+#define fseeko64 fseek
+#else
+#ifdef _MSC_VER
+ #define fopen64 fopen
+ #if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC)))
+  #define ftello64 _ftelli64
+  #define fseeko64 _fseeki64
+ #else // old MSC
+  #define ftello64 ftell
+  #define fseeko64 fseek
+ #endif
+#endif
+#endif
+
+/*
+#ifndef ZPOS64_T
+  #ifdef _WIN32
+                #define ZPOS64_T fpos_t
+  #else
+    #include <stdint.h>
+    #define ZPOS64_T uint64_t
+  #endif
+#endif
+*/
+
+#ifdef HAVE_MINIZIP64_CONF_H
+#include "mz64conf.h"
+#endif
+
+/* a type choosen by DEFINE */
+#ifdef HAVE_64BIT_INT_CUSTOM
+typedef  64BIT_INT_CUSTOM_TYPE ZPOS64_T;
+#else
+#ifdef HAS_STDINT_H
+#include "stdint.h"
+typedef uint64_t ZPOS64_T;
+#else
+
+
+#if defined(_MSC_VER) || defined(__BORLANDC__)
+typedef unsigned __int64 ZPOS64_T;
+#else
+typedef unsigned long long int ZPOS64_T;
+#endif
+#endif
+#endif
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef OF
+#define OF _Z_OF
+#endif
+
+#define ZLIB_FILEFUNC_SEEK_CUR (1)
+#define ZLIB_FILEFUNC_SEEK_END (2)
+#define ZLIB_FILEFUNC_SEEK_SET (0)
+
+#define ZLIB_FILEFUNC_MODE_READ      (1)
+#define ZLIB_FILEFUNC_MODE_WRITE     (2)
+#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3)
+
+#define ZLIB_FILEFUNC_MODE_EXISTING (4)
+#define ZLIB_FILEFUNC_MODE_CREATE   (8)
+
+
+#ifndef ZCALLBACK
+ #if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK)
+   #define ZCALLBACK CALLBACK
+ #else
+   #define ZCALLBACK
+ #endif
+#endif
+
+
+
+
+typedef voidpf   (ZCALLBACK *open_file_func)      OF((voidpf opaque, voidpf file, int mode));
+typedef uLong    (ZCALLBACK *read_file_func)      OF((voidpf opaque, voidpf stream, void* buf, uLong size));
+typedef uLong    (ZCALLBACK *write_file_func)     OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
+typedef int      (ZCALLBACK *close_file_func)     OF((voidpf opaque, voidpf stream));
+typedef int      (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));
+
+typedef uLong     (ZCALLBACK *tell_file_func)      OF((voidpf opaque, voidpf stream));
+typedef int     (ZCALLBACK *seek_file_func)      OF((voidpf opaque, voidpf stream, uLong offset, int origin));
+
+
+/* here is the "old" 32 bits structure structure */
+typedef struct zlib_filefunc_def_s
+{
+    open_file_func      zopen_file;
+    read_file_func      zread_file;
+    write_file_func     zwrite_file;
+    tell_file_func      ztell_file;
+    seek_file_func      zseek_file;
+    close_file_func     zclose_file;
+    testerror_file_func zerror_file;
+    voidpf              opaque;
+} zlib_filefunc_def;
+
+typedef ZPOS64_T (ZCALLBACK *tell64_file_func)    OF((voidpf opaque, voidpf stream));
+typedef int     (ZCALLBACK *seek64_file_func)    OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
+typedef voidpf   (ZCALLBACK *open64_file_func)    OF((voidpf opaque, voidpf file, int mode));
+
+typedef struct zlib_filefunc64_def_s
+{
+    open64_file_func    zopen64_file;
+    read_file_func      zread_file;
+    write_file_func     zwrite_file;
+    tell64_file_func    ztell64_file;
+    seek64_file_func    zseek64_file;
+    close_file_func     zclose_file;
+    testerror_file_func zerror_file;
+    voidpf              opaque;
+    close_file_func     zfakeclose_file; // for no-auto-close flag
+} zlib_filefunc64_def;
+
+void fill_qiodevice64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def));
+void fill_qiodevice_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
+
+/* now internal definition, only for zip.c and unzip.h */
+typedef struct zlib_filefunc64_32_def_s
+{
+    zlib_filefunc64_def zfile_func64;
+    open_file_func      zopen32_file;
+    tell_file_func      ztell32_file;
+    seek_file_func      zseek32_file;
+} zlib_filefunc64_32_def;
+
+
+#define ZREAD64(filefunc,filestream,buf,size)     ((*((filefunc).zfile_func64.zread_file))   ((filefunc).zfile_func64.opaque,filestream,buf,size))
+#define ZWRITE64(filefunc,filestream,buf,size)    ((*((filefunc).zfile_func64.zwrite_file))  ((filefunc).zfile_func64.opaque,filestream,buf,size))
+//#define ZTELL64(filefunc,filestream)            ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream))
+//#define ZSEEK64(filefunc,filestream,pos,mode)   ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode))
+#define ZCLOSE64(filefunc,filestream)             ((*((filefunc).zfile_func64.zclose_file))  ((filefunc).zfile_func64.opaque,filestream))
+#define ZFAKECLOSE64(filefunc,filestream)             ((*((filefunc).zfile_func64.zfakeclose_file))  ((filefunc).zfile_func64.opaque,filestream))
+#define ZERROR64(filefunc,filestream)             ((*((filefunc).zfile_func64.zerror_file))  ((filefunc).zfile_func64.opaque,filestream))
+
+voidpf call_zopen64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf file,int mode));
+int    call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin));
+ZPOS64_T call_ztell64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream));
+
+void    fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32);
+
+#define ZOPEN64(filefunc,filename,mode)         (call_zopen64((&(filefunc)),(filename),(mode)))
+#define ZTELL64(filefunc,filestream)            (call_ztell64((&(filefunc)),(filestream)))
+#define ZSEEK64(filefunc,filestream,pos,mode)   (call_zseek64((&(filefunc)),(filestream),(pos),(mode)))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/quazip-0.7/quazip/qioapi.cpp b/3rdparty/quazip-0.7/quazip/qioapi.cpp
new file mode 100644
index 0000000..534dbdf
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/qioapi.cpp
@@ -0,0 +1,361 @@
+/* ioapi.c -- IO base function header for compress/uncompress .zip
+   files using zlib + zip or unzip API
+
+   Version 1.01e, February 12th, 2005
+
+   Copyright (C) 1998-2005 Gilles Vollant
+
+   Modified by Sergey A. Tachenov to integrate with Qt.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "zlib.h"
+#include "ioapi.h"
+#include "quazip_global.h"
+#include <QIODevice>
+#if (QT_VERSION >= 0x050100)
+#define QUAZIP_QSAVEFILE_BUG_WORKAROUND
+#endif
+#ifdef QUAZIP_QSAVEFILE_BUG_WORKAROUND
+#include <QSaveFile>
+#endif
+
+/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */
+
+#ifndef SEEK_CUR
+#define SEEK_CUR    1
+#endif
+
+#ifndef SEEK_END
+#define SEEK_END    2
+#endif
+
+#ifndef SEEK_SET
+#define SEEK_SET    0
+#endif
+
+voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,voidpf file,int mode)
+{
+    if (pfilefunc->zfile_func64.zopen64_file != NULL)
+        return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,file,mode);
+    else
+    {
+        return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,file,mode);
+    }
+}
+
+int call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)
+{
+    if (pfilefunc->zfile_func64.zseek64_file != NULL)
+        return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin);
+    else
+    {
+        uLong offsetTruncated = (uLong)offset;
+        if (offsetTruncated != offset)
+            return -1;
+        else
+            return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin);
+    }
+}
+
+ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)
+{
+    if (pfilefunc->zfile_func64.zseek64_file != NULL)
+        return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
+    else
+    {
+        uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
+        if ((tell_uLong) == ((uLong)-1))
+            return (ZPOS64_T)-1;
+        else
+            return tell_uLong;
+    }
+}
+
+struct QIODevice_descriptor {
+    // Position only used for writing to sequential devices.
+    qint64 pos;
+    inline QIODevice_descriptor():
+        pos(0)
+    {}
+};
+
+voidpf ZCALLBACK qiodevice_open_file_func (
+   voidpf opaque,
+   voidpf file,
+   int mode)
+{
+    QIODevice_descriptor *d = reinterpret_cast<QIODevice_descriptor*>(opaque);
+    QIODevice *iodevice = reinterpret_cast<QIODevice*>(file);
+    QIODevice::OpenMode desiredMode;
+    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+        desiredMode = QIODevice::ReadOnly;
+    else if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+        desiredMode = QIODevice::ReadWrite;
+    else if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+        desiredMode = QIODevice::WriteOnly;
+    if (iodevice->isOpen()) {
+        if ((iodevice->openMode() & desiredMode) == desiredMode) {
+            if (desiredMode != QIODevice::WriteOnly
+                    && iodevice->isSequential()) {
+                // We can use sequential devices only for writing.
+                delete d;
+                return NULL;
+            } else {
+                if ((desiredMode & QIODevice::WriteOnly) != 0) {
+                    // open for writing, need to seek existing device
+                    if (!iodevice->isSequential()) {
+                        iodevice->seek(0);
+                    } else {
+                        d->pos = iodevice->pos();
+                    }
+                }
+            }
+            return iodevice;
+        } else {
+            delete d;
+            return NULL;
+        }
+    }
+    iodevice->open(desiredMode);
+    if (iodevice->isOpen()) {
+        if (desiredMode != QIODevice::WriteOnly && iodevice->isSequential()) {
+            // We can use sequential devices only for writing.
+            iodevice->close();
+            delete d;
+            return NULL;
+        } else {
+            return iodevice;
+        }
+    } else {
+        delete d;
+        return NULL;
+    }
+}
+
+
+uLong ZCALLBACK qiodevice_read_file_func (
+   voidpf opaque,
+   voidpf stream,
+   void* buf,
+   uLong size)
+{
+    QIODevice_descriptor *d = reinterpret_cast<QIODevice_descriptor*>(opaque);
+    QIODevice *iodevice = reinterpret_cast<QIODevice*>(stream);
+    qint64 ret64 = iodevice->read((char*)buf,size);
+    uLong ret;
+    ret = (uLong) ret64;
+    if (ret64 != -1) {
+        d->pos += ret64;
+    }
+    return ret;
+}
+
+
+uLong ZCALLBACK qiodevice_write_file_func (
+   voidpf opaque,
+   voidpf stream,
+   const void* buf,
+   uLong size)
+{
+    QIODevice_descriptor *d = reinterpret_cast<QIODevice_descriptor*>(opaque);
+    QIODevice *iodevice = reinterpret_cast<QIODevice*>(stream);
+    uLong ret;
+    qint64 ret64 = iodevice->write((char*)buf,size);
+    if (ret64 != -1) {
+        d->pos += ret64;
+    }
+    ret = (uLong) ret64;
+    return ret;
+}
+
+uLong ZCALLBACK qiodevice_tell_file_func (
+   voidpf opaque,
+   voidpf stream)
+{
+    QIODevice_descriptor *d = reinterpret_cast<QIODevice_descriptor*>(opaque);
+    QIODevice *iodevice = reinterpret_cast<QIODevice*>(stream);
+    uLong ret;
+    qint64 ret64;
+    if (iodevice->isSequential()) {
+        ret64 = d->pos;
+    } else {
+        ret64 = iodevice->pos();
+    }
+    ret = static_cast<uLong>(ret64);
+    return ret;
+}
+
+ZPOS64_T ZCALLBACK qiodevice64_tell_file_func (
+   voidpf opaque,
+   voidpf stream)
+{
+    QIODevice_descriptor *d = reinterpret_cast<QIODevice_descriptor*>(opaque);
+    QIODevice *iodevice = reinterpret_cast<QIODevice*>(stream);
+    qint64 ret;
+    if (iodevice->isSequential()) {
+        ret = d->pos;
+    } else {
+        ret = iodevice->pos();
+    }
+    return static_cast<ZPOS64_T>(ret);
+}
+
+int ZCALLBACK qiodevice_seek_file_func (
+   voidpf /*opaque UNUSED*/,
+   voidpf stream,
+   uLong offset,
+   int origin)
+{
+    QIODevice *iodevice = reinterpret_cast<QIODevice*>(stream);
+    if (iodevice->isSequential()) {
+        if (origin == ZLIB_FILEFUNC_SEEK_END
+                && offset == 0) {
+            // sequential devices are always at end (needed in mdAppend)
+            return 0;
+        } else {
+            qWarning("qiodevice_seek_file_func() called for sequential device");
+            return -1;
+        }
+    }
+    uLong qiodevice_seek_result=0;
+    int ret;
+    switch (origin)
+    {
+    case ZLIB_FILEFUNC_SEEK_CUR :
+        qiodevice_seek_result = ((QIODevice*)stream)->pos() + offset;
+        break;
+    case ZLIB_FILEFUNC_SEEK_END :
+        qiodevice_seek_result = ((QIODevice*)stream)->size() - offset;
+        break;
+    case ZLIB_FILEFUNC_SEEK_SET :
+        qiodevice_seek_result = offset;
+        break;
+    default:
+        return -1;
+    }
+    ret = !iodevice->seek(qiodevice_seek_result);
+    return ret;
+}
+
+int ZCALLBACK qiodevice64_seek_file_func (
+   voidpf /*opaque UNUSED*/,
+   voidpf stream,
+   ZPOS64_T offset,
+   int origin)
+{
+    QIODevice *iodevice = reinterpret_cast<QIODevice*>(stream);
+    if (iodevice->isSequential()) {
+        if (origin == ZLIB_FILEFUNC_SEEK_END
+                && offset == 0) {
+            // sequential devices are always at end (needed in mdAppend)
+            return 0;
+        } else {
+            qWarning("qiodevice_seek_file_func() called for sequential device");
+            return -1;
+        }
+    }
+    qint64 qiodevice_seek_result=0;
+    int ret;
+    switch (origin)
+    {
+    case ZLIB_FILEFUNC_SEEK_CUR :
+        qiodevice_seek_result = ((QIODevice*)stream)->pos() + offset;
+        break;
+    case ZLIB_FILEFUNC_SEEK_END :
+        qiodevice_seek_result = ((QIODevice*)stream)->size() - offset;
+        break;
+    case ZLIB_FILEFUNC_SEEK_SET :
+        qiodevice_seek_result = offset;
+        break;
+    default:
+        return -1;
+    }
+    ret = !iodevice->seek(qiodevice_seek_result);
+    return ret;
+}
+
+int ZCALLBACK qiodevice_close_file_func (
+   voidpf opaque,
+   voidpf stream)
+{
+    QIODevice_descriptor *d = reinterpret_cast<QIODevice_descriptor*>(opaque);
+    delete d;
+    QIODevice *device = reinterpret_cast<QIODevice*>(stream);
+#ifdef QUAZIP_QSAVEFILE_BUG_WORKAROUND
+    // QSaveFile terribly breaks the is-a idiom:
+    // it IS a QIODevice, but it is NOT compatible with it: close() is private
+    QSaveFile *file = qobject_cast<QSaveFile*>(device);
+    if (file != NULL) {
+        // We have to call the ugly commit() instead:
+        return file->commit() ? 0 : -1;
+    }
+#endif
+    device->close();
+    return 0;
+}
+
+int ZCALLBACK qiodevice_fakeclose_file_func (
+   voidpf opaque,
+   voidpf /*stream*/)
+{
+    QIODevice_descriptor *d = reinterpret_cast<QIODevice_descriptor*>(opaque);
+    delete d;
+    return 0;
+}
+
+int ZCALLBACK qiodevice_error_file_func (
+   voidpf /*opaque UNUSED*/,
+   voidpf /*stream UNUSED*/)
+{
+    // can't check for error due to the QIODevice API limitation
+    return 0;
+}
+
+void fill_qiodevice_filefunc (
+  zlib_filefunc_def* pzlib_filefunc_def)
+{
+    pzlib_filefunc_def->zopen_file = qiodevice_open_file_func;
+    pzlib_filefunc_def->zread_file = qiodevice_read_file_func;
+    pzlib_filefunc_def->zwrite_file = qiodevice_write_file_func;
+    pzlib_filefunc_def->ztell_file = qiodevice_tell_file_func;
+    pzlib_filefunc_def->zseek_file = qiodevice_seek_file_func;
+    pzlib_filefunc_def->zclose_file = qiodevice_close_file_func;
+    pzlib_filefunc_def->zerror_file = qiodevice_error_file_func;
+    pzlib_filefunc_def->opaque = new QIODevice_descriptor;
+}
+
+void fill_qiodevice64_filefunc (
+  zlib_filefunc64_def* pzlib_filefunc_def)
+{
+    // Open functions are the same for Qt.
+    pzlib_filefunc_def->zopen64_file = qiodevice_open_file_func;
+    pzlib_filefunc_def->zread_file = qiodevice_read_file_func;
+    pzlib_filefunc_def->zwrite_file = qiodevice_write_file_func;
+    pzlib_filefunc_def->ztell64_file = qiodevice64_tell_file_func;
+    pzlib_filefunc_def->zseek64_file = qiodevice64_seek_file_func;
+    pzlib_filefunc_def->zclose_file = qiodevice_close_file_func;
+    pzlib_filefunc_def->zerror_file = qiodevice_error_file_func;
+    pzlib_filefunc_def->opaque = new QIODevice_descriptor;
+    pzlib_filefunc_def->zfakeclose_file = qiodevice_fakeclose_file_func;
+}
+
+void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32)
+{
+    p_filefunc64_32->zfile_func64.zopen64_file = NULL;
+    p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file;
+    p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
+    p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file;
+    p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file;
+    p_filefunc64_32->zfile_func64.ztell64_file = NULL;
+    p_filefunc64_32->zfile_func64.zseek64_file = NULL;
+    p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file;
+    p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
+    p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque;
+    p_filefunc64_32->zfile_func64.zfakeclose_file = NULL;
+    p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file;
+    p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file;
+}
diff --git a/3rdparty/quazip-0.7/quazip/quaadler32.cpp b/3rdparty/quazip-0.7/quazip/quaadler32.cpp
new file mode 100644
index 0000000..8393ce1
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quaadler32.cpp
@@ -0,0 +1,53 @@
+/*
+Copyright (C) 2010 Adam Walczak
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "quaadler32.h"
+
+#include "zlib.h"
+
+QuaAdler32::QuaAdler32()
+{
+	reset();
+}
+
+quint32 QuaAdler32::calculate(const QByteArray &data)
+{
+	return adler32( adler32(0L, Z_NULL, 0), (const Bytef*)data.data(), data.size() );
+}
+
+void QuaAdler32::reset()
+{
+	checksum = adler32(0L, Z_NULL, 0);
+}
+
+void QuaAdler32::update(const QByteArray &buf)
+{
+	checksum = adler32( checksum, (const Bytef*)buf.data(), buf.size() );
+}
+
+quint32 QuaAdler32::value()
+{
+	return checksum;
+}
diff --git a/3rdparty/quazip-0.7/quazip/quaadler32.h b/3rdparty/quazip-0.7/quazip/quaadler32.h
new file mode 100644
index 0000000..4e117e7
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quaadler32.h
@@ -0,0 +1,54 @@
+#ifndef QUAADLER32_H
+#define QUAADLER32_H
+
+/*
+Copyright (C) 2010 Adam Walczak
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QByteArray>
+
+#include "quachecksum32.h"
+
+/// Adler32 checksum
+/** \class QuaAdler32 quaadler32.h <quazip/quaadler32.h>
+ * This class wrappers the adler32 function with the QuaChecksum32 interface.
+ * See QuaChecksum32 for more info.
+ */
+class QUAZIP_EXPORT QuaAdler32 : public QuaChecksum32
+{
+
+public:
+	QuaAdler32();
+
+	quint32 calculate(const QByteArray &data);
+
+	void reset();
+	void update(const QByteArray &buf);
+	quint32 value();
+
+private:
+	quint32 checksum;
+};
+
+#endif //QUAADLER32_H
diff --git a/3rdparty/quazip-0.7/quazip/quachecksum32.h b/3rdparty/quazip-0.7/quazip/quachecksum32.h
new file mode 100644
index 0000000..b99ef69
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quachecksum32.h
@@ -0,0 +1,78 @@
+#ifndef QUACHECKSUM32_H
+#define QUACHECKSUM32_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QByteArray>
+#include "quazip_global.h"
+
+/// Checksum interface.
+/** \class QuaChecksum32 quachecksum32.h <quazip/quachecksum32.h>
+ * This is an interface for 32 bit checksums.
+ * Classes implementing this interface can calcunate a certin
+ * checksum in a single step:
+ * \code
+ * QChecksum32 *crc32 = new QuaCrc32(); 
+ * rasoult = crc32->calculate(data);
+ * \endcode
+ * or by streaming the data:
+ * \code
+ * QChecksum32 *crc32 = new QuaCrc32(); 
+ * while(!fileA.atEnd())
+ *     crc32->update(fileA.read(bufSize));
+ * resoultA = crc32->value();
+ * crc32->reset();
+ * while(!fileB.atEnd())
+ *     crc32->update(fileB.read(bufSize));
+ * resoultB = crc32->value();
+ * \endcode
+ */
+class QUAZIP_EXPORT QuaChecksum32
+{
+
+public:
+	///Calculates the checksum for data.
+	/** \a data source data
+	 * \return data checksum
+	 *
+	 * This function has no efect on the value returned by value().
+	 */
+	virtual quint32 calculate(const QByteArray &data) = 0;
+
+	///Resets the calculation on a checksun for a stream.
+	virtual void reset() = 0;
+
+	///Updates the calculated checksum for the stream
+	/** \a buf next portion of data from the stream
+	 */
+	virtual void update(const QByteArray &buf) = 0;
+
+	///Value of the checksum calculated for the stream passed throw update().
+	/** \return checksum
+	 */
+	virtual quint32 value() = 0;
+};
+
+#endif //QUACHECKSUM32_H
diff --git a/3rdparty/quazip-0.7/quazip/quacrc32.cpp b/3rdparty/quazip-0.7/quazip/quacrc32.cpp
new file mode 100644
index 0000000..7e1c57d
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quacrc32.cpp
@@ -0,0 +1,52 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "quacrc32.h"
+
+#include "zlib.h"
+
+QuaCrc32::QuaCrc32()
+{
+	reset();
+}
+
+quint32 QuaCrc32::calculate(const QByteArray &data)
+{
+	return crc32( crc32(0L, Z_NULL, 0), (const Bytef*)data.data(), data.size() );
+}
+
+void QuaCrc32::reset()
+{
+	checksum = crc32(0L, Z_NULL, 0);
+}
+
+void QuaCrc32::update(const QByteArray &buf)
+{
+	checksum = crc32( checksum, (const Bytef*)buf.data(), buf.size() );
+}
+
+quint32 QuaCrc32::value()
+{
+	return checksum;
+}
diff --git a/3rdparty/quazip-0.7/quazip/quacrc32.h b/3rdparty/quazip-0.7/quazip/quacrc32.h
new file mode 100644
index 0000000..2582de8
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quacrc32.h
@@ -0,0 +1,50 @@
+#ifndef QUACRC32_H
+#define QUACRC32_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "quachecksum32.h"
+
+///CRC32 checksum
+/** \class QuaCrc32 quacrc32.h <quazip/quacrc32.h>
+* This class wrappers the crc32 function with the QuaChecksum32 interface.
+* See QuaChecksum32 for more info.
+*/
+class QUAZIP_EXPORT QuaCrc32 : public QuaChecksum32 {
+
+public:
+	QuaCrc32();
+
+	quint32 calculate(const QByteArray &data);
+
+	void reset();
+	void update(const QByteArray &buf);
+	quint32 value();
+
+private:
+	quint32 checksum;
+};
+
+#endif //QUACRC32_H
diff --git a/3rdparty/quazip-0.7/quazip/quagzipfile.cpp b/3rdparty/quazip-0.7/quazip/quagzipfile.cpp
new file mode 100644
index 0000000..26bf667
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quagzipfile.cpp
@@ -0,0 +1,172 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QFile>
+
+#include "quagzipfile.h"
+
+/// \cond internal
+class QuaGzipFilePrivate {
+    friend class QuaGzipFile;
+    QString fileName;
+    gzFile gzd;
+    inline QuaGzipFilePrivate(): gzd(NULL) {}
+    inline QuaGzipFilePrivate(const QString &fileName): 
+        fileName(fileName), gzd(NULL) {}
+    template<typename FileId> bool open(FileId id, 
+        QIODevice::OpenMode mode, QString &error);
+    gzFile open(int fd, const char *modeString);
+    gzFile open(const QString &name, const char *modeString);
+};
+
+gzFile QuaGzipFilePrivate::open(const QString &name, const char *modeString)
+{
+    return gzopen(QFile::encodeName(name).constData(), modeString);
+}
+
+gzFile QuaGzipFilePrivate::open(int fd, const char *modeString)
+{
+    return gzdopen(fd, modeString);
+}
+
+template<typename FileId>
+bool QuaGzipFilePrivate::open(FileId id, QIODevice::OpenMode mode, 
+                              QString &error)
+{
+    char modeString[2];
+    modeString[0] = modeString[1] = '\0';
+    if ((mode & QIODevice::Append) != 0) {
+        error = QuaGzipFile::trUtf8("QIODevice::Append is not "
+                "supported for GZIP");
+        return false;
+    }
+    if ((mode & QIODevice::ReadOnly) != 0
+            && (mode & QIODevice::WriteOnly) != 0) {
+        error = QuaGzipFile::trUtf8("Opening gzip for both reading"
+            " and writing is not supported");
+        return false;
+    } else if ((mode & QIODevice::ReadOnly) != 0) {
+        modeString[0] = 'r';
+    } else if ((mode & QIODevice::WriteOnly) != 0) {
+        modeString[0] = 'w';
+    } else {
+        error = QuaGzipFile::trUtf8("You can open a gzip either for reading"
+            " or for writing. Which is it?");
+        return false;
+    }
+    gzd = open(id, modeString);
+    if (gzd == NULL) {
+        error = QuaGzipFile::trUtf8("Could not gzopen() file");
+        return false;
+    }
+    return true;
+}
+/// \endcond
+
+QuaGzipFile::QuaGzipFile():
+d(new QuaGzipFilePrivate())
+{
+}
+
+QuaGzipFile::QuaGzipFile(QObject *parent):
+QIODevice(parent),
+d(new QuaGzipFilePrivate())
+{
+}
+
+QuaGzipFile::QuaGzipFile(const QString &fileName, QObject *parent):
+  QIODevice(parent),
+d(new QuaGzipFilePrivate(fileName))
+{
+}
+
+QuaGzipFile::~QuaGzipFile()
+{
+  if (isOpen()) {
+    close();
+  }
+  delete d;
+}
+
+void QuaGzipFile::setFileName(const QString& fileName)
+{
+    d->fileName = fileName;
+}
+
+QString QuaGzipFile::getFileName() const
+{
+    return d->fileName;
+}
+
+bool QuaGzipFile::isSequential() const
+{
+  return true;
+}
+
+bool QuaGzipFile::open(QIODevice::OpenMode mode)
+{
+    QString error;
+    if (!d->open(d->fileName, mode, error)) {
+        setErrorString(error);
+        return false;
+    }
+    return QIODevice::open(mode);
+}
+
+bool QuaGzipFile::open(int fd, QIODevice::OpenMode mode)
+{
+    QString error;
+    if (!d->open(fd, mode, error)) {
+        setErrorString(error);
+        return false;
+    }
+    return QIODevice::open(mode);
+}
+
+bool QuaGzipFile::flush()
+{
+    return gzflush(d->gzd, Z_SYNC_FLUSH) == Z_OK;
+}
+
+void QuaGzipFile::close()
+{
+  QIODevice::close();
+  gzclose(d->gzd);
+}
+
+qint64 QuaGzipFile::readData(char *data, qint64 maxSize)
+{
+    return gzread(d->gzd, (voidp)data, (unsigned)maxSize);
+}
+
+qint64 QuaGzipFile::writeData(const char *data, qint64 maxSize)
+{
+    if (maxSize == 0)
+        return 0;
+    int written = gzwrite(d->gzd, (voidp)data, (unsigned)maxSize);
+    if (written == 0)
+        return -1;
+    else
+        return written;
+}
diff --git a/3rdparty/quazip-0.7/quazip/quagzipfile.h b/3rdparty/quazip-0.7/quazip/quagzipfile.h
new file mode 100644
index 0000000..32bc565
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quagzipfile.h
@@ -0,0 +1,108 @@
+#ifndef QUAZIP_QUAGZIPFILE_H
+#define QUAZIP_QUAGZIPFILE_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QIODevice>
+#include "quazip_global.h"
+
+#include <zlib.h>
+
+class QuaGzipFilePrivate;
+
+/// GZIP file
+/**
+  This class is a wrapper around GZIP file access functions in zlib. Unlike QuaZip classes, it doesn't allow reading from a GZIP file opened as QIODevice, for example, if your GZIP file is in QBuffer. It only provides QIODevice access to a GZIP file contents, but the GZIP file itself must be identified by its name on disk or by descriptor id.
+  */
+class QUAZIP_EXPORT QuaGzipFile: public QIODevice {
+  Q_OBJECT
+public:
+  /// Empty constructor.
+  /**
+    Must call setFileName() before trying to open.
+    */
+  QuaGzipFile();
+  /// Empty constructor with a parent.
+  /**
+    Must call setFileName() before trying to open.
+    \param parent The parent object, as per QObject logic.
+    */
+  QuaGzipFile(QObject *parent);
+  /// Constructor.
+  /**
+    \param fileName The name of the GZIP file.
+    \param parent The parent object, as per QObject logic.
+    */
+  QuaGzipFile(const QString &fileName, QObject *parent = NULL);
+  /// Destructor.
+  virtual ~QuaGzipFile();
+  /// Sets the name of the GZIP file to be opened.
+  void setFileName(const QString& fileName);
+  /// Returns the name of the GZIP file.
+  QString getFileName() const;
+  /// Returns true.
+  /**
+    Strictly speaking, zlib supports seeking for GZIP files, but it is
+    poorly implemented, because there is no way to implement it
+    properly. For reading, seeking backwards is very slow, and for
+    writing, it is downright impossible. Therefore, QuaGzipFile does not
+    support seeking at all.
+    */
+  virtual bool isSequential() const;
+  /// Opens the file.
+  /**
+    \param mode Can be either QIODevice::Write or QIODevice::Read.
+    ReadWrite and Append aren't supported.
+    */
+  virtual bool open(QIODevice::OpenMode mode);
+  /// Opens the file.
+  /**
+    \overload
+    \param fd The file descriptor to read/write the GZIP file from/to.
+    \param mode Can be either QIODevice::Write or QIODevice::Read.
+    ReadWrite and Append aren't supported.
+    */
+  virtual bool open(int fd, QIODevice::OpenMode mode);
+  /// Flushes data to file.
+  /**
+    The data is written using Z_SYNC_FLUSH mode. Doesn't make any sense
+    when reading.
+    */
+  virtual bool flush();
+  /// Closes the file.
+  virtual void close();
+protected:
+  /// Implementation of QIODevice::readData().
+  virtual qint64 readData(char *data, qint64 maxSize);
+  /// Implementation of QIODevice::writeData().
+  virtual qint64 writeData(const char *data, qint64 maxSize);
+private:
+    // not implemented by design to disable copy
+    QuaGzipFile(const QuaGzipFile &that);
+    QuaGzipFile& operator=(const QuaGzipFile &that);
+    QuaGzipFilePrivate *d;
+};
+
+#endif // QUAZIP_QUAGZIPFILE_H
diff --git a/3rdparty/quazip-0.7/quazip/quaziodevice.cpp b/3rdparty/quazip-0.7/quazip/quaziodevice.cpp
new file mode 100644
index 0000000..0d12028
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quaziodevice.cpp
@@ -0,0 +1,320 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "quaziodevice.h"
+
+#define QUAZIO_INBUFSIZE 4096
+#define QUAZIO_OUTBUFSIZE 4096
+
+/// \cond internal
+class QuaZIODevicePrivate {
+    friend class QuaZIODevice;
+    QuaZIODevicePrivate(QIODevice *io);
+    ~QuaZIODevicePrivate();
+    QIODevice *io;
+    z_stream zins;
+    z_stream zouts;
+    char *inBuf;
+    int inBufPos;
+    int inBufSize;
+    char *outBuf;
+    int outBufPos;
+    int outBufSize;
+    bool zBufError;
+    int doFlush(QString &error);
+};
+
+QuaZIODevicePrivate::QuaZIODevicePrivate(QIODevice *io):
+  io(io),
+  inBuf(NULL),
+  inBufPos(0),
+  inBufSize(0),
+  outBuf(NULL),
+  outBufPos(0),
+  outBufSize(0),
+  zBufError(false)
+{
+  zins.zalloc = (alloc_func) NULL;
+  zins.zfree = (free_func) NULL;
+  zins.opaque = NULL;
+  zouts.zalloc = (alloc_func) NULL;
+  zouts.zfree = (free_func) NULL;
+  zouts.opaque = NULL;
+  inBuf = new char[QUAZIO_INBUFSIZE];
+  outBuf = new char[QUAZIO_OUTBUFSIZE];
+#ifdef QUAZIP_ZIODEVICE_DEBUG_OUTPUT
+  debug.setFileName("debug.out");
+  debug.open(QIODevice::WriteOnly);
+#endif
+#ifdef QUAZIP_ZIODEVICE_DEBUG_INPUT
+  indebug.setFileName("debug.in");
+  indebug.open(QIODevice::WriteOnly);
+#endif
+}
+
+QuaZIODevicePrivate::~QuaZIODevicePrivate()
+{
+#ifdef QUAZIP_ZIODEVICE_DEBUG_OUTPUT
+  debug.close();
+#endif
+#ifdef QUAZIP_ZIODEVICE_DEBUG_INPUT
+  indebug.close();
+#endif
+  if (inBuf != NULL)
+    delete[] inBuf;
+  if (outBuf != NULL)
+    delete[] outBuf;
+}
+
+int QuaZIODevicePrivate::doFlush(QString &error)
+{
+  int flushed = 0;
+  while (outBufPos < outBufSize) {
+    int more = io->write(outBuf + outBufPos, outBufSize - outBufPos);
+    if (more == -1) {
+      error = io->errorString();
+      return -1;
+    }
+    if (more == 0)
+      break;
+    outBufPos += more;
+    flushed += more;
+  }
+  if (outBufPos == outBufSize) {
+    outBufPos = outBufSize = 0;
+  }
+  return flushed;
+}
+
+/// \endcond
+
+// #define QUAZIP_ZIODEVICE_DEBUG_OUTPUT
+// #define QUAZIP_ZIODEVICE_DEBUG_INPUT
+#ifdef QUAZIP_ZIODEVICE_DEBUG_OUTPUT
+#include <QFile>
+static QFile debug;
+#endif
+#ifdef QUAZIP_ZIODEVICE_DEBUG_INPUT
+#include <QFile>
+static QFile indebug;
+#endif
+
+QuaZIODevice::QuaZIODevice(QIODevice *io, QObject *parent):
+    QIODevice(parent),
+    d(new QuaZIODevicePrivate(io))
+{
+  connect(io, SIGNAL(readyRead()), SIGNAL(readyRead()));
+}
+
+QuaZIODevice::~QuaZIODevice()
+{
+    if (isOpen())
+        close();
+    delete d;
+}
+
+QIODevice *QuaZIODevice::getIoDevice() const
+{
+    return d->io;
+}
+
+bool QuaZIODevice::open(QIODevice::OpenMode mode)
+{
+    if ((mode & QIODevice::Append) != 0) {
+        setErrorString(trUtf8("QIODevice::Append is not supported for"
+                    " QuaZIODevice"));
+        return false;
+    }
+    if ((mode & QIODevice::ReadWrite) == QIODevice::ReadWrite) {
+        setErrorString(trUtf8("QIODevice::ReadWrite is not supported for"
+                    " QuaZIODevice"));
+        return false;
+    }
+    if ((mode & QIODevice::ReadOnly) != 0) {
+        if (inflateInit(&d->zins) != Z_OK) {
+            setErrorString(d->zins.msg);
+            return false;
+        }
+    }
+    if ((mode & QIODevice::WriteOnly) != 0) {
+        if (deflateInit(&d->zouts, Z_DEFAULT_COMPRESSION) != Z_OK) {
+            setErrorString(d->zouts.msg);
+            return false;
+        }
+    }
+    return QIODevice::open(mode);
+}
+
+void QuaZIODevice::close()
+{
+    if ((openMode() & QIODevice::ReadOnly) != 0) {
+        if (inflateEnd(&d->zins) != Z_OK) {
+            setErrorString(d->zins.msg);
+        }
+    }
+    if ((openMode() & QIODevice::WriteOnly) != 0) {
+        flush();
+        if (deflateEnd(&d->zouts) != Z_OK) {
+            setErrorString(d->zouts.msg);
+        }
+    }
+    QIODevice::close();
+}
+
+qint64 QuaZIODevice::readData(char *data, qint64 maxSize)
+{
+  int read = 0;
+  while (read < maxSize) {
+    if (d->inBufPos == d->inBufSize) {
+      d->inBufPos = 0;
+      d->inBufSize = d->io->read(d->inBuf, QUAZIO_INBUFSIZE);
+      if (d->inBufSize == -1) {
+        d->inBufSize = 0;
+        setErrorString(d->io->errorString());
+        return -1;
+      }
+      if (d->inBufSize == 0)
+        break;
+    }
+    while (read < maxSize && d->inBufPos < d->inBufSize) {
+      d->zins.next_in = (Bytef *) (d->inBuf + d->inBufPos);
+      d->zins.avail_in = d->inBufSize - d->inBufPos;
+      d->zins.next_out = (Bytef *) (data + read);
+      d->zins.avail_out = (uInt) (maxSize - read); // hope it's less than 2GB
+      int more = 0;
+      switch (inflate(&d->zins, Z_SYNC_FLUSH)) {
+      case Z_OK:
+        read = (char *) d->zins.next_out - data;
+        d->inBufPos = (char *) d->zins.next_in - d->inBuf;
+        break;
+      case Z_STREAM_END:
+        read = (char *) d->zins.next_out - data;
+        d->inBufPos = (char *) d->zins.next_in - d->inBuf;
+        return read;
+      case Z_BUF_ERROR: // this should never happen, but just in case
+        if (!d->zBufError) {
+          qWarning("Z_BUF_ERROR detected with %d/%d in/out, weird",
+              d->zins.avail_in, d->zins.avail_out);
+          d->zBufError = true;
+        }
+        memmove(d->inBuf, d->inBuf + d->inBufPos, d->inBufSize - d->inBufPos);
+        d->inBufSize -= d->inBufPos;
+        d->inBufPos = 0;
+        more = d->io->read(d->inBuf + d->inBufSize, QUAZIO_INBUFSIZE - d->inBufSize);
+        if (more == -1) {
+          setErrorString(d->io->errorString());
+          return -1;
+        }
+        if (more == 0)
+          return read;
+        d->inBufSize += more;
+        break;
+      default:
+        setErrorString(QString::fromLocal8Bit(d->zins.msg));
+        return -1;
+      }
+    }
+  }
+#ifdef QUAZIP_ZIODEVICE_DEBUG_INPUT
+  indebug.write(data, read);
+#endif
+  return read;
+}
+
+qint64 QuaZIODevice::writeData(const char *data, qint64 maxSize)
+{
+  int written = 0;
+  QString error;
+  if (d->doFlush(error) == -1) {
+    setErrorString(error);
+    return -1;
+  }
+  while (written < maxSize) {
+      // there is some data waiting in the output buffer
+    if (d->outBufPos < d->outBufSize)
+      return written;
+    d->zouts.next_in = (Bytef *) (data + written);
+    d->zouts.avail_in = (uInt) (maxSize - written); // hope it's less than 2GB
+    d->zouts.next_out = (Bytef *) d->outBuf;
+    d->zouts.avail_out = QUAZIO_OUTBUFSIZE;
+    switch (deflate(&d->zouts, Z_NO_FLUSH)) {
+    case Z_OK:
+      written = (char *) d->zouts.next_in - data;
+      d->outBufSize = (char *) d->zouts.next_out - d->outBuf;
+      break;
+    default:
+      setErrorString(QString::fromLocal8Bit(d->zouts.msg));
+      return -1;
+    }
+    if (d->doFlush(error) == -1) {
+      setErrorString(error);
+      return -1;
+    }
+  }
+#ifdef QUAZIP_ZIODEVICE_DEBUG_OUTPUT
+  debug.write(data, written);
+#endif
+  return written;
+}
+
+bool QuaZIODevice::flush()
+{
+    QString error;
+    if (d->doFlush(error) < 0) {
+        setErrorString(error);
+        return false;
+    }
+    // can't flush buffer, some data is still waiting
+    if (d->outBufPos < d->outBufSize)
+        return true;
+    Bytef c = 0;
+    d->zouts.next_in = &c; // fake input buffer
+    d->zouts.avail_in = 0; // of zero size
+    do {
+        d->zouts.next_out = (Bytef *) d->outBuf;
+        d->zouts.avail_out = QUAZIO_OUTBUFSIZE;
+        switch (deflate(&d->zouts, Z_SYNC_FLUSH)) {
+        case Z_OK:
+          d->outBufSize = (char *) d->zouts.next_out - d->outBuf;
+          if (d->doFlush(error) < 0) {
+              setErrorString(error);
+              return false;
+          }
+          if (d->outBufPos < d->outBufSize)
+              return true;
+          break;
+        case Z_BUF_ERROR: // nothing to write?
+          return true;
+        default:
+          setErrorString(QString::fromLocal8Bit(d->zouts.msg));
+          return false;
+        }
+    } while (d->zouts.avail_out == 0);
+    return true;
+}
+
+bool QuaZIODevice::isSequential() const
+{
+  return true;
+}
diff --git a/3rdparty/quazip-0.7/quazip/quaziodevice.h b/3rdparty/quazip-0.7/quazip/quaziodevice.h
new file mode 100644
index 0000000..f8cd380
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quaziodevice.h
@@ -0,0 +1,98 @@
+#ifndef QUAZIP_QUAZIODEVICE_H
+#define QUAZIP_QUAZIODEVICE_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QIODevice>
+#include "quazip_global.h"
+
+#include <zlib.h>
+
+class QuaZIODevicePrivate;
+
+/// A class to compress/decompress QIODevice.
+/**
+  This class can be used to compress any data written to QIODevice or
+  decompress it back. Compressing data sent over a QTcpSocket is a good
+  example.
+  */
+class QUAZIP_EXPORT QuaZIODevice: public QIODevice {
+  Q_OBJECT
+public:
+  /// Constructor.
+  /**
+    \param io The QIODevice to read/write.
+    \param parent The parent object, as per QObject logic.
+    */
+  QuaZIODevice(QIODevice *io, QObject *parent = NULL);
+  /// Destructor.
+  ~QuaZIODevice();
+  /// Flushes data waiting to be written.
+  /**
+    Unfortunately, as QIODevice doesn't support flush() by itself, the
+    only thing this method does is write the compressed data into the
+    device using Z_SYNC_FLUSH mode. If you need the compressed data to
+    actually be flushed from the buffer of the underlying QIODevice, you
+    need to call its flush() method as well, providing it supports it
+    (like QTcpSocket does). Example:
+    \code
+    QuaZIODevice dev(&sock);
+    dev.open(QIODevice::Write);
+    dev.write(yourDataGoesHere);
+    dev.flush();
+    sock->flush(); // this actually sends data to network
+    \endcode
+
+    This may change in the future versions of QuaZIP by implementing an
+    ugly hack: trying to cast the QIODevice using qobject_cast to known
+    flush()-supporting subclasses, and calling flush if the resulting
+    pointer is not zero.
+    */
+  virtual bool flush();
+  /// Opens the device.
+  /**
+    \param mode Neither QIODevice::ReadWrite nor QIODevice::Append are
+    not supported.
+    */
+  virtual bool open(QIODevice::OpenMode mode);
+  /// Closes this device, but not the underlying one.
+  /**
+    The underlying QIODevice is not closed in case you want to write
+    something else to it.
+    */
+  virtual void close();
+  /// Returns the underlying device.
+  QIODevice *getIoDevice() const;
+  /// Returns true.
+  virtual bool isSequential() const;
+protected:
+  /// Implementation of QIODevice::readData().
+  virtual qint64 readData(char *data, qint64 maxSize);
+  /// Implementation of QIODevice::writeData().
+  virtual qint64 writeData(const char *data, qint64 maxSize);
+private:
+  QuaZIODevicePrivate *d;
+};
+#endif // QUAZIP_QUAZIODEVICE_H
diff --git a/3rdparty/quazip-0.7/quazip/quazip.cpp b/3rdparty/quazip-0.7/quazip/quazip.cpp
new file mode 100644
index 0000000..52019d2
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazip.cpp
@@ -0,0 +1,788 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant, see
+quazip/(un)zip.h files for details, basically it's zlib license.
+ **/
+
+#include <QFile>
+#include <QFlags>
+#include <QHash>
+
+#include "quazip.h"
+
+/// All the internal stuff for the QuaZip class.
+/**
+  \internal
+
+  This class keeps all the private stuff for the QuaZip class so it can
+  be changed without breaking binary compatibility, according to the
+  Pimpl idiom.
+  */
+class QuaZipPrivate {
+  friend class QuaZip;
+  private:
+    /// The pointer to the corresponding QuaZip instance.
+    QuaZip *q;
+    /// The codec for file names.
+    QTextCodec *fileNameCodec;
+    /// The codec for comments.
+    QTextCodec *commentCodec;
+    /// The archive file name.
+    QString zipName;
+    /// The device to access the archive.
+    QIODevice *ioDevice;
+    /// The global comment.
+    QString comment;
+    /// The open mode.
+    QuaZip::Mode mode;
+    union {
+      /// The internal handle for UNZIP modes.
+      unzFile unzFile_f;
+      /// The internal handle for ZIP modes.
+      zipFile zipFile_f;
+    };
+    /// Whether a current file is set.
+    bool hasCurrentFile_f;
+    /// The last error.
+    int zipError;
+    /// Whether \ref QuaZip::setDataDescriptorWritingEnabled() "the data descriptor writing mode" is enabled.
+    bool dataDescriptorWritingEnabled;
+    /// The zip64 mode.
+    bool zip64;
+    /// The auto-close flag.
+    bool autoClose;
+    inline QTextCodec *getDefaultFileNameCodec()
+    {
+        if (defaultFileNameCodec == NULL) {
+            return QTextCodec::codecForLocale();
+        } else {
+            return defaultFileNameCodec;
+        }
+    }
+    /// The constructor for the corresponding QuaZip constructor.
+    inline QuaZipPrivate(QuaZip *q):
+      q(q),
+      fileNameCodec(getDefaultFileNameCodec()),
+      commentCodec(QTextCodec::codecForLocale()),
+      ioDevice(NULL),
+      mode(QuaZip::mdNotOpen),
+      hasCurrentFile_f(false),
+      zipError(UNZ_OK),
+      dataDescriptorWritingEnabled(true),
+      zip64(false),
+      autoClose(true)
+    {
+        lastMappedDirectoryEntry.num_of_file = 0;
+        lastMappedDirectoryEntry.pos_in_zip_directory = 0;
+    }
+    /// The constructor for the corresponding QuaZip constructor.
+    inline QuaZipPrivate(QuaZip *q, const QString &zipName):
+      q(q),
+      fileNameCodec(getDefaultFileNameCodec()),
+      commentCodec(QTextCodec::codecForLocale()),
+      zipName(zipName),
+      ioDevice(NULL),
+      mode(QuaZip::mdNotOpen),
+      hasCurrentFile_f(false),
+      zipError(UNZ_OK),
+      dataDescriptorWritingEnabled(true),
+      zip64(false),
+      autoClose(true)
+    {
+        lastMappedDirectoryEntry.num_of_file = 0;
+        lastMappedDirectoryEntry.pos_in_zip_directory = 0;
+    }
+    /// The constructor for the corresponding QuaZip constructor.
+    inline QuaZipPrivate(QuaZip *q, QIODevice *ioDevice):
+        q(q),
+      fileNameCodec(getDefaultFileNameCodec()),
+      commentCodec(QTextCodec::codecForLocale()),
+      ioDevice(ioDevice),
+      mode(QuaZip::mdNotOpen),
+      hasCurrentFile_f(false),
+      zipError(UNZ_OK),
+      dataDescriptorWritingEnabled(true),
+      zip64(false),
+      autoClose(true)
+    {
+        lastMappedDirectoryEntry.num_of_file = 0;
+        lastMappedDirectoryEntry.pos_in_zip_directory = 0;
+    }
+    /// Returns either a list of file names or a list of QuaZipFileInfo.
+    template<typename TFileInfo>
+        bool getFileInfoList(QList<TFileInfo> *result) const;
+
+    /// Stores map of filenames and file locations for unzipping
+      inline void clearDirectoryMap();
+      inline void addCurrentFileToDirectoryMap(const QString &fileName);
+      bool goToFirstUnmappedFile();
+      QHash<QString, unz64_file_pos> directoryCaseSensitive;
+      QHash<QString, unz64_file_pos> directoryCaseInsensitive;
+      unz64_file_pos lastMappedDirectoryEntry;
+      static QTextCodec *defaultFileNameCodec;
+};
+
+QTextCodec *QuaZipPrivate::defaultFileNameCodec = NULL;
+
+void QuaZipPrivate::clearDirectoryMap()
+{
+    directoryCaseInsensitive.clear();
+    directoryCaseSensitive.clear();
+    lastMappedDirectoryEntry.num_of_file = 0;
+    lastMappedDirectoryEntry.pos_in_zip_directory = 0;
+}
+
+void QuaZipPrivate::addCurrentFileToDirectoryMap(const QString &fileName)
+{
+    if (!hasCurrentFile_f || fileName.isEmpty()) {
+        return;
+    }
+    // Adds current file to filename map as fileName
+    unz64_file_pos fileDirectoryPos;
+    unzGetFilePos64(unzFile_f, &fileDirectoryPos);
+    directoryCaseSensitive.insert(fileName, fileDirectoryPos);
+    // Only add lowercase to directory map if not already there
+    // ensures only map the first one seen
+    QString lower = fileName.toLower();
+    if (!directoryCaseInsensitive.contains(lower))
+        directoryCaseInsensitive.insert(lower, fileDirectoryPos);
+    // Mark last one
+    if (fileDirectoryPos.pos_in_zip_directory > lastMappedDirectoryEntry.pos_in_zip_directory)
+        lastMappedDirectoryEntry = fileDirectoryPos;
+}
+
+bool QuaZipPrivate::goToFirstUnmappedFile()
+{
+    zipError = UNZ_OK;
+    if (mode != QuaZip::mdUnzip) {
+        qWarning("QuaZipPrivate::goToNextUnmappedFile(): ZIP is not open in mdUnzip mode");
+        return false;
+    }
+    // If not mapped anything, go to beginning
+    if (lastMappedDirectoryEntry.pos_in_zip_directory == 0) {
+        unzGoToFirstFile(unzFile_f);
+    } else {
+        // Goto the last one mapped, plus one
+        unzGoToFilePos64(unzFile_f, &lastMappedDirectoryEntry);
+        unzGoToNextFile(unzFile_f);
+    }
+    hasCurrentFile_f=zipError==UNZ_OK;
+    if(zipError==UNZ_END_OF_LIST_OF_FILE)
+      zipError=UNZ_OK;
+    return hasCurrentFile_f;
+}
+
+QuaZip::QuaZip():
+  p(new QuaZipPrivate(this))
+{
+}
+
+QuaZip::QuaZip(const QString& zipName):
+  p(new QuaZipPrivate(this, zipName))
+{
+}
+
+QuaZip::QuaZip(QIODevice *ioDevice):
+  p(new QuaZipPrivate(this, ioDevice))
+{
+}
+
+QuaZip::~QuaZip()
+{
+  if(isOpen())
+    close();
+  delete p;
+}
+
+bool QuaZip::open(Mode mode, zlib_filefunc_def* ioApi)
+{
+  p->zipError=UNZ_OK;
+  if(isOpen()) {
+    qWarning("QuaZip::open(): ZIP already opened");
+    return false;
+  }
+  QIODevice *ioDevice = p->ioDevice;
+  if (ioDevice == NULL) {
+    if (p->zipName.isEmpty()) {
+      qWarning("QuaZip::open(): set either ZIP file name or IO device first");
+      return false;
+    } else {
+      ioDevice = new QFile(p->zipName);
+    }
+  }
+  unsigned flags = 0;
+  switch(mode) {
+    case mdUnzip:
+      if (ioApi == NULL) {
+          if (p->autoClose)
+              flags |= UNZ_AUTO_CLOSE;
+          p->unzFile_f=unzOpenInternal(ioDevice, NULL, 1, flags);
+      } else {
+          // QuaZIP pre-zip64 compatibility mode
+          p->unzFile_f=unzOpen2(ioDevice, ioApi);
+          if (p->unzFile_f != NULL) {
+              if (p->autoClose) {
+                  unzSetFlags(p->unzFile_f, UNZ_AUTO_CLOSE);
+              } else {
+                  unzClearFlags(p->unzFile_f, UNZ_AUTO_CLOSE);
+              }
+          }
+      }
+      if(p->unzFile_f!=NULL) {
+        if (ioDevice->isSequential()) {
+            unzClose(p->unzFile_f);
+            if (!p->zipName.isEmpty())
+                delete ioDevice;
+            qWarning("QuaZip::open(): "
+                     "only mdCreate can be used with "
+                     "sequential devices");
+            return false;
+        }
+        p->mode=mode;
+        p->ioDevice = ioDevice;
+        return true;
+      } else {
+        p->zipError=UNZ_OPENERROR;
+        if (!p->zipName.isEmpty())
+          delete ioDevice;
+        return false;
+      }
+    case mdCreate:
+    case mdAppend:
+    case mdAdd:
+      if (ioApi == NULL) {
+          if (p->autoClose)
+              flags |= ZIP_AUTO_CLOSE;
+          if (p->dataDescriptorWritingEnabled)
+              flags |= ZIP_WRITE_DATA_DESCRIPTOR;
+          p->zipFile_f=zipOpen3(ioDevice,
+              mode==mdCreate?APPEND_STATUS_CREATE:
+              mode==mdAppend?APPEND_STATUS_CREATEAFTER:
+              APPEND_STATUS_ADDINZIP,
+              NULL, NULL, flags);
+      } else {
+          // QuaZIP pre-zip64 compatibility mode
+          p->zipFile_f=zipOpen2(ioDevice,
+              mode==mdCreate?APPEND_STATUS_CREATE:
+              mode==mdAppend?APPEND_STATUS_CREATEAFTER:
+              APPEND_STATUS_ADDINZIP,
+              NULL,
+              ioApi);
+          if (p->zipFile_f != NULL) {
+              zipSetFlags(p->zipFile_f, flags);
+          }
+      }
+      if(p->zipFile_f!=NULL) {
+        if (ioDevice->isSequential()) {
+            if (mode != mdCreate) {
+                zipClose(p->zipFile_f, NULL);
+                qWarning("QuaZip::open(): "
+                        "only mdCreate can be used with "
+                         "sequential devices");
+                if (!p->zipName.isEmpty())
+                    delete ioDevice;
+                return false;
+            }
+            zipSetFlags(p->zipFile_f, ZIP_SEQUENTIAL);
+        }
+        p->mode=mode;
+        p->ioDevice = ioDevice;
+        return true;
+      } else {
+        p->zipError=UNZ_OPENERROR;
+        if (!p->zipName.isEmpty())
+          delete ioDevice;
+        return false;
+      }
+    default:
+      qWarning("QuaZip::open(): unknown mode: %d", (int)mode);
+      if (!p->zipName.isEmpty())
+        delete ioDevice;
+      return false;
+      break;
+  }
+}
+
+void QuaZip::close()
+{
+  p->zipError=UNZ_OK;
+  switch(p->mode) {
+    case mdNotOpen:
+      qWarning("QuaZip::close(): ZIP is not open");
+      return;
+    case mdUnzip:
+      p->zipError=unzClose(p->unzFile_f);
+      break;
+    case mdCreate:
+    case mdAppend:
+    case mdAdd:
+      p->zipError=zipClose(p->zipFile_f, 
+          p->comment.isNull() ? NULL
+          : p->commentCodec->fromUnicode(p->comment).constData());
+      break;
+    default:
+      qWarning("QuaZip::close(): unknown mode: %d", (int)p->mode);
+      return;
+  }
+  // opened by name, need to delete the internal IO device
+  if (!p->zipName.isEmpty()) {
+      delete p->ioDevice;
+      p->ioDevice = NULL;
+  }
+  p->clearDirectoryMap();
+  if(p->zipError==UNZ_OK)
+    p->mode=mdNotOpen;
+}
+
+void QuaZip::setZipName(const QString& zipName)
+{
+  if(isOpen()) {
+    qWarning("QuaZip::setZipName(): ZIP is already open!");
+    return;
+  }
+  p->zipName=zipName;
+  p->ioDevice = NULL;
+}
+
+void QuaZip::setIoDevice(QIODevice *ioDevice)
+{
+  if(isOpen()) {
+    qWarning("QuaZip::setIoDevice(): ZIP is already open!");
+    return;
+  }
+  p->ioDevice = ioDevice;
+  p->zipName = QString();
+}
+
+int QuaZip::getEntriesCount()const
+{
+  QuaZip *fakeThis=(QuaZip*)this; // non-const
+  fakeThis->p->zipError=UNZ_OK;
+  if(p->mode!=mdUnzip) {
+    qWarning("QuaZip::getEntriesCount(): ZIP is not open in mdUnzip mode");
+    return -1;
+  }
+  unz_global_info64 globalInfo;
+  if((fakeThis->p->zipError=unzGetGlobalInfo64(p->unzFile_f, &globalInfo))!=UNZ_OK)
+    return p->zipError;
+  return (int)globalInfo.number_entry;
+}
+
+QString QuaZip::getComment()const
+{
+  QuaZip *fakeThis=(QuaZip*)this; // non-const
+  fakeThis->p->zipError=UNZ_OK;
+  if(p->mode!=mdUnzip) {
+    qWarning("QuaZip::getComment(): ZIP is not open in mdUnzip mode");
+    return QString();
+  }
+  unz_global_info64 globalInfo;
+  QByteArray comment;
+  if((fakeThis->p->zipError=unzGetGlobalInfo64(p->unzFile_f, &globalInfo))!=UNZ_OK)
+    return QString();
+  comment.resize(globalInfo.size_comment);
+  if((fakeThis->p->zipError=unzGetGlobalComment(p->unzFile_f, comment.data(), comment.size())) < 0)
+    return QString();
+  fakeThis->p->zipError = UNZ_OK;
+  return p->commentCodec->toUnicode(comment);
+}
+
+bool QuaZip::setCurrentFile(const QString& fileName, CaseSensitivity cs)
+{
+  p->zipError=UNZ_OK;
+  if(p->mode!=mdUnzip) {
+    qWarning("QuaZip::setCurrentFile(): ZIP is not open in mdUnzip mode");
+    return false;
+  }
+  if(fileName.isEmpty()) {
+    p->hasCurrentFile_f=false;
+    return true;
+  }
+  // Unicode-aware reimplementation of the unzLocateFile function
+  if(p->unzFile_f==NULL) {
+    p->zipError=UNZ_PARAMERROR;
+    return false;
+  }
+  if(fileName.length()>MAX_FILE_NAME_LENGTH) {
+    p->zipError=UNZ_PARAMERROR;
+    return false;
+  }
+  // Find the file by name
+  bool sens = convertCaseSensitivity(cs) == Qt::CaseSensitive;
+  QString lower, current;
+  if(!sens) lower=fileName.toLower();
+  p->hasCurrentFile_f=false;
+
+  // Check the appropriate Map
+  unz64_file_pos fileDirPos;
+  fileDirPos.pos_in_zip_directory = 0;
+  if (sens) {
+      if (p->directoryCaseSensitive.contains(fileName))
+          fileDirPos = p->directoryCaseSensitive.value(fileName);
+  } else {
+      if (p->directoryCaseInsensitive.contains(lower))
+          fileDirPos = p->directoryCaseInsensitive.value(lower);
+  }
+
+  if (fileDirPos.pos_in_zip_directory != 0) {
+      p->zipError = unzGoToFilePos64(p->unzFile_f, &fileDirPos);
+      p->hasCurrentFile_f = p->zipError == UNZ_OK;
+  }
+
+  if (p->hasCurrentFile_f)
+      return p->hasCurrentFile_f;
+
+  // Not mapped yet, start from where we have got to so far
+  for(bool more=p->goToFirstUnmappedFile(); more; more=goToNextFile()) {
+    current=getCurrentFileName();
+    if(current.isEmpty()) return false;
+    if(sens) {
+      if(current==fileName) break;
+    } else {
+      if(current.toLower()==lower) break;
+    }
+  }
+  return p->hasCurrentFile_f;
+}
+
+bool QuaZip::goToFirstFile()
+{
+  p->zipError=UNZ_OK;
+  if(p->mode!=mdUnzip) {
+    qWarning("QuaZip::goToFirstFile(): ZIP is not open in mdUnzip mode");
+    return false;
+  }
+  p->zipError=unzGoToFirstFile(p->unzFile_f);
+  p->hasCurrentFile_f=p->zipError==UNZ_OK;
+  return p->hasCurrentFile_f;
+}
+
+bool QuaZip::goToNextFile()
+{
+  p->zipError=UNZ_OK;
+  if(p->mode!=mdUnzip) {
+    qWarning("QuaZip::goToFirstFile(): ZIP is not open in mdUnzip mode");
+    return false;
+  }
+  p->zipError=unzGoToNextFile(p->unzFile_f);
+  p->hasCurrentFile_f=p->zipError==UNZ_OK;
+  if(p->zipError==UNZ_END_OF_LIST_OF_FILE)
+    p->zipError=UNZ_OK;
+  return p->hasCurrentFile_f;
+}
+
+bool QuaZip::getCurrentFileInfo(QuaZipFileInfo *info)const
+{
+    QuaZipFileInfo64 info64;
+    if (info == NULL) { // Very unlikely because of the overloads
+        return false;
+    }
+    if (getCurrentFileInfo(&info64)) {
+        info64.toQuaZipFileInfo(*info);
+        return true;
+    } else {
+        return false;
+    }
+}
+
+bool QuaZip::getCurrentFileInfo(QuaZipFileInfo64 *info)const
+{
+  QuaZip *fakeThis=(QuaZip*)this; // non-const
+  fakeThis->p->zipError=UNZ_OK;
+  if(p->mode!=mdUnzip) {
+    qWarning("QuaZip::getCurrentFileInfo(): ZIP is not open in mdUnzip mode");
+    return false;
+  }
+  unz_file_info64 info_z;
+  QByteArray fileName;
+  QByteArray extra;
+  QByteArray comment;
+  if(info==NULL) return false;
+  if(!isOpen()||!hasCurrentFile()) return false;
+  if((fakeThis->p->zipError=unzGetCurrentFileInfo64(p->unzFile_f, &info_z, NULL, 0, NULL, 0, NULL, 0))!=UNZ_OK)
+    return false;
+  fileName.resize(info_z.size_filename);
+  extra.resize(info_z.size_file_extra);
+  comment.resize(info_z.size_file_comment);
+  if((fakeThis->p->zipError=unzGetCurrentFileInfo64(p->unzFile_f, NULL,
+      fileName.data(), fileName.size(),
+      extra.data(), extra.size(),
+      comment.data(), comment.size()))!=UNZ_OK)
+    return false;
+  info->versionCreated=info_z.version;
+  info->versionNeeded=info_z.version_needed;
+  info->flags=info_z.flag;
+  info->method=info_z.compression_method;
+  info->crc=info_z.crc;
+  info->compressedSize=info_z.compressed_size;
+  info->uncompressedSize=info_z.uncompressed_size;
+  info->diskNumberStart=info_z.disk_num_start;
+  info->internalAttr=info_z.internal_fa;
+  info->externalAttr=info_z.external_fa;
+  info->name=p->fileNameCodec->toUnicode(fileName);
+  info->comment=p->commentCodec->toUnicode(comment);
+  info->extra=extra;
+  info->dateTime=QDateTime(
+      QDate(info_z.tmu_date.tm_year, info_z.tmu_date.tm_mon+1, info_z.tmu_date.tm_mday),
+      QTime(info_z.tmu_date.tm_hour, info_z.tmu_date.tm_min, info_z.tmu_date.tm_sec));
+  // Add to directory map
+  p->addCurrentFileToDirectoryMap(info->name);
+  return true;
+}
+
+QString QuaZip::getCurrentFileName()const
+{
+  QuaZip *fakeThis=(QuaZip*)this; // non-const
+  fakeThis->p->zipError=UNZ_OK;
+  if(p->mode!=mdUnzip) {
+    qWarning("QuaZip::getCurrentFileName(): ZIP is not open in mdUnzip mode");
+    return QString();
+  }
+  if(!isOpen()||!hasCurrentFile()) return QString();
+  QByteArray fileName(MAX_FILE_NAME_LENGTH, 0);
+  if((fakeThis->p->zipError=unzGetCurrentFileInfo64(p->unzFile_f, NULL, fileName.data(), fileName.size(),
+      NULL, 0, NULL, 0))!=UNZ_OK)
+    return QString();
+  QString result = p->fileNameCodec->toUnicode(fileName.constData());
+  if (result.isEmpty())
+      return result;
+  // Add to directory map
+  p->addCurrentFileToDirectoryMap(result);
+  return result;
+}
+
+void QuaZip::setFileNameCodec(QTextCodec *fileNameCodec)
+{
+  p->fileNameCodec=fileNameCodec;
+}
+
+void QuaZip::setFileNameCodec(const char *fileNameCodecName)
+{
+  p->fileNameCodec=QTextCodec::codecForName(fileNameCodecName);
+}
+
+QTextCodec *QuaZip::getFileNameCodec()const
+{
+  return p->fileNameCodec;
+}
+
+void QuaZip::setCommentCodec(QTextCodec *commentCodec)
+{
+  p->commentCodec=commentCodec;
+}
+
+void QuaZip::setCommentCodec(const char *commentCodecName)
+{
+  p->commentCodec=QTextCodec::codecForName(commentCodecName);
+}
+
+QTextCodec *QuaZip::getCommentCodec()const
+{
+  return p->commentCodec;
+}
+
+QString QuaZip::getZipName() const
+{
+  return p->zipName;
+}
+
+QIODevice *QuaZip::getIoDevice() const
+{
+  if (!p->zipName.isEmpty()) // opened by name, using an internal QIODevice
+    return NULL;
+  return p->ioDevice;
+}
+
+QuaZip::Mode QuaZip::getMode()const
+{
+  return p->mode;
+}
+
+bool QuaZip::isOpen()const
+{
+  return p->mode!=mdNotOpen;
+}
+
+int QuaZip::getZipError() const
+{
+  return p->zipError;
+}
+
+void QuaZip::setComment(const QString& comment)
+{
+  p->comment=comment;
+}
+
+bool QuaZip::hasCurrentFile()const
+{
+  return p->hasCurrentFile_f;
+}
+
+unzFile QuaZip::getUnzFile()
+{
+  return p->unzFile_f;
+}
+
+zipFile QuaZip::getZipFile()
+{
+  return p->zipFile_f;
+}
+
+void QuaZip::setDataDescriptorWritingEnabled(bool enabled)
+{
+    p->dataDescriptorWritingEnabled = enabled;
+}
+
+bool QuaZip::isDataDescriptorWritingEnabled() const
+{
+    return p->dataDescriptorWritingEnabled;
+}
+
+template<typename TFileInfo>
+TFileInfo QuaZip_getFileInfo(QuaZip *zip, bool *ok);
+
+template<>
+QuaZipFileInfo QuaZip_getFileInfo(QuaZip *zip, bool *ok)
+{
+    QuaZipFileInfo info;
+    *ok = zip->getCurrentFileInfo(&info);
+    return info;
+}
+
+template<>
+QuaZipFileInfo64 QuaZip_getFileInfo(QuaZip *zip, bool *ok)
+{
+    QuaZipFileInfo64 info;
+    *ok = zip->getCurrentFileInfo(&info);
+    return info;
+}
+
+template<>
+QString QuaZip_getFileInfo(QuaZip *zip, bool *ok)
+{
+    QString name = zip->getCurrentFileName();
+    *ok = !name.isEmpty();
+    return name;
+}
+
+template<typename TFileInfo>
+bool QuaZipPrivate::getFileInfoList(QList<TFileInfo> *result) const
+{
+  QuaZipPrivate *fakeThis=const_cast<QuaZipPrivate*>(this);
+  fakeThis->zipError=UNZ_OK;
+  if (mode!=QuaZip::mdUnzip) {
+    qWarning("QuaZip::getFileNameList/getFileInfoList(): "
+            "ZIP is not open in mdUnzip mode");
+    return false;
+  }
+  QString currentFile;
+  if (q->hasCurrentFile()) {
+      currentFile = q->getCurrentFileName();
+  }
+  if (q->goToFirstFile()) {
+      do {
+          bool ok;
+          result->append(QuaZip_getFileInfo<TFileInfo>(q, &ok));
+          if (!ok)
+              return false;
+      } while (q->goToNextFile());
+  }
+  if (zipError != UNZ_OK)
+      return false;
+  if (currentFile.isEmpty()) {
+      if (!q->goToFirstFile())
+          return false;
+  } else {
+      if (!q->setCurrentFile(currentFile))
+          return false;
+  }
+  return true;
+}
+
+QStringList QuaZip::getFileNameList() const
+{
+    QStringList list;
+    if (p->getFileInfoList(&list))
+        return list;
+    else
+        return QStringList();
+}
+
+QList<QuaZipFileInfo> QuaZip::getFileInfoList() const
+{
+    QList<QuaZipFileInfo> list;
+    if (p->getFileInfoList(&list))
+        return list;
+    else
+        return QList<QuaZipFileInfo>();
+}
+
+QList<QuaZipFileInfo64> QuaZip::getFileInfoList64() const
+{
+    QList<QuaZipFileInfo64> list;
+    if (p->getFileInfoList(&list))
+        return list;
+    else
+        return QList<QuaZipFileInfo64>();
+}
+
+Qt::CaseSensitivity QuaZip::convertCaseSensitivity(QuaZip::CaseSensitivity cs)
+{
+  if (cs == csDefault) {
+#ifdef Q_WS_WIN
+      return Qt::CaseInsensitive;
+#else
+      return Qt::CaseSensitive;
+#endif
+  } else {
+      return cs == csSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive;
+  }
+}
+
+void QuaZip::setDefaultFileNameCodec(QTextCodec *codec)
+{
+    QuaZipPrivate::defaultFileNameCodec = codec;
+}
+
+void QuaZip::setDefaultFileNameCodec(const char *codecName)
+{
+    setDefaultFileNameCodec(QTextCodec::codecForName(codecName));
+}
+
+void QuaZip::setZip64Enabled(bool zip64)
+{
+    p->zip64 = zip64;
+}
+
+bool QuaZip::isZip64Enabled() const
+{
+    return p->zip64;
+}
+
+bool QuaZip::isAutoClose() const
+{
+    return p->autoClose;
+}
+
+void QuaZip::setAutoClose(bool autoClose) const
+{
+    p->autoClose = autoClose;
+}
diff --git a/3rdparty/quazip-0.7/quazip/quazip.h b/3rdparty/quazip-0.7/quazip/quazip.h
new file mode 100644
index 0000000..0dd4023
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazip.h
@@ -0,0 +1,571 @@
+#ifndef QUA_ZIP_H
+#define QUA_ZIP_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant, see
+quazip/(un)zip.h files for details, basically it's zlib license.
+ **/
+
+#include <QString>
+#include <QStringList>
+#include <QTextCodec>
+
+#include "zip.h"
+#include "unzip.h"
+
+#include "quazip_global.h"
+#include "quazipfileinfo.h"
+
+// just in case it will be defined in the later versions of the ZIP/UNZIP
+#ifndef UNZ_OPENERROR
+// define additional error code
+#define UNZ_OPENERROR -1000
+#endif
+
+class QuaZipPrivate;
+
+/// ZIP archive.
+/** \class QuaZip quazip.h <quazip/quazip.h>
+ * This class implements basic interface to the ZIP archive. It can be
+ * used to read table contents of the ZIP archive and retreiving
+ * information about the files inside it.
+ *
+ * You can also use this class to open files inside archive by passing
+ * pointer to the instance of this class to the constructor of the
+ * QuaZipFile class. But see QuaZipFile::QuaZipFile(QuaZip*, QObject*)
+ * for the possible pitfalls.
+ *
+ * This class is indended to provide interface to the ZIP subpackage of
+ * the ZIP/UNZIP package as well as to the UNZIP subpackage. But
+ * currently it supports only UNZIP.
+ *
+ * The use of this class is simple - just create instance using
+ * constructor, then set ZIP archive file name using setFile() function
+ * (if you did not passed the name to the constructor), then open() and
+ * then use different functions to work with it! Well, if you are
+ * paranoid, you may also wish to call close before destructing the
+ * instance, to check for errors on close.
+ *
+ * You may also use getUnzFile() and getZipFile() functions to get the
+ * ZIP archive handle and use it with ZIP/UNZIP package API directly.
+ *
+ * This class supports localized file names inside ZIP archive, but you
+ * have to set up proper codec with setCodec() function. By default,
+ * locale codec will be used, which is probably ok for UNIX systems, but
+ * will almost certainly fail with ZIP archives created in Windows. This
+ * is because Windows ZIP programs have strange habit of using DOS
+ * encoding for file names in ZIP archives. For example, ZIP archive
+ * with cyrillic names created in Windows will have file names in \c
+ * IBM866 encoding instead of \c WINDOWS-1251. I think that calling one
+ * function is not much trouble, but for true platform independency it
+ * would be nice to have some mechanism for file name encoding auto
+ * detection using locale information. Does anyone know a good way to do
+ * it?
+ **/
+class QUAZIP_EXPORT QuaZip {
+  friend class QuaZipPrivate;
+  public:
+    /// Useful constants.
+    enum Constants {
+      MAX_FILE_NAME_LENGTH=256 /**< Maximum file name length. Taken from
+                                 \c UNZ_MAXFILENAMEINZIP constant in
+                                 unzip.c. */
+    };
+    /// Open mode of the ZIP file.
+    enum Mode {
+      mdNotOpen, ///< ZIP file is not open. This is the initial mode.
+      mdUnzip, ///< ZIP file is open for reading files inside it.
+      mdCreate, ///< ZIP file was created with open() call.
+      mdAppend, /**< ZIP file was opened in append mode. This refers to
+                  * \c APPEND_STATUS_CREATEAFTER mode in ZIP/UNZIP package
+                  * and means that zip is appended to some existing file
+                  * what is useful when that file contains
+                  * self-extractor code. This is obviously \em not what
+                  * you whant to use to add files to the existing ZIP
+                  * archive.
+                  **/
+      mdAdd ///< ZIP file was opened for adding files in the archive.
+    };
+    /// Case sensitivity for the file names.
+    /** This is what you specify when accessing files in the archive.
+     * Works perfectly fine with any characters thanks to Qt's great
+     * unicode support. This is different from ZIP/UNZIP API, where
+     * only US-ASCII characters was supported.
+     **/
+    enum CaseSensitivity {
+      csDefault=0, ///< Default for platform. Case sensitive for UNIX, not for Windows.
+      csSensitive=1, ///< Case sensitive.
+      csInsensitive=2 ///< Case insensitive.
+    };
+    /// Returns the actual case sensitivity for the specified QuaZIP one.
+    /**
+      \param cs The value to convert.
+      \returns If CaseSensitivity::csDefault, then returns the default
+      file name case sensitivity for the platform. Otherwise, just
+      returns the appropriate value from the Qt::CaseSensitivity enum.
+      */
+    static Qt::CaseSensitivity convertCaseSensitivity(
+            CaseSensitivity cs);
+  private:
+    QuaZipPrivate *p;
+    // not (and will not be) implemented
+    QuaZip(const QuaZip& that);
+    // not (and will not be) implemented
+    QuaZip& operator=(const QuaZip& that);
+  public:
+    /// Constructs QuaZip object.
+    /** Call setName() before opening constructed object. */
+    QuaZip();
+    /// Constructs QuaZip object associated with ZIP file \a zipName.
+    QuaZip(const QString& zipName);
+    /// Constructs QuaZip object associated with ZIP file represented by \a ioDevice.
+    /** The IO device must be seekable, otherwise an error will occur when opening. */
+    QuaZip(QIODevice *ioDevice);
+    /// Destroys QuaZip object.
+    /** Calls close() if necessary. */
+    ~QuaZip();
+    /// Opens ZIP file.
+    /**
+     * Argument \a mode specifies open mode of the ZIP archive. See Mode
+     * for details. Note that there is zipOpen2() function in the
+     * ZIP/UNZIP API which accepts \a globalcomment argument, but it
+     * does not use it anywhere, so this open() function does not have this
+     * argument. See setComment() if you need to set global comment.
+     *
+     * If the ZIP file is accessed via explicitly set QIODevice, then
+     * this device is opened in the necessary mode. If the device was
+     * already opened by some other means, then QuaZIP checks if the
+     * open mode is compatible to the mode needed for the requested operation.
+     * If necessary, seeking is performed to position the device properly.
+     *
+     * \return \c true if successful, \c false otherwise.
+     *
+     * \note ZIP/UNZIP API open calls do not return error code - they
+     * just return \c NULL indicating an error. But to make things
+     * easier, quazip.h header defines additional error code \c
+     * UNZ_ERROROPEN and getZipError() will return it if the open call
+     * of the ZIP/UNZIP API returns \c NULL.
+     *
+     * Argument \a ioApi specifies IO function set for ZIP/UNZIP
+     * package to use. See unzip.h, zip.h and ioapi.h for details. Note
+     * that IO API for QuaZip is different from the original package.
+     * The file path argument was changed to be of type \c voidpf, and
+     * QuaZip passes a QIODevice pointer there. This QIODevice is either
+     * set explicitly via setIoDevice() or the QuaZip(QIODevice*)
+     * constructor, or it is created internally when opening the archive
+     * by its file name. The default API (qioapi.cpp) just delegates
+     * everything to the QIODevice API. Not only this allows to use a
+     * QIODevice instead of file name, but also has a nice side effect
+     * of raising the file size limit from 2G to 4G (in non-zip64 archives).
+     *
+     * \note If the zip64 support is needed, the ioApi argument \em must be NULL
+     * because due to the backwards compatibility issues it can be used to
+     * provide a 32-bit API only.
+     *
+     * \note If the \ref QuaZip::setAutoClose() "no-auto-close" feature is used,
+     * then the \a ioApi argument \em should be NULL because the old API
+     * doesn't support the 'fake close' operation, causing slight memory leaks
+     * and other possible troubles (like closing the output device in case
+     * when an error occurs during opening).
+     *
+     * In short: just forget about the \a ioApi argument and you'll be
+     * fine.
+     **/
+    bool open(Mode mode, zlib_filefunc_def *ioApi =NULL);
+    /// Closes ZIP file.
+    /** Call getZipError() to determine if the close was successful.
+     *
+     * If the file was opened by name, then the underlying QIODevice is closed
+     * and deleted.
+     *
+     * If the underlying QIODevice was set explicitly using setIoDevice() or
+     * the appropriate constructor, then it is closed if the auto-close flag
+     * is set (which it is by default). Call setAutoClose() to clear the
+     * auto-close flag if this behavior is undesirable.
+     *
+     * Since Qt 5.1, the QSaveFile was introduced. It breaks the QIODevice API
+     * by making close() private and crashing the application if it is called
+     * from the base class where it is public. It is an excellent example
+     * of poor design that illustrates why you should never ever break
+     * an is-a relationship between the base class and a subclass. QuaZIP
+     * works around this bug by checking if the QIODevice is an instance
+     * of QSaveFile, using qobject_cast<>, and if it is, calls
+     * QSaveFile::commit() instead of close(). It is a really ugly hack,
+     * but at least it makes your programs work instead of crashing. Note that
+     * if the auto-close flag is cleared, then this is a non-issue, and
+     * commit() isn't called.
+      */
+    void close();
+    /// Sets the codec used to encode/decode file names inside archive.
+    /** This is necessary to access files in the ZIP archive created
+     * under Windows with non-latin characters in file names. For
+     * example, file names with cyrillic letters will be in \c IBM866
+     * encoding.
+     **/
+    void setFileNameCodec(QTextCodec *fileNameCodec);
+    /// Sets the codec used to encode/decode file names inside archive.
+    /** \overload
+     * Equivalent to calling setFileNameCodec(QTextCodec::codecForName(codecName));
+     **/
+    void setFileNameCodec(const char *fileNameCodecName);
+    /// Returns the codec used to encode/decode comments inside archive.
+    QTextCodec* getFileNameCodec() const;
+    /// Sets the codec used to encode/decode comments inside archive.
+    /** This codec defaults to locale codec, which is probably ok.
+     **/
+    void setCommentCodec(QTextCodec *commentCodec);
+    /// Sets the codec used to encode/decode comments inside archive.
+    /** \overload
+     * Equivalent to calling setCommentCodec(QTextCodec::codecForName(codecName));
+     **/
+    void setCommentCodec(const char *commentCodecName);
+    /// Returns the codec used to encode/decode comments inside archive.
+    QTextCodec* getCommentCodec() const;
+    /// Returns the name of the ZIP file.
+    /** Returns null string if no ZIP file name has been set, for
+     * example when the QuaZip instance is set up to use a QIODevice
+     * instead.
+     * \sa setZipName(), setIoDevice(), getIoDevice()
+     **/
+    QString getZipName() const;
+    /// Sets the name of the ZIP file.
+    /** Does nothing if the ZIP file is open.
+     *
+     * Does not reset error code returned by getZipError().
+     * \sa setIoDevice(), getIoDevice(), getZipName()
+     **/
+    void setZipName(const QString& zipName);
+    /// Returns the device representing this ZIP file.
+    /** Returns null string if no device has been set explicitly, for
+     * example when opening a ZIP file by name.
+     * \sa setIoDevice(), getZipName(), setZipName()
+     **/
+    QIODevice *getIoDevice() const;
+    /// Sets the device representing the ZIP file.
+    /** Does nothing if the ZIP file is open.
+     *
+     * Does not reset error code returned by getZipError().
+     * \sa getIoDevice(), getZipName(), setZipName()
+     **/
+    void setIoDevice(QIODevice *ioDevice);
+    /// Returns the mode in which ZIP file was opened.
+    Mode getMode() const;
+    /// Returns \c true if ZIP file is open, \c false otherwise.
+    bool isOpen() const;
+    /// Returns the error code of the last operation.
+    /** Returns \c UNZ_OK if the last operation was successful.
+     *
+     * Error code resets to \c UNZ_OK every time you call any function
+     * that accesses something inside ZIP archive, even if it is \c
+     * const (like getEntriesCount()). open() and close() calls reset
+     * error code too. See documentation for the specific functions for
+     * details on error detection.
+     **/
+    int getZipError() const;
+    /// Returns number of the entries in the ZIP central directory.
+    /** Returns negative error code in the case of error. The same error
+     * code will be returned by subsequent getZipError() call.
+     **/
+    int getEntriesCount() const;
+    /// Returns global comment in the ZIP file.
+    QString getComment() const;
+    /// Sets the global comment in the ZIP file.
+    /** The comment will be written to the archive on close operation.
+     * QuaZip makes a distinction between a null QByteArray() comment 
+     * and an empty "" comment in the QuaZip::mdAdd mode. 
+     * A null comment is the default and it means "don't change 
+     * the comment". An empty comment removes the original comment.
+     *
+     * \sa open()
+     **/
+    void setComment(const QString& comment);
+    /// Sets the current file to the first file in the archive.
+    /** Returns \c true on success, \c false otherwise. Call
+     * getZipError() to get the error code.
+     **/
+    bool goToFirstFile();
+    /// Sets the current file to the next file in the archive.
+    /** Returns \c true on success, \c false otherwise. Call
+     * getZipError() to determine if there was an error.
+     *
+     * Should be used only in QuaZip::mdUnzip mode.
+     *
+     * \note If the end of file was reached, getZipError() will return
+     * \c UNZ_OK instead of \c UNZ_END_OF_LIST_OF_FILE. This is to make
+     * things like this easier:
+     * \code
+     * for(bool more=zip.goToFirstFile(); more; more=zip.goToNextFile()) {
+     *   // do something
+     * }
+     * if(zip.getZipError()==UNZ_OK) {
+     *   // ok, there was no error
+     * }
+     * \endcode
+     **/
+    bool goToNextFile();
+    /// Sets current file by its name.
+    /** Returns \c true if successful, \c false otherwise. Argument \a
+     * cs specifies case sensitivity of the file name. Call
+     * getZipError() in the case of a failure to get error code.
+     *
+     * This is not a wrapper to unzLocateFile() function. That is
+     * because I had to implement locale-specific case-insensitive
+     * comparison.
+     *
+     * Here are the differences from the original implementation:
+     *
+     * - If the file was not found, error code is \c UNZ_OK, not \c
+     *   UNZ_END_OF_LIST_OF_FILE (see also goToNextFile()).
+     * - If this function fails, it unsets the current file rather than
+     *   resetting it back to what it was before the call.
+     *
+     * If \a fileName is null string then this function unsets the
+     * current file and return \c true. Note that you should close the
+     * file first if it is open! See
+     * QuaZipFile::QuaZipFile(QuaZip*,QObject*) for the details.
+     *
+     * Should be used only in QuaZip::mdUnzip mode.
+     *
+     * \sa setFileNameCodec(), CaseSensitivity
+     **/
+    bool setCurrentFile(const QString& fileName, CaseSensitivity cs =csDefault);
+    /// Returns \c true if the current file has been set.
+    bool hasCurrentFile() const;
+    /// Retrieves information about the current file.
+    /** Fills the structure pointed by \a info. Returns \c true on
+     * success, \c false otherwise. In the latter case structure pointed
+     * by \a info remains untouched. If there was an error,
+     * getZipError() returns error code.
+     *
+     * Should be used only in QuaZip::mdUnzip mode.
+     *
+     * Does nothing and returns \c false in any of the following cases.
+     * - ZIP is not open;
+     * - ZIP does not have current file.
+     *
+     * In both cases getZipError() returns \c UNZ_OK since there
+     * is no ZIP/UNZIP API call.
+     *
+     * This overload doesn't support zip64, but will work OK on zip64 archives
+     * except that if one of the sizes (compressed or uncompressed) is greater
+     * than 0xFFFFFFFFu, it will be set to exactly 0xFFFFFFFFu.
+     *
+     * \sa getCurrentFileInfo(QuaZipFileInfo64* info)const
+     * \sa QuaZipFileInfo64::toQuaZipFileInfo(QuaZipFileInfo&)const
+     **/
+    bool getCurrentFileInfo(QuaZipFileInfo* info)const;
+    /// Retrieves information about the current file.
+    /** \overload
+     *
+     * This function supports zip64. If the archive doesn't use zip64, it is
+     * completely equivalent to getCurrentFileInfo(QuaZipFileInfo* info)
+     * except for the argument type.
+     *
+     * \sa
+     **/
+    bool getCurrentFileInfo(QuaZipFileInfo64* info)const;
+    /// Returns the current file name.
+    /** Equivalent to calling getCurrentFileInfo() and then getting \c
+     * name field of the QuaZipFileInfo structure, but faster and more
+     * convenient.
+     *
+     * Should be used only in QuaZip::mdUnzip mode.
+     **/
+    QString getCurrentFileName()const;
+    /// Returns \c unzFile handle.
+    /** You can use this handle to directly call UNZIP part of the
+     * ZIP/UNZIP package functions (see unzip.h).
+     *
+     * \warning When using the handle returned by this function, please
+     * keep in mind that QuaZip class is unable to detect any changes
+     * you make in the ZIP file state (e. g. changing current file, or
+     * closing the handle). So please do not do anything with this
+     * handle that is possible to do with the functions of this class.
+     * Or at least return the handle in the original state before
+     * calling some another function of this class (including implicit
+     * destructor calls and calls from the QuaZipFile objects that refer
+     * to this QuaZip instance!). So if you have changed the current
+     * file in the ZIP archive - then change it back or you may
+     * experience some strange behavior or even crashes.
+     **/
+    unzFile getUnzFile();
+    /// Returns \c zipFile handle.
+    /** You can use this handle to directly call ZIP part of the
+     * ZIP/UNZIP package functions (see zip.h). Warnings about the
+     * getUnzFile() function also apply to this function.
+     **/
+    zipFile getZipFile();
+    /// Changes the data descriptor writing mode.
+    /**
+      According to the ZIP format specification, a file inside archive
+      may have a data descriptor immediately following the file
+      data. This is reflected by a special flag in the local file header
+      and in the central directory. By default, QuaZIP sets this flag
+      and writes the data descriptor unless both method and level were
+      set to 0, in which case it operates in 1.0-compatible mode and
+      never writes data descriptors.
+
+      By setting this flag to false, it is possible to disable data
+      descriptor writing, thus increasing compatibility with archive
+      readers that don't understand this feature of the ZIP file format.
+
+      Setting this flag affects all the QuaZipFile instances that are
+      opened after this flag is set.
+
+      The data descriptor writing mode is enabled by default.
+
+      Note that if the ZIP archive is written into a QIODevice for which
+      QIODevice::isSequential() returns \c true, then the data descriptor
+      is mandatory and will be written even if this flag is set to false.
+
+      \param enabled If \c true, enable local descriptor writing,
+      disable it otherwise.
+
+      \sa QuaZipFile::isDataDescriptorWritingEnabled()
+      */
+    void setDataDescriptorWritingEnabled(bool enabled);
+    /// Returns the data descriptor default writing mode.
+    /**
+      \sa setDataDescriptorWritingEnabled()
+      */
+    bool isDataDescriptorWritingEnabled() const;
+    /// Returns a list of files inside the archive.
+    /**
+      \return A list of file names or an empty list if there
+      was an error or if the archive is empty (call getZipError() to
+      figure out which).
+      \sa getFileInfoList()
+      */
+    QStringList getFileNameList() const;
+    /// Returns information list about all files inside the archive.
+    /**
+      \return A list of QuaZipFileInfo objects or an empty list if there
+      was an error or if the archive is empty (call getZipError() to
+      figure out which).
+
+      This function doesn't support zip64, but will still work with zip64
+      archives, converting results using QuaZipFileInfo64::toQuaZipFileInfo().
+      If all file sizes are below 4 GB, it will work just fine.
+
+      \sa getFileNameList()
+      \sa getFileInfoList64()
+      */
+    QList<QuaZipFileInfo> getFileInfoList() const;
+    /// Returns information list about all files inside the archive.
+    /**
+      \overload
+
+      This function supports zip64.
+
+      \sa getFileNameList()
+      \sa getFileInfoList()
+      */
+    QList<QuaZipFileInfo64> getFileInfoList64() const;
+    /// Enables the zip64 mode.
+    /**
+     * @param zip64 If \c true, the zip64 mode is enabled, disabled otherwise.
+     *
+     * Once this is enabled, all new files (until the mode is disabled again)
+     * will be created in the zip64 mode, thus enabling the ability to write
+     * files larger than 4 GB. By default, the zip64 mode is off due to
+     * compatibility reasons.
+     *
+     * Note that this does not affect the ability to read zip64 archives in any
+     * way.
+     *
+     * \sa isZip64Enabled()
+     */
+    void setZip64Enabled(bool zip64);
+    /// Returns whether the zip64 mode is enabled.
+    /**
+     * @return \c true if and only if the zip64 mode is enabled.
+     *
+     * \sa setZip64Enabled()
+     */
+    bool isZip64Enabled() const;
+    /// Returns the auto-close flag.
+    /**
+      @sa setAutoClose()
+      */
+    bool isAutoClose() const;
+    /// Sets or unsets the auto-close flag.
+    /**
+      By default, QuaZIP opens the underlying QIODevice when open() is called,
+      and closes it when close() is called. In some cases, when the device
+      is set explicitly using setIoDevice(), it may be desirable to
+      leave the device open. If the auto-close flag is unset using this method,
+      then the device isn't closed automatically if it was set explicitly.
+
+      If it is needed to clear this flag, it is recommended to do so before
+      opening the archive because otherwise QuaZIP may close the device
+      during the open() call if an error is encountered after the device
+      is opened.
+
+      If the device was not set explicitly, but rather the setZipName() or
+      the appropriate constructor was used to set the ZIP file name instead,
+      then the auto-close flag has no effect, and the internal device
+      is closed nevertheless because there is no other way to close it.
+
+      @sa isAutoClose()
+      @sa setIoDevice()
+      */
+    void setAutoClose(bool autoClose) const;
+    /// Sets the default file name codec to use.
+    /**
+     * The default codec is used by the constructors, so calling this function
+     * won't affect the QuaZip instances already created at that moment.
+     *
+     * The codec specified here can be overriden by calling setFileNameCodec().
+     * If neither function is called, QTextCodec::codecForLocale() will be used
+     * to decode or encode file names. Use this function with caution if
+     * the application uses other libraries that depend on QuaZIP. Those
+     * libraries can either call this function by themselves, thus overriding
+     * your setting or can rely on the default encoding, thus failing
+     * mysteriously if you change it. For these reasons, it isn't recommended
+     * to use this function if you are developing a library, not an application.
+     * Instead, ask your library users to call it in case they need specific
+     * encoding.
+     *
+     * In most cases, using setFileNameCodec() instead is the right choice.
+     * However, if you depend on third-party code that uses QuaZIP, then the
+     * reasons stated above can actually become a reason to use this function
+     * in case the third-party code in question fails because it doesn't
+     * understand the encoding you need and doesn't provide a way to specify it.
+     * This applies to the JlCompress class as well, as it was contributed and
+     * doesn't support explicit encoding parameters.
+     *
+     * In short: use setFileNameCodec() when you can, resort to
+     * setDefaultFileNameCodec() when you don't have access to the QuaZip
+     * instance.
+     *
+     * @param codec The codec to use by default. If NULL, resets to default.
+     */
+    static void setDefaultFileNameCodec(QTextCodec *codec);
+    /**
+     * @overload
+     * Equivalent to calling
+     * setDefltFileNameCodec(QTextCodec::codecForName(codecName)).
+     */
+    static void setDefaultFileNameCodec(const char *codecName);
+};
+
+#endif
diff --git a/3rdparty/quazip-0.7/quazip/quazip.pri b/3rdparty/quazip-0.7/quazip/quazip.pri
new file mode 100644
index 0000000..1a9db99
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazip.pri
@@ -0,0 +1,33 @@
+INCLUDEPATH += $$PWD
+DEPENDPATH += $$PWD
+HEADERS += \
+        $$PWD/crypt.h \
+        $$PWD/ioapi.h \
+        $$PWD/JlCompress.h \
+        $$PWD/quaadler32.h \
+        $$PWD/quachecksum32.h \
+        $$PWD/quacrc32.h \
+        $$PWD/quagzipfile.h \
+        $$PWD/quaziodevice.h \
+        $$PWD/quazipdir.h \
+        $$PWD/quazipfile.h \
+        $$PWD/quazipfileinfo.h \
+        $$PWD/quazip_global.h \
+        $$PWD/quazip.h \
+        $$PWD/quazipnewinfo.h \
+        $$PWD/unzip.h \
+        $$PWD/zip.h
+
+SOURCES += $$PWD/qioapi.cpp \
+           $$PWD/JlCompress.cpp \
+           $$PWD/quaadler32.cpp \
+           $$PWD/quacrc32.cpp \
+           $$PWD/quagzipfile.cpp \
+           $$PWD/quaziodevice.cpp \
+           $$PWD/quazip.cpp \
+           $$PWD/quazipdir.cpp \
+           $$PWD/quazipfile.cpp \
+           $$PWD/quazipfileinfo.cpp \
+           $$PWD/quazipnewinfo.cpp \
+           $$PWD/unzip.c \
+           $$PWD/zip.c
diff --git a/3rdparty/quazip-0.7/quazip/quazip.pro b/3rdparty/quazip-0.7/quazip/quazip.pro
new file mode 100644
index 0000000..c869e59
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazip.pro
@@ -0,0 +1,81 @@
+TEMPLATE = lib
+CONFIG += qt warn_on
+QT -= gui
+
+# The ABI version.
+
+!win32:VERSION = 1.0.0
+
+# 1.0.0 is the first stable ABI.
+# The next binary incompatible change will be 2.0.0 and so on.
+# The existing QuaZIP policy on changing ABI requires to bump the
+# major version of QuaZIP itself as well. Note that there may be
+# other reasons for chaging the major version of QuaZIP, so
+# in case where there is a QuaZIP major version bump but no ABI change,
+# the VERSION variable will stay the same.
+
+# For example:
+
+# QuaZIP 1.0 is released after some 0.x, keeping binary compatibility.
+# VERSION stays 1.0.0.
+# Then some binary incompatible change is introduced. QuaZIP goes up to
+# 2.0, VERSION to 2.0.0.
+# And so on.
+
+
+# This one handles dllimport/dllexport directives.
+DEFINES += QUAZIP_BUILD
+
+# You'll need to define this one manually if using a build system other
+# than qmake or using QuaZIP sources directly in your project.
+CONFIG(staticlib): DEFINES += QUAZIP_STATIC
+
+# Input
+include(quazip.pri)
+
+unix:!symbian {
+    headers.path=$$PREFIX/include/quazip
+    headers.files=$$HEADERS
+    target.path=$$PREFIX/lib/$${LIB_ARCH}
+    INSTALLS += headers target
+
+	OBJECTS_DIR=.obj
+	MOC_DIR=.moc
+	
+}
+
+win32 {
+    headers.path=$$PREFIX/include/quazip
+    headers.files=$$HEADERS
+    target.path=$$PREFIX/lib
+    INSTALLS += headers target
+    # workaround for qdatetime.h macro bug
+    DEFINES += NOMINMAX
+}
+
+
+symbian {
+
+    # Note, on Symbian you may run into troubles with LGPL.
+    # The point is, if your application uses some version of QuaZip,
+    # and a newer binary compatible version of QuaZip is released, then
+    # the users of your application must be able to relink it with the
+    # new QuaZip version. For example, to take advantage of some QuaZip
+    # bug fixes.
+
+    # This is probably best achieved by building QuaZip as a static
+    # library and providing linkable object files of your application,
+    # so users can relink it.
+
+    CONFIG += staticlib
+    CONFIG += debug_and_release
+
+    LIBS += -lezip
+
+    #Export headers to SDK Epoc32/include directory
+    exportheaders.sources = $$HEADERS
+    exportheaders.path = quazip
+    for(header, exportheaders.sources) {
+        BLD_INF_RULES.prj_exports += "$$header $$exportheaders.path/$$basename(header)"
+    }
+}
diff --git a/3rdparty/quazip-0.7/quazip/quazip.sln b/3rdparty/quazip-0.7/quazip/quazip.sln
new file mode 100644
index 0000000..549f3a4
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazip.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual C++ Express 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "quazip", "quazip.vcproj", "{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}.Debug|Win32.Build.0 = Debug|Win32
+		{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}.Release|Win32.ActiveCfg = Release|Win32
+		{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/3rdparty/quazip-0.7/quazip/quazip.vcproj b/3rdparty/quazip-0.7/quazip/quazip.vcproj
new file mode 100644
index 0000000..8034007
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazip.vcproj
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="quazip"
+	ProjectGUID="{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="0"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="Debug"
+			ConfigurationType="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;QUAZIP_BUILD"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="QtCored4.lib"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="Release"
+			ConfigurationType="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;QUAZIP_BUILD"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="QtCore4.lib"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath=".\crypt.h"
+				>
+			</File>
+			<File
+				RelativePath=".\ioapi.h"
+				>
+			</File>
+			<File
+				RelativePath=".\JlCompress.h"
+				>
+			</File>
+			<File
+				RelativePath=".\quaadler32.h"
+				>
+			</File>
+			<File
+				RelativePath=".\quachecksum32.h"
+				>
+			</File>
+			<File
+				RelativePath=".\quacrc32.h"
+				>
+			</File>
+			<File
+				RelativePath=".\quagzipfile.h"
+				>
+			</File>
+			<File
+				RelativePath=".\quaziodevice.h"
+				>
+			</File>
+			<File
+				RelativePath=".\quazip.h"
+				>
+			</File>
+			<File
+				RelativePath=".\quazip_global.h"
+				>
+			</File>
+			<File
+				RelativePath=".\quazipdir.h"
+				>
+			</File>
+			<File
+				RelativePath=".\quazipfile.h"
+				>
+			</File>
+			<File
+				RelativePath=".\quazipfileinfo.h"
+				>
+			</File>
+			<File
+				RelativePath=".\quazipnewinfo.h"
+				>
+			</File>
+			<File
+				RelativePath=".\unzip.h"
+				>
+			</File>
+			<File
+				RelativePath=".\zip.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\JlCompress.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\moc_quagzipfile.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\moc_quaziodevice.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\moc_quazipfile.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\qioapi.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\quaadler32.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\quacrc32.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\quagzipfile.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\quaziodevice.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\quazip.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\quazipdir.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\quazipfile.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\quazipfileinfo.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\quazipnewinfo.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\unzip.c"
+				>
+			</File>
+			<File
+				RelativePath=".\zip.c"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/3rdparty/quazip-0.7/quazip/quazip.vcxproj b/3rdparty/quazip-0.7/quazip/quazip.vcxproj
new file mode 100644
index 0000000..5400a6d
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazip.vcxproj
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\..\qt4.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\..\qt4.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;QUAZIP_BUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>QtCored4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;QUAZIP_BUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>QtCore4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="crypt.h" />
+    <ClInclude Include="ioapi.h" />
+    <ClInclude Include="JlCompress.h" />
+    <ClInclude Include="quaadler32.h" />
+    <ClInclude Include="quachecksum32.h" />
+    <ClInclude Include="quacrc32.h" />
+    <ClInclude Include="quagzipfile.h" />
+    <ClInclude Include="quaziodevice.h" />
+    <ClInclude Include="quazip.h" />
+    <ClInclude Include="quazip_global.h" />
+    <ClInclude Include="quazipdir.h" />
+    <ClInclude Include="quazipfile.h" />
+    <ClInclude Include="quazipfileinfo.h" />
+    <ClInclude Include="quazipnewinfo.h" />
+    <ClInclude Include="unzip.h" />
+    <ClInclude Include="zip.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="JlCompress.cpp" />
+    <ClCompile Include="moc\moc_quagzipfile.cpp" />
+    <ClCompile Include="moc\moc_quaziodevice.cpp" />
+    <ClCompile Include="moc\moc_quazipfile.cpp" />
+    <ClCompile Include="qioapi.cpp" />
+    <ClCompile Include="quaadler32.cpp" />
+    <ClCompile Include="quacrc32.cpp" />
+    <ClCompile Include="quagzipfile.cpp" />
+    <ClCompile Include="quaziodevice.cpp" />
+    <ClCompile Include="quazip.cpp" />
+    <ClCompile Include="quazipdir.cpp" />
+    <ClCompile Include="quazipfile.cpp" />
+    <ClCompile Include="quazipfileinfo.cpp" />
+    <ClCompile Include="quazipnewinfo.cpp" />
+    <ClCompile Include="unzip.c" />
+    <ClCompile Include="zip.c" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/quazip/quazip.vcxproj.filters b/3rdparty/quazip-0.7/quazip/quazip.vcxproj.filters
new file mode 100644
index 0000000..68677d5
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazip.vcxproj.filters
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx</Extensions>
+    </Filter>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="crypt.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="ioapi.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="JlCompress.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="quaadler32.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="quachecksum32.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="quacrc32.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="quagzipfile.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="quaziodevice.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="quazip.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="quazip_global.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="quazipdir.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="quazipfile.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="quazipfileinfo.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="quazipnewinfo.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="unzip.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="zip.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="JlCompress.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="qioapi.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="quaadler32.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="quacrc32.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="quagzipfile.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="quaziodevice.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="quazip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="quazipdir.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="quazipfile.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="quazipfileinfo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="quazipnewinfo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="unzip.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="zip.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="moc\moc_quagzipfile.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="moc\moc_quaziodevice.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="moc\moc_quazipfile.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/quazip/quazip_global.h b/3rdparty/quazip-0.7/quazip/quazip_global.h
new file mode 100644
index 0000000..7ea5cd8
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazip_global.h
@@ -0,0 +1,59 @@
+#ifndef QUAZIP_GLOBAL_H
+#define QUAZIP_GLOBAL_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QtCore/qglobal.h>
+
+/**
+  This is automatically defined when building a static library, but when
+  including QuaZip sources directly into a project, QUAZIP_STATIC should
+  be defined explicitly to avoid possible troubles with unnecessary
+  importing/exporting.
+  */
+#ifdef QUAZIP_STATIC
+#define QUAZIP_EXPORT
+#else
+/**
+ * When building a DLL with MSVC, QUAZIP_BUILD must be defined.
+ * qglobal.h takes care of defining Q_DECL_* correctly for msvc/gcc.
+ */
+#if defined(QUAZIP_BUILD)
+	#define QUAZIP_EXPORT Q_DECL_EXPORT
+#else
+	#define QUAZIP_EXPORT Q_DECL_IMPORT
+#endif
+#endif // QUAZIP_STATIC
+
+#ifdef __GNUC__
+#define UNUSED __attribute__((__unused__))
+#else
+#define UNUSED
+#endif
+
+#define QUAZIP_EXTRA_NTFS_MAGIC 0x000Au
+#define QUAZIP_EXTRA_NTFS_TIME_MAGIC 0x0001u
+
+#endif // QUAZIP_GLOBAL_H
diff --git a/3rdparty/quazip-0.7/quazip/quazipdir.cpp b/3rdparty/quazip-0.7/quazip/quazipdir.cpp
new file mode 100644
index 0000000..e1a2b94
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazipdir.cpp
@@ -0,0 +1,567 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "quazipdir.h"
+
+#include <QSet>
+#include <QSharedData>
+
+/// \cond internal
+class QuaZipDirPrivate: public QSharedData {
+    friend class QuaZipDir;
+private:
+    QuaZipDirPrivate(QuaZip *zip, const QString &dir = QString()):
+        zip(zip), dir(dir), caseSensitivity(QuaZip::csDefault),
+        filter(QDir::NoFilter), sorting(QDir::NoSort) {}
+    QuaZip *zip;
+    QString dir;
+    QuaZip::CaseSensitivity caseSensitivity;
+    QDir::Filters filter;
+    QStringList nameFilters;
+    QDir::SortFlags sorting;
+    template<typename TFileInfoList>
+    bool entryInfoList(QStringList nameFilters, QDir::Filters filter,
+        QDir::SortFlags sort, TFileInfoList &result) const;
+    inline QString simplePath() const {return QDir::cleanPath(dir);}
+};
+/// \endcond
+
+QuaZipDir::QuaZipDir(const QuaZipDir &that):
+    d(that.d)
+{
+}
+
+QuaZipDir::QuaZipDir(QuaZip *zip, const QString &dir):
+    d(new QuaZipDirPrivate(zip, dir))
+{
+    if (d->dir.startsWith('/'))
+        d->dir = d->dir.mid(1);
+}
+
+QuaZipDir::~QuaZipDir()
+{
+}
+
+bool QuaZipDir::operator==(const QuaZipDir &that)
+{
+    return d->zip == that.d->zip && d->dir == that.d->dir;
+}
+
+QuaZipDir& QuaZipDir::operator=(const QuaZipDir &that)
+{
+    this->d = that.d;
+    return *this;
+}
+
+QString QuaZipDir::operator[](int pos) const
+{
+    return entryList().at(pos);
+}
+
+QuaZip::CaseSensitivity QuaZipDir::caseSensitivity() const
+{
+    return d->caseSensitivity;
+}
+
+bool QuaZipDir::cd(const QString &directoryName)
+{
+    if (directoryName == "/") {
+        d->dir = "";
+        return true;
+    }
+    QString dirName = directoryName;
+    if (dirName.endsWith('/'))
+        dirName.chop(1);
+    if (dirName.contains('/')) {
+        QuaZipDir dir(*this);
+        if (dirName.startsWith('/')) {
+#ifdef QUAZIP_QUAZIPDIR_DEBUG
+            qDebug("QuaZipDir::cd(%s): going to /",
+                    dirName.toUtf8().constData());
+#endif
+            if (!dir.cd("/"))
+                return false;
+        }
+        QStringList path = dirName.split('/', QString::SkipEmptyParts);
+        for (QStringList::const_iterator i = path.constBegin();
+                i != path.end();
+                ++i) {
+            const QString &step = *i;
+#ifdef QUAZIP_QUAZIPDIR_DEBUG
+            qDebug("QuaZipDir::cd(%s): going to %s",
+                    dirName.toUtf8().constData(),
+                    step.toUtf8().constData());
+#endif
+            if (!dir.cd(step))
+                return false;
+        }
+        d->dir = dir.path();
+        return true;
+    } else { // no '/'
+        if (dirName == ".") {
+            return true;
+        } else if (dirName == "..") {
+            if (isRoot()) {
+                return false;
+            } else {
+                int slashPos = d->dir.lastIndexOf('/');
+                if (slashPos == -1) {
+                    d->dir = "";
+                } else {
+                    d->dir = d->dir.left(slashPos);
+                }
+                return true;
+            }
+        } else { // a simple subdirectory
+            if (exists(dirName)) {
+                if (isRoot())
+                    d->dir = dirName;
+                else
+                    d->dir += "/" + dirName;
+                return true;
+            } else {
+                return false;
+            }
+        }
+    }
+}
+
+bool QuaZipDir::cdUp()
+{
+    return cd("..");
+}
+
+uint QuaZipDir::count() const
+{
+    return entryList().count();
+}
+
+QString QuaZipDir::dirName() const
+{
+    return QDir(d->dir).dirName();
+}
+
+QuaZipFileInfo64 QuaZipDir_getFileInfo(QuaZip *zip, bool *ok,
+                                  const QString &relativeName,
+                                  bool isReal)
+{
+    QuaZipFileInfo64 info;
+    if (isReal) {
+        *ok = zip->getCurrentFileInfo(&info);
+    } else {
+        *ok = true;
+        info.compressedSize = 0;
+        info.crc = 0;
+        info.diskNumberStart = 0;
+        info.externalAttr = 0;
+        info.flags = 0;
+        info.internalAttr = 0;
+        info.method = 0;
+        info.uncompressedSize = 0;
+        info.versionCreated = info.versionNeeded = 0;
+    }
+    info.name = relativeName;
+    return info;
+}
+
+static void QuaZipDir_convertInfoList(const QList<QuaZipFileInfo64> &from,
+                                      QList<QuaZipFileInfo64> &to)
+{
+    to = from;
+}
+
+static void QuaZipDir_convertInfoList(const QList<QuaZipFileInfo64> &from,
+                                      QStringList &to)
+{
+    to.clear();
+    for (QList<QuaZipFileInfo64>::const_iterator i = from.constBegin();
+            i != from.constEnd();
+            ++i) {
+        to.append(i->name);
+    }
+}
+
+static void QuaZipDir_convertInfoList(const QList<QuaZipFileInfo64> &from,
+                                      QList<QuaZipFileInfo> &to)
+{
+    to.clear();
+    for (QList<QuaZipFileInfo64>::const_iterator i = from.constBegin();
+            i != from.constEnd();
+            ++i) {
+        QuaZipFileInfo info32;
+        i->toQuaZipFileInfo(info32);
+        to.append(info32);
+    }
+}
+
+/// \cond internal
+/**
+  An utility class to restore the current file.
+  */
+class QuaZipDirRestoreCurrent {
+public:
+    inline QuaZipDirRestoreCurrent(QuaZip *zip):
+        zip(zip), currentFile(zip->getCurrentFileName()) {}
+    inline ~QuaZipDirRestoreCurrent()
+    {
+        zip->setCurrentFile(currentFile);
+    }
+private:
+    QuaZip *zip;
+    QString currentFile;
+};
+/// \endcond
+
+/// \cond internal
+class QuaZipDirComparator
+{
+    private:
+        QDir::SortFlags sort;
+        static QString getExtension(const QString &name);
+        int compareStrings(const QString &string1, const QString &string2);
+    public:
+        inline QuaZipDirComparator(QDir::SortFlags sort): sort(sort) {}
+        bool operator()(const QuaZipFileInfo64 &info1, const QuaZipFileInfo64 &info2);
+};
+
+QString QuaZipDirComparator::getExtension(const QString &name)
+{
+    if (name.endsWith('.') || name.indexOf('.', 1) == -1) {
+        return "";
+    } else {
+        return name.mid(name.lastIndexOf('.') + 1);
+    }
+
+}
+
+int QuaZipDirComparator::compareStrings(const QString &string1,
+        const QString &string2)
+{
+    if (sort & QDir::LocaleAware) {
+        if (sort & QDir::IgnoreCase) {
+            return string1.toLower().localeAwareCompare(string2.toLower());
+        } else {
+            return string1.localeAwareCompare(string2);
+        }
+    } else {
+        return string1.compare(string2, (sort & QDir::IgnoreCase)
+                ? Qt::CaseInsensitive : Qt::CaseSensitive);
+    }
+}
+
+bool QuaZipDirComparator::operator()(const QuaZipFileInfo64 &info1,
+        const QuaZipFileInfo64 &info2)
+{
+    QDir::SortFlags order = sort
+        & (QDir::Name | QDir::Time | QDir::Size | QDir::Type);
+    if ((sort & QDir::DirsFirst) == QDir::DirsFirst
+            || (sort & QDir::DirsLast) == QDir::DirsLast) {
+        if (info1.name.endsWith('/') && !info2.name.endsWith('/'))
+            return (sort & QDir::DirsFirst) == QDir::DirsFirst;
+        else if (!info1.name.endsWith('/') && info2.name.endsWith('/'))
+            return (sort & QDir::DirsLast) == QDir::DirsLast;
+    }
+    bool result;
+    int extDiff;
+    switch (order) {
+        case QDir::Name:
+            result = compareStrings(info1.name, info2.name) < 0;
+            break;
+        case QDir::Type:
+            extDiff = compareStrings(getExtension(info1.name),
+                    getExtension(info2.name));
+            if (extDiff == 0) {
+                result = compareStrings(info1.name, info2.name) < 0;
+            } else {
+                result = extDiff < 0;
+            }
+            break;
+        case QDir::Size:
+            if (info1.uncompressedSize == info2.uncompressedSize) {
+                result = compareStrings(info1.name, info2.name) < 0;
+            } else {
+                result = info1.uncompressedSize < info2.uncompressedSize;
+            }
+            break;
+        case QDir::Time:
+            if (info1.dateTime == info2.dateTime) {
+                result = compareStrings(info1.name, info2.name) < 0;
+            } else {
+                result = info1.dateTime < info2.dateTime;
+            }
+            break;
+        default:
+            qWarning("QuaZipDirComparator(): Invalid sort mode 0x%2X",
+                    static_cast<unsigned>(sort));
+            return false;
+    }
+    return (sort & QDir::Reversed) ? !result : result;
+}
+
+template<typename TFileInfoList>
+bool QuaZipDirPrivate::entryInfoList(QStringList nameFilters, 
+    QDir::Filters filter, QDir::SortFlags sort, TFileInfoList &result) const
+{
+    QString basePath = simplePath();
+    if (!basePath.isEmpty())
+        basePath += "/";
+    int baseLength = basePath.length();
+    result.clear();
+    QuaZipDirRestoreCurrent saveCurrent(zip);
+    if (!zip->goToFirstFile()) {
+        return zip->getZipError() == UNZ_OK;
+    }
+    QDir::Filters fltr = filter;
+    if (fltr == QDir::NoFilter)
+        fltr = this->filter;
+    if (fltr == QDir::NoFilter)
+        fltr = QDir::AllEntries;
+    QStringList nmfltr = nameFilters;
+    if (nmfltr.isEmpty())
+        nmfltr = this->nameFilters;
+    QSet<QString> dirsFound;
+    QList<QuaZipFileInfo64> list;
+    do {
+        QString name = zip->getCurrentFileName();
+        if (!name.startsWith(basePath))
+            continue;
+        QString relativeName = name.mid(baseLength);
+        if (relativeName.isEmpty())
+            continue;
+        bool isDir = false;
+        bool isReal = true;
+        if (relativeName.contains('/')) {
+            int indexOfSlash = relativeName.indexOf('/');
+            // something like "subdir/"
+            isReal = indexOfSlash == relativeName.length() - 1;
+            relativeName = relativeName.left(indexOfSlash + 1);
+            if (dirsFound.contains(relativeName))
+                continue;
+            isDir = true;
+        }
+        dirsFound.insert(relativeName);
+        if ((fltr & QDir::Dirs) == 0 && isDir)
+            continue;
+        if ((fltr & QDir::Files) == 0 && !isDir)
+            continue;
+        if (!nmfltr.isEmpty() && !QDir::match(nmfltr, relativeName))
+            continue;
+        bool ok;
+        QuaZipFileInfo64 info = QuaZipDir_getFileInfo(zip, &ok, relativeName,
+            isReal);
+        if (!ok) {
+            return false;
+        }
+        list.append(info);
+    } while (zip->goToNextFile());
+    QDir::SortFlags srt = sort;
+    if (srt == QDir::NoSort)
+        srt = sorting;
+#ifdef QUAZIP_QUAZIPDIR_DEBUG
+    qDebug("QuaZipDirPrivate::entryInfoList(): before sort:");
+    foreach (QuaZipFileInfo64 info, list) {
+        qDebug("%s\t%s", info.name.toUtf8().constData(),
+                info.dateTime.toString(Qt::ISODate).toUtf8().constData());
+    }
+#endif
+    if (srt != QDir::NoSort && (srt & QDir::Unsorted) != QDir::Unsorted) {
+        if (QuaZip::convertCaseSensitivity(caseSensitivity)
+                == Qt::CaseInsensitive)
+            srt |= QDir::IgnoreCase;
+        QuaZipDirComparator lessThan(srt);
+        qSort(list.begin(), list.end(), lessThan);
+    }
+    QuaZipDir_convertInfoList(list, result);
+    return true;
+}
+
+/// \endcond
+
+QList<QuaZipFileInfo> QuaZipDir::entryInfoList(const QStringList &nameFilters,
+    QDir::Filters filters, QDir::SortFlags sort) const
+{
+    QList<QuaZipFileInfo> result;
+    if (d->entryInfoList(nameFilters, filters, sort, result))
+        return result;
+    else
+        return QList<QuaZipFileInfo>();
+}
+
+QList<QuaZipFileInfo> QuaZipDir::entryInfoList(QDir::Filters filters,
+    QDir::SortFlags sort) const
+{
+    return entryInfoList(QStringList(), filters, sort);
+}
+
+QList<QuaZipFileInfo64> QuaZipDir::entryInfoList64(const QStringList &nameFilters,
+    QDir::Filters filters, QDir::SortFlags sort) const
+{
+    QList<QuaZipFileInfo64> result;
+    if (d->entryInfoList(nameFilters, filters, sort, result))
+        return result;
+    else
+        return QList<QuaZipFileInfo64>();
+}
+
+QList<QuaZipFileInfo64> QuaZipDir::entryInfoList64(QDir::Filters filters,
+    QDir::SortFlags sort) const
+{
+    return entryInfoList64(QStringList(), filters, sort);
+}
+
+QStringList QuaZipDir::entryList(const QStringList &nameFilters,
+    QDir::Filters filters, QDir::SortFlags sort) const
+{
+    QStringList result;
+    if (d->entryInfoList(nameFilters, filters, sort, result))
+        return result;
+    else
+        return QStringList();
+}
+
+QStringList QuaZipDir::entryList(QDir::Filters filters,
+    QDir::SortFlags sort) const
+{
+    return entryList(QStringList(), filters, sort);
+}
+
+bool QuaZipDir::exists(const QString &filePath) const
+{
+    if (filePath == "/" || filePath.isEmpty())
+        return true;
+    QString fileName = filePath;
+    if (fileName.endsWith('/'))
+        fileName.chop(1);
+    if (fileName.contains('/')) {
+        QFileInfo fileInfo(fileName);
+#ifdef QUAZIP_QUAZIPDIR_DEBUG
+        qDebug("QuaZipDir::exists(): fileName=%s, fileInfo.fileName()=%s, "
+                "fileInfo.path()=%s", fileName.toUtf8().constData(),
+                fileInfo.fileName().toUtf8().constData(),
+                fileInfo.path().toUtf8().constData());
+#endif
+        QuaZipDir dir(*this);
+        return dir.cd(fileInfo.path()) && dir.exists(fileInfo.fileName());
+    } else {
+        if (fileName == "..") {
+            return !isRoot();
+        } else if (fileName == ".") {
+            return true;
+        } else {
+            QStringList entries = entryList(QDir::AllEntries, QDir::NoSort);
+#ifdef QUAZIP_QUAZIPDIR_DEBUG
+            qDebug("QuaZipDir::exists(): looking for %s",
+                    fileName.toUtf8().constData());
+            for (QStringList::const_iterator i = entries.constBegin();
+                    i != entries.constEnd();
+                    ++i) {
+                qDebug("QuaZipDir::exists(): entry: %s",
+                        i->toUtf8().constData());
+            }
+#endif
+            Qt::CaseSensitivity cs = QuaZip::convertCaseSensitivity(
+                    d->caseSensitivity);
+            if (filePath.endsWith('/')) {
+                return entries.contains(filePath, cs);
+            } else {
+                return entries.contains(fileName, cs)
+                    || entries.contains(fileName + "/", cs);
+            }
+        }
+    }
+}
+
+bool QuaZipDir::exists() const
+{
+    return QuaZipDir(d->zip).exists(d->dir);
+}
+
+QString QuaZipDir::filePath(const QString &fileName) const
+{
+    return QDir(d->dir).filePath(fileName);
+}
+
+QDir::Filters QuaZipDir::filter()
+{
+    return d->filter;
+}
+
+bool QuaZipDir::isRoot() const
+{
+    return d->simplePath().isEmpty();
+}
+
+QStringList QuaZipDir::nameFilters() const
+{
+    return d->nameFilters;
+}
+
+QString QuaZipDir::path() const
+{
+    return d->dir;
+}
+
+QString QuaZipDir::relativeFilePath(const QString &fileName) const
+{
+    return QDir("/" + d->dir).relativeFilePath(fileName);
+}
+
+void QuaZipDir::setCaseSensitivity(QuaZip::CaseSensitivity caseSensitivity)
+{
+    d->caseSensitivity = caseSensitivity;
+}
+
+void QuaZipDir::setFilter(QDir::Filters filters)
+{
+    d->filter = filters;
+}
+
+void QuaZipDir::setNameFilters(const QStringList &nameFilters)
+{
+    d->nameFilters = nameFilters;
+}
+
+void QuaZipDir::setPath(const QString &path)
+{
+    QString newDir = path;
+    if (newDir == "/") {
+        d->dir = "";
+    } else {
+        if (newDir.endsWith('/'))
+            newDir.chop(1);
+        if (newDir.startsWith('/'))
+            newDir = newDir.mid(1);
+        d->dir = newDir;
+    }
+}
+
+void QuaZipDir::setSorting(QDir::SortFlags sort)
+{
+    d->sorting = sort;
+}
+
+QDir::SortFlags QuaZipDir::sorting() const
+{
+    return d->sorting;
+}
diff --git a/3rdparty/quazip-0.7/quazip/quazipdir.h b/3rdparty/quazip-0.7/quazip/quazipdir.h
new file mode 100644
index 0000000..09d989b
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazipdir.h
@@ -0,0 +1,223 @@
+#ifndef QUAZIP_QUAZIPDIR_H
+#define QUAZIP_QUAZIPDIR_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+class QuaZipDirPrivate;
+
+#include "quazip.h"
+#include "quazipfileinfo.h"
+#include <QDir>
+#include <QList>
+#include <QSharedDataPointer>
+
+/// Provides ZIP archive navigation.
+/**
+* This class is modelled after QDir, and is designed to provide similar
+* features for ZIP archives.
+*
+* The only significant difference from QDir is that the root path is not
+* '/', but an empty string since that's how the file paths are stored in
+* the archive. However, QuaZipDir understands the paths starting with
+* '/'. It is important in a few places:
+*
+* - In the cd() function.
+* - In the constructor.
+* - In the exists() function.
+* - In the relativePath() function.
+*
+* Note that since ZIP uses '/' on all platforms, the '\' separator is
+* not supported.
+*/
+class QUAZIP_EXPORT QuaZipDir {
+private:
+    QSharedDataPointer<QuaZipDirPrivate> d;
+public:
+    /// The copy constructor.
+    QuaZipDir(const QuaZipDir &that);
+    /// Constructs a QuaZipDir instance pointing to the specified directory.
+    /**
+       If \a dir is not specified, points to the root of the archive.
+       The same happens if the \a dir is "/".
+     */
+    QuaZipDir(QuaZip *zip, const QString &dir = QString());
+    /// Destructor.
+    ~QuaZipDir();
+    /// The assignment operator.
+    bool operator==(const QuaZipDir &that);
+    /// operator!=
+    /**
+      \return \c true if either this and \a that use different QuaZip
+      instances or if they point to different directories.
+      */
+    inline bool operator!=(const QuaZipDir &that) {return !operator==(that);}
+    /// operator==
+    /**
+      \return \c true if both this and \a that use the same QuaZip
+      instance and point to the same directory.
+      */
+    QuaZipDir& operator=(const QuaZipDir &that);
+    /// Returns the name of the entry at the specified position.
+    QString operator[](int pos) const;
+    /// Returns the current case sensitivity mode.
+    QuaZip::CaseSensitivity caseSensitivity() const;
+    /// Changes the 'current' directory.
+    /**
+      * If the path starts with '/', it is interpreted as an absolute
+      * path from the root of the archive. Otherwise, it is interpreted
+      * as a path relative to the current directory as was set by the
+      * previous cd() or the constructor.
+      * 
+      * Note that the subsequent path() call will not return a path
+      * starting with '/' in all cases.
+      */
+    bool cd(const QString &dirName);
+    /// Goes up.
+    bool cdUp();
+    /// Returns the number of entries in the directory.
+    uint count() const;
+    /// Returns the current directory name.
+    /**
+      The name doesn't include the path.
+      */
+    QString dirName() const;
+    /// Returns the list of the entries in the directory.
+    /**
+      \param nameFilters The list of file patterns to list, uses the same
+      syntax as QDir.
+      \param filters The entry type filters, only Files and Dirs are
+      accepted.
+      \param sort Sorting mode.
+      */
+    QList<QuaZipFileInfo> entryInfoList(const QStringList &nameFilters,
+        QDir::Filters filters = QDir::NoFilter,
+        QDir::SortFlags sort = QDir::NoSort) const;
+    /// Returns the list of the entries in the directory.
+    /**
+      \overload
+
+      The same as entryInfoList(QStringList(), filters, sort).
+      */
+    QList<QuaZipFileInfo> entryInfoList(QDir::Filters filters = QDir::NoFilter,
+        QDir::SortFlags sort = QDir::NoSort) const;
+    /// Returns the list of the entries in the directory with zip64 support.
+    /**
+      \param nameFilters The list of file patterns to list, uses the same
+      syntax as QDir.
+      \param filters The entry type filters, only Files and Dirs are
+      accepted.
+      \param sort Sorting mode.
+      */
+    QList<QuaZipFileInfo64> entryInfoList64(const QStringList &nameFilters,
+        QDir::Filters filters = QDir::NoFilter,
+        QDir::SortFlags sort = QDir::NoSort) const;
+    /// Returns the list of the entries in the directory with zip64 support.
+    /**
+      \overload
+
+      The same as entryInfoList64(QStringList(), filters, sort).
+      */
+    QList<QuaZipFileInfo64> entryInfoList64(QDir::Filters filters = QDir::NoFilter,
+        QDir::SortFlags sort = QDir::NoSort) const;
+    /// Returns the list of the entry names in the directory.
+    /**
+      The same as entryInfoList(nameFilters, filters, sort), but only
+      returns entry names.
+      */
+    QStringList entryList(const QStringList &nameFilters,
+        QDir::Filters filters = QDir::NoFilter,
+        QDir::SortFlags sort = QDir::NoSort) const;
+    /// Returns the list of the entry names in the directory.
+    /**
+      \overload
+
+      The same as entryList(QStringList(), filters, sort).
+      */
+    QStringList entryList(QDir::Filters filters = QDir::NoFilter,
+        QDir::SortFlags sort = QDir::NoSort) const;
+    /// Returns \c true if the entry with the specified name exists.
+    /**
+      The ".." is considered to exist if the current directory
+      is not root. The "." and "/" are considered to
+      always exist. Paths starting with "/" are relative to
+      the archive root, other paths are relative to the current dir.
+      */
+    bool exists(const QString &fileName) const;
+    /// Return \c true if the directory pointed by this QuaZipDir exists.
+    bool exists() const;
+    /// Returns the full path to the specified file.
+    /**
+      Doesn't check if the file actually exists.
+      */
+    QString filePath(const QString &fileName) const;
+    /// Returns the default filter.
+    QDir::Filters filter();
+    /// Returns if the QuaZipDir points to the root of the archive.
+    /**
+      Not that the root path is the empty string, not '/'.
+     */
+    bool isRoot() const;
+    /// Return the default name filter.
+    QStringList nameFilters() const;
+    /// Returns the path to the current dir.
+    /**
+      The path never starts with '/', and the root path is an empty
+      string.
+      */
+    QString path() const;
+    /// Returns the path to the specified file relative to the current dir.
+    /**
+     * This function is mostly useless, provided only for the sake of
+     *  completeness.
+     *
+     * @param fileName The path to the file, should start with "/"
+     *  if relative to the archive root.
+     * @return Path relative to the current dir.
+     */
+    QString relativeFilePath(const QString &fileName) const;
+    /// Sets the default case sensitivity mode.
+    void setCaseSensitivity(QuaZip::CaseSensitivity caseSensitivity);
+    /// Sets the default filter.
+    void setFilter(QDir::Filters filters);
+    /// Sets the default name filter.
+    void setNameFilters(const QStringList &nameFilters);
+    /// Goes to the specified path.
+    /**
+      The difference from cd() is that this function never checks if the
+      path actually exists and doesn't use relative paths, so it's
+      possible to go to the root directory with setPath("").
+
+      Note that this function still chops the trailing and/or leading
+      '/' and treats a single '/' as the root path (path() will still
+      return an empty string).
+      */
+    void setPath(const QString &path);
+    /// Sets the default sorting mode.
+    void setSorting(QDir::SortFlags sort);
+    /// Returns the default sorting mode.
+    QDir::SortFlags sorting() const;
+};
+
+#endif // QUAZIP_QUAZIPDIR_H
diff --git a/3rdparty/quazip-0.7/quazip/quazipfile.cpp b/3rdparty/quazip-0.7/quazip/quazipfile.cpp
new file mode 100644
index 0000000..3f674b0
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazipfile.cpp
@@ -0,0 +1,502 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant, see
+quazip/(un)zip.h files for details, basically it's zlib license.
+ **/
+
+#include "quazipfile.h"
+
+using namespace std;
+
+/// The implementation class for QuaZip.
+/**
+\internal
+
+This class contains all the private stuff for the QuaZipFile class, thus
+allowing to preserve binary compatibility between releases, the
+technique known as the Pimpl (private implementation) idiom.
+*/
+class QuaZipFilePrivate {
+  friend class QuaZipFile;
+  private:
+    /// The pointer to the associated QuaZipFile instance.
+    QuaZipFile *q;
+    /// The QuaZip object to work with.
+    QuaZip *zip;
+    /// The file name.
+    QString fileName;
+    /// Case sensitivity mode.
+    QuaZip::CaseSensitivity caseSensitivity;
+    /// Whether this file is opened in the raw mode.
+    bool raw;
+    /// Write position to keep track of.
+    /**
+      QIODevice::pos() is broken for non-seekable devices, so we need
+      our own position.
+      */
+    qint64 writePos;
+    /// Uncompressed size to write along with a raw file.
+    quint64 uncompressedSize;
+    /// CRC to write along with a raw file.
+    quint32 crc;
+    /// Whether \ref zip points to an internal QuaZip instance.
+    /**
+      This is true if the archive was opened by name, rather than by
+      supplying an existing QuaZip instance.
+      */
+    bool internal;
+    /// The last error.
+    int zipError;
+    /// Resets \ref zipError.
+    inline void resetZipError() const {setZipError(UNZ_OK);}
+    /// Sets the zip error.
+    /**
+      This function is marked as const although it changes one field.
+      This allows to call it from const functions that don't change
+      anything by themselves.
+      */
+    void setZipError(int zipError) const;
+    /// The constructor for the corresponding QuaZipFile constructor.
+    inline QuaZipFilePrivate(QuaZipFile *q):
+      q(q), zip(NULL), internal(true), zipError(UNZ_OK) {}
+    /// The constructor for the corresponding QuaZipFile constructor.
+    inline QuaZipFilePrivate(QuaZipFile *q, const QString &zipName):
+      q(q), internal(true), zipError(UNZ_OK)
+      {
+        zip=new QuaZip(zipName);
+      }
+    /// The constructor for the corresponding QuaZipFile constructor.
+    inline QuaZipFilePrivate(QuaZipFile *q, const QString &zipName, const QString &fileName,
+        QuaZip::CaseSensitivity cs):
+      q(q), internal(true), zipError(UNZ_OK)
+      {
+        zip=new QuaZip(zipName);
+        this->fileName=fileName;
+        if (this->fileName.startsWith('/'))
+            this->fileName = this->fileName.mid(1);
+        this->caseSensitivity=cs;
+      }
+    /// The constructor for the QuaZipFile constructor accepting a file name.
+    inline QuaZipFilePrivate(QuaZipFile *q, QuaZip *zip):
+      q(q), zip(zip), internal(false), zipError(UNZ_OK) {}
+    /// The destructor.
+    inline ~QuaZipFilePrivate()
+    {
+      if (internal)
+        delete zip;
+    }
+};
+
+QuaZipFile::QuaZipFile():
+  p(new QuaZipFilePrivate(this))
+{
+}
+
+QuaZipFile::QuaZipFile(QObject *parent):
+  QIODevice(parent),
+  p(new QuaZipFilePrivate(this))
+{
+}
+
+QuaZipFile::QuaZipFile(const QString& zipName, QObject *parent):
+  QIODevice(parent),
+  p(new QuaZipFilePrivate(this, zipName))
+{
+}
+
+QuaZipFile::QuaZipFile(const QString& zipName, const QString& fileName,
+    QuaZip::CaseSensitivity cs, QObject *parent):
+  QIODevice(parent),
+  p(new QuaZipFilePrivate(this, zipName, fileName, cs))
+{
+}
+
+QuaZipFile::QuaZipFile(QuaZip *zip, QObject *parent):
+  QIODevice(parent),
+  p(new QuaZipFilePrivate(this, zip))
+{
+}
+
+QuaZipFile::~QuaZipFile()
+{
+  if (isOpen())
+    close();
+  delete p;
+}
+
+QString QuaZipFile::getZipName() const
+{
+  return p->zip==NULL ? QString() : p->zip->getZipName();
+}
+
+QuaZip *QuaZipFile::getZip() const
+{
+    return p->internal ? NULL : p->zip;
+}
+
+QString QuaZipFile::getActualFileName()const
+{
+  p->setZipError(UNZ_OK);
+  if (p->zip == NULL || (openMode() & WriteOnly))
+    return QString();
+  QString name=p->zip->getCurrentFileName();
+  if(name.isNull())
+    p->setZipError(p->zip->getZipError());
+  return name;
+}
+
+void QuaZipFile::setZipName(const QString& zipName)
+{
+  if(isOpen()) {
+    qWarning("QuaZipFile::setZipName(): file is already open - can not set ZIP name");
+    return;
+  }
+  if(p->zip!=NULL && p->internal)
+    delete p->zip;
+  p->zip=new QuaZip(zipName);
+  p->internal=true;
+}
+
+void QuaZipFile::setZip(QuaZip *zip)
+{
+  if(isOpen()) {
+    qWarning("QuaZipFile::setZip(): file is already open - can not set ZIP");
+    return;
+  }
+  if(p->zip!=NULL && p->internal)
+    delete p->zip;
+  p->zip=zip;
+  p->fileName=QString();
+  p->internal=false;
+}
+
+void QuaZipFile::setFileName(const QString& fileName, QuaZip::CaseSensitivity cs)
+{
+  if(p->zip==NULL) {
+    qWarning("QuaZipFile::setFileName(): call setZipName() first");
+    return;
+  }
+  if(!p->internal) {
+    qWarning("QuaZipFile::setFileName(): should not be used when not using internal QuaZip");
+    return;
+  }
+  if(isOpen()) {
+    qWarning("QuaZipFile::setFileName(): can not set file name for already opened file");
+    return;
+  }
+  p->fileName=fileName;
+  if (p->fileName.startsWith('/'))
+      p->fileName = p->fileName.mid(1);
+  p->caseSensitivity=cs;
+}
+
+void QuaZipFilePrivate::setZipError(int zipError) const
+{
+  QuaZipFilePrivate *fakeThis = const_cast<QuaZipFilePrivate*>(this); // non-const
+  fakeThis->zipError=zipError;
+  if(zipError==UNZ_OK)
+    q->setErrorString(QString());
+  else
+    q->setErrorString(QuaZipFile::tr("ZIP/UNZIP API error %1").arg(zipError));
+}
+
+bool QuaZipFile::open(OpenMode mode)
+{
+  return open(mode, NULL);
+}
+
+bool QuaZipFile::open(OpenMode mode, int *method, int *level, bool raw, const char *password)
+{
+  p->resetZipError();
+  if(isOpen()) {
+    qWarning("QuaZipFile::open(): already opened");
+    return false;
+  }
+  if(mode&Unbuffered) {
+    qWarning("QuaZipFile::open(): Unbuffered mode is not supported");
+    return false;
+  }
+  if((mode&ReadOnly)&&!(mode&WriteOnly)) {
+    if(p->internal) {
+      if(!p->zip->open(QuaZip::mdUnzip)) {
+        p->setZipError(p->zip->getZipError());
+        return false;
+      }
+      if(!p->zip->setCurrentFile(p->fileName, p->caseSensitivity)) {
+        p->setZipError(p->zip->getZipError());
+        p->zip->close();
+        return false;
+      }
+    } else {
+      if(p->zip==NULL) {
+        qWarning("QuaZipFile::open(): zip is NULL");
+        return false;
+      }
+      if(p->zip->getMode()!=QuaZip::mdUnzip) {
+        qWarning("QuaZipFile::open(): file open mode %d incompatible with ZIP open mode %d",
+            (int)mode, (int)p->zip->getMode());
+        return false;
+      }
+      if(!p->zip->hasCurrentFile()) {
+        qWarning("QuaZipFile::open(): zip does not have current file");
+        return false;
+      }
+    }
+    p->setZipError(unzOpenCurrentFile3(p->zip->getUnzFile(), method, level, (int)raw, password));
+    if(p->zipError==UNZ_OK) {
+      setOpenMode(mode);
+      p->raw=raw;
+      return true;
+    } else
+      return false;
+  }
+  qWarning("QuaZipFile::open(): open mode %d not supported by this function", (int)mode);
+  return false;
+}
+
+bool QuaZipFile::open(OpenMode mode, const QuaZipNewInfo& info,
+    const char *password, quint32 crc,
+    int method, int level, bool raw,
+    int windowBits, int memLevel, int strategy)
+{
+  zip_fileinfo info_z;
+  p->resetZipError();
+  if(isOpen()) {
+    qWarning("QuaZipFile::open(): already opened");
+    return false;
+  }
+  if((mode&WriteOnly)&&!(mode&ReadOnly)) {
+    if(p->internal) {
+      qWarning("QuaZipFile::open(): write mode is incompatible with internal QuaZip approach");
+      return false;
+    }
+    if(p->zip==NULL) {
+      qWarning("QuaZipFile::open(): zip is NULL");
+      return false;
+    }
+    if(p->zip->getMode()!=QuaZip::mdCreate&&p->zip->getMode()!=QuaZip::mdAppend&&p->zip->getMode()!=QuaZip::mdAdd) {
+      qWarning("QuaZipFile::open(): file open mode %d incompatible with ZIP open mode %d",
+          (int)mode, (int)p->zip->getMode());
+      return false;
+    }
+    info_z.tmz_date.tm_year=info.dateTime.date().year();
+    info_z.tmz_date.tm_mon=info.dateTime.date().month() - 1;
+    info_z.tmz_date.tm_mday=info.dateTime.date().day();
+    info_z.tmz_date.tm_hour=info.dateTime.time().hour();
+    info_z.tmz_date.tm_min=info.dateTime.time().minute();
+    info_z.tmz_date.tm_sec=info.dateTime.time().second();
+    info_z.dosDate = 0;
+    info_z.internal_fa=(uLong)info.internalAttr;
+    info_z.external_fa=(uLong)info.externalAttr;
+    if (p->zip->isDataDescriptorWritingEnabled())
+        zipSetFlags(p->zip->getZipFile(), ZIP_WRITE_DATA_DESCRIPTOR);
+    else
+        zipClearFlags(p->zip->getZipFile(), ZIP_WRITE_DATA_DESCRIPTOR);
+    p->setZipError(zipOpenNewFileInZip3_64(p->zip->getZipFile(),
+          p->zip->getFileNameCodec()->fromUnicode(info.name).constData(), &info_z,
+          info.extraLocal.constData(), info.extraLocal.length(),
+          info.extraGlobal.constData(), info.extraGlobal.length(),
+          p->zip->getCommentCodec()->fromUnicode(info.comment).constData(),
+          method, level, (int)raw,
+          windowBits, memLevel, strategy,
+          password, (uLong)crc, p->zip->isZip64Enabled()));
+    if(p->zipError==UNZ_OK) {
+      p->writePos=0;
+      setOpenMode(mode);
+      p->raw=raw;
+      if(raw) {
+        p->crc=crc;
+        p->uncompressedSize=info.uncompressedSize;
+      }
+      return true;
+    } else
+      return false;
+  }
+  qWarning("QuaZipFile::open(): open mode %d not supported by this function", (int)mode);
+  return false;
+}
+
+bool QuaZipFile::isSequential()const
+{
+  return true;
+}
+
+qint64 QuaZipFile::pos()const
+{
+  if(p->zip==NULL) {
+    qWarning("QuaZipFile::pos(): call setZipName() or setZip() first");
+    return -1;
+  }
+  if(!isOpen()) {
+    qWarning("QuaZipFile::pos(): file is not open");
+    return -1;
+  }
+  if(openMode()&ReadOnly)
+      // QIODevice::pos() is broken for sequential devices,
+      // but thankfully bytesAvailable() returns the number of
+      // bytes buffered, so we know how far ahead we are.
+    return unztell(p->zip->getUnzFile()) - QIODevice::bytesAvailable();
+  else
+    return p->writePos;
+}
+
+bool QuaZipFile::atEnd()const
+{
+  if(p->zip==NULL) {
+    qWarning("QuaZipFile::atEnd(): call setZipName() or setZip() first");
+    return false;
+  }
+  if(!isOpen()) {
+    qWarning("QuaZipFile::atEnd(): file is not open");
+    return false;
+  }
+  if(openMode()&ReadOnly)
+      // the same problem as with pos()
+    return QIODevice::bytesAvailable() == 0
+        && unzeof(p->zip->getUnzFile())==1;
+  else
+    return true;
+}
+
+qint64 QuaZipFile::size()const
+{
+  if(!isOpen()) {
+    qWarning("QuaZipFile::atEnd(): file is not open");
+    return -1;
+  }
+  if(openMode()&ReadOnly)
+    return p->raw?csize():usize();
+  else
+    return p->writePos;
+}
+
+qint64 QuaZipFile::csize()const
+{
+  unz_file_info64 info_z;
+  p->setZipError(UNZ_OK);
+  if(p->zip==NULL||p->zip->getMode()!=QuaZip::mdUnzip) return -1;
+  p->setZipError(unzGetCurrentFileInfo64(p->zip->getUnzFile(), &info_z, NULL, 0, NULL, 0, NULL, 0));
+  if(p->zipError!=UNZ_OK)
+    return -1;
+  return info_z.compressed_size;
+}
+
+qint64 QuaZipFile::usize()const
+{
+  unz_file_info64 info_z;
+  p->setZipError(UNZ_OK);
+  if(p->zip==NULL||p->zip->getMode()!=QuaZip::mdUnzip) return -1;
+  p->setZipError(unzGetCurrentFileInfo64(p->zip->getUnzFile(), &info_z, NULL, 0, NULL, 0, NULL, 0));
+  if(p->zipError!=UNZ_OK)
+    return -1;
+  return info_z.uncompressed_size;
+}
+
+bool QuaZipFile::getFileInfo(QuaZipFileInfo *info)
+{
+    QuaZipFileInfo64 info64;
+    if (getFileInfo(&info64)) {
+        info64.toQuaZipFileInfo(*info);
+        return true;
+    } else {
+        return false;
+    }
+}
+
+bool QuaZipFile::getFileInfo(QuaZipFileInfo64 *info)
+{
+    if(p->zip==NULL||p->zip->getMode()!=QuaZip::mdUnzip) return false;
+    p->zip->getCurrentFileInfo(info);
+    p->setZipError(p->zip->getZipError());
+    return p->zipError==UNZ_OK;
+}
+
+void QuaZipFile::close()
+{
+  p->resetZipError();
+  if(p->zip==NULL||!p->zip->isOpen()) return;
+  if(!isOpen()) {
+    qWarning("QuaZipFile::close(): file isn't open");
+    return;
+  }
+  if(openMode()&ReadOnly)
+    p->setZipError(unzCloseCurrentFile(p->zip->getUnzFile()));
+  else if(openMode()&WriteOnly)
+    if(isRaw()) p->setZipError(zipCloseFileInZipRaw64(p->zip->getZipFile(), p->uncompressedSize, p->crc));
+    else p->setZipError(zipCloseFileInZip(p->zip->getZipFile()));
+  else {
+    qWarning("Wrong open mode: %d", (int)openMode());
+    return;
+  }
+  if(p->zipError==UNZ_OK) setOpenMode(QIODevice::NotOpen);
+  else return;
+  if(p->internal) {
+    p->zip->close();
+    p->setZipError(p->zip->getZipError());
+  }
+}
+
+qint64 QuaZipFile::readData(char *data, qint64 maxSize)
+{
+  p->setZipError(UNZ_OK);
+  qint64 bytesRead=unzReadCurrentFile(p->zip->getUnzFile(), data, (unsigned)maxSize);
+  if (bytesRead < 0) {
+    p->setZipError((int) bytesRead);
+    return -1;
+  }
+  return bytesRead;
+}
+
+qint64 QuaZipFile::writeData(const char* data, qint64 maxSize)
+{
+  p->setZipError(ZIP_OK);
+  p->setZipError(zipWriteInFileInZip(p->zip->getZipFile(), data, (uint)maxSize));
+  if(p->zipError!=ZIP_OK) return -1;
+  else {
+    p->writePos+=maxSize;
+    return maxSize;
+  }
+}
+
+QString QuaZipFile::getFileName() const
+{
+  return p->fileName;
+}
+
+QuaZip::CaseSensitivity QuaZipFile::getCaseSensitivity() const
+{
+  return p->caseSensitivity;
+}
+
+bool QuaZipFile::isRaw() const
+{
+  return p->raw;
+}
+
+int QuaZipFile::getZipError() const
+{
+  return p->zipError;
+}
+
+qint64 QuaZipFile::bytesAvailable() const
+{
+    return size() - pos();
+}
diff --git a/3rdparty/quazip-0.7/quazip/quazipfile.h b/3rdparty/quazip-0.7/quazip/quazipfile.h
new file mode 100644
index 0000000..ec91a40
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazipfile.h
@@ -0,0 +1,456 @@
+#ifndef QUA_ZIPFILE_H
+#define QUA_ZIPFILE_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant, see
+quazip/(un)zip.h files for details, basically it's zlib license.
+ **/
+
+#include <QIODevice>
+
+#include "quazip_global.h"
+#include "quazip.h"
+#include "quazipnewinfo.h"
+
+class QuaZipFilePrivate;
+
+/// A file inside ZIP archive.
+/** \class QuaZipFile quazipfile.h <quazip/quazipfile.h>
+ * This is the most interesting class. Not only it provides C++
+ * interface to the ZIP/UNZIP package, but also integrates it with Qt by
+ * subclassing QIODevice. This makes possible to access files inside ZIP
+ * archive using QTextStream or QDataStream, for example. Actually, this
+ * is the main purpose of the whole QuaZIP library.
+ *
+ * You can either use existing QuaZip instance to create instance of
+ * this class or pass ZIP archive file name to this class, in which case
+ * it will create internal QuaZip object. See constructors' descriptions
+ * for details. Writing is only possible with the existing instance.
+ *
+ * Note that due to the underlying library's limitation it is not
+ * possible to use multiple QuaZipFile instances to open several files
+ * in the same archive at the same time. If you need to write to
+ * multiple files in parallel, then you should write to temporary files
+ * first, then pack them all at once when you have finished writing. If
+ * you need to read multiple files inside the same archive in parallel,
+ * you should extract them all into a temporary directory first.
+ *
+ * \section quazipfile-sequential Sequential or random-access?
+ *
+ * At the first thought, QuaZipFile has fixed size, the start and the
+ * end and should be therefore considered random-access device. But
+ * there is one major obstacle to making it random-access: ZIP/UNZIP API
+ * does not support seek() operation and the only way to implement it is
+ * through reopening the file and re-reading to the required position,
+ * but this is prohibitively slow.
+ *
+ * Therefore, QuaZipFile is considered to be a sequential device. This
+ * has advantage of availability of the ungetChar() operation (QIODevice
+ * does not implement it properly for non-sequential devices unless they
+ * support seek()). Disadvantage is a somewhat strange behaviour of the
+ * size() and pos() functions. This should be kept in mind while using
+ * this class.
+ *
+ **/
+class QUAZIP_EXPORT QuaZipFile: public QIODevice {
+  friend class QuaZipFilePrivate;
+  Q_OBJECT
+  private:
+    QuaZipFilePrivate *p;
+    // these are not supported nor implemented
+    QuaZipFile(const QuaZipFile& that);
+    QuaZipFile& operator=(const QuaZipFile& that);
+  protected:
+    /// Implementation of the QIODevice::readData().
+    qint64 readData(char *data, qint64 maxSize);
+    /// Implementation of the QIODevice::writeData().
+    qint64 writeData(const char *data, qint64 maxSize);
+  public:
+    /// Constructs a QuaZipFile instance.
+    /** You should use setZipName() and setFileName() or setZip() before
+     * trying to call open() on the constructed object.
+     **/
+    QuaZipFile();
+    /// Constructs a QuaZipFile instance.
+    /** \a parent argument specifies this object's parent object.
+     *
+     * You should use setZipName() and setFileName() or setZip() before
+     * trying to call open() on the constructed object.
+     **/
+    QuaZipFile(QObject *parent);
+    /// Constructs a QuaZipFile instance.
+    /** \a parent argument specifies this object's parent object and \a
+     * zipName specifies ZIP archive file name.
+     *
+     * You should use setFileName() before trying to call open() on the
+     * constructed object.
+     *
+     * QuaZipFile constructed by this constructor can be used for read
+     * only access. Use QuaZipFile(QuaZip*,QObject*) for writing.
+     **/
+    QuaZipFile(const QString& zipName, QObject *parent =NULL);
+    /// Constructs a QuaZipFile instance.
+    /** \a parent argument specifies this object's parent object, \a
+     * zipName specifies ZIP archive file name and \a fileName and \a cs
+     * specify a name of the file to open inside archive.
+     *
+     * QuaZipFile constructed by this constructor can be used for read
+     * only access. Use QuaZipFile(QuaZip*,QObject*) for writing.
+     *
+     * \sa QuaZip::setCurrentFile()
+     **/
+    QuaZipFile(const QString& zipName, const QString& fileName,
+        QuaZip::CaseSensitivity cs =QuaZip::csDefault, QObject *parent =NULL);
+    /// Constructs a QuaZipFile instance.
+    /** \a parent argument specifies this object's parent object.
+     *
+     * \a zip is the pointer to the existing QuaZip object. This
+     * QuaZipFile object then can be used to read current file in the
+     * \a zip or to write to the file inside it.
+     *
+     * \warning Using this constructor for reading current file can be
+     * tricky. Let's take the following example:
+     * \code
+     * QuaZip zip("archive.zip");
+     * zip.open(QuaZip::mdUnzip);
+     * zip.setCurrentFile("file-in-archive");
+     * QuaZipFile file(&zip);
+     * file.open(QIODevice::ReadOnly);
+     * // ok, now we can read from the file
+     * file.read(somewhere, some);
+     * zip.setCurrentFile("another-file-in-archive"); // oops...
+     * QuaZipFile anotherFile(&zip);
+     * anotherFile.open(QIODevice::ReadOnly);
+     * anotherFile.read(somewhere, some); // this is still ok...
+     * file.read(somewhere, some); // and this is NOT
+     * \endcode
+     * So, what exactly happens here? When we change current file in the
+     * \c zip archive, \c file that references it becomes invalid
+     * (actually, as far as I understand ZIP/UNZIP sources, it becomes
+     * closed, but QuaZipFile has no means to detect it).
+     *
+     * Summary: do not close \c zip object or change its current file as
+     * long as QuaZipFile is open. Even better - use another constructors
+     * which create internal QuaZip instances, one per object, and
+     * therefore do not cause unnecessary trouble. This constructor may
+     * be useful, though, if you already have a QuaZip instance and do
+     * not want to access several files at once. Good example:
+     * \code
+     * QuaZip zip("archive.zip");
+     * zip.open(QuaZip::mdUnzip);
+     * // first, we need some information about archive itself
+     * QByteArray comment=zip.getComment();
+     * // and now we are going to access files inside it
+     * QuaZipFile file(&zip);
+     * for(bool more=zip.goToFirstFile(); more; more=zip.goToNextFile()) {
+     *   file.open(QIODevice::ReadOnly);
+     *   // do something cool with file here
+     *   file.close(); // do not forget to close!
+     * }
+     * zip.close();
+     * \endcode
+     **/
+    QuaZipFile(QuaZip *zip, QObject *parent =NULL);
+    /// Destroys a QuaZipFile instance.
+    /** Closes file if open, destructs internal QuaZip object (if it
+     * exists and \em is internal, of course).
+     **/
+    virtual ~QuaZipFile();
+    /// Returns the ZIP archive file name.
+    /** If this object was created by passing QuaZip pointer to the
+     * constructor, this function will return that QuaZip's file name
+     * (or null string if that object does not have file name yet).
+     *
+     * Otherwise, returns associated ZIP archive file name or null
+     * string if there are no name set yet.
+     *
+     * \sa setZipName() getFileName()
+     **/
+    QString getZipName()const;
+    /// Returns a pointer to the associated QuaZip object.
+    /** Returns \c NULL if there is no associated QuaZip or it is
+     * internal (so you will not mess with it).
+     **/
+    QuaZip* getZip()const;
+    /// Returns file name.
+    /** This function returns file name you passed to this object either
+     * by using
+     * QuaZipFile(const QString&,const QString&,QuaZip::CaseSensitivity,QObject*)
+     * or by calling setFileName(). Real name of the file may differ in
+     * case if you used case-insensitivity.
+     *
+     * Returns null string if there is no file name set yet. This is the
+     * case when this QuaZipFile operates on the existing QuaZip object
+     * (constructor QuaZipFile(QuaZip*,QObject*) or setZip() was used).
+     * 
+     * \sa getActualFileName
+     **/
+    QString getFileName() const;
+    /// Returns case sensitivity of the file name.
+    /** This function returns case sensitivity argument you passed to
+     * this object either by using
+     * QuaZipFile(const QString&,const QString&,QuaZip::CaseSensitivity,QObject*)
+     * or by calling setFileName().
+     *
+     * Returns unpredictable value if getFileName() returns null string
+     * (this is the case when you did not used setFileName() or
+     * constructor above).
+     *
+     * \sa getFileName
+     **/
+    QuaZip::CaseSensitivity getCaseSensitivity() const;
+    /// Returns the actual file name in the archive.
+    /** This is \em not a ZIP archive file name, but a name of file inside
+     * archive. It is not necessary the same name that you have passed
+     * to the
+     * QuaZipFile(const QString&,const QString&,QuaZip::CaseSensitivity,QObject*),
+     * setFileName() or QuaZip::setCurrentFile() - this is the real file
+     * name inside archive, so it may differ in case if the file name
+     * search was case-insensitive.
+     *
+     * Equivalent to calling getCurrentFileName() on the associated
+     * QuaZip object. Returns null string if there is no associated
+     * QuaZip object or if it does not have a current file yet. And this
+     * is the case if you called setFileName() but did not open the
+     * file yet. So this is perfectly fine:
+     * \code
+     * QuaZipFile file("somezip.zip");
+     * file.setFileName("somefile");
+     * QString name=file.getName(); // name=="somefile"
+     * QString actual=file.getActualFileName(); // actual is null string
+     * file.open(QIODevice::ReadOnly);
+     * QString actual=file.getActualFileName(); // actual can be "SoMeFiLe" on Windows
+     * \endcode
+     *
+     * \sa getZipName(), getFileName(), QuaZip::CaseSensitivity
+     **/
+    QString getActualFileName()const;
+    /// Sets the ZIP archive file name.
+    /** Automatically creates internal QuaZip object and destroys
+     * previously created internal QuaZip object, if any.
+     *
+     * Will do nothing if this file is already open. You must close() it
+     * first.
+     **/
+    void setZipName(const QString& zipName);
+    /// Returns \c true if the file was opened in raw mode.
+    /** If the file is not open, the returned value is undefined.
+     *
+     * \sa open(OpenMode,int*,int*,bool,const char*)
+     **/
+    bool isRaw() const;
+    /// Binds to the existing QuaZip instance.
+    /** This function destroys internal QuaZip object, if any, and makes
+     * this QuaZipFile to use current file in the \a zip object for any
+     * further operations. See QuaZipFile(QuaZip*,QObject*) for the
+     * possible pitfalls.
+     *
+     * Will do nothing if the file is currently open. You must close()
+     * it first.
+     **/
+    void setZip(QuaZip *zip);
+    /// Sets the file name.
+    /** Will do nothing if at least one of the following conditions is
+     * met:
+     * - ZIP name has not been set yet (getZipName() returns null
+     *   string).
+     * - This QuaZipFile is associated with external QuaZip. In this
+     *   case you should call that QuaZip's setCurrentFile() function
+     *   instead!
+     * - File is already open so setting the name is meaningless.
+     *
+     * \sa QuaZip::setCurrentFile
+     **/
+    void setFileName(const QString& fileName, QuaZip::CaseSensitivity cs =QuaZip::csDefault);
+    /// Opens a file for reading.
+    /** Returns \c true on success, \c false otherwise.
+     * Call getZipError() to get error code.
+     *
+     * \note Since ZIP/UNZIP API provides buffered reading only,
+     * QuaZipFile does not support unbuffered reading. So do not pass
+     * QIODevice::Unbuffered flag in \a mode, or open will fail.
+     **/
+    virtual bool open(OpenMode mode);
+    /// Opens a file for reading.
+    /** \overload
+     * Argument \a password specifies a password to decrypt the file. If
+     * it is NULL then this function behaves just like open(OpenMode).
+     **/
+    inline bool open(OpenMode mode, const char *password)
+    {return open(mode, NULL, NULL, false, password);}
+    /// Opens a file for reading.
+    /** \overload
+     * Argument \a password specifies a password to decrypt the file.
+     *
+     * An integers pointed by \a method and \a level will receive codes
+     * of the compression method and level used. See unzip.h.
+     *
+     * If raw is \c true then no decompression is performed.
+     *
+     * \a method should not be \c NULL. \a level can be \c NULL if you
+     * don't want to know the compression level.
+     **/
+    bool open(OpenMode mode, int *method, int *level, bool raw, const char *password =NULL);
+    /// Opens a file for writing.
+    /** \a info argument specifies information about file. It should at
+     * least specify a correct file name. Also, it is a good idea to
+     * specify correct timestamp (by default, current time will be
+     * used). See QuaZipNewInfo.
+     *
+     * The \a password argument specifies the password for crypting. Pass NULL
+     * if you don't need any crypting. The \a crc argument was supposed
+     * to be used for crypting too, but then it turned out that it's
+     * false information, so you need to set it to 0 unless you want to
+     * use the raw mode (see below).
+     *
+     * Arguments \a method and \a level specify compression method and
+     * level. The only method supported is Z_DEFLATED, but you may also
+     * specify 0 for no compression. If all of the files in the archive
+     * use both method 0 and either level 0 is explicitly specified or
+     * data descriptor writing is disabled with
+     * QuaZip::setDataDescriptorWritingEnabled(), then the
+     * resulting archive is supposed to be compatible with the 1.0 ZIP
+     * format version, should you need that. Except for this, \a level
+     * has no other effects with method 0.
+     *
+     * If \a raw is \c true, no compression is performed. In this case,
+     * \a crc and uncompressedSize field of the \a info are required.
+     *
+     * Arguments \a windowBits, \a memLevel, \a strategy provide zlib
+     * algorithms tuning. See deflateInit2() in zlib.
+     **/
+    bool open(OpenMode mode, const QuaZipNewInfo& info,
+        const char *password =NULL, quint32 crc =0,
+        int method =Z_DEFLATED, int level =Z_DEFAULT_COMPRESSION, bool raw =false,
+        int windowBits =-MAX_WBITS, int memLevel =DEF_MEM_LEVEL, int strategy =Z_DEFAULT_STRATEGY);
+    /// Returns \c true, but \ref quazipfile-sequential "beware"!
+    virtual bool isSequential()const;
+    /// Returns current position in the file.
+    /** Implementation of the QIODevice::pos(). When reading, this
+     * function is a wrapper to the ZIP/UNZIP unztell(), therefore it is
+     * unable to keep track of the ungetChar() calls (which is
+     * non-virtual and therefore is dangerous to reimplement). So if you
+     * are using ungetChar() feature of the QIODevice, this function
+     * reports incorrect value until you get back characters which you
+     * ungot.
+     *
+     * When writing, pos() returns number of bytes already written
+     * (uncompressed unless you use raw mode).
+     *
+     * \note Although
+     * \ref quazipfile-sequential "QuaZipFile is a sequential device"
+     * and therefore pos() should always return zero, it does not,
+     * because it would be misguiding. Keep this in mind.
+     *
+     * This function returns -1 if the file or archive is not open.
+     *
+     * Error code returned by getZipError() is not affected by this
+     * function call.
+     **/
+    virtual qint64 pos()const;
+    /// Returns \c true if the end of file was reached.
+    /** This function returns \c false in the case of error. This means
+     * that you called this function on either not open file, or a file
+     * in the not open archive or even on a QuaZipFile instance that
+     * does not even have QuaZip instance associated. Do not do that
+     * because there is no means to determine whether \c false is
+     * returned because of error or because end of file was reached.
+     * Well, on the other side you may interpret \c false return value
+     * as "there is no file open to check for end of file and there is
+     * no end of file therefore".
+     *
+     * When writing, this function always returns \c true (because you
+     * are always writing to the end of file).
+     *
+     * Error code returned by getZipError() is not affected by this
+     * function call.
+     **/
+    virtual bool atEnd()const;
+    /// Returns file size.
+    /** This function returns csize() if the file is open for reading in
+     * raw mode, usize() if it is open for reading in normal mode and
+     * pos() if it is open for writing.
+     *
+     * Returns -1 on error, call getZipError() to get error code.
+     *
+     * \note This function returns file size despite that
+     * \ref quazipfile-sequential "QuaZipFile is considered to be sequential device",
+     * for which size() should return bytesAvailable() instead. But its
+     * name would be very misguiding otherwise, so just keep in mind
+     * this inconsistence.
+     **/
+    virtual qint64 size()const;
+    /// Returns compressed file size.
+    /** Equivalent to calling getFileInfo() and then getting
+     * compressedSize field, but more convenient and faster.
+     *
+     * File must be open for reading before calling this function.
+     *
+     * Returns -1 on error, call getZipError() to get error code.
+     **/
+    qint64 csize()const;
+    /// Returns uncompressed file size.
+    /** Equivalent to calling getFileInfo() and then getting
+     * uncompressedSize field, but more convenient and faster. See
+     * getFileInfo() for a warning.
+     *
+     * File must be open for reading before calling this function.
+     *
+     * Returns -1 on error, call getZipError() to get error code.
+     **/
+    qint64 usize()const;
+    /// Gets information about current file.
+    /** This function does the same thing as calling
+     * QuaZip::getCurrentFileInfo() on the associated QuaZip object,
+     * but you can not call getCurrentFileInfo() if the associated
+     * QuaZip is internal (because you do not have access to it), while
+     * you still can call this function in that case.
+     *
+     * File must be open for reading before calling this function.
+     *
+     * \return \c false in the case of an error.
+     *
+     * This function doesn't support zip64, but will still work fine on zip64
+     * archives if file sizes are below 4 GB, otherwise the values will be set
+     * as if converted using QuaZipFileInfo64::toQuaZipFileInfo().
+     *
+     * \sa getFileInfo(QuaZipFileInfo64*)
+     **/
+    bool getFileInfo(QuaZipFileInfo *info);
+    /// Gets information about current file with zip64 support.
+    /**
+     * @overload
+     *
+     * \sa getFileInfo(QuaZipFileInfo*)
+     */
+    bool getFileInfo(QuaZipFileInfo64 *info);
+    /// Closes the file.
+    /** Call getZipError() to determine if the close was successful.
+     **/
+    virtual void close();
+    /// Returns the error code returned by the last ZIP/UNZIP API call.
+    int getZipError() const;
+    /// Returns the number of bytes available for reading.
+    virtual qint64 bytesAvailable() const;
+};
+
+#endif
diff --git a/3rdparty/quazip-0.7/quazip/quazipfileinfo.cpp b/3rdparty/quazip-0.7/quazip/quazipfileinfo.cpp
new file mode 100644
index 0000000..a855e01
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazipfileinfo.cpp
@@ -0,0 +1,176 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "quazipfileinfo.h"
+
+static QFile::Permissions permissionsFromExternalAttr(quint32 externalAttr) {
+    quint32 uPerm = (externalAttr & 0xFFFF0000u) >> 16;
+    QFile::Permissions perm = 0;
+    if ((uPerm & 0400) != 0)
+        perm |= QFile::ReadOwner;
+    if ((uPerm & 0200) != 0)
+        perm |= QFile::WriteOwner;
+    if ((uPerm & 0100) != 0)
+        perm |= QFile::ExeOwner;
+    if ((uPerm & 0040) != 0)
+        perm |= QFile::ReadGroup;
+    if ((uPerm & 0020) != 0)
+        perm |= QFile::WriteGroup;
+    if ((uPerm & 0010) != 0)
+        perm |= QFile::ExeGroup;
+    if ((uPerm & 0004) != 0)
+        perm |= QFile::ReadOther;
+    if ((uPerm & 0002) != 0)
+        perm |= QFile::WriteOther;
+    if ((uPerm & 0001) != 0)
+        perm |= QFile::ExeOther;
+    return perm;
+
+}
+
+QFile::Permissions QuaZipFileInfo::getPermissions() const
+{
+    return permissionsFromExternalAttr(externalAttr);
+}
+
+QFile::Permissions QuaZipFileInfo64::getPermissions() const
+{
+    return permissionsFromExternalAttr(externalAttr);
+}
+
+bool QuaZipFileInfo64::toQuaZipFileInfo(QuaZipFileInfo &info) const
+{
+    bool noOverflow = true;
+    info.name = name;
+    info.versionCreated = versionCreated;
+    info.versionNeeded = versionNeeded;
+    info.flags = flags;
+    info.method = method;
+    info.dateTime = dateTime;
+    info.crc = crc;
+    if (compressedSize > 0xFFFFFFFFu) {
+        info.compressedSize = 0xFFFFFFFFu;
+        noOverflow = false;
+    } else {
+        info.compressedSize = compressedSize;
+    }
+    if (uncompressedSize > 0xFFFFFFFFu) {
+        info.uncompressedSize = 0xFFFFFFFFu;
+        noOverflow = false;
+    } else {
+        info.uncompressedSize = uncompressedSize;
+    }
+    info.diskNumberStart = diskNumberStart;
+    info.internalAttr = internalAttr;
+    info.externalAttr = externalAttr;
+    info.comment = comment;
+    info.extra = extra;
+    return noOverflow;
+}
+
+static QDateTime getNTFSTime(const QByteArray &extra, int position,
+                             int *fineTicks)
+{
+    QDateTime dateTime;
+    for (int i = 0; i <= extra.size() - 4; ) {
+        unsigned type = static_cast<unsigned>(static_cast<unsigned char>(
+                                                  extra.at(i)))
+                | (static_cast<unsigned>(static_cast<unsigned char>(
+                                                  extra.at(i + 1))) << 8);
+        i += 2;
+        unsigned length = static_cast<unsigned>(static_cast<unsigned char>(
+                                                  extra.at(i)))
+                | (static_cast<unsigned>(static_cast<unsigned char>(
+                                                  extra.at(i + 1))) << 8);
+        i += 2;
+        if (type == QUAZIP_EXTRA_NTFS_MAGIC && length >= 32) {
+            i += 4; // reserved
+            while (i <= extra.size() - 4) {
+                unsigned tag = static_cast<unsigned>(
+                            static_cast<unsigned char>(extra.at(i)))
+                        | (static_cast<unsigned>(
+                               static_cast<unsigned char>(extra.at(i + 1)))
+                           << 8);
+                i += 2;
+                int tagsize = static_cast<unsigned>(
+                            static_cast<unsigned char>(extra.at(i)))
+                        | (static_cast<unsigned>(
+                               static_cast<unsigned char>(extra.at(i + 1)))
+                           << 8);
+                i += 2;
+                if (tag == QUAZIP_EXTRA_NTFS_TIME_MAGIC
+                        && tagsize >= position + 8) {
+                    i += position;
+                    quint64 mtime = static_cast<quint64>(
+                                static_cast<unsigned char>(extra.at(i)))
+                        | (static_cast<quint64>(static_cast<unsigned char>(
+                                                 extra.at(i + 1))) << 8)
+                        | (static_cast<quint64>(static_cast<unsigned char>(
+                                                 extra.at(i + 2))) << 16)
+                        | (static_cast<quint64>(static_cast<unsigned char>(
+                                                 extra.at(i + 3))) << 24)
+                        | (static_cast<quint64>(static_cast<unsigned char>(
+                                                 extra.at(i + 4))) << 32)
+                        | (static_cast<quint64>(static_cast<unsigned char>(
+                                                 extra.at(i + 5))) << 40)
+                        | (static_cast<quint64>(static_cast<unsigned char>(
+                                                 extra.at(i + 6))) << 48)
+                        | (static_cast<quint64>(static_cast<unsigned char>(
+                                                 extra.at(i + 7))) << 56);
+                    // the NTFS time is measured from 1601 for whatever reason
+                    QDateTime base(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC);
+                    dateTime = base.addMSecs(mtime / 10000);
+                    if (fineTicks != NULL) {
+                        *fineTicks = static_cast<int>(mtime % 10000);
+                    }
+                    i += tagsize - position;
+                } else {
+                    i += tagsize;
+                }
+
+            }
+        } else {
+            i += length;
+        }
+    }
+    if (fineTicks != NULL && dateTime.isNull()) {
+        *fineTicks = 0;
+    }
+    return dateTime;
+}
+
+QDateTime QuaZipFileInfo64::getNTFSmTime(int *fineTicks) const
+{
+    return getNTFSTime(extra, 0, fineTicks);
+}
+
+QDateTime QuaZipFileInfo64::getNTFSaTime(int *fineTicks) const
+{
+    return getNTFSTime(extra, 8, fineTicks);
+}
+
+QDateTime QuaZipFileInfo64::getNTFScTime(int *fineTicks) const
+{
+    return getNTFSTime(extra, 16, fineTicks);
+}
diff --git a/3rdparty/quazip-0.7/quazip/quazipfileinfo.h b/3rdparty/quazip-0.7/quazip/quazipfileinfo.h
new file mode 100644
index 0000000..dc527cb
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazipfileinfo.h
@@ -0,0 +1,172 @@
+#ifndef QUA_ZIPFILEINFO_H
+#define QUA_ZIPFILEINFO_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QByteArray>
+#include <QDateTime>
+#include <QFile>
+
+#include "quazip_global.h"
+
+/// Information about a file inside archive.
+/** Call QuaZip::getCurrentFileInfo() or QuaZipFile::getFileInfo() to
+ * fill this structure. */
+struct QUAZIP_EXPORT QuaZipFileInfo {
+  /// File name.
+  QString name;
+  /// Version created by.
+  quint16 versionCreated;
+  /// Version needed to extract.
+  quint16 versionNeeded;
+  /// General purpose flags.
+  quint16 flags;
+  /// Compression method.
+  quint16 method;
+  /// Last modification date and time.
+  QDateTime dateTime;
+  /// CRC.
+  quint32 crc;
+  /// Compressed file size.
+  quint32 compressedSize;
+  /// Uncompressed file size.
+  quint32 uncompressedSize;
+  /// Disk number start.
+  quint16 diskNumberStart;
+  /// Internal file attributes.
+  quint16 internalAttr;
+  /// External file attributes.
+  quint32 externalAttr;
+  /// Comment.
+  QString comment;
+  /// Extra field.
+  QByteArray extra;
+  /// Get the file permissions.
+  /**
+    Returns the high 16 bits of external attributes converted to
+    QFile::Permissions.
+    */
+  QFile::Permissions getPermissions() const;
+};
+
+/// Information about a file inside archive (with zip64 support).
+/** Call QuaZip::getCurrentFileInfo() or QuaZipFile::getFileInfo() to
+ * fill this structure. */
+struct QUAZIP_EXPORT QuaZipFileInfo64 {
+  /// File name.
+  QString name;
+  /// Version created by.
+  quint16 versionCreated;
+  /// Version needed to extract.
+  quint16 versionNeeded;
+  /// General purpose flags.
+  quint16 flags;
+  /// Compression method.
+  quint16 method;
+  /// Last modification date and time.
+  /**
+   * This is the time stored in the standard ZIP header. This format only allows
+   * to store time with 2-second precision, so the seconds will always be even
+   * and the milliseconds will always be zero. If you need more precise
+   * date and time, you can try to call the getNTFSmTime() function or
+   * its siblings, provided that the archive itself contains these NTFS times.
+   */
+  QDateTime dateTime;
+  /// CRC.
+  quint32 crc;
+  /// Compressed file size.
+  quint64 compressedSize;
+  /// Uncompressed file size.
+  quint64 uncompressedSize;
+  /// Disk number start.
+  quint16 diskNumberStart;
+  /// Internal file attributes.
+  quint16 internalAttr;
+  /// External file attributes.
+  quint32 externalAttr;
+  /// Comment.
+  QString comment;
+  /// Extra field.
+  QByteArray extra;
+  /// Get the file permissions.
+  /**
+    Returns the high 16 bits of external attributes converted to
+    QFile::Permissions.
+    */
+  QFile::Permissions getPermissions() const;
+  /// Converts to QuaZipFileInfo
+  /**
+    If any of the fields are greater than 0xFFFFFFFFu, they are set to
+    0xFFFFFFFFu exactly, not just truncated. This function should be mainly used
+    for compatibility with the old code expecting QuaZipFileInfo, in the cases
+    when it's impossible or otherwise unadvisable (due to ABI compatibility
+    reasons, for example) to modify that old code to use QuaZipFileInfo64.
+
+    \return \c true if all fields converted correctly, \c false if an overflow
+    occured.
+    */
+  bool toQuaZipFileInfo(QuaZipFileInfo &info) const;
+  /// Returns the NTFS modification time
+  /**
+   * The getNTFS*Time() functions only work if there is an NTFS extra field
+   * present. Otherwise, they all return invalid null timestamps.
+   * @param fineTicks If not NULL, the fractional part of milliseconds returned
+   *                  there, measured in 100-nanosecond ticks. Will be set to
+   *                  zero if there is no NTFS extra field.
+   * @sa dateTime
+   * @sa getNTFSaTime()
+   * @sa getNTFScTime()
+   * @return The NTFS modification time, UTC
+   */
+  QDateTime getNTFSmTime(int *fineTicks = NULL) const;
+  /// Returns the NTFS access time
+  /**
+   * The getNTFS*Time() functions only work if there is an NTFS extra field
+   * present. Otherwise, they all return invalid null timestamps.
+   * @param fineTicks If not NULL, the fractional part of milliseconds returned
+   *                  there, measured in 100-nanosecond ticks. Will be set to
+   *                  zero if there is no NTFS extra field.
+   * @sa dateTime
+   * @sa getNTFSmTime()
+   * @sa getNTFScTime()
+   * @return The NTFS access time, UTC
+   */
+  QDateTime getNTFSaTime(int *fineTicks = NULL) const;
+  /// Returns the NTFS creation time
+  /**
+   * The getNTFS*Time() functions only work if there is an NTFS extra field
+   * present. Otherwise, they all return invalid null timestamps.
+   * @param fineTicks If not NULL, the fractional part of milliseconds returned
+   *                  there, measured in 100-nanosecond ticks. Will be set to
+   *                  zero if there is no NTFS extra field.
+   * @sa dateTime
+   * @sa getNTFSmTime()
+   * @sa getNTFSaTime()
+   * @return The NTFS creation time, UTC
+   */
+  QDateTime getNTFScTime(int *fineTicks = NULL) const;
+};
+
+#endif
diff --git a/3rdparty/quazip-0.7/quazip/quazipnewinfo.cpp b/3rdparty/quazip-0.7/quazip/quazipnewinfo.cpp
new file mode 100644
index 0000000..db6c70a
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazipnewinfo.cpp
@@ -0,0 +1,277 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QFileInfo>
+
+#include "quazipnewinfo.h"
+
+#include <string.h>
+
+static void QuaZipNewInfo_setPermissions(QuaZipNewInfo *info,
+        QFile::Permissions perm, bool isDir)
+{
+    quint32 uPerm = isDir ? 0040000 : 0100000;
+    if ((perm & QFile::ReadOwner) != 0)
+        uPerm |= 0400;
+    if ((perm & QFile::WriteOwner) != 0)
+        uPerm |= 0200;
+    if ((perm & QFile::ExeOwner) != 0)
+        uPerm |= 0100;
+    if ((perm & QFile::ReadGroup) != 0)
+        uPerm |= 0040;
+    if ((perm & QFile::WriteGroup) != 0)
+        uPerm |= 0020;
+    if ((perm & QFile::ExeGroup) != 0)
+        uPerm |= 0010;
+    if ((perm & QFile::ReadOther) != 0)
+        uPerm |= 0004;
+    if ((perm & QFile::WriteOther) != 0)
+        uPerm |= 0002;
+    if ((perm & QFile::ExeOther) != 0)
+        uPerm |= 0001;
+    info->externalAttr = (info->externalAttr & ~0xFFFF0000u) | (uPerm << 16);
+}
+
+template<typename FileInfo>
+void QuaZipNewInfo_init(QuaZipNewInfo &self, const FileInfo &existing)
+{
+    self.name = existing.name;
+    self.dateTime = existing.dateTime;
+    self.internalAttr = existing.internalAttr;
+    self.externalAttr = existing.externalAttr;
+    self.comment = existing.comment;
+    self.extraLocal = existing.extra;
+    self.extraGlobal = existing.extra;
+    self.uncompressedSize = existing.uncompressedSize;
+}
+
+QuaZipNewInfo::QuaZipNewInfo(const QuaZipFileInfo &existing)
+{
+    QuaZipNewInfo_init(*this, existing);
+}
+
+QuaZipNewInfo::QuaZipNewInfo(const QuaZipFileInfo64 &existing)
+{
+    QuaZipNewInfo_init(*this, existing);
+}
+
+QuaZipNewInfo::QuaZipNewInfo(const QString& name):
+  name(name), dateTime(QDateTime::currentDateTime()), internalAttr(0), externalAttr(0),
+  uncompressedSize(0)
+{
+}
+
+QuaZipNewInfo::QuaZipNewInfo(const QString& name, const QString& file):
+  name(name), internalAttr(0), externalAttr(0), uncompressedSize(0)
+{
+  QFileInfo info(file);
+  QDateTime lm = info.lastModified();
+  if (!info.exists()) {
+    dateTime = QDateTime::currentDateTime();
+  } else {
+    dateTime = lm;
+    QuaZipNewInfo_setPermissions(this, info.permissions(), info.isDir());
+  }
+}
+
+void QuaZipNewInfo::setFileDateTime(const QString& file)
+{
+  QFileInfo info(file);
+  QDateTime lm = info.lastModified();
+  if (info.exists())
+    dateTime = lm;
+}
+
+void QuaZipNewInfo::setFilePermissions(const QString &file)
+{
+    QFileInfo info = QFileInfo(file);
+    QFile::Permissions perm = info.permissions();
+    QuaZipNewInfo_setPermissions(this, perm, info.isDir());
+}
+
+void QuaZipNewInfo::setPermissions(QFile::Permissions permissions)
+{
+    QuaZipNewInfo_setPermissions(this, permissions, name.endsWith('/'));
+}
+
+void QuaZipNewInfo::setFileNTFSTimes(const QString &fileName)
+{
+    QFileInfo fi(fileName);
+    if (!fi.exists()) {
+        qWarning("QuaZipNewInfo::setFileNTFSTimes(): '%s' doesn't exist",
+                 fileName.toUtf8().constData());
+        return;
+    }
+    setFileNTFSmTime(fi.lastModified());
+    setFileNTFSaTime(fi.lastRead());
+    setFileNTFScTime(fi.created());
+}
+
+static void setNTFSTime(QByteArray &extra, const QDateTime &time, int position,
+                        int fineTicks) {
+    int ntfsPos = -1, timesPos = -1;
+    unsigned ntfsLength = 0, ntfsTimesLength = 0;
+    for (int i = 0; i <= extra.size() - 4; ) {
+        unsigned type = static_cast<unsigned>(static_cast<unsigned char>(
+                                                  extra.at(i)))
+                | (static_cast<unsigned>(static_cast<unsigned char>(
+                                                  extra.at(i + 1))) << 8);
+        i += 2;
+        unsigned length = static_cast<unsigned>(static_cast<unsigned char>(
+                                                  extra.at(i)))
+                | (static_cast<unsigned>(static_cast<unsigned char>(
+                                                  extra.at(i + 1))) << 8);
+        i += 2;
+        if (type == QUAZIP_EXTRA_NTFS_MAGIC) {
+            ntfsPos = i - 4; // the beginning of the NTFS record
+            ntfsLength = length;
+            if (length <= 4) {
+                break; // no times in the NTFS record
+            }
+            i += 4; // reserved
+            while (i <= extra.size() - 4) {
+                unsigned tag = static_cast<unsigned>(
+                            static_cast<unsigned char>(extra.at(i)))
+                        | (static_cast<unsigned>(
+                               static_cast<unsigned char>(extra.at(i + 1)))
+                           << 8);
+                i += 2;
+                unsigned tagsize = static_cast<unsigned>(
+                            static_cast<unsigned char>(extra.at(i)))
+                        | (static_cast<unsigned>(
+                               static_cast<unsigned char>(extra.at(i + 1)))
+                           << 8);
+                i += 2;
+                if (tag == QUAZIP_EXTRA_NTFS_TIME_MAGIC) {
+                    timesPos = i - 4; // the beginning of the NTFS times tag
+                    ntfsTimesLength = tagsize;
+                    break;
+                } else {
+                    i += tagsize;
+                }
+            }
+            break; // I ain't going to search for yet another NTFS record!
+        } else {
+            i += length;
+        }
+    }
+    if (ntfsPos == -1) {
+        // No NTFS record, need to create one.
+        ntfsPos = extra.size();
+        ntfsLength = 32;
+        extra.resize(extra.size() + 4 + ntfsLength);
+        // the NTFS record header
+        extra[ntfsPos] = static_cast<char>(QUAZIP_EXTRA_NTFS_MAGIC);
+        extra[ntfsPos + 1] = static_cast<char>(QUAZIP_EXTRA_NTFS_MAGIC >> 8);
+        extra[ntfsPos + 2] = 32; // the 2-byte size in LittleEndian
+        extra[ntfsPos + 3] = 0;
+        // zero the record
+        memset(extra.data() + ntfsPos + 4, 0, 32);
+        timesPos = ntfsPos + 8;
+        // now set the tag data
+        extra[timesPos] = static_cast<char>(QUAZIP_EXTRA_NTFS_TIME_MAGIC);
+        extra[timesPos + 1] = static_cast<char>(QUAZIP_EXTRA_NTFS_TIME_MAGIC
+                                               >> 8);
+        // the size:
+        extra[timesPos + 2] = 24;
+        extra[timesPos + 3] = 0;
+        ntfsTimesLength = 24;
+    }
+    if (timesPos == -1) {
+        // No time tag in the NTFS record, need to add one.
+        timesPos = ntfsPos + 4 + ntfsLength;
+        extra.resize(extra.size() + 28);
+        // Now we need to move the rest of the field
+        // (possibly zero bytes, but memmove() is OK with that).
+        // 0 ......... ntfsPos .. ntfsPos + 4   ... timesPos
+        // <some data> <header>   <NTFS record>     <need-to-move data>    <end>
+        memmove(extra.data() + timesPos + 28, extra.data() + timesPos,
+                extra.size() - 28 - timesPos);
+        ntfsLength += 28;
+        // now set the tag data
+        extra[timesPos] = static_cast<char>(QUAZIP_EXTRA_NTFS_TIME_MAGIC);
+        extra[timesPos + 1] = static_cast<char>(QUAZIP_EXTRA_NTFS_TIME_MAGIC
+                                               >> 8);
+        // the size:
+        extra[timesPos + 2] = 24;
+        extra[timesPos + 3] = 0;
+        // zero the record
+        memset(extra.data() + timesPos + 4, 0, 24);
+        ntfsTimesLength = 24;
+    }
+    if (ntfsTimesLength < 24) {
+        // Broken times field. OK, this is really unlikely, but just in case...
+        size_t timesEnd = timesPos + 4 + ntfsTimesLength;
+        extra.resize(extra.size() + (24 - ntfsTimesLength));
+        // Move it!
+        // 0 ......... timesPos .... timesPos + 4 .. timesEnd
+        // <some data> <time header> <broken times> <need-to-move data> <end>
+        memmove(extra.data() + timesEnd + (24 - ntfsTimesLength),
+                extra.data() + timesEnd,
+                extra.size() - (24 - ntfsTimesLength) - timesEnd);
+        // Now we have to increase the NTFS record and time tag lengths.
+        ntfsLength += (24 - ntfsTimesLength);
+        ntfsTimesLength = 24;
+        extra[ntfsPos + 2] = static_cast<char>(ntfsLength);
+        extra[ntfsPos + 3] = static_cast<char>(ntfsLength >> 8);
+        extra[timesPos + 2] = static_cast<char>(ntfsTimesLength);
+        extra[timesPos + 3] = static_cast<char>(ntfsTimesLength >> 8);
+    }
+    QDateTime base(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC);
+#if (QT_VERSION >= 0x040700)
+    quint64 ticks = base.msecsTo(time) * 10000 + fineTicks;
+#else
+    QDateTime utc = time.toUTC();
+    quint64 ticks = (static_cast<qint64>(base.date().daysTo(utc.date()))
+            * Q_INT64_C(86400000)
+            + static_cast<qint64>(base.time().msecsTo(utc.time())))
+        * Q_INT64_C(10000) + fineTicks;
+#endif
+    extra[timesPos + 4 + position] = static_cast<char>(ticks);
+    extra[timesPos + 5 + position] = static_cast<char>(ticks >> 8);
+    extra[timesPos + 6 + position] = static_cast<char>(ticks >> 16);
+    extra[timesPos + 7 + position] = static_cast<char>(ticks >> 24);
+    extra[timesPos + 8 + position] = static_cast<char>(ticks >> 32);
+    extra[timesPos + 9 + position] = static_cast<char>(ticks >> 40);
+    extra[timesPos + 10 + position] = static_cast<char>(ticks >> 48);
+    extra[timesPos + 11 + position] = static_cast<char>(ticks >> 56);
+}
+
+void QuaZipNewInfo::setFileNTFSmTime(const QDateTime &mTime, int fineTicks)
+{
+    setNTFSTime(extraLocal, mTime, 0, fineTicks);
+    setNTFSTime(extraGlobal, mTime, 0, fineTicks);
+}
+
+void QuaZipNewInfo::setFileNTFSaTime(const QDateTime &aTime, int fineTicks)
+{
+    setNTFSTime(extraLocal, aTime, 8, fineTicks);
+    setNTFSTime(extraGlobal, aTime, 8, fineTicks);
+}
+
+void QuaZipNewInfo::setFileNTFScTime(const QDateTime &cTime, int fineTicks)
+{
+    setNTFSTime(extraLocal, cTime, 16, fineTicks);
+    setNTFSTime(extraGlobal, cTime, 16, fineTicks);
+}
diff --git a/3rdparty/quazip-0.7/quazip/quazipnewinfo.h b/3rdparty/quazip-0.7/quazip/quazipnewinfo.h
new file mode 100644
index 0000000..88b5b60
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/quazipnewinfo.h
@@ -0,0 +1,207 @@
+#ifndef QUA_ZIPNEWINFO_H
+#define QUA_ZIPNEWINFO_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant, see
+quazip/(un)zip.h files for details, basically it's zlib license.
+ **/
+
+#include <QDateTime>
+#include <QFile>
+#include <QString>
+
+#include "quazip_global.h"
+
+#include "quazipfileinfo.h"
+
+/// Information about a file to be created.
+/** This structure holds information about a file to be created inside
+ * ZIP archive. At least name should be set to something correct before
+ * passing this structure to
+ * QuaZipFile::open(OpenMode,const QuaZipNewInfo&,int,int,bool).
+ *
+ * Zip64 support of this structure is slightly limited: in the raw mode (when
+ * a pre-compressed file is written into a ZIP file as-is), it is necessary
+ * to specify the uncompressed file size and the appropriate field is 32 bit.
+ * Since the raw mode is used extremely rare, there is no real need to have
+ * a separate QuaZipNewInfo64 structure like QuaZipFileInfo64. It may be added
+ * in the future though, if there is a demand for the raw mode with zip64
+ * archives.
+ **/
+struct QUAZIP_EXPORT QuaZipNewInfo {
+  /// File name.
+  /** This field holds file name inside archive, including path relative
+   * to archive root.
+   **/
+  QString name;
+  /// File timestamp.
+  /** This is the last file modification date and time. Will be stored
+   * in the archive central directory. It is a good practice to set it
+   * to the source file timestamp instead of archive creating time. Use
+   * setFileDateTime() or QuaZipNewInfo(const QString&, const QString&).
+   **/
+  QDateTime dateTime;
+  /// File internal attributes.
+  quint16 internalAttr;
+  /// File external attributes.
+  /**
+    The highest 16 bits contain Unix file permissions and type (dir or
+    file). The constructor QuaZipNewInfo(const QString&, const QString&)
+    takes permissions from the provided file.
+    */
+  quint32 externalAttr;
+  /// File comment.
+  /** Will be encoded using QuaZip::getCommentCodec().
+   **/
+  QString comment;
+  /// File local extra field.
+  QByteArray extraLocal;
+  /// File global extra field.
+  QByteArray extraGlobal;
+  /// Uncompressed file size.
+  /** This is only needed if you are using raw file zipping mode, i. e.
+   * adding precompressed file in the zip archive.
+   **/
+  ulong uncompressedSize;
+  /// Constructs QuaZipNewInfo instance.
+  /** Initializes name with \a name, dateTime with current date and
+   * time. Attributes are initialized with zeros, comment and extra
+   * field with null values.
+   **/
+  QuaZipNewInfo(const QString& name);
+  /// Constructs QuaZipNewInfo instance.
+  /** Initializes name with \a name. Timestamp and permissions are taken
+   * from the specified file. If the \a file does not exists or its timestamp
+   * is inaccessible (e. g. you do not have read permission for the
+   * directory file in), uses current time and zero permissions. Other attributes are
+   * initialized with zeros, comment and extra field with null values.
+   * 
+   * \sa setFileDateTime()
+   **/
+  QuaZipNewInfo(const QString& name, const QString& file);
+  /// Initializes the new instance from existing file info.
+  /** Mainly used when copying files between archives.
+   *
+   * Both extra fields are initialized to existing.extra.
+   * @brief QuaZipNewInfo
+   * @param existing
+   */
+  QuaZipNewInfo(const QuaZipFileInfo &existing);
+  /// Initializes the new instance from existing file info.
+  /** Mainly used when copying files between archives.
+   *
+   * Both extra fields are initialized to existing.extra.
+   * @brief QuaZipNewInfo
+   * @param existing
+   */
+  QuaZipNewInfo(const QuaZipFileInfo64 &existing);
+  /// Sets the file timestamp from the existing file.
+  /** Use this function to set the file timestamp from the existing
+   * file. Use it like this:
+   * \code
+   * QuaZipFile zipFile(&zip);
+   * QFile file("file-to-add");
+   * file.open(QIODevice::ReadOnly);
+   * QuaZipNewInfo info("file-name-in-archive");
+   * info.setFileDateTime("file-to-add"); // take the timestamp from file
+   * zipFile.open(QIODevice::WriteOnly, info);
+   * \endcode
+   *
+   * This function does not change dateTime if some error occured (e. g.
+   * file is inaccessible).
+   **/
+  void setFileDateTime(const QString& file);
+  /// Sets the file permissions from the existing file.
+  /**
+    Takes permissions from the file and sets the high 16 bits of
+    external attributes. Uses QFileInfo to get permissions on all
+    platforms.
+    */
+  void setFilePermissions(const QString &file);
+  /// Sets the file permissions.
+  /**
+    Modifies the highest 16 bits of external attributes. The type part
+    is set to dir if the name ends with a slash, and to regular file
+    otherwise.
+    */
+  void setPermissions(QFile::Permissions permissions);
+  /// Sets the NTFS times from an existing file.
+  /**
+   * If the file doesn't exist, a warning is printed to the stderr and nothing
+   * is done. Otherwise, all three times, as reported by
+   * QFileInfo::lastModified(), QFileInfo::lastRead() and QFileInfo::created(),
+   * are written to the NTFS extra field record.
+   *
+   * The NTFS record is written to
+   * both the local and the global extra fields, updating the existing record
+   * if there is one, or creating a new one and appending it to the end
+   * of each extra field.
+   *
+   * The microseconds will be zero, as they aren't reported by QFileInfo.
+   * @param fileName
+   */
+  void setFileNTFSTimes(const QString &fileName);
+  /// Sets the NTFS modification time.
+  /**
+   * The time is written into the NTFS record in
+   * both the local and the global extra fields, updating the existing record
+   * if there is one, or creating a new one and appending it to the end
+   * of each extra field. When updating an existing record, all other fields
+   * are left intact.
+   * @param mTime The new modification time.
+   * @param fineTicks The fractional part of milliseconds, in 100-nanosecond
+   *        ticks (i. e. 9999 ticks = 999.9 microsecond). Values greater than
+   *        9999 will add milliseconds or even seconds, but this can be
+   *        confusing and therefore is discouraged.
+   */
+  void setFileNTFSmTime(const QDateTime &mTime, int fineTicks = 0);
+  /// Sets the NTFS access time.
+  /**
+   * The time is written into the NTFS record in
+   * both the local and the global extra fields, updating the existing record
+   * if there is one, or creating a new one and appending it to the end
+   * of each extra field. When updating an existing record, all other fields
+   * are left intact.
+   * @param aTime The new access time.
+   * @param fineTicks The fractional part of milliseconds, in 100-nanosecond
+   *        ticks (i. e. 9999 ticks = 999.9 microsecond). Values greater than
+   *        9999 will add milliseconds or even seconds, but this can be
+   *        confusing and therefore is discouraged.
+   */
+  void setFileNTFSaTime(const QDateTime &aTime, int fineTicks = 0);
+  /// Sets the NTFS creation time.
+  /**
+   * The time is written into the NTFS record in
+   * both the local and the global extra fields, updating the existing record
+   * if there is one, or creating a new one and appending it to the end
+   * of each extra field. When updating an existing record, all other fields
+   * are left intact.
+   * @param cTime The new creation time.
+   * @param fineTicks The fractional part of milliseconds, in 100-nanosecond
+   *        ticks (i. e. 9999 ticks = 999.9 microsecond). Values greater than
+   *        9999 will add milliseconds or even seconds, but this can be
+   *        confusing and therefore is discouraged.
+   */
+  void setFileNTFScTime(const QDateTime &cTime, int fineTicks = 0);
+};
+
+#endif
diff --git a/3rdparty/quazip-0.7/quazip/run_moc.bat b/3rdparty/quazip-0.7/quazip/run_moc.bat
new file mode 100644
index 0000000..f9aa4d9
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/run_moc.bat
@@ -0,0 +1,3 @@
+moc -o moc\moc_quazipfile.cpp quazipfile.h
+moc -o moc\moc_quagzipfile.cpp quagzipfile.h
+moc -o moc\moc_quaziodevice.cpp quaziodevice.h
diff --git a/3rdparty/quazip-0.7/quazip/unzip.c b/3rdparty/quazip-0.7/quazip/unzip.c
new file mode 100644
index 0000000..bca03f8
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/unzip.c
@@ -0,0 +1,2155 @@
+/* unzip.c -- IO for uncompress .zip files using zlib
+   Version 1.1, February 14h, 2010
+   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+         Modifications of Unzip for Zip64
+         Copyright (C) 2007-2008 Even Rouault
+
+         Modifications for Zip64 support on both zip and unzip
+         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+         Modifications for QIODevice support and other QuaZIP fixes
+         Copyright (C) 2005-2014 Sergey A. Tachenov
+
+         For more info read MiniZip_info.txt
+
+
+  ------------------------------------------------------------------------------------
+  Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of
+  compatibility with older software. The following is from the original crypt.c.
+  Code woven in by Terry Thorsen 1/2003.
+
+  Copyright (c) 1990-2000 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2000-Apr-09 or later
+  (the contents of which are also included in zip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+
+        crypt.c (full version) by Info-ZIP.      Last revised:  [see crypt.h]
+
+  The encryption/decryption parts of this source code (as opposed to the
+  non-echoing password parts) were originally written in Europe.  The
+  whole source package can be freely distributed, including from the USA.
+  (Prior to January 2000, re-export from the US was a violation of US law.)
+
+        This encryption code is a direct transcription of the algorithm from
+  Roger Schlafly, described by Phil Katz in the file appnote.txt.  This
+  file (appnote.txt) is distributed with the PKZIP program (even in the
+  version without encryption capabilities).
+
+        ------------------------------------------------------------------------------------
+
+        Changes in unzip.c
+
+        2007-2008 - Even Rouault - Addition of cpl_unzGetCurrentFileZStreamPos
+  2007-2008 - Even Rouault - Decoration of symbol names unz* -> cpl_unz*
+  2007-2008 - Even Rouault - Remove old C style function prototypes
+  2007-2008 - Even Rouault - Add unzip support for ZIP64
+
+        Copyright (C) 2007-2008 Even Rouault
+
+
+        Oct-2009 - Mathias Svensson - Removed cpl_* from symbol names (Even Rouault added them but since this is now moved to a new project (minizip64) I renamed them again).
+  Oct-2009 - Mathias Svensson - Fixed problem if uncompressed size was > 4G and compressed size was <4G
+                                should only read the compressed/uncompressed size from the Zip64 format if
+                                the size from normal header was 0xFFFFFFFF
+  Oct-2009 - Mathias Svensson - Applied some bug fixes from paches recived from Gilles Vollant
+        Oct-2009 - Mathias Svensson - Applied support to unzip files with compression mathod BZIP2 (bzip2 lib is required)
+                                Patch created by Daniel Borca
+
+  Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer
+
+  Copyright (C) 1998 - 2010 Gilles Vollant, Even Rouault, Mathias Svensson
+
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "zlib.h"
+#if (ZLIB_VERNUM < 0x1270)
+typedef uLongf z_crc_t;
+#endif
+#include "unzip.h"
+
+#ifdef STDC
+#  include <stddef.h>
+#  include <string.h>
+#  include <stdlib.h>
+#endif
+#ifdef NO_ERRNO_H
+    extern int errno;
+#else
+#   include <errno.h>
+#endif
+
+
+#ifndef local
+#  define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+
+#ifndef CASESENSITIVITYDEFAULT_NO
+#  if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES)
+#    define CASESENSITIVITYDEFAULT_NO
+#  endif
+#endif
+
+
+#ifndef UNZ_BUFSIZE
+#define UNZ_BUFSIZE (16384)
+#endif
+
+#ifndef UNZ_MAXFILENAMEINZIP
+#define UNZ_MAXFILENAMEINZIP (256)
+#endif
+
+#ifndef ALLOC
+# define ALLOC(size) (malloc(size))
+#endif
+#ifndef TRYFREE
+# define TRYFREE(p) {if (p) free(p);}
+#endif
+
+#define SIZECENTRALDIRITEM (0x2e)
+#define SIZEZIPLOCALHEADER (0x1e)
+
+
+const char unz_copyright[] =
+   " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
+
+/* unz_file_info_interntal contain internal info about a file in zipfile*/
+typedef struct unz_file_info64_internal_s
+{
+    ZPOS64_T offset_curfile;/* relative offset of local header 8 bytes */
+} unz_file_info64_internal;
+
+
+/* file_in_zip_read_info_s contain internal information about a file in zipfile,
+    when reading and decompress it */
+typedef struct
+{
+    char  *read_buffer;         /* internal buffer for compressed data */
+    z_stream stream;            /* zLib stream structure for inflate */
+
+#ifdef HAVE_BZIP2
+    bz_stream bstream;          /* bzLib stream structure for bziped */
+#endif
+
+    ZPOS64_T pos_in_zipfile;       /* position in byte on the zipfile, for fseek*/
+    uLong stream_initialised;   /* flag set if stream structure is initialised*/
+
+    ZPOS64_T offset_local_extrafield;/* offset of the local extra field */
+    uInt  size_local_extrafield;/* size of the local extra field */
+    ZPOS64_T pos_local_extrafield;   /* position in the local extra field in read*/
+    ZPOS64_T total_out_64;
+
+    uLong crc32;                /* crc32 of all data uncompressed */
+    uLong crc32_wait;           /* crc32 we must obtain after decompress all */
+    ZPOS64_T rest_read_compressed; /* number of byte to be decompressed */
+    ZPOS64_T rest_read_uncompressed;/*number of byte to be obtained after decomp*/
+    zlib_filefunc64_32_def z_filefunc;
+    voidpf filestream;        /* io structore of the zipfile */
+    uLong compression_method;   /* compression method (0==store) */
+    ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
+    int   raw;
+} file_in_zip64_read_info_s;
+
+
+/* unz64_s contain internal information about the zipfile
+*/
+typedef struct
+{
+    zlib_filefunc64_32_def z_filefunc;
+    int is64bitOpenFunction;
+    voidpf filestream;        /* io structore of the zipfile */
+    unz_global_info64 gi;       /* public global information */
+    ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
+    ZPOS64_T num_file;             /* number of the current file in the zipfile*/
+    ZPOS64_T pos_in_central_dir;   /* pos of the current file in the central dir*/
+    ZPOS64_T current_file_ok;      /* flag about the usability of the current file*/
+    ZPOS64_T central_pos;          /* position of the beginning of the central dir*/
+
+    ZPOS64_T size_central_dir;     /* size of the central directory  */
+    ZPOS64_T offset_central_dir;   /* offset of start of central directory with
+                                   respect to the starting disk number */
+
+    unz_file_info64 cur_file_info; /* public info about the current file in zip*/
+    unz_file_info64_internal cur_file_info_internal; /* private info about it*/
+    file_in_zip64_read_info_s* pfile_in_zip_read; /* structure about the current
+                                        file if we are decompressing it */
+    int encrypted;
+
+    int isZip64;
+    unsigned flags;
+
+#    ifndef NOUNCRYPT
+    unsigned long keys[3];     /* keys defining the pseudo-random sequence */
+    const z_crc_t FAR * pcrc_32_tab;
+#    endif
+} unz64_s;
+
+
+#ifndef NOUNCRYPT
+#include "crypt.h"
+#endif
+
+/* ===========================================================================
+     Read a byte from a gz_stream; update next_in and avail_in. Return EOF
+   for end of file.
+   IN assertion: the stream s has been sucessfully opened for reading.
+*/
+
+
+local int unz64local_getByte OF((
+    const zlib_filefunc64_32_def* pzlib_filefunc_def,
+    voidpf filestream,
+    int *pi));
+
+local int unz64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi)
+{
+    unsigned char c;
+    int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);
+    if (err==1)
+    {
+        *pi = (int)c;
+        return UNZ_OK;
+    }
+    else
+    {
+        if (ZERROR64(*pzlib_filefunc_def,filestream))
+            return UNZ_ERRNO;
+        else
+            return UNZ_EOF;
+    }
+}
+
+
+/* ===========================================================================
+   Reads a long in LSB order from the given gz_stream. Sets
+*/
+local int unz64local_getShort OF((
+    const zlib_filefunc64_32_def* pzlib_filefunc_def,
+    voidpf filestream,
+    uLong *pX));
+
+local int unz64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def,
+                             voidpf filestream,
+                             uLong *pX)
+{
+    uLong x ;
+    int i = 0;
+    int err;
+
+    err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x = (uLong)i;
+
+    if (err==UNZ_OK)
+        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x |= ((uLong)i)<<8;
+
+    if (err==UNZ_OK)
+        *pX = x;
+    else
+        *pX = 0;
+    return err;
+}
+
+local int unz64local_getLong OF((
+    const zlib_filefunc64_32_def* pzlib_filefunc_def,
+    voidpf filestream,
+    uLong *pX));
+
+local int unz64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def,
+                            voidpf filestream,
+                            uLong *pX)
+{
+    uLong x ;
+    int i = 0;
+    int err;
+
+    err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x = (uLong)i;
+
+    if (err==UNZ_OK)
+        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x |= ((uLong)i)<<8;
+
+    if (err==UNZ_OK)
+        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x |= ((uLong)i)<<16;
+
+    if (err==UNZ_OK)
+        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x += ((uLong)i)<<24;
+
+    if (err==UNZ_OK)
+        *pX = x;
+    else
+        *pX = 0;
+    return err;
+}
+
+local int unz64local_getLong64 OF((
+    const zlib_filefunc64_32_def* pzlib_filefunc_def,
+    voidpf filestream,
+    ZPOS64_T *pX));
+
+
+local int unz64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def,
+                            voidpf filestream,
+                            ZPOS64_T *pX)
+{
+    ZPOS64_T x ;
+    int i = 0;
+    int err;
+
+    err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x = (ZPOS64_T)i;
+
+    if (err==UNZ_OK)
+        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x |= ((ZPOS64_T)i)<<8;
+
+    if (err==UNZ_OK)
+        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x |= ((ZPOS64_T)i)<<16;
+
+    if (err==UNZ_OK)
+        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x |= ((ZPOS64_T)i)<<24;
+
+    if (err==UNZ_OK)
+        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x |= ((ZPOS64_T)i)<<32;
+
+    if (err==UNZ_OK)
+        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x |= ((ZPOS64_T)i)<<40;
+
+    if (err==UNZ_OK)
+        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x |= ((ZPOS64_T)i)<<48;
+
+    if (err==UNZ_OK)
+        err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x |= ((ZPOS64_T)i)<<56;
+
+    if (err==UNZ_OK)
+        *pX = x;
+    else
+        *pX = 0;
+    return err;
+}
+
+/* My own strcmpi / strcasecmp */
+local int strcmpcasenosensitive_internal (const char* fileName1, const char* fileName2)
+{
+    for (;;)
+    {
+        char c1=*(fileName1++);
+        char c2=*(fileName2++);
+        if ((c1>='a') && (c1<='z'))
+            c1 -= 0x20;
+        if ((c2>='a') && (c2<='z'))
+            c2 -= 0x20;
+        if (c1=='\0')
+            return ((c2=='\0') ? 0 : -1);
+        if (c2=='\0')
+            return 1;
+        if (c1<c2)
+            return -1;
+        if (c1>c2)
+            return 1;
+    }
+}
+
+
+#ifdef  CASESENSITIVITYDEFAULT_NO
+#define CASESENSITIVITYDEFAULTVALUE 2
+#else
+#define CASESENSITIVITYDEFAULTVALUE 1
+#endif
+
+#ifndef STRCMPCASENOSENTIVEFUNCTION
+#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal
+#endif
+
+/*
+   Compare two filename (fileName1,fileName2).
+   If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
+   If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
+                                                                or strcasecmp)
+   If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
+        (like 1 on Unix, 2 on Windows)
+
+*/
+extern int ZEXPORT unzStringFileNameCompare (const char*  fileName1,
+                                                 const char*  fileName2,
+                                                 int iCaseSensitivity)
+
+{
+    if (iCaseSensitivity==0)
+        iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;
+
+    if (iCaseSensitivity==1)
+        return strcmp(fileName1,fileName2);
+
+    return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2);
+}
+
+#ifndef BUFREADCOMMENT
+#define BUFREADCOMMENT (0x400)
+#endif
+
+/*
+  Locate the Central directory of a zipfile (at the end, just before
+    the global comment)
+*/
+local ZPOS64_T unz64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
+local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
+{
+    unsigned char* buf;
+    ZPOS64_T uSizeFile;
+    ZPOS64_T uBackRead;
+    ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+    ZPOS64_T uPosFound=0;
+
+    if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+        return 0;
+
+
+    uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+    if (uMaxBack>uSizeFile)
+        uMaxBack = uSizeFile;
+
+    buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+    if (buf==NULL)
+        return 0;
+
+    uBackRead = 4;
+    while (uBackRead<uMaxBack)
+    {
+        uLong uReadSize;
+        ZPOS64_T uReadPos ;
+        int i;
+        if (uBackRead+BUFREADCOMMENT>uMaxBack)
+            uBackRead = uMaxBack;
+        else
+            uBackRead+=BUFREADCOMMENT;
+        uReadPos = uSizeFile-uBackRead ;
+
+        uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+                     (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+        if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+            break;
+
+        if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+            break;
+
+        for (i=(int)uReadSize-3; (i--)>0;)
+            if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
+                ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
+            {
+                uPosFound = uReadPos+i;
+                break;
+            }
+
+        if (uPosFound!=0)
+            break;
+    }
+    TRYFREE(buf);
+    return uPosFound;
+}
+
+
+/*
+  Locate the Central directory 64 of a zipfile (at the end, just before
+    the global comment)
+*/
+local ZPOS64_T unz64local_SearchCentralDir64 OF((
+    const zlib_filefunc64_32_def* pzlib_filefunc_def,
+    voidpf filestream));
+
+local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def,
+                                      voidpf filestream)
+{
+    unsigned char* buf;
+    ZPOS64_T uSizeFile;
+    ZPOS64_T uBackRead;
+    ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+    ZPOS64_T uPosFound=0;
+    uLong uL;
+                ZPOS64_T relativeOffset;
+
+    if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+        return 0;
+
+
+    uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+    if (uMaxBack>uSizeFile)
+        uMaxBack = uSizeFile;
+
+    buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+    if (buf==NULL)
+        return 0;
+
+    uBackRead = 4;
+    while (uBackRead<uMaxBack)
+    {
+        uLong uReadSize;
+        ZPOS64_T uReadPos;
+        int i;
+        if (uBackRead+BUFREADCOMMENT>uMaxBack)
+            uBackRead = uMaxBack;
+        else
+            uBackRead+=BUFREADCOMMENT;
+        uReadPos = uSizeFile-uBackRead ;
+
+        uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+                     (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+        if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+            break;
+
+        if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+            break;
+
+        for (i=(int)uReadSize-3; (i--)>0;)
+            if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
+                ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
+            {
+                uPosFound = uReadPos+i;
+                break;
+            }
+
+        if (uPosFound!=0)
+            break;
+    }
+    TRYFREE(buf);
+    if (uPosFound == 0)
+        return 0;
+
+    /* Zip64 end of central directory locator */
+    if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)
+        return 0;
+
+    /* the signature, already checked */
+    if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+        return 0;
+
+    /* number of the disk with the start of the zip64 end of  central directory */
+    if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+        return 0;
+    if (uL != 0)
+        return 0;
+
+    /* relative offset of the zip64 end of central directory record */
+    if (unz64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=UNZ_OK)
+        return 0;
+
+    /* total number of disks */
+    if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+        return 0;
+    if (uL != 1)
+        return 0;
+
+    /* Goto end of central directory record */
+    if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
+        return 0;
+
+     /* the signature */
+    if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+        return 0;
+
+    if (uL != 0x06064b50)
+        return 0;
+
+    return relativeOffset;
+}
+
+/*
+  Open a Zip file. path contain the full pathname (by example,
+     on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer
+     "zlib/zlib114.zip".
+     If the zipfile cannot be opened (file doesn't exist or in not valid), the
+       return value is NULL.
+     Else, the return value is a unzFile Handle, usable with other function
+       of this unzip package.
+*/
+extern unzFile unzOpenInternal (voidpf file,
+                               zlib_filefunc64_32_def* pzlib_filefunc64_32_def,
+                               int is64bitOpenFunction, unsigned flags)
+{
+    unz64_s us;
+    unz64_s *s;
+    ZPOS64_T central_pos;
+    uLong   uL;
+
+    uLong number_disk;          /* number of the current dist, used for
+                                   spaning ZIP, unsupported, always 0*/
+    uLong number_disk_with_CD;  /* number the the disk with central dir, used
+                                   for spaning ZIP, unsupported, always 0*/
+    ZPOS64_T number_entry_CD;      /* total number of entries in
+                                   the central dir
+                                   (same than number_entry on nospan) */
+
+    int err=UNZ_OK;
+
+    if (unz_copyright[0]!=' ')
+        return NULL;
+
+    us.flags = flags;
+    us.z_filefunc.zseek32_file = NULL;
+    us.z_filefunc.ztell32_file = NULL;
+    if (pzlib_filefunc64_32_def==NULL)
+        fill_qiodevice64_filefunc(&us.z_filefunc.zfile_func64);
+    else
+        us.z_filefunc = *pzlib_filefunc64_32_def;
+    us.is64bitOpenFunction = is64bitOpenFunction;
+
+
+
+    us.filestream = ZOPEN64(us.z_filefunc,
+                                                 file,
+                                                 ZLIB_FILEFUNC_MODE_READ |
+                                                 ZLIB_FILEFUNC_MODE_EXISTING);
+    if (us.filestream==NULL)
+        return NULL;
+
+    central_pos = unz64local_SearchCentralDir64(&us.z_filefunc,us.filestream);
+    if (central_pos)
+    {
+        uLong uS;
+        ZPOS64_T uL64;
+
+        us.isZip64 = 1;
+
+        if (ZSEEK64(us.z_filefunc, us.filestream,
+                                      central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+        err=UNZ_ERRNO;
+
+        /* the signature, already checked */
+        if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+            err=UNZ_ERRNO;
+
+        /* size of zip64 end of central directory record */
+        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&uL64)!=UNZ_OK)
+            err=UNZ_ERRNO;
+
+        /* version made by */
+        if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK)
+            err=UNZ_ERRNO;
+
+        /* version needed to extract */
+        if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK)
+            err=UNZ_ERRNO;
+
+        /* number of this disk */
+        if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)
+            err=UNZ_ERRNO;
+
+        /* number of the disk with the start of the central directory */
+        if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)
+            err=UNZ_ERRNO;
+
+        /* total number of entries in the central directory on this disk */
+        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK)
+            err=UNZ_ERRNO;
+
+        /* total number of entries in the central directory */
+        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK)
+            err=UNZ_ERRNO;
+
+        if ((number_entry_CD!=us.gi.number_entry) ||
+            (number_disk_with_CD!=0) ||
+            (number_disk!=0))
+            err=UNZ_BADZIPFILE;
+
+        /* size of the central directory */
+        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK)
+            err=UNZ_ERRNO;
+
+        /* offset of start of central directory with respect to the
+          starting disk number */
+        if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK)
+            err=UNZ_ERRNO;
+
+        us.gi.size_comment = 0;
+    }
+    else
+    {
+        central_pos = unz64local_SearchCentralDir(&us.z_filefunc,us.filestream);
+        if (central_pos==0)
+            err=UNZ_ERRNO;
+
+        us.isZip64 = 0;
+
+        if (ZSEEK64(us.z_filefunc, us.filestream,
+                                        central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+            err=UNZ_ERRNO;
+
+        /* the signature, already checked */
+        if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+            err=UNZ_ERRNO;
+
+        /* number of this disk */
+        if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)
+            err=UNZ_ERRNO;
+
+        /* number of the disk with the start of the central directory */
+        if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)
+            err=UNZ_ERRNO;
+
+        /* total number of entries in the central dir on this disk */
+        if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+            err=UNZ_ERRNO;
+        us.gi.number_entry = uL;
+
+        /* total number of entries in the central dir */
+        if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+            err=UNZ_ERRNO;
+        number_entry_CD = uL;
+
+        if ((number_entry_CD!=us.gi.number_entry) ||
+            (number_disk_with_CD!=0) ||
+            (number_disk!=0))
+            err=UNZ_BADZIPFILE;
+
+        /* size of the central directory */
+        if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+            err=UNZ_ERRNO;
+        us.size_central_dir = uL;
+
+        /* offset of start of central directory with respect to the
+            starting disk number */
+        if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+            err=UNZ_ERRNO;
+        us.offset_central_dir = uL;
+
+        /* zipfile comment length */
+        if (unz64local_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK)
+            err=UNZ_ERRNO;
+    }
+
+    if ((central_pos<us.offset_central_dir+us.size_central_dir) &&
+        (err==UNZ_OK))
+        err=UNZ_BADZIPFILE;
+
+    if (err!=UNZ_OK)
+    {
+        if ((us.flags & UNZ_AUTO_CLOSE) != 0)
+            ZCLOSE64(us.z_filefunc, us.filestream);
+        else
+            ZFAKECLOSE64(us.z_filefunc, us.filestream);
+        return NULL;
+    }
+
+    us.byte_before_the_zipfile = central_pos -
+                            (us.offset_central_dir+us.size_central_dir);
+    us.central_pos = central_pos;
+    us.pfile_in_zip_read = NULL;
+    us.encrypted = 0;
+
+
+    s=(unz64_s*)ALLOC(sizeof(unz64_s));
+    if( s != NULL)
+    {
+        *s=us;
+        unzGoToFirstFile((unzFile)s);
+    }
+    return (unzFile)s;
+}
+
+
+extern unzFile ZEXPORT unzOpen2 (voidpf file,
+                                        zlib_filefunc_def* pzlib_filefunc32_def)
+{
+    if (pzlib_filefunc32_def != NULL)
+    {
+        zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+        fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def);
+        return unzOpenInternal(file, &zlib_filefunc64_32_def_fill, 0, UNZ_DEFAULT_FLAGS);
+    }
+    else
+        return unzOpenInternal(file, NULL, 0, UNZ_DEFAULT_FLAGS);
+}
+
+extern unzFile ZEXPORT unzOpen2_64 (voidpf file,
+                                     zlib_filefunc64_def* pzlib_filefunc_def)
+{
+    if (pzlib_filefunc_def != NULL)
+    {
+        zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+        zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def;
+        zlib_filefunc64_32_def_fill.ztell32_file = NULL;
+        zlib_filefunc64_32_def_fill.zseek32_file = NULL;
+        return unzOpenInternal(file, &zlib_filefunc64_32_def_fill, 1, UNZ_DEFAULT_FLAGS);
+    }
+    else
+        return unzOpenInternal(file, NULL, 1, UNZ_DEFAULT_FLAGS);
+}
+
+extern unzFile ZEXPORT unzOpen (voidpf file)
+{
+    return unzOpenInternal(file, NULL, 0, UNZ_DEFAULT_FLAGS);
+}
+
+extern unzFile ZEXPORT unzOpen64 (voidpf file)
+{
+    return unzOpenInternal(file, NULL, 1, UNZ_DEFAULT_FLAGS);
+}
+
+/*
+  Close a ZipFile opened with unzipOpen.
+  If there is files inside the .Zip opened with unzipOpenCurrentFile (see later),
+    these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
+  return UNZ_OK if there is no problem. */
+extern int ZEXPORT unzClose (unzFile file)
+{
+    unz64_s* s;
+    if (file==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+
+    if (s->pfile_in_zip_read!=NULL)
+        unzCloseCurrentFile(file);
+
+    if ((s->flags & UNZ_AUTO_CLOSE) != 0)
+        ZCLOSE64(s->z_filefunc, s->filestream);
+    else
+        ZFAKECLOSE64(s->z_filefunc, s->filestream);
+    TRYFREE(s);
+    return UNZ_OK;
+}
+
+
+/*
+  Write info about the ZipFile in the *pglobal_info structure.
+  No preparation of the structure is needed
+  return UNZ_OK if there is no problem. */
+extern int ZEXPORT unzGetGlobalInfo64 (unzFile file, unz_global_info64* pglobal_info)
+{
+    unz64_s* s;
+    if (file==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+    *pglobal_info=s->gi;
+    return UNZ_OK;
+}
+
+extern int ZEXPORT unzGetGlobalInfo (unzFile file, unz_global_info* pglobal_info32)
+{
+    unz64_s* s;
+    if (file==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+    /* to do : check if number_entry is not truncated */
+    pglobal_info32->number_entry = (uLong)s->gi.number_entry;
+    pglobal_info32->size_comment = s->gi.size_comment;
+    return UNZ_OK;
+}
+/*
+   Translate date/time from Dos format to tm_unz (readable more easilty)
+*/
+local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm)
+{
+    ZPOS64_T uDate;
+    uDate = (ZPOS64_T)(ulDosDate>>16);
+    ptm->tm_mday = (uInt)(uDate&0x1f) ;
+    ptm->tm_mon =  (uInt)((((uDate)&0x1E0)/0x20)-1) ;
+    ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
+
+    ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
+    ptm->tm_min =  (uInt) ((ulDosDate&0x7E0)/0x20) ;
+    ptm->tm_sec =  (uInt) (2*(ulDosDate&0x1f)) ;
+}
+
+/*
+  Get Info about the current file in the zipfile, with internal only info
+*/
+local int unz64local_GetCurrentFileInfoInternal OF((unzFile file,
+                                                  unz_file_info64 *pfile_info,
+                                                  unz_file_info64_internal
+                                                  *pfile_info_internal,
+                                                  char *szFileName,
+                                                  uLong fileNameBufferSize,
+                                                  void *extraField,
+                                                  uLong extraFieldBufferSize,
+                                                  char *szComment,
+                                                  uLong commentBufferSize));
+
+local int unz64local_GetCurrentFileInfoInternal (unzFile file,
+                                                  unz_file_info64 *pfile_info,
+                                                  unz_file_info64_internal
+                                                  *pfile_info_internal,
+                                                  char *szFileName,
+                                                  uLong fileNameBufferSize,
+                                                  void *extraField,
+                                                  uLong extraFieldBufferSize,
+                                                  char *szComment,
+                                                  uLong commentBufferSize)
+{
+    unz64_s* s;
+    unz_file_info64 file_info;
+    unz_file_info64_internal file_info_internal;
+    int err=UNZ_OK;
+    uLong uMagic;
+    ZPOS64_T llSeek=0;
+    uLong uL;
+
+    if (file==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+    if (ZSEEK64(s->z_filefunc, s->filestream,
+              s->pos_in_central_dir+s->byte_before_the_zipfile,
+              ZLIB_FILEFUNC_SEEK_SET)!=0)
+        err=UNZ_ERRNO;
+
+
+    /* we check the magic */
+    if (err==UNZ_OK)
+    {
+        if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
+            err=UNZ_ERRNO;
+        else if (uMagic!=0x02014b50)
+            err=UNZ_BADZIPFILE;
+    }
+
+    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK)
+        err=UNZ_ERRNO;
+
+    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK)
+        err=UNZ_ERRNO;
+
+    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK)
+        err=UNZ_ERRNO;
+
+    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK)
+        err=UNZ_ERRNO;
+
+    if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK)
+        err=UNZ_ERRNO;
+
+    unz64local_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);
+
+    if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK)
+        err=UNZ_ERRNO;
+
+    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+        err=UNZ_ERRNO;
+    file_info.compressed_size = uL;
+
+    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+        err=UNZ_ERRNO;
+    file_info.uncompressed_size = uL;
+
+    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK)
+        err=UNZ_ERRNO;
+
+    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK)
+        err=UNZ_ERRNO;
+
+    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK)
+        err=UNZ_ERRNO;
+
+    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK)
+        err=UNZ_ERRNO;
+
+    if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK)
+        err=UNZ_ERRNO;
+
+    if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK)
+        err=UNZ_ERRNO;
+
+                /* relative offset of local header */
+    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+        err=UNZ_ERRNO;
+    file_info_internal.offset_curfile = uL;
+
+    llSeek+=file_info.size_filename;
+    if ((err==UNZ_OK) && (szFileName!=NULL))
+    {
+        uLong uSizeRead ;
+        if (file_info.size_filename<fileNameBufferSize)
+        {
+            *(szFileName+file_info.size_filename)='\0';
+            uSizeRead = file_info.size_filename;
+        }
+        else
+            uSizeRead = fileNameBufferSize;
+
+        if ((file_info.size_filename>0) && (fileNameBufferSize>0))
+            if (ZREAD64(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead)
+                err=UNZ_ERRNO;
+        llSeek -= uSizeRead;
+    }
+
+    /* Read extrafield */
+    if ((err==UNZ_OK) && (extraField!=NULL))
+    {
+        ZPOS64_T uSizeRead ;
+        if (file_info.size_file_extra<extraFieldBufferSize)
+            uSizeRead = file_info.size_file_extra;
+        else
+            uSizeRead = extraFieldBufferSize;
+
+        if (llSeek!=0)
+        {
+            if (ZSEEK64(s->z_filefunc, s->filestream,llSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+                llSeek=0;
+            else
+                err=UNZ_ERRNO;
+        }
+
+        if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
+            if (ZREAD64(s->z_filefunc, s->filestream,extraField,(uLong)uSizeRead)!=uSizeRead)
+                err=UNZ_ERRNO;
+
+        llSeek += file_info.size_file_extra - (uLong)uSizeRead;
+    }
+    else
+        llSeek += file_info.size_file_extra;
+
+
+    if ((err==UNZ_OK) && (file_info.size_file_extra != 0))
+    {
+                                uLong acc = 0;
+
+        /* since lSeek now points to after the extra field we need to move back */
+        llSeek -= file_info.size_file_extra;
+
+        if (llSeek!=0)
+        {
+            if (ZSEEK64(s->z_filefunc, s->filestream,llSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+                llSeek=0;
+            else
+                err=UNZ_ERRNO;
+        }
+
+        while(acc < file_info.size_file_extra)
+        {
+            uLong headerId;
+                                                uLong dataSize;
+
+            if (unz64local_getShort(&s->z_filefunc, s->filestream,&headerId) != UNZ_OK)
+                err=UNZ_ERRNO;
+
+            if (unz64local_getShort(&s->z_filefunc, s->filestream,&dataSize) != UNZ_OK)
+                err=UNZ_ERRNO;
+
+            /* ZIP64 extra fields */
+            if (headerId == 0x0001)
+            {
+                uLong uL;
+
+                if(file_info.uncompressed_size == (ZPOS64_T)0xFFFFFFFFu)
+                {
+                    if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK)
+                        err=UNZ_ERRNO;
+                }
+
+                if(file_info.compressed_size == (ZPOS64_T)0xFFFFFFFFu)
+                {
+                    if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK)
+                        err=UNZ_ERRNO;
+                }
+
+                if(file_info_internal.offset_curfile == (ZPOS64_T)0xFFFFFFFFu)
+                {
+                    /* Relative Header offset */
+                    if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK)
+                        err=UNZ_ERRNO;
+                }
+
+                if(file_info.disk_num_start == 0xFFFFFFFFu)
+                {
+                    /* Disk Start Number */
+                    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+                        err=UNZ_ERRNO;
+                }
+
+            }
+            else
+            {
+                if (ZSEEK64(s->z_filefunc, s->filestream,dataSize,ZLIB_FILEFUNC_SEEK_CUR)!=0)
+                    err=UNZ_ERRNO;
+            }
+
+            acc += 2 + 2 + dataSize;
+        }
+    }
+
+    if ((err==UNZ_OK) && (szComment!=NULL))
+    {
+        uLong uSizeRead ;
+        if (file_info.size_file_comment<commentBufferSize)
+        {
+            *(szComment+file_info.size_file_comment)='\0';
+            uSizeRead = file_info.size_file_comment;
+        }
+        else
+            uSizeRead = commentBufferSize;
+
+        if (llSeek!=0)
+        {
+            if (ZSEEK64(s->z_filefunc, s->filestream,llSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+                llSeek=0;
+            else
+                err=UNZ_ERRNO;
+        }
+
+        if ((file_info.size_file_comment>0) && (commentBufferSize>0))
+            if (ZREAD64(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead)
+                err=UNZ_ERRNO;
+        llSeek+=file_info.size_file_comment - uSizeRead;
+    }
+    else
+        llSeek+=file_info.size_file_comment;
+
+
+    if ((err==UNZ_OK) && (pfile_info!=NULL))
+        *pfile_info=file_info;
+
+    if ((err==UNZ_OK) && (pfile_info_internal!=NULL))
+        *pfile_info_internal=file_info_internal;
+
+    return err;
+}
+
+
+
+/*
+  Write info about the ZipFile in the *pglobal_info structure.
+  No preparation of the structure is needed
+  return UNZ_OK if there is no problem.
+*/
+extern int ZEXPORT unzGetCurrentFileInfo64 (unzFile file,
+                                          unz_file_info64 * pfile_info,
+                                          char * szFileName, uLong fileNameBufferSize,
+                                          void *extraField, uLong extraFieldBufferSize,
+                                          char* szComment,  uLong commentBufferSize)
+{
+    return unz64local_GetCurrentFileInfoInternal(file,pfile_info,NULL,
+                                                szFileName,fileNameBufferSize,
+                                                extraField,extraFieldBufferSize,
+                                                szComment,commentBufferSize);
+}
+
+extern int ZEXPORT unzGetCurrentFileInfo (unzFile file,
+                                          unz_file_info * pfile_info,
+                                          char * szFileName, uLong fileNameBufferSize,
+                                          void *extraField, uLong extraFieldBufferSize,
+                                          char* szComment,  uLong commentBufferSize)
+{
+    int err;
+    unz_file_info64 file_info64;
+    err = unz64local_GetCurrentFileInfoInternal(file,&file_info64,NULL,
+                                                szFileName,fileNameBufferSize,
+                                                extraField,extraFieldBufferSize,
+                                                szComment,commentBufferSize);
+    if (err==UNZ_OK && pfile_info != NULL)
+    {
+        pfile_info->version = file_info64.version;
+        pfile_info->version_needed = file_info64.version_needed;
+        pfile_info->flag = file_info64.flag;
+        pfile_info->compression_method = file_info64.compression_method;
+        pfile_info->dosDate = file_info64.dosDate;
+        pfile_info->crc = file_info64.crc;
+
+        pfile_info->size_filename = file_info64.size_filename;
+        pfile_info->size_file_extra = file_info64.size_file_extra;
+        pfile_info->size_file_comment = file_info64.size_file_comment;
+
+        pfile_info->disk_num_start = file_info64.disk_num_start;
+        pfile_info->internal_fa = file_info64.internal_fa;
+        pfile_info->external_fa = file_info64.external_fa;
+
+        pfile_info->tmu_date = file_info64.tmu_date,
+
+
+        pfile_info->compressed_size = (uLong)file_info64.compressed_size;
+        pfile_info->uncompressed_size = (uLong)file_info64.uncompressed_size;
+
+    }
+    return err;
+}
+/*
+  Set the current file of the zipfile to the first file.
+  return UNZ_OK if there is no problem
+*/
+extern int ZEXPORT unzGoToFirstFile (unzFile file)
+{
+    int err=UNZ_OK;
+    unz64_s* s;
+    if (file==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+    s->pos_in_central_dir=s->offset_central_dir;
+    s->num_file=0;
+    err=unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+                                             &s->cur_file_info_internal,
+                                             NULL,0,NULL,0,NULL,0);
+    s->current_file_ok = (err == UNZ_OK);
+    return err;
+}
+
+/*
+  Set the current file of the zipfile to the next file.
+  return UNZ_OK if there is no problem
+  return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
+*/
+extern int ZEXPORT unzGoToNextFile (unzFile  file)
+{
+    unz64_s* s;
+    int err;
+
+    if (file==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+    if (!s->current_file_ok)
+        return UNZ_END_OF_LIST_OF_FILE;
+    if (s->gi.number_entry != 0xffff)    /* 2^16 files overflow hack */
+      if (s->num_file+1==s->gi.number_entry)
+        return UNZ_END_OF_LIST_OF_FILE;
+
+    s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename +
+            s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ;
+    s->num_file++;
+    err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+                                               &s->cur_file_info_internal,
+                                               NULL,0,NULL,0,NULL,0);
+    s->current_file_ok = (err == UNZ_OK);
+    return err;
+}
+
+
+/*
+  Try locate the file szFileName in the zipfile.
+  For the iCaseSensitivity signification, see unzipStringFileNameCompare
+
+  return value :
+  UNZ_OK if the file is found. It becomes the current file.
+  UNZ_END_OF_LIST_OF_FILE if the file is not found
+*/
+extern int ZEXPORT unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity)
+{
+    unz64_s* s;
+    int err;
+
+    /* We remember the 'current' position in the file so that we can jump
+     * back there if we fail.
+     */
+    unz_file_info64 cur_file_infoSaved;
+    unz_file_info64_internal cur_file_info_internalSaved;
+    ZPOS64_T num_fileSaved;
+    ZPOS64_T pos_in_central_dirSaved;
+
+
+    if (file==NULL)
+        return UNZ_PARAMERROR;
+
+    if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP)
+        return UNZ_PARAMERROR;
+
+    s=(unz64_s*)file;
+    if (!s->current_file_ok)
+        return UNZ_END_OF_LIST_OF_FILE;
+
+    /* Save the current state */
+    num_fileSaved = s->num_file;
+    pos_in_central_dirSaved = s->pos_in_central_dir;
+    cur_file_infoSaved = s->cur_file_info;
+    cur_file_info_internalSaved = s->cur_file_info_internal;
+
+    err = unzGoToFirstFile(file);
+
+    while (err == UNZ_OK)
+    {
+        char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];
+        err = unzGetCurrentFileInfo64(file,NULL,
+                                    szCurrentFileName,sizeof(szCurrentFileName)-1,
+                                    NULL,0,NULL,0);
+        if (err == UNZ_OK)
+        {
+            if (unzStringFileNameCompare(szCurrentFileName,
+                                            szFileName,iCaseSensitivity)==0)
+                return UNZ_OK;
+            err = unzGoToNextFile(file);
+        }
+    }
+
+    /* We failed, so restore the state of the 'current file' to where we
+     * were.
+     */
+    s->num_file = num_fileSaved ;
+    s->pos_in_central_dir = pos_in_central_dirSaved ;
+    s->cur_file_info = cur_file_infoSaved;
+    s->cur_file_info_internal = cur_file_info_internalSaved;
+    return err;
+}
+
+
+/*
+///////////////////////////////////////////
+// Contributed by Ryan Haksi (mailto://cryogen@infoserve.net)
+// I need random access
+//
+// Further optimization could be realized by adding an ability
+// to cache the directory in memory. The goal being a single
+// comprehensive file read to put the file I need in a memory.
+*/
+
+/*
+typedef struct unz_file_pos_s
+{
+    ZPOS64_T pos_in_zip_directory;   // offset in file
+    ZPOS64_T num_of_file;            // # of file
+} unz_file_pos;
+*/
+
+extern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos*  file_pos)
+{
+    unz64_s* s;
+
+    if (file==NULL || file_pos==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+    if (!s->current_file_ok)
+        return UNZ_END_OF_LIST_OF_FILE;
+
+    file_pos->pos_in_zip_directory  = s->pos_in_central_dir;
+    file_pos->num_of_file           = s->num_file;
+
+    return UNZ_OK;
+}
+
+extern int ZEXPORT unzGetFilePos(
+    unzFile file,
+    unz_file_pos* file_pos)
+{
+    unz64_file_pos file_pos64;
+    int err = unzGetFilePos64(file,&file_pos64);
+    if (err==UNZ_OK)
+    {
+        file_pos->pos_in_zip_directory = (uLong)file_pos64.pos_in_zip_directory;
+        file_pos->num_of_file = (uLong)file_pos64.num_of_file;
+    }
+    return err;
+}
+
+extern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos)
+{
+    unz64_s* s;
+    int err;
+
+    if (file==NULL || file_pos==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+
+    /* jump to the right spot */
+    s->pos_in_central_dir = file_pos->pos_in_zip_directory;
+    s->num_file           = file_pos->num_of_file;
+
+    /* set the current file */
+    err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+                                               &s->cur_file_info_internal,
+                                               NULL,0,NULL,0,NULL,0);
+    /* return results */
+    s->current_file_ok = (err == UNZ_OK);
+    return err;
+}
+
+extern int ZEXPORT unzGoToFilePos(
+    unzFile file,
+    unz_file_pos* file_pos)
+{
+    unz64_file_pos file_pos64;
+    if (file_pos == NULL)
+        return UNZ_PARAMERROR;
+
+    file_pos64.pos_in_zip_directory = file_pos->pos_in_zip_directory;
+    file_pos64.num_of_file = file_pos->num_of_file;
+    return unzGoToFilePos64(file,&file_pos64);
+}
+
+/* Unzip Helper Functions - should be here? */
+/*///////////////////////////////////////// */
+
+/*
+  Read the local header of the current zipfile
+  Check the coherency of the local header and info in the end of central
+        directory about this file
+  store in *piSizeVar the size of extra info in local header
+        (filename and size of extra field data)
+*/
+local int unz64local_CheckCurrentFileCoherencyHeader (unz64_s* s, uInt* piSizeVar,
+                                                    ZPOS64_T * poffset_local_extrafield,
+                                                    uInt  * psize_local_extrafield)
+{
+    uLong uMagic,uData,uFlags;
+    uLong size_filename;
+    uLong size_extra_field;
+    int err=UNZ_OK;
+
+    *piSizeVar = 0;
+    *poffset_local_extrafield = 0;
+    *psize_local_extrafield = 0;
+
+    if (ZSEEK64(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile +
+                                s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0)
+        return UNZ_ERRNO;
+
+
+    if (err==UNZ_OK)
+    {
+        if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
+            err=UNZ_ERRNO;
+        else if (uMagic!=0x04034b50)
+            err=UNZ_BADZIPFILE;
+    }
+
+    if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
+        err=UNZ_ERRNO;
+/*
+    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion))
+        err=UNZ_BADZIPFILE;
+*/
+    if (unz64local_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK)
+        err=UNZ_ERRNO;
+
+    if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
+        err=UNZ_ERRNO;
+    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method))
+        err=UNZ_BADZIPFILE;
+
+    if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&
+/* #ifdef HAVE_BZIP2 */
+                         (s->cur_file_info.compression_method!=Z_BZIP2ED) &&
+/* #endif */
+                         (s->cur_file_info.compression_method!=Z_DEFLATED))
+        err=UNZ_BADZIPFILE;
+
+    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */
+        err=UNZ_ERRNO;
+
+    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */
+        err=UNZ_ERRNO;
+    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && ((uFlags & 8)==0))
+        err=UNZ_BADZIPFILE;
+
+    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */
+        err=UNZ_ERRNO;
+    else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && ((uFlags & 8)==0))
+        err=UNZ_BADZIPFILE;
+
+    if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */
+        err=UNZ_ERRNO;
+    else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && ((uFlags & 8)==0))
+        err=UNZ_BADZIPFILE;
+
+    if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK)
+        err=UNZ_ERRNO;
+    else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))
+        err=UNZ_BADZIPFILE;
+
+    *piSizeVar += (uInt)size_filename;
+
+    if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK)
+        err=UNZ_ERRNO;
+    *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +
+                                    SIZEZIPLOCALHEADER + size_filename;
+    *psize_local_extrafield = (uInt)size_extra_field;
+
+    *piSizeVar += (uInt)size_extra_field;
+
+    return err;
+}
+
+/*
+  Open for reading data the current file in the zipfile.
+  If there is no error and the file is opened, the return value is UNZ_OK.
+*/
+extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method,
+                                            int* level, int raw, const char* password)
+{
+    int err=UNZ_OK;
+    uInt iSizeVar;
+    unz64_s* s;
+    file_in_zip64_read_info_s* pfile_in_zip_read_info;
+    ZPOS64_T offset_local_extrafield;  /* offset of the local extra field */
+    uInt  size_local_extrafield;    /* size of the local extra field */
+#    ifndef NOUNCRYPT
+    char source[12];
+#    else
+    if (password != NULL)
+        return UNZ_PARAMERROR;
+#    endif
+
+    if (file==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+    if (!s->current_file_ok)
+        return UNZ_PARAMERROR;
+
+    if (s->pfile_in_zip_read != NULL)
+        unzCloseCurrentFile(file);
+
+    if (unz64local_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK)
+        return UNZ_BADZIPFILE;
+
+    pfile_in_zip_read_info = (file_in_zip64_read_info_s*)ALLOC(sizeof(file_in_zip64_read_info_s));
+    if (pfile_in_zip_read_info==NULL)
+        return UNZ_INTERNALERROR;
+
+    pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE);
+    pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield;
+    pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield;
+    pfile_in_zip_read_info->pos_local_extrafield=0;
+    pfile_in_zip_read_info->raw=raw;
+
+    if (pfile_in_zip_read_info->read_buffer==NULL)
+    {
+        TRYFREE(pfile_in_zip_read_info);
+        return UNZ_INTERNALERROR;
+    }
+
+    pfile_in_zip_read_info->stream_initialised=0;
+
+    if (method!=NULL)
+        *method = (int)s->cur_file_info.compression_method;
+
+    if (level!=NULL)
+    {
+        *level = 6;
+        switch (s->cur_file_info.flag & 0x06)
+        {
+          case 6 : *level = 1; break;
+          case 4 : *level = 2; break;
+          case 2 : *level = 9; break;
+        }
+    }
+
+    if ((s->cur_file_info.compression_method!=0) &&
+/* #ifdef HAVE_BZIP2 */
+        (s->cur_file_info.compression_method!=Z_BZIP2ED) &&
+/* #endif */
+        (s->cur_file_info.compression_method!=Z_DEFLATED))
+
+        err=UNZ_BADZIPFILE;
+
+    pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc;
+    pfile_in_zip_read_info->crc32=0;
+    pfile_in_zip_read_info->total_out_64=0;
+    pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method;
+    pfile_in_zip_read_info->filestream=s->filestream;
+    pfile_in_zip_read_info->z_filefunc=s->z_filefunc;
+    pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile;
+
+    pfile_in_zip_read_info->stream.total_out = 0;
+
+    if ((s->cur_file_info.compression_method==Z_BZIP2ED) && (!raw))
+    {
+#ifdef HAVE_BZIP2
+      pfile_in_zip_read_info->bstream.bzalloc = (void *(*) (void *, int, int))0;
+      pfile_in_zip_read_info->bstream.bzfree = (free_func)0;
+      pfile_in_zip_read_info->bstream.opaque = (voidpf)0;
+      pfile_in_zip_read_info->bstream.state = (voidpf)0;
+
+      pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
+      pfile_in_zip_read_info->stream.zfree = (free_func)0;
+      pfile_in_zip_read_info->stream.opaque = (voidpf)0;
+      pfile_in_zip_read_info->stream.next_in = (voidpf)0;
+      pfile_in_zip_read_info->stream.avail_in = 0;
+
+      err=BZ2_bzDecompressInit(&pfile_in_zip_read_info->bstream, 0, 0);
+      if (err == Z_OK)
+        pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED;
+      else
+      {
+        TRYFREE(pfile_in_zip_read_info);
+        return err;
+      }
+#else
+      pfile_in_zip_read_info->raw=1;
+#endif
+    }
+    else if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw))
+    {
+      pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
+      pfile_in_zip_read_info->stream.zfree = (free_func)0;
+      pfile_in_zip_read_info->stream.opaque = (voidpf)0;
+      pfile_in_zip_read_info->stream.next_in = 0;
+      pfile_in_zip_read_info->stream.avail_in = 0;
+
+      err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);
+      if (err == Z_OK)
+        pfile_in_zip_read_info->stream_initialised=Z_DEFLATED;
+      else
+      {
+        TRYFREE(pfile_in_zip_read_info);
+        return err;
+      }
+        /* windowBits is passed < 0 to tell that there is no zlib header.
+         * Note that in this case inflate *requires* an extra "dummy" byte
+         * after the compressed stream in order to complete decompression and
+         * return Z_STREAM_END.
+         * In unzip, i don't wait absolutely Z_STREAM_END because I known the
+         * size of both compressed and uncompressed data
+         */
+    }
+    pfile_in_zip_read_info->rest_read_compressed =
+            s->cur_file_info.compressed_size ;
+    pfile_in_zip_read_info->rest_read_uncompressed =
+            s->cur_file_info.uncompressed_size ;
+
+
+    pfile_in_zip_read_info->pos_in_zipfile =
+            s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER +
+              iSizeVar;
+
+    pfile_in_zip_read_info->stream.avail_in = (uInt)0;
+
+    s->pfile_in_zip_read = pfile_in_zip_read_info;
+                s->encrypted = 0;
+
+#    ifndef NOUNCRYPT
+    if (password != NULL)
+    {
+        int i;
+        s->pcrc_32_tab = get_crc_table();
+        init_keys(password,s->keys,s->pcrc_32_tab);
+        if (ZSEEK64(s->z_filefunc, s->filestream,
+                  s->pfile_in_zip_read->pos_in_zipfile +
+                     s->pfile_in_zip_read->byte_before_the_zipfile,
+                  SEEK_SET)!=0)
+            return UNZ_INTERNALERROR;
+        if(ZREAD64(s->z_filefunc, s->filestream,source, 12)<12)
+            return UNZ_INTERNALERROR;
+
+        for (i = 0; i<12; i++)
+            zdecode(s->keys,s->pcrc_32_tab,source[i]);
+
+        s->pfile_in_zip_read->pos_in_zipfile+=12;
+        s->encrypted=1;
+    }
+#    endif
+
+
+    return UNZ_OK;
+}
+
+extern int ZEXPORT unzOpenCurrentFile (unzFile file)
+{
+    return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL);
+}
+
+extern int ZEXPORT unzOpenCurrentFilePassword (unzFile file, const char*  password)
+{
+    return unzOpenCurrentFile3(file, NULL, NULL, 0, password);
+}
+
+extern int ZEXPORT unzOpenCurrentFile2 (unzFile file, int* method, int* level, int raw)
+{
+    return unzOpenCurrentFile3(file, method, level, raw, NULL);
+}
+
+/** Addition for GDAL : START */
+
+extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64( unzFile file)
+{
+    unz64_s* s;
+    file_in_zip64_read_info_s* pfile_in_zip_read_info;
+    s=(unz64_s*)file;
+    if (file==NULL)
+        return 0; /*UNZ_PARAMERROR; */
+    pfile_in_zip_read_info=s->pfile_in_zip_read;
+    if (pfile_in_zip_read_info==NULL)
+        return 0; /*UNZ_PARAMERROR; */
+    return pfile_in_zip_read_info->pos_in_zipfile +
+                         pfile_in_zip_read_info->byte_before_the_zipfile;
+}
+
+/** Addition for GDAL : END */
+
+/*
+  Read bytes from the current file.
+  buf contain buffer where data must be copied
+  len the size of buf.
+
+  return the number of byte copied if somes bytes are copied
+  return 0 if the end of file was reached
+  return <0 with error code if there is an error
+    (UNZ_ERRNO for IO error, or zLib error for uncompress error)
+*/
+extern int ZEXPORT unzReadCurrentFile  (unzFile file, voidp buf, unsigned len)
+{
+    int err=UNZ_OK;
+    uInt iRead = 0;
+    unz64_s* s;
+    file_in_zip64_read_info_s* pfile_in_zip_read_info;
+    if (file==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+    pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+    if (pfile_in_zip_read_info==NULL)
+        return UNZ_PARAMERROR;
+
+
+    if (pfile_in_zip_read_info->read_buffer == NULL)
+        return UNZ_END_OF_LIST_OF_FILE;
+    if (len==0)
+        return 0;
+
+    pfile_in_zip_read_info->stream.next_out = (Bytef*)buf;
+
+    pfile_in_zip_read_info->stream.avail_out = (uInt)len;
+
+    if ((len>pfile_in_zip_read_info->rest_read_uncompressed) &&
+        (!(pfile_in_zip_read_info->raw)))
+        pfile_in_zip_read_info->stream.avail_out =
+            (uInt)pfile_in_zip_read_info->rest_read_uncompressed;
+
+    if ((len>pfile_in_zip_read_info->rest_read_compressed+
+           pfile_in_zip_read_info->stream.avail_in) &&
+         (pfile_in_zip_read_info->raw))
+        pfile_in_zip_read_info->stream.avail_out =
+            (uInt)pfile_in_zip_read_info->rest_read_compressed+
+            pfile_in_zip_read_info->stream.avail_in;
+
+    while (pfile_in_zip_read_info->stream.avail_out>0)
+    {
+        if ((pfile_in_zip_read_info->stream.avail_in==0) &&
+            (pfile_in_zip_read_info->rest_read_compressed>0))
+        {
+            uInt uReadThis = UNZ_BUFSIZE;
+            if (pfile_in_zip_read_info->rest_read_compressed<uReadThis)
+                uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed;
+            if (uReadThis == 0)
+                return UNZ_EOF;
+            if (ZSEEK64(pfile_in_zip_read_info->z_filefunc,
+                      pfile_in_zip_read_info->filestream,
+                      pfile_in_zip_read_info->pos_in_zipfile +
+                         pfile_in_zip_read_info->byte_before_the_zipfile,
+                         ZLIB_FILEFUNC_SEEK_SET)!=0)
+                return UNZ_ERRNO;
+            if (ZREAD64(pfile_in_zip_read_info->z_filefunc,
+                      pfile_in_zip_read_info->filestream,
+                      pfile_in_zip_read_info->read_buffer,
+                      uReadThis)!=uReadThis)
+                return UNZ_ERRNO;
+
+
+#            ifndef NOUNCRYPT
+            if(s->encrypted)
+            {
+                uInt i;
+                for(i=0;i<uReadThis;i++)
+                  pfile_in_zip_read_info->read_buffer[i] =
+                      zdecode(s->keys,s->pcrc_32_tab,
+                              pfile_in_zip_read_info->read_buffer[i]);
+            }
+#            endif
+
+
+            pfile_in_zip_read_info->pos_in_zipfile += uReadThis;
+
+            pfile_in_zip_read_info->rest_read_compressed-=uReadThis;
+
+            pfile_in_zip_read_info->stream.next_in =
+                (Bytef*)pfile_in_zip_read_info->read_buffer;
+            pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;
+        }
+
+        if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw))
+        {
+            uInt uDoCopy,i ;
+
+            if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
+                (pfile_in_zip_read_info->rest_read_compressed == 0))
+                return (iRead==0) ? UNZ_EOF : iRead;
+
+            if (pfile_in_zip_read_info->stream.avail_out <
+                            pfile_in_zip_read_info->stream.avail_in)
+                uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
+            else
+                uDoCopy = pfile_in_zip_read_info->stream.avail_in ;
+
+            for (i=0;i<uDoCopy;i++)
+                *(pfile_in_zip_read_info->stream.next_out+i) =
+                        *(pfile_in_zip_read_info->stream.next_in+i);
+
+            pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uDoCopy;
+
+            pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,
+                                pfile_in_zip_read_info->stream.next_out,
+                                uDoCopy);
+            pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;
+            pfile_in_zip_read_info->stream.avail_in -= uDoCopy;
+            pfile_in_zip_read_info->stream.avail_out -= uDoCopy;
+            pfile_in_zip_read_info->stream.next_out += uDoCopy;
+            pfile_in_zip_read_info->stream.next_in += uDoCopy;
+            pfile_in_zip_read_info->stream.total_out += uDoCopy;
+            iRead += uDoCopy;
+        }
+        else if (pfile_in_zip_read_info->compression_method==Z_BZIP2ED)
+        {
+#ifdef HAVE_BZIP2
+            uLong uTotalOutBefore,uTotalOutAfter;
+            const Bytef *bufBefore;
+            uLong uOutThis;
+
+            pfile_in_zip_read_info->bstream.next_in        = (char*)pfile_in_zip_read_info->stream.next_in;
+            pfile_in_zip_read_info->bstream.avail_in       = pfile_in_zip_read_info->stream.avail_in;
+            pfile_in_zip_read_info->bstream.total_in_lo32  = pfile_in_zip_read_info->stream.total_in;
+            pfile_in_zip_read_info->bstream.total_in_hi32  = 0;
+            pfile_in_zip_read_info->bstream.next_out       = (char*)pfile_in_zip_read_info->stream.next_out;
+            pfile_in_zip_read_info->bstream.avail_out      = pfile_in_zip_read_info->stream.avail_out;
+            pfile_in_zip_read_info->bstream.total_out_lo32 = pfile_in_zip_read_info->stream.total_out;
+            pfile_in_zip_read_info->bstream.total_out_hi32 = 0;
+
+            uTotalOutBefore = pfile_in_zip_read_info->bstream.total_out_lo32;
+            bufBefore = (const Bytef *)pfile_in_zip_read_info->bstream.next_out;
+
+            err=BZ2_bzDecompress(&pfile_in_zip_read_info->bstream);
+
+            uTotalOutAfter = pfile_in_zip_read_info->bstream.total_out_lo32;
+            uOutThis = uTotalOutAfter-uTotalOutBefore;
+
+            pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
+
+            pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis));
+            pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis;
+            iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
+
+            pfile_in_zip_read_info->stream.next_in   = (Bytef*)pfile_in_zip_read_info->bstream.next_in;
+            pfile_in_zip_read_info->stream.avail_in  = pfile_in_zip_read_info->bstream.avail_in;
+            pfile_in_zip_read_info->stream.total_in  = pfile_in_zip_read_info->bstream.total_in_lo32;
+            pfile_in_zip_read_info->stream.next_out  = (Bytef*)pfile_in_zip_read_info->bstream.next_out;
+            pfile_in_zip_read_info->stream.avail_out = pfile_in_zip_read_info->bstream.avail_out;
+            pfile_in_zip_read_info->stream.total_out = pfile_in_zip_read_info->bstream.total_out_lo32;
+
+            if (err==BZ_STREAM_END)
+              return (iRead==0) ? UNZ_EOF : iRead;
+            if (err!=BZ_OK)
+              break;
+#endif
+        } /* end Z_BZIP2ED */
+        else
+        {
+            ZPOS64_T uTotalOutBefore,uTotalOutAfter;
+            const Bytef *bufBefore;
+            ZPOS64_T uOutThis;
+            int flush=Z_SYNC_FLUSH;
+
+            uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;
+            bufBefore = pfile_in_zip_read_info->stream.next_out;
+
+            /*
+            if ((pfile_in_zip_read_info->rest_read_uncompressed ==
+                     pfile_in_zip_read_info->stream.avail_out) &&
+                (pfile_in_zip_read_info->rest_read_compressed == 0))
+                flush = Z_FINISH;
+            */
+            err=inflate(&pfile_in_zip_read_info->stream,flush);
+
+            if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL))
+              err = Z_DATA_ERROR;
+
+            uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
+            uOutThis = uTotalOutAfter-uTotalOutBefore;
+
+            pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
+
+            pfile_in_zip_read_info->crc32 =
+                crc32(pfile_in_zip_read_info->crc32,bufBefore,
+                        (uInt)(uOutThis));
+
+            pfile_in_zip_read_info->rest_read_uncompressed -=
+                uOutThis;
+
+            iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
+
+            if (err==Z_STREAM_END)
+                return (iRead==0) ? UNZ_EOF : iRead;
+            if (err!=Z_OK)
+                break;
+        }
+    }
+
+    if (err==Z_OK)
+        return iRead;
+    return err;
+}
+
+
+/*
+  Give the current position in uncompressed data
+*/
+extern z_off_t ZEXPORT unztell (unzFile file)
+{
+    unz64_s* s;
+    file_in_zip64_read_info_s* pfile_in_zip_read_info;
+    if (file==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+    pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+    if (pfile_in_zip_read_info==NULL)
+        return UNZ_PARAMERROR;
+
+    return (z_off_t)pfile_in_zip_read_info->stream.total_out;
+}
+
+extern ZPOS64_T ZEXPORT unztell64 (unzFile file)
+{
+
+    unz64_s* s;
+    file_in_zip64_read_info_s* pfile_in_zip_read_info;
+    if (file==NULL)
+        return (ZPOS64_T)-1;
+    s=(unz64_s*)file;
+    pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+    if (pfile_in_zip_read_info==NULL)
+        return (ZPOS64_T)-1;
+
+    return pfile_in_zip_read_info->total_out_64;
+}
+
+
+/*
+  return 1 if the end of file was reached, 0 elsewhere
+*/
+extern int ZEXPORT unzeof (unzFile file)
+{
+    unz64_s* s;
+    file_in_zip64_read_info_s* pfile_in_zip_read_info;
+    if (file==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+    pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+    if (pfile_in_zip_read_info==NULL)
+        return UNZ_PARAMERROR;
+
+    if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
+        return 1;
+    else
+        return 0;
+}
+
+
+
+/*
+Read extra field from the current file (opened by unzOpenCurrentFile)
+This is the local-header version of the extra field (sometimes, there is
+more info in the local-header version than in the central-header)
+
+  if buf==NULL, it return the size of the local extra field that can be read
+
+  if buf!=NULL, len is the size of the buffer, the extra header is copied in
+    buf.
+  the return value is the number of bytes copied in buf, or (if <0)
+    the error code
+*/
+extern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len)
+{
+    unz64_s* s;
+    file_in_zip64_read_info_s* pfile_in_zip_read_info;
+    uInt read_now;
+    ZPOS64_T size_to_read;
+
+    if (file==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+    pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+    if (pfile_in_zip_read_info==NULL)
+        return UNZ_PARAMERROR;
+
+    size_to_read = (pfile_in_zip_read_info->size_local_extrafield -
+                pfile_in_zip_read_info->pos_local_extrafield);
+
+    if (buf==NULL)
+        return (int)size_to_read;
+
+    if (len>size_to_read)
+        read_now = (uInt)size_to_read;
+    else
+        read_now = (uInt)len ;
+
+    if (read_now==0)
+        return 0;
+
+    if (ZSEEK64(pfile_in_zip_read_info->z_filefunc,
+              pfile_in_zip_read_info->filestream,
+              pfile_in_zip_read_info->offset_local_extrafield +
+              pfile_in_zip_read_info->pos_local_extrafield,
+              ZLIB_FILEFUNC_SEEK_SET)!=0)
+        return UNZ_ERRNO;
+
+    if (ZREAD64(pfile_in_zip_read_info->z_filefunc,
+              pfile_in_zip_read_info->filestream,
+              buf,read_now)!=read_now)
+        return UNZ_ERRNO;
+
+    return (int)read_now;
+}
+
+/*
+  Close the file in zip opened with unzipOpenCurrentFile
+  Return UNZ_CRCERROR if all the file was read but the CRC is not good
+*/
+extern int ZEXPORT unzCloseCurrentFile (unzFile file)
+{
+    int err=UNZ_OK;
+
+    unz64_s* s;
+    file_in_zip64_read_info_s* pfile_in_zip_read_info;
+    if (file==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+    pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+    if (pfile_in_zip_read_info==NULL)
+        return UNZ_PARAMERROR;
+
+
+    if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) &&
+        (!pfile_in_zip_read_info->raw))
+    {
+        if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait)
+            err=UNZ_CRCERROR;
+    }
+
+
+    TRYFREE(pfile_in_zip_read_info->read_buffer);
+    pfile_in_zip_read_info->read_buffer = NULL;
+    if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED)
+        inflateEnd(&pfile_in_zip_read_info->stream);
+#ifdef HAVE_BZIP2
+    else if (pfile_in_zip_read_info->stream_initialised == Z_BZIP2ED)
+        BZ2_bzDecompressEnd(&pfile_in_zip_read_info->bstream);
+#endif
+
+
+    pfile_in_zip_read_info->stream_initialised = 0;
+    TRYFREE(pfile_in_zip_read_info);
+
+    s->pfile_in_zip_read=NULL;
+
+    return err;
+}
+
+
+/*
+  Get the global comment string of the ZipFile, in the szComment buffer.
+  uSizeBuf is the size of the szComment buffer.
+  return the number of byte copied or an error code <0
+*/
+extern int ZEXPORT unzGetGlobalComment (unzFile file, char * szComment, uLong uSizeBuf)
+{
+    unz64_s* s;
+    uLong uReadThis ;
+    if (file==NULL)
+        return (int)UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+
+    uReadThis = uSizeBuf;
+    if (uReadThis>s->gi.size_comment)
+        uReadThis = s->gi.size_comment;
+
+    if (ZSEEK64(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0)
+        return UNZ_ERRNO;
+
+    if (uReadThis>0)
+    {
+      *szComment='\0';
+      if (ZREAD64(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis)
+        return UNZ_ERRNO;
+    }
+
+    if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment))
+        *(szComment+s->gi.size_comment)='\0';
+    return (int)uReadThis;
+}
+
+/* Additions by RX '2004 */
+extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file)
+{
+    unz64_s* s;
+
+    if (file==NULL)
+          return 0; /*UNZ_PARAMERROR; */
+    s=(unz64_s*)file;
+    if (!s->current_file_ok)
+      return 0;
+    if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff)
+      if (s->num_file==s->gi.number_entry)
+         return 0;
+    return s->pos_in_central_dir;
+}
+
+extern uLong ZEXPORT unzGetOffset (unzFile file)
+{
+    ZPOS64_T offset64;
+
+    if (file==NULL)
+          return 0; /*UNZ_PARAMERROR; */
+    offset64 = unzGetOffset64(file);
+    return (uLong)offset64;
+}
+
+extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos)
+{
+    unz64_s* s;
+    int err;
+
+    if (file==NULL)
+        return UNZ_PARAMERROR;
+    s=(unz64_s*)file;
+
+    s->pos_in_central_dir = pos;
+    s->num_file = s->gi.number_entry;      /* hack */
+    err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+                                              &s->cur_file_info_internal,
+                                              NULL,0,NULL,0,NULL,0);
+    s->current_file_ok = (err == UNZ_OK);
+    return err;
+}
+
+extern int ZEXPORT unzSetOffset (unzFile file, uLong pos)
+{
+    return unzSetOffset64(file,pos);
+}
+
+
+int ZEXPORT unzSetFlags(unzFile file, unsigned flags)
+{
+    unz64_s* s;
+    if (file == NULL)
+        return UNZ_PARAMERROR;
+    s = (unz64_s*)file;
+    s->flags |= flags;
+    return UNZ_OK;
+}
+
+
+int ZEXPORT unzClearFlags(unzFile file, unsigned flags)
+{
+    unz64_s* s;
+    if (file == NULL)
+        return UNZ_PARAMERROR;
+    s = (unz64_s*)file;
+    s->flags &= ~flags;
+    return UNZ_OK;
+}
diff --git a/3rdparty/quazip-0.7/quazip/unzip.h b/3rdparty/quazip-0.7/quazip/unzip.h
new file mode 100644
index 0000000..da7b062
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/unzip.h
@@ -0,0 +1,458 @@
+/* unzip.h -- IO for uncompress .zip files using zlib
+   Version 1.1, February 14h, 2010
+   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+         Modifications of Unzip for Zip64
+         Copyright (C) 2007-2008 Even Rouault
+
+         Modifications for Zip64 support on both zip and unzip
+         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+         For more info read MiniZip_info.txt
+
+         ---------------------------------------------------------------------------------
+
+        Condition of use and distribution are the same than zlib :
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  ---------------------------------------------------------------------------------
+
+        Changes
+
+        See header of unzip64.c
+
+  ---------------------------------------------------------------------------
+
+  As per the requirement above, this file is plainly marked as modified
+  by Sergey A. Tachenov. Most modifications include the I/O API redesign
+  to support QIODevice interface. Some improvements and small fixes were also made.
+*/
+
+#ifndef _unz64_H
+#define _unz64_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _ZLIB_H
+#include "zlib.h"
+#endif
+
+#ifndef  _ZLIBIOAPI_H
+#include "ioapi.h"
+#endif
+
+#ifdef HAVE_BZIP2
+#include "bzlib.h"
+#endif
+
+#define Z_BZIP2ED 12
+
+#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)
+/* like the STRICT of WIN32, we define a pointer that cannot be converted
+    from (void*) without cast */
+typedef struct TagunzFile__ { int unused; } unzFile__;
+typedef unzFile__ *unzFile;
+#else
+typedef voidp unzFile;
+#endif
+
+
+#define UNZ_OK                          (0)
+#define UNZ_END_OF_LIST_OF_FILE         (-100)
+#define UNZ_ERRNO                       (Z_ERRNO)
+#define UNZ_EOF                         (0)
+#define UNZ_PARAMERROR                  (-102)
+#define UNZ_BADZIPFILE                  (-103)
+#define UNZ_INTERNALERROR               (-104)
+#define UNZ_CRCERROR                    (-105)
+
+#define UNZ_AUTO_CLOSE 0x01u
+#define UNZ_DEFAULT_FLAGS UNZ_AUTO_CLOSE
+
+/* tm_unz contain date/time info */
+typedef struct tm_unz_s
+{
+    uInt tm_sec;            /* seconds after the minute - [0,59] */
+    uInt tm_min;            /* minutes after the hour - [0,59] */
+    uInt tm_hour;           /* hours since midnight - [0,23] */
+    uInt tm_mday;           /* day of the month - [1,31] */
+    uInt tm_mon;            /* months since January - [0,11] */
+    uInt tm_year;           /* years - [1980..2044] */
+} tm_unz;
+
+/* unz_global_info structure contain global data about the ZIPfile
+   These data comes from the end of central dir */
+typedef struct unz_global_info64_s
+{
+    ZPOS64_T number_entry;         /* total number of entries in
+                                     the central dir on this disk */
+    uLong size_comment;         /* size of the global comment of the zipfile */
+} unz_global_info64;
+
+typedef struct unz_global_info_s
+{
+    uLong number_entry;         /* total number of entries in
+                                     the central dir on this disk */
+    uLong size_comment;         /* size of the global comment of the zipfile */
+} unz_global_info;
+
+/* unz_file_info contain information about a file in the zipfile */
+typedef struct unz_file_info64_s
+{
+    uLong version;              /* version made by                 2 bytes */
+    uLong version_needed;       /* version needed to extract       2 bytes */
+    uLong flag;                 /* general purpose bit flag        2 bytes */
+    uLong compression_method;   /* compression method              2 bytes */
+    uLong dosDate;              /* last mod file date in Dos fmt   4 bytes */
+    uLong crc;                  /* crc-32                          4 bytes */
+    ZPOS64_T compressed_size;   /* compressed size                 8 bytes */
+    ZPOS64_T uncompressed_size; /* uncompressed size               8 bytes */
+    uLong size_filename;        /* filename length                 2 bytes */
+    uLong size_file_extra;      /* extra field length              2 bytes */
+    uLong size_file_comment;    /* file comment length             2 bytes */
+
+    uLong disk_num_start;       /* disk number start               2 bytes */
+    uLong internal_fa;          /* internal file attributes        2 bytes */
+    uLong external_fa;          /* external file attributes        4 bytes */
+
+    tm_unz tmu_date;
+} unz_file_info64;
+
+typedef struct unz_file_info_s
+{
+    uLong version;              /* version made by                 2 bytes */
+    uLong version_needed;       /* version needed to extract       2 bytes */
+    uLong flag;                 /* general purpose bit flag        2 bytes */
+    uLong compression_method;   /* compression method              2 bytes */
+    uLong dosDate;              /* last mod file date in Dos fmt   4 bytes */
+    uLong crc;                  /* crc-32                          4 bytes */
+    uLong compressed_size;      /* compressed size                 4 bytes */
+    uLong uncompressed_size;    /* uncompressed size               4 bytes */
+    uLong size_filename;        /* filename length                 2 bytes */
+    uLong size_file_extra;      /* extra field length              2 bytes */
+    uLong size_file_comment;    /* file comment length             2 bytes */
+
+    uLong disk_num_start;       /* disk number start               2 bytes */
+    uLong internal_fa;          /* internal file attributes        2 bytes */
+    uLong external_fa;          /* external file attributes        4 bytes */
+
+    tm_unz tmu_date;
+} unz_file_info;
+
+extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
+                                                 const char* fileName2,
+                                                 int iCaseSensitivity));
+/*
+   Compare two filename (fileName1,fileName2).
+   If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
+   If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
+                                or strcasecmp)
+   If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
+    (like 1 on Unix, 2 on Windows)
+*/
+
+
+extern unzFile ZEXPORT unzOpen OF((voidpf file));
+extern unzFile ZEXPORT unzOpen64 OF((voidpf file));
+/*
+  Open a Zip file. path contain the full pathname (by example,
+     on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
+     "zlib/zlib113.zip".
+     If the zipfile cannot be opened (file don't exist or in not valid), the
+       return value is NULL.
+     Else, the return value is a unzFile Handle, usable with other function
+       of this unzip package.
+     the "64" function take a const void* pointer, because the path is just the
+       value passed to the open64_file_func callback.
+     Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path
+       is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char*
+       does not describe the reality
+*/
+
+
+extern unzFile ZEXPORT unzOpen2 OF((voidpf file,
+                                    zlib_filefunc_def* pzlib_filefunc_def));
+/*
+   Open a Zip file, like unzOpen, but provide a set of file low level API
+      for read/write the zip file (see ioapi.h)
+*/
+
+extern unzFile ZEXPORT unzOpen2_64 OF((voidpf file,
+                                    zlib_filefunc64_def* pzlib_filefunc_def));
+/*
+   Open a Zip file, like unz64Open, but provide a set of file low level API
+      for read/write the zip file (see ioapi.h)
+*/
+
+
+/*
+ * Exported by Sergey A. Tachenov to implement some QuaZIP features. This
+ * function MAY change signature in order to implement even more features.
+ * You have been warned!
+ * */
+extern unzFile unzOpenInternal (voidpf file,
+                               zlib_filefunc64_32_def* pzlib_filefunc64_32_def,
+                               int is64bitOpenFunction, unsigned flags);
+
+
+
+extern int ZEXPORT unzClose OF((unzFile file));
+/*
+  Close a ZipFile opened with unzipOpen.
+  If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
+    these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
+  return UNZ_OK if there is no problem. */
+
+extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
+                                        unz_global_info *pglobal_info));
+
+extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file,
+                                        unz_global_info64 *pglobal_info));
+/*
+  Write info about the ZipFile in the *pglobal_info structure.
+  No preparation of the structure is needed
+  return UNZ_OK if there is no problem. */
+
+
+extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
+                                           char *szComment,
+                                           uLong uSizeBuf));
+/*
+  Get the global comment string of the ZipFile, in the szComment buffer.
+  uSizeBuf is the size of the szComment buffer.
+  return the number of byte copied or an error code <0
+*/
+
+
+/***************************************************************************/
+/* Unzip package allow you browse the directory of the zipfile */
+
+extern int ZEXPORT unzGoToFirstFile OF((unzFile file));
+/*
+  Set the current file of the zipfile to the first file.
+  return UNZ_OK if there is no problem
+*/
+
+extern int ZEXPORT unzGoToNextFile OF((unzFile file));
+/*
+  Set the current file of the zipfile to the next file.
+  return UNZ_OK if there is no problem
+  return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
+*/
+
+extern int ZEXPORT unzLocateFile OF((unzFile file,
+                     const char *szFileName,
+                     int iCaseSensitivity));
+/*
+  Try locate the file szFileName in the zipfile.
+  For the iCaseSensitivity signification, see unzStringFileNameCompare
+
+  return value :
+  UNZ_OK if the file is found. It becomes the current file.
+  UNZ_END_OF_LIST_OF_FILE if the file is not found
+*/
+
+
+/* ****************************************** */
+/* Ryan supplied functions */
+/* unz_file_info contain information about a file in the zipfile */
+typedef struct unz_file_pos_s
+{
+    uLong pos_in_zip_directory;   /* offset in zip file directory */
+    uLong num_of_file;            /* # of file */
+} unz_file_pos;
+
+extern int ZEXPORT unzGetFilePos(
+    unzFile file,
+    unz_file_pos* file_pos);
+
+extern int ZEXPORT unzGoToFilePos(
+    unzFile file,
+    unz_file_pos* file_pos);
+
+typedef struct unz64_file_pos_s
+{
+    ZPOS64_T pos_in_zip_directory;   /* offset in zip file directory */
+    ZPOS64_T num_of_file;            /* # of file */
+} unz64_file_pos;
+
+extern int ZEXPORT unzGetFilePos64(
+    unzFile file,
+    unz64_file_pos* file_pos);
+
+extern int ZEXPORT unzGoToFilePos64(
+    unzFile file,
+    const unz64_file_pos* file_pos);
+
+/* ****************************************** */
+
+extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file,
+                         unz_file_info64 *pfile_info,
+                         char *szFileName,
+                         uLong fileNameBufferSize,
+                         void *extraField,
+                         uLong extraFieldBufferSize,
+                         char *szComment,
+                         uLong commentBufferSize));
+
+extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
+                         unz_file_info *pfile_info,
+                         char *szFileName,
+                         uLong fileNameBufferSize,
+                         void *extraField,
+                         uLong extraFieldBufferSize,
+                         char *szComment,
+                         uLong commentBufferSize));
+/*
+  Get Info about the current file
+  if pfile_info!=NULL, the *pfile_info structure will contain somes info about
+        the current file
+  if szFileName!=NULL, the filemane string will be copied in szFileName
+            (fileNameBufferSize is the size of the buffer)
+  if extraField!=NULL, the extra field information will be copied in extraField
+            (extraFieldBufferSize is the size of the buffer).
+            This is the Central-header version of the extra field
+  if szComment!=NULL, the comment string of the file will be copied in szComment
+            (commentBufferSize is the size of the buffer)
+*/
+
+
+/** Addition for GDAL : START */
+
+extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file));
+
+/** Addition for GDAL : END */
+
+
+/***************************************************************************/
+/* for reading the content of the current zipfile, you can open it, read data
+   from it, and close it (you can close it before reading all the file)
+   */
+
+extern int ZEXPORT unzOpenCurrentFile OF((unzFile file));
+/*
+  Open for reading data the current file in the zipfile.
+  If there is no error, the return value is UNZ_OK.
+*/
+
+extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,
+                                                  const char* password));
+/*
+  Open for reading data the current file in the zipfile.
+  password is a crypting password
+  If there is no error, the return value is UNZ_OK.
+*/
+
+extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
+                                           int* method,
+                                           int* level,
+                                           int raw));
+/*
+  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
+    if raw==1
+  *method will receive method of compression, *level will receive level of
+     compression
+  note : you can set level parameter as NULL (if you did not want known level,
+         but you CANNOT set method parameter as NULL
+*/
+
+extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
+                                           int* method,
+                                           int* level,
+                                           int raw,
+                                           const char* password));
+/*
+  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
+    if raw==1
+  *method will receive method of compression, *level will receive level of
+     compression
+  note : you can set level parameter as NULL (if you did not want known level,
+         but you CANNOT set method parameter as NULL
+*/
+
+
+extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
+/*
+  Close the file in zip opened with unzOpenCurrentFile
+  Return UNZ_CRCERROR if all the file was read but the CRC is not good
+*/
+
+extern int ZEXPORT unzReadCurrentFile OF((unzFile file,
+                      voidp buf,
+                      unsigned len));
+/*
+  Read bytes from the current file (opened by unzOpenCurrentFile)
+  buf contain buffer where data must be copied
+  len the size of buf.
+
+  return the number of byte copied if somes bytes are copied
+  return 0 if the end of file was reached
+  return <0 with error code if there is an error
+    (UNZ_ERRNO for IO error, or zLib error for uncompress error)
+*/
+
+extern z_off_t ZEXPORT unztell OF((unzFile file));
+
+extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file));
+/*
+  Give the current position in uncompressed data
+*/
+
+extern int ZEXPORT unzeof OF((unzFile file));
+/*
+  return 1 if the end of file was reached, 0 elsewhere
+*/
+
+extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
+                                             voidp buf,
+                                             unsigned len));
+/*
+  Read extra field from the current file (opened by unzOpenCurrentFile)
+  This is the local-header version of the extra field (sometimes, there is
+    more info in the local-header version than in the central-header)
+
+  if buf==NULL, it return the size of the local extra field
+
+  if buf!=NULL, len is the size of the buffer, the extra header is copied in
+    buf.
+  the return value is the number of bytes copied in buf, or (if <0)
+    the error code
+*/
+
+/***************************************************************************/
+
+/* Get the current file offset */
+extern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file);
+extern uLong ZEXPORT unzGetOffset (unzFile file);
+
+/* Set the current file offset */
+extern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos);
+extern int ZEXPORT unzSetOffset (unzFile file, uLong pos);
+
+extern int ZEXPORT unzSetFlags(unzFile file, unsigned flags);
+extern int ZEXPORT unzClearFlags(unzFile file, unsigned flags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _unz64_H */
diff --git a/3rdparty/quazip-0.7/quazip/zip.c b/3rdparty/quazip-0.7/quazip/zip.c
new file mode 100644
index 0000000..9649653
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/zip.c
@@ -0,0 +1,2103 @@
+/* zip.c -- IO on .zip files using zlib
+   Version 1.1, February 14h, 2010
+   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+         Modifications for Zip64 support
+         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+         For more info read MiniZip_info.txt
+
+         Modifications for QIODevice support and other QuaZIP fixes
+         Copyright (C) 2005-2014 Sergey A. Tachenov
+
+         Changes
+   Oct-2009 - Mathias Svensson - Remove old C style function prototypes
+   Oct-2009 - Mathias Svensson - Added Zip64 Support when creating new file archives
+   Oct-2009 - Mathias Svensson - Did some code cleanup and refactoring to get better overview of some functions.
+   Oct-2009 - Mathias Svensson - Added zipRemoveExtraInfoBlock to strip extra field data from its ZIP64 data
+                                 It is used when recreting zip archive with RAW when deleting items from a zip.
+                                 ZIP64 data is automaticly added to items that needs it, and existing ZIP64 data need to be removed.
+   Oct-2009 - Mathias Svensson - Added support for BZIP2 as compression mode (bzip2 lib is required)
+   Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer
+
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include "zlib.h"
+#if (ZLIB_VERNUM < 0x1270)
+typedef uLongf z_crc_t;
+#endif
+#include "zip.h"
+
+#ifdef STDC
+#  include <stddef.h>
+#  include <string.h>
+#  include <stdlib.h>
+#endif
+#ifdef NO_ERRNO_H
+    extern int errno;
+#else
+#   include <errno.h>
+#endif
+
+
+#ifndef local
+#  define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+#ifndef VERSIONMADEBY
+# define VERSIONMADEBY   (0x031e) /* best for standard pkware crypt */
+#endif
+
+#ifndef Z_BUFSIZE
+#define Z_BUFSIZE (64*1024) /* (16384) */
+#endif
+
+#ifndef Z_MAXFILENAMEINZIP
+#define Z_MAXFILENAMEINZIP (256)
+#endif
+
+#ifndef ALLOC
+# define ALLOC(size) (malloc(size))
+#endif
+#ifndef TRYFREE
+# define TRYFREE(p) {if (p) free(p);}
+#endif
+
+/*
+#define SIZECENTRALDIRITEM (0x2e)
+#define SIZEZIPLOCALHEADER (0x1e)
+*/
+
+/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */
+
+
+/* NOT sure that this work on ALL platform */
+#define MAKEULONG64(a, b) ((ZPOS64_T)(((unsigned long)(a)) | ((ZPOS64_T)((unsigned long)(b))) << 32))
+
+#ifndef SEEK_CUR
+#define SEEK_CUR    1
+#endif
+
+#ifndef SEEK_END
+#define SEEK_END    2
+#endif
+
+#ifndef SEEK_SET
+#define SEEK_SET    0
+#endif
+
+#ifndef DEF_MEM_LEVEL
+#if MAX_MEM_LEVEL >= 8
+#  define DEF_MEM_LEVEL 8
+#else
+#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
+#endif
+#endif
+const char zip_copyright[] =" zip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
+
+
+#define SIZEDATA_INDATABLOCK (4096-(4*4))
+
+#define LOCALHEADERMAGIC    (0x04034b50)
+#define DESCRIPTORHEADERMAGIC    (0x08074b50)
+#define CENTRALHEADERMAGIC  (0x02014b50)
+#define ENDHEADERMAGIC      (0x06054b50)
+#define ZIP64ENDHEADERMAGIC      (0x6064b50)
+#define ZIP64ENDLOCHEADERMAGIC   (0x7064b50)
+
+#define FLAG_LOCALHEADER_OFFSET (0x06)
+#define CRC_LOCALHEADER_OFFSET  (0x0e)
+
+#define SIZECENTRALHEADER (0x2e) /* 46 */
+
+typedef struct linkedlist_datablock_internal_s
+{
+  struct linkedlist_datablock_internal_s* next_datablock;
+  uLong  avail_in_this_block;
+  uLong  filled_in_this_block;
+  uLong  unused; /* for future use and alignement */
+  unsigned char data[SIZEDATA_INDATABLOCK];
+} linkedlist_datablock_internal;
+
+typedef struct linkedlist_data_s
+{
+    linkedlist_datablock_internal* first_block;
+    linkedlist_datablock_internal* last_block;
+} linkedlist_data;
+
+
+typedef struct
+{
+    z_stream stream;            /* zLib stream structure for inflate */
+#ifdef HAVE_BZIP2
+    bz_stream bstream;          /* bzLib stream structure for bziped */
+#endif
+
+    int  stream_initialised;    /* 1 is stream is initialised */
+    uInt pos_in_buffered_data;  /* last written byte in buffered_data */
+
+    ZPOS64_T pos_local_header;     /* offset of the local header of the file
+                                     currenty writing */
+    char* central_header;       /* central header data for the current file */
+    uLong size_centralExtra;
+    uLong size_centralheader;   /* size of the central header for cur file */
+    uLong size_centralExtraFree; /* Extra bytes allocated to the centralheader but that are not used */
+    uLong flag;                 /* flag of the file currently writing */
+
+    int  method;                /* compression method of file currenty wr.*/
+    int  raw;                   /* 1 for directly writing raw data */
+    Byte buffered_data[Z_BUFSIZE];/* buffer contain compressed data to be writ*/
+    uLong dosDate;
+    uLong crc32;
+    int  encrypt;
+    int  zip64;               /* Add ZIP64 extened information in the extra field */
+    ZPOS64_T pos_zip64extrainfo;
+    ZPOS64_T totalCompressedData;
+    ZPOS64_T totalUncompressedData;
+#ifndef NOCRYPT
+    unsigned long keys[3];     /* keys defining the pseudo-random sequence */
+    const z_crc_t FAR * pcrc_32_tab;
+    int crypt_header_size;
+#endif
+} curfile64_info;
+
+typedef struct
+{
+    zlib_filefunc64_32_def z_filefunc;
+    voidpf filestream;        /* io structore of the zipfile */
+    linkedlist_data central_dir;/* datablock with central dir in construction*/
+    int  in_opened_file_inzip;  /* 1 if a file in the zip is currently writ.*/
+    curfile64_info ci;            /* info on the file curretly writing */
+
+    ZPOS64_T begin_pos;            /* position of the beginning of the zipfile */
+    ZPOS64_T add_position_when_writting_offset;
+    ZPOS64_T number_entry;
+
+#ifndef NO_ADDFILEINEXISTINGZIP
+    char *globalcomment;
+#endif
+
+    unsigned flags;
+
+} zip64_internal;
+
+
+#ifndef NOCRYPT
+#define INCLUDECRYPTINGCODE_IFCRYPTALLOWED
+#include "crypt.h"
+#endif
+
+local linkedlist_datablock_internal* allocate_new_datablock()
+{
+    linkedlist_datablock_internal* ldi;
+    ldi = (linkedlist_datablock_internal*)
+                 ALLOC(sizeof(linkedlist_datablock_internal));
+    if (ldi!=NULL)
+    {
+        ldi->next_datablock = NULL ;
+        ldi->filled_in_this_block = 0 ;
+        ldi->avail_in_this_block = SIZEDATA_INDATABLOCK ;
+    }
+    return ldi;
+}
+
+local void free_datablock(linkedlist_datablock_internal* ldi)
+{
+    while (ldi!=NULL)
+    {
+        linkedlist_datablock_internal* ldinext = ldi->next_datablock;
+        TRYFREE(ldi);
+        ldi = ldinext;
+    }
+}
+
+local void init_linkedlist(linkedlist_data* ll)
+{
+    ll->first_block = ll->last_block = NULL;
+}
+
+local void free_linkedlist(linkedlist_data* ll)
+{
+    free_datablock(ll->first_block);
+    ll->first_block = ll->last_block = NULL;
+}
+
+
+local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len)
+{
+    linkedlist_datablock_internal* ldi;
+    const unsigned char* from_copy;
+
+    if (ll==NULL)
+        return ZIP_INTERNALERROR;
+
+    if (ll->last_block == NULL)
+    {
+        ll->first_block = ll->last_block = allocate_new_datablock();
+        if (ll->first_block == NULL)
+            return ZIP_INTERNALERROR;
+    }
+
+    ldi = ll->last_block;
+    from_copy = (unsigned char*)buf;
+
+    while (len>0)
+    {
+        uInt copy_this;
+        uInt i;
+        unsigned char* to_copy;
+
+        if (ldi->avail_in_this_block==0)
+        {
+            ldi->next_datablock = allocate_new_datablock();
+            if (ldi->next_datablock == NULL)
+                return ZIP_INTERNALERROR;
+            ldi = ldi->next_datablock ;
+            ll->last_block = ldi;
+        }
+
+        if (ldi->avail_in_this_block < len)
+            copy_this = (uInt)ldi->avail_in_this_block;
+        else
+            copy_this = (uInt)len;
+
+        to_copy = &(ldi->data[ldi->filled_in_this_block]);
+
+        for (i=0;i<copy_this;i++)
+            *(to_copy+i)=*(from_copy+i);
+
+        ldi->filled_in_this_block += copy_this;
+        ldi->avail_in_this_block -= copy_this;
+        from_copy += copy_this ;
+        len -= copy_this;
+    }
+    return ZIP_OK;
+}
+
+
+
+/****************************************************************************/
+
+#ifndef NO_ADDFILEINEXISTINGZIP
+/* ===========================================================================
+   Inputs a long in LSB order to the given file
+   nbByte == 1, 2 ,4 or 8 (byte, short or long, ZPOS64_T)
+*/
+
+local int zip64local_putValue OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte));
+local int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte)
+{
+    unsigned char buf[8];
+    int n;
+    for (n = 0; n < nbByte; n++)
+    {
+        buf[n] = (unsigned char)(x & 0xff);
+        x >>= 8;
+    }
+    if (x != 0)
+      {     /* data overflow - hack for ZIP64 (X Roche) */
+      for (n = 0; n < nbByte; n++)
+        {
+          buf[n] = 0xff;
+        }
+      }
+
+    if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte)
+        return ZIP_ERRNO;
+    else
+        return ZIP_OK;
+}
+
+local void zip64local_putValue_inmemory OF((void* dest, ZPOS64_T x, int nbByte));
+local void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte)
+{
+    unsigned char* buf=(unsigned char*)dest;
+    int n;
+    for (n = 0; n < nbByte; n++) {
+        buf[n] = (unsigned char)(x & 0xff);
+        x >>= 8;
+    }
+
+    if (x != 0)
+    {     /* data overflow - hack for ZIP64 */
+       for (n = 0; n < nbByte; n++)
+       {
+          buf[n] = 0xff;
+       }
+    }
+}
+
+/****************************************************************************/
+
+
+local uLong zip64local_TmzDateToDosDate(const tm_zip* ptm)
+{
+    uLong year = (uLong)ptm->tm_year;
+    if (year>=1980)
+        year-=1980;
+    else if (year>=80)
+        year-=80;
+    return
+      (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |
+        ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
+}
+
+
+/****************************************************************************/
+
+local int zip64local_getByte OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi));
+
+local int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def,voidpf filestream,int* pi)
+{
+    unsigned char c;
+    int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);
+    if (err==1)
+    {
+        *pi = (int)c;
+        return ZIP_OK;
+    }
+    else
+    {
+        if (ZERROR64(*pzlib_filefunc_def,filestream))
+            return ZIP_ERRNO;
+        else
+            return ZIP_EOF;
+    }
+}
+
+
+/* ===========================================================================
+   Reads a long in LSB order from the given gz_stream. Sets
+*/
+local int zip64local_getShort OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));
+
+local int zip64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX)
+{
+    uLong x ;
+    int i = 0;
+    int err;
+
+    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x = (uLong)i;
+
+    if (err==ZIP_OK)
+        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x += ((uLong)i)<<8;
+
+    if (err==ZIP_OK)
+        *pX = x;
+    else
+        *pX = 0;
+    return err;
+}
+
+local int zip64local_getLong OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));
+
+local int zip64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX)
+{
+    uLong x ;
+    int i = 0;
+    int err;
+
+    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x = (uLong)i;
+
+    if (err==ZIP_OK)
+        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x += ((uLong)i)<<8;
+
+    if (err==ZIP_OK)
+        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x += ((uLong)i)<<16;
+
+    if (err==ZIP_OK)
+        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    x += ((uLong)i)<<24;
+
+    if (err==ZIP_OK)
+        *pX = x;
+    else
+        *pX = 0;
+    return err;
+}
+
+local int zip64local_getLong64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX));
+
+
+local int zip64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX)
+{
+  ZPOS64_T x;
+  int i = 0;
+  int err;
+
+  err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+  x = (ZPOS64_T)i;
+
+  if (err==ZIP_OK)
+    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+  x += ((ZPOS64_T)i)<<8;
+
+  if (err==ZIP_OK)
+    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+  x += ((ZPOS64_T)i)<<16;
+
+  if (err==ZIP_OK)
+    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+  x += ((ZPOS64_T)i)<<24;
+
+  if (err==ZIP_OK)
+    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+  x += ((ZPOS64_T)i)<<32;
+
+  if (err==ZIP_OK)
+    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+  x += ((ZPOS64_T)i)<<40;
+
+  if (err==ZIP_OK)
+    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+  x += ((ZPOS64_T)i)<<48;
+
+  if (err==ZIP_OK)
+    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+  x += ((ZPOS64_T)i)<<56;
+
+  if (err==ZIP_OK)
+    *pX = x;
+  else
+    *pX = 0;
+
+  return err;
+}
+
+#ifndef BUFREADCOMMENT
+#define BUFREADCOMMENT (0x400)
+#endif
+/*
+  Locate the Central directory of a zipfile (at the end, just before
+    the global comment)
+*/
+local ZPOS64_T zip64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
+
+local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
+{
+  unsigned char* buf;
+  ZPOS64_T uSizeFile;
+  ZPOS64_T uBackRead;
+  ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+  ZPOS64_T uPosFound=0;
+
+  if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+    return 0;
+
+
+  uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+  if (uMaxBack>uSizeFile)
+    uMaxBack = uSizeFile;
+
+  buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+  if (buf==NULL)
+    return 0;
+
+  uBackRead = 4;
+  while (uBackRead<uMaxBack)
+  {
+    uLong uReadSize;
+    ZPOS64_T uReadPos ;
+    int i;
+    if (uBackRead+BUFREADCOMMENT>uMaxBack)
+      uBackRead = uMaxBack;
+    else
+      uBackRead+=BUFREADCOMMENT;
+    uReadPos = uSizeFile-uBackRead ;
+
+    uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+      (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+    if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+      break;
+
+    if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+      break;
+
+    for (i=(int)uReadSize-3; (i--)>0;)
+      if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
+        ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
+      {
+        uPosFound = uReadPos+i;
+        break;
+      }
+
+      if (uPosFound!=0)
+        break;
+  }
+  TRYFREE(buf);
+  return uPosFound;
+}
+
+/*
+Locate the End of Zip64 Central directory locator and from there find the CD of a zipfile (at the end, just before
+the global comment)
+*/
+local ZPOS64_T zip64local_SearchCentralDir64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
+
+local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
+{
+  unsigned char* buf;
+  ZPOS64_T uSizeFile;
+  ZPOS64_T uBackRead;
+  ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+  ZPOS64_T uPosFound=0;
+  uLong uL;
+  ZPOS64_T relativeOffset;
+
+  if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+    return 0;
+
+  uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+  if (uMaxBack>uSizeFile)
+    uMaxBack = uSizeFile;
+
+  buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+  if (buf==NULL)
+    return 0;
+
+  uBackRead = 4;
+  while (uBackRead<uMaxBack)
+  {
+    uLong uReadSize;
+    ZPOS64_T uReadPos;
+    int i;
+    if (uBackRead+BUFREADCOMMENT>uMaxBack)
+      uBackRead = uMaxBack;
+    else
+      uBackRead+=BUFREADCOMMENT;
+    uReadPos = uSizeFile-uBackRead ;
+
+    uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+      (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+    if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+      break;
+
+    if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+      break;
+
+    for (i=(int)uReadSize-3; (i--)>0;)
+    {
+      /* Signature "0x07064b50" Zip64 end of central directory locater */
+      if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
+      {
+        uPosFound = uReadPos+i;
+        break;
+      }
+    }
+
+      if (uPosFound!=0)
+        break;
+  }
+
+  TRYFREE(buf);
+  if (uPosFound == 0)
+    return 0;
+
+  /* Zip64 end of central directory locator */
+  if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)
+    return 0;
+
+  /* the signature, already checked */
+  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+    return 0;
+
+  /* number of the disk with the start of the zip64 end of  central directory */
+  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+    return 0;
+  if (uL != 0)
+    return 0;
+
+  /* relative offset of the zip64 end of central directory record */
+  if (zip64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=ZIP_OK)
+    return 0;
+
+  /* total number of disks */
+  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+    return 0;
+  if (uL != 1)
+    return 0;
+
+  /* Goto Zip64 end of central directory record */
+  if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
+    return 0;
+
+  /* the signature */
+  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+    return 0;
+
+  if (uL != 0x06064b50) /* signature of 'Zip64 end of central directory' */
+    return 0;
+
+  return relativeOffset;
+}
+
+int LoadCentralDirectoryRecord(zip64_internal* pziinit)
+{
+  int err=ZIP_OK;
+  ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
+
+  ZPOS64_T size_central_dir;     /* size of the central directory  */
+  ZPOS64_T offset_central_dir;   /* offset of start of central directory */
+  ZPOS64_T central_pos;
+  uLong uL;
+
+  uLong number_disk;          /* number of the current dist, used for
+                              spaning ZIP, unsupported, always 0*/
+  uLong number_disk_with_CD;  /* number the the disk with central dir, used
+                              for spaning ZIP, unsupported, always 0*/
+  ZPOS64_T number_entry;
+  ZPOS64_T number_entry_CD;      /* total number of entries in
+                                the central dir
+                                (same than number_entry on nospan) */
+  uLong VersionMadeBy;
+  uLong VersionNeeded;
+  uLong size_comment;
+
+  int hasZIP64Record = 0;
+
+  /* check first if we find a ZIP64 record */
+  central_pos = zip64local_SearchCentralDir64(&pziinit->z_filefunc,pziinit->filestream);
+  if(central_pos > 0)
+  {
+    hasZIP64Record = 1;
+  }
+  else if(central_pos == 0)
+  {
+    central_pos = zip64local_SearchCentralDir(&pziinit->z_filefunc,pziinit->filestream);
+  }
+
+/* disable to allow appending to empty ZIP archive
+        if (central_pos==0)
+            err=ZIP_ERRNO;
+*/
+
+  if(hasZIP64Record)
+  {
+    ZPOS64_T sizeEndOfCentralDirectory;
+    if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos, ZLIB_FILEFUNC_SEEK_SET) != 0)
+      err=ZIP_ERRNO;
+
+    /* the signature, already checked */
+    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)
+      err=ZIP_ERRNO;
+
+    /* size of zip64 end of central directory record */
+    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &sizeEndOfCentralDirectory)!=ZIP_OK)
+      err=ZIP_ERRNO;
+
+    /* version made by */
+    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionMadeBy)!=ZIP_OK)
+      err=ZIP_ERRNO;
+
+    /* version needed to extract */
+    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionNeeded)!=ZIP_OK)
+      err=ZIP_ERRNO;
+
+    /* number of this disk */
+    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)
+      err=ZIP_ERRNO;
+
+    /* number of the disk with the start of the central directory */
+    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)
+      err=ZIP_ERRNO;
+
+    /* total number of entries in the central directory on this disk */
+    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &number_entry)!=ZIP_OK)
+      err=ZIP_ERRNO;
+
+    /* total number of entries in the central directory */
+    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&number_entry_CD)!=ZIP_OK)
+      err=ZIP_ERRNO;
+
+    if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))
+      err=ZIP_BADZIPFILE;
+
+    /* size of the central directory */
+    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&size_central_dir)!=ZIP_OK)
+      err=ZIP_ERRNO;
+
+    /* offset of start of central directory with respect to the
+    starting disk number */
+    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&offset_central_dir)!=ZIP_OK)
+      err=ZIP_ERRNO;
+
+    /* TODO.. */
+    /* read the comment from the standard central header. */
+    size_comment = 0;
+  }
+  else
+  {
+    /* Read End of central Directory info */
+    if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+      err=ZIP_ERRNO;
+
+    /* the signature, already checked */
+    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)
+      err=ZIP_ERRNO;
+
+    /* number of this disk */
+    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)
+      err=ZIP_ERRNO;
+
+    /* number of the disk with the start of the central directory */
+    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)
+      err=ZIP_ERRNO;
+
+    /* total number of entries in the central dir on this disk */
+    number_entry = 0;
+    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+      err=ZIP_ERRNO;
+    else
+      number_entry = uL;
+
+    /* total number of entries in the central dir */
+    number_entry_CD = 0;
+    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+      err=ZIP_ERRNO;
+    else
+      number_entry_CD = uL;
+
+    if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))
+      err=ZIP_BADZIPFILE;
+
+    /* size of the central directory */
+    size_central_dir = 0;
+    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+      err=ZIP_ERRNO;
+    else
+      size_central_dir = uL;
+
+    /* offset of start of central directory with respect to the starting disk number */
+    offset_central_dir = 0;
+    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+      err=ZIP_ERRNO;
+    else
+      offset_central_dir = uL;
+
+
+    /* zipfile global comment length */
+    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &size_comment)!=ZIP_OK)
+      err=ZIP_ERRNO;
+  }
+
+  if ((central_pos<offset_central_dir+size_central_dir) &&
+    (err==ZIP_OK))
+    err=ZIP_BADZIPFILE;
+
+  if (err!=ZIP_OK)
+  {
+      if ((pziinit->flags & ZIP_AUTO_CLOSE) != 0) {
+        ZCLOSE64(pziinit->z_filefunc, pziinit->filestream);
+      } else {
+        ZFAKECLOSE64(pziinit->z_filefunc, pziinit->filestream);
+      }
+    return ZIP_ERRNO;
+  }
+
+  if (size_comment>0)
+  {
+    pziinit->globalcomment = (char*)ALLOC(size_comment+1);
+    if (pziinit->globalcomment)
+    {
+      size_comment = ZREAD64(pziinit->z_filefunc, pziinit->filestream, pziinit->globalcomment,size_comment);
+      pziinit->globalcomment[size_comment]=0;
+    }
+  }
+
+  byte_before_the_zipfile = central_pos - (offset_central_dir+size_central_dir);
+  pziinit->add_position_when_writting_offset = byte_before_the_zipfile;
+
+  {
+    ZPOS64_T size_central_dir_to_read = size_central_dir;
+    size_t buf_size = SIZEDATA_INDATABLOCK;
+    void* buf_read = (void*)ALLOC(buf_size);
+    if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir + byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET) != 0)
+      err=ZIP_ERRNO;
+
+    while ((size_central_dir_to_read>0) && (err==ZIP_OK))
+    {
+      ZPOS64_T read_this = SIZEDATA_INDATABLOCK;
+      if (read_this > size_central_dir_to_read)
+        read_this = size_central_dir_to_read;
+
+      if (ZREAD64(pziinit->z_filefunc, pziinit->filestream,buf_read,(uLong)read_this) != read_this)
+        err=ZIP_ERRNO;
+
+      if (err==ZIP_OK)
+        err = add_data_in_datablock(&pziinit->central_dir,buf_read, (uLong)read_this);
+
+      size_central_dir_to_read-=read_this;
+    }
+    TRYFREE(buf_read);
+  }
+  pziinit->begin_pos = byte_before_the_zipfile;
+  pziinit->number_entry = number_entry_CD;
+
+  if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir+byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET) != 0)
+    err=ZIP_ERRNO;
+
+  return err;
+}
+
+
+#endif /* !NO_ADDFILEINEXISTINGZIP*/
+
+
+/************************************************************/
+extern zipFile ZEXPORT zipOpen3 (voidpf file, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def,
+                                 unsigned flags)
+{
+    zip64_internal ziinit;
+    zip64_internal* zi;
+    int err=ZIP_OK;
+
+    ziinit.flags = flags;
+    ziinit.z_filefunc.zseek32_file = NULL;
+    ziinit.z_filefunc.ztell32_file = NULL;
+    if (pzlib_filefunc64_32_def==NULL)
+        fill_qiodevice64_filefunc(&ziinit.z_filefunc.zfile_func64);
+    else
+        ziinit.z_filefunc = *pzlib_filefunc64_32_def;
+
+    ziinit.filestream = ZOPEN64(ziinit.z_filefunc,
+                  file,
+                  (append == APPEND_STATUS_CREATE) ?
+                  (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) :
+                    (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING));
+
+    if (ziinit.filestream == NULL)
+        return NULL;
+
+    if (append == APPEND_STATUS_CREATEAFTER)
+        ZSEEK64(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END);
+
+    ziinit.begin_pos = ZTELL64(ziinit.z_filefunc,ziinit.filestream);
+    ziinit.in_opened_file_inzip = 0;
+    ziinit.ci.stream_initialised = 0;
+    ziinit.number_entry = 0;
+    ziinit.add_position_when_writting_offset = 0;
+    init_linkedlist(&(ziinit.central_dir));
+
+
+
+    zi = (zip64_internal*)ALLOC(sizeof(zip64_internal));
+    if (zi==NULL)
+    {
+        if ((ziinit.flags & ZIP_AUTO_CLOSE) != 0) {
+            ZCLOSE64(ziinit.z_filefunc,ziinit.filestream);
+        } else {
+            ZFAKECLOSE64(ziinit.z_filefunc,ziinit.filestream);
+        }
+        return NULL;
+    }
+
+    /* now we add file in a zipfile */
+#    ifndef NO_ADDFILEINEXISTINGZIP
+    ziinit.globalcomment = NULL;
+    if (append == APPEND_STATUS_ADDINZIP)
+    {
+      /* Read and Cache Central Directory Records */
+      err = LoadCentralDirectoryRecord(&ziinit);
+    }
+
+    if (globalcomment)
+    {
+      *globalcomment = ziinit.globalcomment;
+    }
+#    endif /* !NO_ADDFILEINEXISTINGZIP*/
+
+    if (err != ZIP_OK)
+    {
+#    ifndef NO_ADDFILEINEXISTINGZIP
+        TRYFREE(ziinit.globalcomment);
+#    endif /* !NO_ADDFILEINEXISTINGZIP*/
+        TRYFREE(zi);
+        return NULL;
+    }
+    else
+    {
+        *zi = ziinit;
+        return (zipFile)zi;
+    }
+}
+
+extern zipFile ZEXPORT zipOpen2 (voidpf file, int append, zipcharpc* globalcomment, zlib_filefunc_def* pzlib_filefunc32_def)
+{
+    if (pzlib_filefunc32_def != NULL)
+    {
+        zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+        fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def);
+        return zipOpen3(file, append, globalcomment, &zlib_filefunc64_32_def_fill, ZIP_DEFAULT_FLAGS);
+    }
+    else
+        return zipOpen3(file, append, globalcomment, NULL, ZIP_DEFAULT_FLAGS);
+}
+
+extern zipFile ZEXPORT zipOpen2_64 (voidpf file, int append, zipcharpc* globalcomment, zlib_filefunc64_def* pzlib_filefunc_def)
+{
+    if (pzlib_filefunc_def != NULL)
+    {
+        zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+        zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def;
+        zlib_filefunc64_32_def_fill.ztell32_file = NULL;
+        zlib_filefunc64_32_def_fill.zseek32_file = NULL;
+        return zipOpen3(file, append, globalcomment, &zlib_filefunc64_32_def_fill, ZIP_DEFAULT_FLAGS);
+    }
+    else
+        return zipOpen3(file, append, globalcomment, NULL, ZIP_DEFAULT_FLAGS);
+}
+
+
+
+extern zipFile ZEXPORT zipOpen (voidpf file, int append)
+{
+    return zipOpen3(file,append,NULL,NULL, ZIP_DEFAULT_FLAGS);
+}
+
+extern zipFile ZEXPORT zipOpen64 (voidpf file, int append)
+{
+    return zipOpen3(file,append,NULL,NULL, ZIP_DEFAULT_FLAGS);
+}
+
+int Write_LocalFileHeader(zip64_internal* zi, const char* filename,
+                          uInt size_extrafield_local,
+                          const void* extrafield_local,
+                          uLong version_to_extract)
+{
+  /* write the local header */
+  int err;
+  uInt size_filename = (uInt)strlen(filename);
+  uInt size_extrafield = size_extrafield_local;
+
+  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC, 4);
+
+  if (err==ZIP_OK)
+  {
+    if(zi->ci.zip64)
+      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);/* version needed to extract */
+    else
+      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)version_to_extract,2);
+  }
+
+  if (err==ZIP_OK)
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2);
+
+  if (err==ZIP_OK)
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2);
+
+  if (err==ZIP_OK)
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4);
+
+  /* CRC / Compressed size / Uncompressed size will be filled in later and rewritten later */
+  if (err==ZIP_OK)
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */
+  if (err==ZIP_OK)
+  {
+    if(zi->ci.zip64)
+      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* compressed size, unknown */
+    else
+      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */
+  }
+  if (err==ZIP_OK)
+  {
+    if(zi->ci.zip64)
+      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* uncompressed size, unknown */
+    else
+      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */
+  }
+
+  if (err==ZIP_OK)
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2);
+
+  if(zi->ci.zip64)
+  {
+    size_extrafield += 20;
+  }
+
+  if (err==ZIP_OK)
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield,2);
+
+  if ((err==ZIP_OK) && (size_filename > 0))
+  {
+    if (ZWRITE64(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename)
+      err = ZIP_ERRNO;
+  }
+
+  if ((err==ZIP_OK) && (size_extrafield_local > 0))
+  {
+    if (ZWRITE64(zi->z_filefunc, zi->filestream, extrafield_local, size_extrafield_local) != size_extrafield_local)
+      err = ZIP_ERRNO;
+  }
+
+
+  if ((err==ZIP_OK) && (zi->ci.zip64))
+  {
+      /* write the Zip64 extended info */
+      short HeaderID = 1;
+      short DataSize = 16;
+      ZPOS64_T CompressedSize = 0;
+      ZPOS64_T UncompressedSize = 0;
+
+      /* Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file) */
+      zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);
+
+      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2);
+      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2);
+
+      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);
+      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);
+  }
+
+  return err;
+}
+
+/*
+ NOTE.
+ When writing RAW the ZIP64 extended information in extrafield_local and extrafield_global needs to be stripped
+ before calling this function it can be done with zipRemoveExtraInfoBlock
+
+ It is not done here because then we need to realloc a new buffer since parameters are 'const' and I want to minimize
+ unnecessary allocations.
+ */
+extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+                                         const void* extrafield_local, uInt size_extrafield_local,
+                                         const void* extrafield_global, uInt size_extrafield_global,
+                                         const char* comment, int method, int level, int raw,
+                                         int windowBits,int memLevel, int strategy,
+                                         const char* password, uLong crcForCrypting,
+                                         uLong versionMadeBy, uLong flagBase, int zip64)
+{
+    zip64_internal* zi;
+    uInt size_filename;
+    uInt size_comment;
+    uInt i;
+    int err = ZIP_OK;
+    uLong version_to_extract;
+
+#    ifdef NOCRYPT
+    if (password != NULL)
+        return ZIP_PARAMERROR;
+#    endif
+
+    if (file == NULL)
+        return ZIP_PARAMERROR;
+
+#ifdef HAVE_BZIP2
+    if ((method!=0) && (method!=Z_DEFLATED) && (method!=Z_BZIP2ED))
+      return ZIP_PARAMERROR;
+#else
+    if ((method!=0) && (method!=Z_DEFLATED))
+      return ZIP_PARAMERROR;
+#endif
+
+    zi = (zip64_internal*)file;
+
+    if (zi->in_opened_file_inzip == 1)
+    {
+        err = zipCloseFileInZip (file);
+        if (err != ZIP_OK)
+            return err;
+    }
+
+    if (method == 0
+            && (level == 0 || (zi->flags & ZIP_WRITE_DATA_DESCRIPTOR) == 0)
+            && (zi->flags & ZIP_SEQUENTIAL) == 0)
+    {
+        version_to_extract = 10;
+    }
+    else
+    {
+        version_to_extract = 20;
+    }
+
+    if (filename==NULL)
+        filename="-";
+
+    if (comment==NULL)
+        size_comment = 0;
+    else
+        size_comment = (uInt)strlen(comment);
+
+    size_filename = (uInt)strlen(filename);
+
+    if (zipfi == NULL)
+        zi->ci.dosDate = 0;
+    else
+    {
+        if (zipfi->dosDate != 0)
+            zi->ci.dosDate = zipfi->dosDate;
+        else
+          zi->ci.dosDate = zip64local_TmzDateToDosDate(&zipfi->tmz_date);
+    }
+
+    zi->ci.flag = flagBase;
+    if ((level==8) || (level==9))
+      zi->ci.flag |= 2;
+    if (level==2)
+      zi->ci.flag |= 4;
+    if (level==1)
+      zi->ci.flag |= 6;
+    if (password != NULL)
+      zi->ci.flag |= 1;
+    if (version_to_extract >= 20
+            && ((zi->flags & ZIP_WRITE_DATA_DESCRIPTOR) != 0
+                || (zi->flags & ZIP_SEQUENTIAL) != 0))
+      zi->ci.flag |= 8;
+
+    zi->ci.crc32 = 0;
+    zi->ci.method = method;
+    zi->ci.encrypt = 0;
+    zi->ci.stream_initialised = 0;
+    zi->ci.pos_in_buffered_data = 0;
+    zi->ci.raw = raw;
+    zi->ci.pos_local_header = ZTELL64(zi->z_filefunc,zi->filestream);
+
+    zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + size_extrafield_global + size_comment;
+    zi->ci.size_centralExtraFree = 32; /* Extra space we have reserved in case we need to add ZIP64 extra info data */
+
+    zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader + zi->ci.size_centralExtraFree);
+
+    zi->ci.size_centralExtra = size_extrafield_global;
+    zip64local_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4);
+    /* version info */
+    zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)versionMadeBy,2);
+    zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)version_to_extract,2);
+    zip64local_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2);
+    zip64local_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2);
+    zip64local_putValue_inmemory(zi->ci.central_header+12,(uLong)zi->ci.dosDate,4);
+    zip64local_putValue_inmemory(zi->ci.central_header+16,(uLong)0,4); /*crc*/
+    zip64local_putValue_inmemory(zi->ci.central_header+20,(uLong)0,4); /*compr size*/
+    zip64local_putValue_inmemory(zi->ci.central_header+24,(uLong)0,4); /*uncompr size*/
+    zip64local_putValue_inmemory(zi->ci.central_header+28,(uLong)size_filename,2);
+    zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)size_extrafield_global,2);
+    zip64local_putValue_inmemory(zi->ci.central_header+32,(uLong)size_comment,2);
+    zip64local_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/
+
+    if (zipfi==NULL)
+        zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2);
+    else
+        zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2);
+
+    if (zipfi==NULL)
+        zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4);
+    else
+        zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4);
+
+    if(zi->ci.pos_local_header >= 0xffffffff)
+      zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)0xffffffff,4);
+    else
+      zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header - zi->add_position_when_writting_offset,4);
+
+    for (i=0;i<size_filename;i++)
+        *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i);
+
+    for (i=0;i<size_extrafield_global;i++)
+        *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+i) =
+              *(((const char*)extrafield_global)+i);
+
+    for (i=0;i<size_comment;i++)
+        *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+
+              size_extrafield_global+i) = *(comment+i);
+    if (zi->ci.central_header == NULL)
+        return ZIP_INTERNALERROR;
+
+    zi->ci.zip64 = zip64;
+    zi->ci.totalCompressedData = 0;
+    zi->ci.totalUncompressedData = 0;
+    zi->ci.pos_zip64extrainfo = 0;
+
+    err = Write_LocalFileHeader(zi, filename, size_extrafield_local,
+                                extrafield_local, version_to_extract);
+
+#ifdef HAVE_BZIP2
+    zi->ci.bstream.avail_in = (uInt)0;
+    zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
+    zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
+    zi->ci.bstream.total_in_hi32 = 0;
+    zi->ci.bstream.total_in_lo32 = 0;
+    zi->ci.bstream.total_out_hi32 = 0;
+    zi->ci.bstream.total_out_lo32 = 0;
+#endif
+
+    zi->ci.stream.avail_in = (uInt)0;
+    zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
+    zi->ci.stream.next_out = zi->ci.buffered_data;
+    zi->ci.stream.total_in = 0;
+    zi->ci.stream.total_out = 0;
+    zi->ci.stream.data_type = Z_BINARY;
+
+#ifdef HAVE_BZIP2
+    if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED || zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+#else
+    if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+#endif
+    {
+        if(zi->ci.method == Z_DEFLATED)
+        {
+          zi->ci.stream.zalloc = (alloc_func)0;
+          zi->ci.stream.zfree = (free_func)0;
+          zi->ci.stream.opaque = (voidpf)0;
+
+          if (windowBits>0)
+              windowBits = -windowBits;
+
+          err = deflateInit2(&zi->ci.stream, level, Z_DEFLATED, windowBits, memLevel, strategy);
+
+          if (err==Z_OK)
+              zi->ci.stream_initialised = Z_DEFLATED;
+        }
+        else if(zi->ci.method == Z_BZIP2ED)
+        {
+#ifdef HAVE_BZIP2
+            /* Init BZip stuff here */
+          zi->ci.bstream.bzalloc = 0;
+          zi->ci.bstream.bzfree = 0;
+          zi->ci.bstream.opaque = (voidpf)0;
+
+          err = BZ2_bzCompressInit(&zi->ci.bstream, level, 0,35);
+          if(err == BZ_OK)
+            zi->ci.stream_initialised = Z_BZIP2ED;
+#endif
+        }
+
+    }
+
+#    ifndef NOCRYPT
+    zi->ci.crypt_header_size = 0;
+    if ((err==Z_OK) && (password != NULL))
+    {
+        unsigned char bufHead[RAND_HEAD_LEN];
+        unsigned int sizeHead;
+        zi->ci.encrypt = 1;
+        zi->ci.pcrc_32_tab = get_crc_table();
+        /*init_keys(password,zi->ci.keys,zi->ci.pcrc_32_tab);*/
+        if (crcForCrypting == 0) {
+            crcForCrypting = (uLong)zi->ci.dosDate << 16; /* ATTANTION! Without this row, you don't unpack your password protected archive in other app. */
+        }
+        sizeHead=crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,crcForCrypting);
+        zi->ci.crypt_header_size = sizeHead;
+
+        if (ZWRITE64(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead)
+                err = ZIP_ERRNO;
+    }
+#    endif
+
+    if (err==Z_OK)
+        zi->in_opened_file_inzip = 1;
+    return err;
+}
+
+extern int ZEXPORT zipOpenNewFileInZip4 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+                                         const void* extrafield_local, uInt size_extrafield_local,
+                                         const void* extrafield_global, uInt size_extrafield_global,
+                                         const char* comment, int method, int level, int raw,
+                                         int windowBits,int memLevel, int strategy,
+                                         const char* password, uLong crcForCrypting,
+                                         uLong versionMadeBy, uLong flagBase)
+{
+    return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+                                 extrafield_local, size_extrafield_local,
+                                 extrafield_global, size_extrafield_global,
+                                 comment, method, level, raw,
+                                 windowBits, memLevel, strategy,
+                                 password, crcForCrypting, versionMadeBy, flagBase, 0);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip3 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+                                         const void* extrafield_local, uInt size_extrafield_local,
+                                         const void* extrafield_global, uInt size_extrafield_global,
+                                         const char* comment, int method, int level, int raw,
+                                         int windowBits,int memLevel, int strategy,
+                                         const char* password, uLong crcForCrypting)
+{
+    return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+                                 extrafield_local, size_extrafield_local,
+                                 extrafield_global, size_extrafield_global,
+                                 comment, method, level, raw,
+                                 windowBits, memLevel, strategy,
+                                 password, crcForCrypting, VERSIONMADEBY, 0, 0);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char* filename, const zip_fileinfo* zipfi,
+                                         const void* extrafield_local, uInt size_extrafield_local,
+                                         const void* extrafield_global, uInt size_extrafield_global,
+                                         const char* comment, int method, int level, int raw,
+                                         int windowBits,int memLevel, int strategy,
+                                         const char* password, uLong crcForCrypting, int zip64)
+{
+    return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+                                 extrafield_local, size_extrafield_local,
+                                 extrafield_global, size_extrafield_global,
+                                 comment, method, level, raw,
+                                 windowBits, memLevel, strategy,
+                                 password, crcForCrypting, VERSIONMADEBY, 0, zip64);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip2(zipFile file, const char* filename, const zip_fileinfo* zipfi,
+                                        const void* extrafield_local, uInt size_extrafield_local,
+                                        const void* extrafield_global, uInt size_extrafield_global,
+                                        const char* comment, int method, int level, int raw)
+{
+    return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+                                 extrafield_local, size_extrafield_local,
+                                 extrafield_global, size_extrafield_global,
+                                 comment, method, level, raw,
+                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+                                 NULL, 0, VERSIONMADEBY, 0, 0);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, const char* filename, const zip_fileinfo* zipfi,
+                                        const void* extrafield_local, uInt size_extrafield_local,
+                                        const void* extrafield_global, uInt size_extrafield_global,
+                                        const char* comment, int method, int level, int raw, int zip64)
+{
+    return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+                                 extrafield_local, size_extrafield_local,
+                                 extrafield_global, size_extrafield_global,
+                                 comment, method, level, raw,
+                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+                                 NULL, 0, VERSIONMADEBY, 0, zip64);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip64 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+                                        const void* extrafield_local, uInt size_extrafield_local,
+                                        const void*extrafield_global, uInt size_extrafield_global,
+                                        const char* comment, int method, int level, int zip64)
+{
+    return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+                                 extrafield_local, size_extrafield_local,
+                                 extrafield_global, size_extrafield_global,
+                                 comment, method, level, 0,
+                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+                                 NULL, 0, VERSIONMADEBY, 0, zip64);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+                                        const void* extrafield_local, uInt size_extrafield_local,
+                                        const void*extrafield_global, uInt size_extrafield_global,
+                                        const char* comment, int method, int level)
+{
+    return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+                                 extrafield_local, size_extrafield_local,
+                                 extrafield_global, size_extrafield_global,
+                                 comment, method, level, 0,
+                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+                                 NULL, 0, VERSIONMADEBY, 0, 0);
+}
+
+local int zip64FlushWriteBuffer(zip64_internal* zi)
+{
+    int err=ZIP_OK;
+
+    if (zi->ci.encrypt != 0)
+    {
+#ifndef NOCRYPT
+        uInt i;
+        int t;
+        for (i=0;i<zi->ci.pos_in_buffered_data;i++)
+            zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab, zi->ci.buffered_data[i],t);
+#endif
+    }
+
+    if (ZWRITE64(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data) != zi->ci.pos_in_buffered_data)
+      err = ZIP_ERRNO;
+
+    zi->ci.totalCompressedData += zi->ci.pos_in_buffered_data;
+
+#ifdef HAVE_BZIP2
+    if(zi->ci.method == Z_BZIP2ED)
+    {
+      zi->ci.totalUncompressedData += zi->ci.bstream.total_in_lo32;
+      zi->ci.bstream.total_in_lo32 = 0;
+      zi->ci.bstream.total_in_hi32 = 0;
+    }
+    else
+#endif
+    {
+      zi->ci.totalUncompressedData += zi->ci.stream.total_in;
+      zi->ci.stream.total_in = 0;
+    }
+
+
+    zi->ci.pos_in_buffered_data = 0;
+
+    return err;
+}
+
+extern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,unsigned int len)
+{
+    zip64_internal* zi;
+    int err=ZIP_OK;
+
+    if (file == NULL)
+        return ZIP_PARAMERROR;
+    zi = (zip64_internal*)file;
+
+    if (zi->in_opened_file_inzip == 0)
+        return ZIP_PARAMERROR;
+
+    zi->ci.crc32 = crc32(zi->ci.crc32,buf,(uInt)len);
+
+#ifdef HAVE_BZIP2
+    if(zi->ci.method == Z_BZIP2ED && (!zi->ci.raw))
+    {
+      zi->ci.bstream.next_in = (void*)buf;
+      zi->ci.bstream.avail_in = len;
+      err = BZ_RUN_OK;
+
+      while ((err==BZ_RUN_OK) && (zi->ci.bstream.avail_in>0))
+      {
+        if (zi->ci.bstream.avail_out == 0)
+        {
+          if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+            err = ZIP_ERRNO;
+          zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
+          zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
+        }
+
+
+        if(err != BZ_RUN_OK)
+          break;
+
+        if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+        {
+          uLong uTotalOutBefore_lo = zi->ci.bstream.total_out_lo32;
+/*          uLong uTotalOutBefore_hi = zi->ci.bstream.total_out_hi32; */
+          err=BZ2_bzCompress(&zi->ci.bstream,  BZ_RUN);
+
+          zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore_lo) ;
+        }
+      }
+
+      if(err == BZ_RUN_OK)
+        err = ZIP_OK;
+    }
+    else
+#endif
+    {
+      zi->ci.stream.next_in = (Bytef*)buf;
+      zi->ci.stream.avail_in = len;
+
+      while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0))
+      {
+          if (zi->ci.stream.avail_out == 0)
+          {
+              if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+                  err = ZIP_ERRNO;
+              zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
+              zi->ci.stream.next_out = zi->ci.buffered_data;
+          }
+
+
+          if(err != ZIP_OK)
+              break;
+
+          if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+          {
+              uLong uTotalOutBefore = zi->ci.stream.total_out;
+              err=deflate(&zi->ci.stream,  Z_NO_FLUSH);
+              if(uTotalOutBefore > zi->ci.stream.total_out)
+              {
+                int bBreak = 0;
+                bBreak++;
+              }
+
+              zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
+          }
+          else
+          {
+              uInt copy_this,i;
+              if (zi->ci.stream.avail_in < zi->ci.stream.avail_out)
+                  copy_this = zi->ci.stream.avail_in;
+              else
+                  copy_this = zi->ci.stream.avail_out;
+
+              for (i = 0; i < copy_this; i++)
+                  *(((char*)zi->ci.stream.next_out)+i) =
+                      *(((const char*)zi->ci.stream.next_in)+i);
+              {
+                  zi->ci.stream.avail_in -= copy_this;
+                  zi->ci.stream.avail_out-= copy_this;
+                  zi->ci.stream.next_in+= copy_this;
+                  zi->ci.stream.next_out+= copy_this;
+                  zi->ci.stream.total_in+= copy_this;
+                  zi->ci.stream.total_out+= copy_this;
+                  zi->ci.pos_in_buffered_data += copy_this;
+              }
+          }
+      }/* while(...) */
+    }
+
+    return err;
+}
+
+extern int ZEXPORT zipCloseFileInZipRaw (zipFile file, uLong uncompressed_size, uLong crc32)
+{
+    return zipCloseFileInZipRaw64 (file, uncompressed_size, crc32);
+}
+
+extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32)
+{
+    zip64_internal* zi;
+    ZPOS64_T compressed_size;
+    uLong invalidValue = 0xffffffff;
+    short datasize = 0;
+    int err=ZIP_OK;
+
+    if (file == NULL)
+        return ZIP_PARAMERROR;
+    zi = (zip64_internal*)file;
+
+    if (zi->in_opened_file_inzip == 0)
+        return ZIP_PARAMERROR;
+    zi->ci.stream.avail_in = 0;
+
+    if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+                {
+                        while (err==ZIP_OK)
+                        {
+                                uLong uTotalOutBefore;
+                                if (zi->ci.stream.avail_out == 0)
+                                {
+                                        if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+                                                err = ZIP_ERRNO;
+                                        zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
+                                        zi->ci.stream.next_out = zi->ci.buffered_data;
+                                }
+                                uTotalOutBefore = zi->ci.stream.total_out;
+                                err=deflate(&zi->ci.stream,  Z_FINISH);
+                                zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
+                        }
+                }
+    else if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+    {
+#ifdef HAVE_BZIP2
+      err = BZ_FINISH_OK;
+      while (err==BZ_FINISH_OK)
+      {
+        uLong uTotalOutBefore;
+        if (zi->ci.bstream.avail_out == 0)
+        {
+          if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+            err = ZIP_ERRNO;
+          zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
+          zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
+        }
+        uTotalOutBefore = zi->ci.bstream.total_out_lo32;
+        err=BZ2_bzCompress(&zi->ci.bstream,  BZ_FINISH);
+        if(err == BZ_STREAM_END)
+          err = Z_STREAM_END;
+
+        zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore);
+      }
+
+      if(err == BZ_FINISH_OK)
+        err = ZIP_OK;
+#endif
+    }
+
+    if (err==Z_STREAM_END)
+        err=ZIP_OK; /* this is normal */
+
+    if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK))
+                {
+        if (zip64FlushWriteBuffer(zi)==ZIP_ERRNO)
+            err = ZIP_ERRNO;
+                }
+
+    if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+    {
+        int tmp_err = deflateEnd(&zi->ci.stream);
+        if (err == ZIP_OK)
+            err = tmp_err;
+        zi->ci.stream_initialised = 0;
+    }
+#ifdef HAVE_BZIP2
+    else if((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+    {
+      int tmperr = BZ2_bzCompressEnd(&zi->ci.bstream);
+                        if (err==ZIP_OK)
+                                err = tmperr;
+                        zi->ci.stream_initialised = 0;
+    }
+#endif
+
+    if (!zi->ci.raw)
+    {
+        crc32 = (uLong)zi->ci.crc32;
+        uncompressed_size = zi->ci.totalUncompressedData;
+    }
+    compressed_size = zi->ci.totalCompressedData;
+
+#    ifndef NOCRYPT
+    compressed_size += zi->ci.crypt_header_size;
+#    endif
+
+    /* update Current Item crc and sizes, */
+    if(compressed_size >= 0xffffffff || uncompressed_size >= 0xffffffff || zi->ci.pos_local_header >= 0xffffffff)
+    {
+      /*version Made by*/
+      zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)45,2);
+      /*version needed*/
+      zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)45,2);
+
+    }
+
+    zip64local_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/
+
+
+    if(compressed_size >= 0xffffffff)
+      zip64local_putValue_inmemory(zi->ci.central_header+20, invalidValue,4); /*compr size*/
+    else
+      zip64local_putValue_inmemory(zi->ci.central_header+20, compressed_size,4); /*compr size*/
+
+    /* set internal file attributes field */
+    if (zi->ci.stream.data_type == Z_ASCII)
+        zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2);
+
+    if(uncompressed_size >= 0xffffffff)
+      zip64local_putValue_inmemory(zi->ci.central_header+24, invalidValue,4); /*uncompr size*/
+    else
+      zip64local_putValue_inmemory(zi->ci.central_header+24, uncompressed_size,4); /*uncompr size*/
+
+    /* Add ZIP64 extra info field for uncompressed size */
+    if(uncompressed_size >= 0xffffffff)
+      datasize += 8;
+
+    /* Add ZIP64 extra info field for compressed size */
+    if(compressed_size >= 0xffffffff)
+      datasize += 8;
+
+    /* Add ZIP64 extra info field for relative offset to local file header of current file */
+    if(zi->ci.pos_local_header >= 0xffffffff)
+      datasize += 8;
+
+    if(datasize > 0)
+    {
+      char* p = NULL;
+
+      if((uLong)(datasize + 4) > zi->ci.size_centralExtraFree)
+      {
+        /* we can not write more data to the buffer that we have room for. */
+        return ZIP_BADZIPFILE;
+      }
+
+      p = zi->ci.central_header + zi->ci.size_centralheader;
+
+      /* Add Extra Information Header for 'ZIP64 information' */
+      zip64local_putValue_inmemory(p, 0x0001, 2); /* HeaderID */
+      p += 2;
+      zip64local_putValue_inmemory(p, datasize, 2); /* DataSize */
+      p += 2;
+
+      if(uncompressed_size >= 0xffffffff)
+      {
+        zip64local_putValue_inmemory(p, uncompressed_size, 8);
+        p += 8;
+      }
+
+      if(compressed_size >= 0xffffffff)
+      {
+        zip64local_putValue_inmemory(p, compressed_size, 8);
+        p += 8;
+      }
+
+      if(zi->ci.pos_local_header >= 0xffffffff)
+      {
+        zip64local_putValue_inmemory(p, zi->ci.pos_local_header, 8);
+        p += 8;
+      }
+
+      /* Update how much extra free space we got in the memory buffer */
+      /* and increase the centralheader size so the new ZIP64 fields are included */
+      /* ( 4 below is the size of HeaderID and DataSize field ) */
+      zi->ci.size_centralExtraFree -= datasize + 4;
+      zi->ci.size_centralheader += datasize + 4;
+
+      /* Update the extra info size field */
+      zi->ci.size_centralExtra += datasize + 4;
+      zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)zi->ci.size_centralExtra,2);
+    }
+
+    if (err==ZIP_OK)
+        err = add_data_in_datablock(&zi->central_dir, zi->ci.central_header, (uLong)zi->ci.size_centralheader);
+
+    free(zi->ci.central_header);
+
+    if (err==ZIP_OK)
+    {
+        if ((zi->flags & ZIP_SEQUENTIAL) == 0) {
+            /* Update the LocalFileHeader with the new values. */
+
+            ZPOS64_T cur_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);
+
+            if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0)
+                err = ZIP_ERRNO;
+
+            if (err==ZIP_OK)
+                err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */
+
+            if(uncompressed_size >= 0xffffffff || compressed_size >= 0xffffffff)
+            {
+                if(zi->ci.pos_zip64extrainfo > 0)
+                {
+                    /* Update the size in the ZIP64 extended field. */
+                    if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_zip64extrainfo + 4,ZLIB_FILEFUNC_SEEK_SET)!=0)
+                        err = ZIP_ERRNO;
+
+                    if (err==ZIP_OK) /* compressed size, unknown */
+                        err = zip64local_putValue(&zi->z_filefunc, zi->filestream, uncompressed_size, 8);
+
+                    if (err==ZIP_OK) /* uncompressed size, unknown */
+                        err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8);
+                }
+            }
+            else
+            {
+                if (err==ZIP_OK) /* compressed size, unknown */
+                    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4);
+
+                if (err==ZIP_OK) /* uncompressed size, unknown */
+                    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4);
+            }
+
+            if (ZSEEK64(zi->z_filefunc,zi->filestream, cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0)
+                err = ZIP_ERRNO;
+        }
+
+        if ((zi->ci.flag & 8) != 0) {
+            /* Write local Descriptor after file data */
+            if (err==ZIP_OK)
+                err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)DESCRIPTORHEADERMAGIC,4);
+            if (err==ZIP_OK)
+                err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */
+            if (zi->ci.zip64) {
+                if (err==ZIP_OK) /* compressed size, unknown */
+                    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,8);
+
+                if (err==ZIP_OK) /* uncompressed size, unknown */
+                    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,8);
+            } else {
+                if (err==ZIP_OK) /* compressed size, unknown */
+                    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4);
+                if (err==ZIP_OK) /* uncompressed size, unknown */
+                    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4);
+            }
+        }
+    }
+
+    zi->number_entry ++;
+    zi->in_opened_file_inzip = 0;
+
+    return err;
+}
+
+extern int ZEXPORT zipCloseFileInZip (zipFile file)
+{
+    return zipCloseFileInZipRaw (file,0,0);
+}
+
+int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip)
+{
+  int err = ZIP_OK;
+  ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writting_offset;
+
+  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4);
+
+  /*num disks*/
+    if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+
+  /*relative offset*/
+    if (err==ZIP_OK) /* Relative offset to the Zip64EndOfCentralDirectory */
+      err = zip64local_putValue(&zi->z_filefunc,zi->filestream, pos,8);
+
+  /*total disks*/ /* Do not support spawning of disk so always say 1 here*/
+    if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4);
+
+    return err;
+}
+
+int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
+{
+  int err = ZIP_OK;
+
+  uLong Zip64DataSize = 44;
+
+  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDHEADERMAGIC,4);
+
+  if (err==ZIP_OK) /* size of this 'zip64 end of central directory' */
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)Zip64DataSize,8); /* why ZPOS64_T of this ? */
+
+  if (err==ZIP_OK) /* version made by */
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);
+
+  if (err==ZIP_OK) /* version needed */
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);
+
+  if (err==ZIP_OK) /* number of this disk */
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+
+  if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+
+  if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
+    err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);
+
+  if (err==ZIP_OK) /* total number of entries in the central dir */
+    err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);
+
+  if (err==ZIP_OK) /* size of the central directory */
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)size_centraldir,8);
+
+  if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */
+  {
+    ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8);
+  }
+  return err;
+}
+int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
+{
+  int err = ZIP_OK;
+
+  /*signature*/
+  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);
+
+  if (err==ZIP_OK) /* number of this disk */
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
+
+  if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
+
+  if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
+  {
+    {
+      if(zi->number_entry >= 0xFFFF)
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); /* use value in ZIP64 record */
+      else
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
+    }
+  }
+
+  if (err==ZIP_OK) /* total number of entries in the central dir */
+  {
+    if(zi->number_entry >= 0xFFFF)
+      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); /* use value in ZIP64 record */
+    else
+      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
+  }
+
+  if (err==ZIP_OK) /* size of the central directory */
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4);
+
+  if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */
+  {
+    ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
+    if(pos >= 0xffffffff)
+    {
+      err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4);
+    }
+    else
+                  err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4);
+  }
+
+   return err;
+}
+
+int Write_GlobalComment(zip64_internal* zi, const char* global_comment)
+{
+  int err = ZIP_OK;
+  uInt size_global_comment = 0;
+
+  if(global_comment != NULL)
+    size_global_comment = (uInt)strlen(global_comment);
+
+  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2);
+
+  if (err == ZIP_OK && size_global_comment > 0)
+  {
+    if (ZWRITE64(zi->z_filefunc,zi->filestream, global_comment, size_global_comment) != size_global_comment)
+      err = ZIP_ERRNO;
+  }
+  return err;
+}
+
+extern int ZEXPORT zipClose (zipFile file, const char* global_comment)
+{
+    zip64_internal* zi;
+    int err = 0;
+    uLong size_centraldir = 0;
+    ZPOS64_T centraldir_pos_inzip;
+    ZPOS64_T pos;
+
+    if (file == NULL)
+        return ZIP_PARAMERROR;
+
+    zi = (zip64_internal*)file;
+
+    if (zi->in_opened_file_inzip == 1)
+    {
+        err = zipCloseFileInZip (file);
+    }
+
+#ifndef NO_ADDFILEINEXISTINGZIP
+    if (global_comment==NULL)
+        global_comment = zi->globalcomment;
+#endif
+
+    centraldir_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);
+
+    if (err==ZIP_OK)
+    {
+        linkedlist_datablock_internal* ldi = zi->central_dir.first_block;
+        while (ldi!=NULL)
+        {
+            if ((err==ZIP_OK) && (ldi->filled_in_this_block>0))
+            {
+                if (ZWRITE64(zi->z_filefunc,zi->filestream, ldi->data, ldi->filled_in_this_block) != ldi->filled_in_this_block)
+                    err = ZIP_ERRNO;
+            }
+
+            size_centraldir += ldi->filled_in_this_block;
+            ldi = ldi->next_datablock;
+        }
+    }
+    free_linkedlist(&(zi->central_dir));
+
+    pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
+    if(pos >= 0xffffffff || zi->number_entry > 0xFFFF)
+    {
+      ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream);
+      Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
+
+      Write_Zip64EndOfCentralDirectoryLocator(zi, Zip64EOCDpos);
+    }
+
+    if (err==ZIP_OK)
+      err = Write_EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
+
+    if(err == ZIP_OK)
+      err = Write_GlobalComment(zi, global_comment);
+
+    if ((zi->flags & ZIP_AUTO_CLOSE) != 0) {
+        if (ZCLOSE64(zi->z_filefunc,zi->filestream) != 0) {
+            if (err == ZIP_OK)
+                err = ZIP_ERRNO;
+        }
+    } else {
+        if (ZFAKECLOSE64(zi->z_filefunc,zi->filestream) != 0) {
+            if (err == ZIP_OK)
+                err = ZIP_ERRNO;
+        }
+    }
+
+#ifndef NO_ADDFILEINEXISTINGZIP
+    TRYFREE(zi->globalcomment);
+#endif
+    TRYFREE(zi);
+
+    return err;
+}
+
+extern int ZEXPORT zipRemoveExtraInfoBlock (char* pData, int* dataLen, short sHeader)
+{
+  char* p = pData;
+  int size = 0;
+  char* pNewHeader;
+  char* pTmp;
+  short header;
+  short dataSize;
+
+  int retVal = ZIP_OK;
+
+  if(pData == NULL || *dataLen < 4)
+    return ZIP_PARAMERROR;
+
+  pNewHeader = (char*)ALLOC(*dataLen);
+  pTmp = pNewHeader;
+
+  while(p < (pData + *dataLen))
+  {
+    header = *(short*)p;
+    dataSize = *(((short*)p)+1);
+
+    if( header == sHeader ) /* Header found. */
+    {
+      p += dataSize + 4; /* skip it. do not copy to temp buffer */
+    }
+    else
+    {
+      /* Extra Info block should not be removed, So copy it to the temp buffer. */
+      memcpy(pTmp, p, dataSize + 4);
+      p += dataSize + 4;
+      size += dataSize + 4;
+    }
+
+  }
+
+  if(size < *dataLen)
+  {
+    /* clean old extra info block. */
+    memset(pData,0, *dataLen);
+
+    /* copy the new extra info block over the old */
+    if(size > 0)
+      memcpy(pData, pNewHeader, size);
+
+    /* set the new extra info size */
+    *dataLen = size;
+
+    retVal = ZIP_OK;
+  }
+  else
+    retVal = ZIP_ERRNO;
+
+  TRYFREE(pNewHeader);
+
+  return retVal;
+}
+
+int ZEXPORT zipSetFlags(zipFile file, unsigned flags)
+{
+    zip64_internal* zi;
+    if (file == NULL)
+        return ZIP_PARAMERROR;
+    zi = (zip64_internal*)file;
+    zi->flags |= flags;
+    // If the output is non-seekable, the data descriptor is needed.
+    if ((zi->flags & ZIP_SEQUENTIAL) != 0) {
+        zi->flags |= ZIP_WRITE_DATA_DESCRIPTOR;
+    }
+    return ZIP_OK;
+}
+
+int ZEXPORT zipClearFlags(zipFile file, unsigned flags)
+{
+    zip64_internal* zi;
+    if (file == NULL)
+        return ZIP_PARAMERROR;
+    zi = (zip64_internal*)file;
+    zi->flags &= ~flags;
+    // If the data descriptor is not written, we can't use a non-seekable output.
+    if ((zi->flags & ZIP_WRITE_DATA_DESCRIPTOR) == 0) {
+        zi->flags &= ~ZIP_SEQUENTIAL;
+    }
+    return ZIP_OK;
+}
diff --git a/3rdparty/quazip-0.7/quazip/zip.h b/3rdparty/quazip-0.7/quazip/zip.h
new file mode 100644
index 0000000..a6617ad
--- /dev/null
+++ b/3rdparty/quazip-0.7/quazip/zip.h
@@ -0,0 +1,390 @@
+/* zip.h -- IO on .zip files using zlib
+   Version 1.1, February 14h, 2010
+   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+         Modifications for Zip64 support
+         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+         For more info read MiniZip_info.txt
+
+         ---------------------------------------------------------------------------
+
+   Condition of use and distribution are the same than zlib :
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+        ---------------------------------------------------------------------------
+
+        Changes
+
+        See header of zip.h
+
+        ---------------------------------------------------------------------------
+
+  As per the requirement above, this file is plainly marked as modified
+  by Sergey A. Tachenov. Most modifications include the I/O API redesign
+  to support QIODevice interface. Some improvements and small fixes were also made.
+
+*/
+
+#ifndef _zip12_H
+#define _zip12_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//#define HAVE_BZIP2
+
+#ifndef _ZLIB_H
+#include "zlib.h"
+#endif
+
+#ifndef _ZLIBIOAPI_H
+#include "ioapi.h"
+#endif
+
+#ifdef HAVE_BZIP2
+#include "bzlib.h"
+#endif
+
+#define Z_BZIP2ED 12
+
+#if defined(STRICTZIP) || defined(STRICTZIPUNZIP)
+/* like the STRICT of WIN32, we define a pointer that cannot be converted
+    from (void*) without cast */
+typedef struct TagzipFile__ { int unused; } zipFile__;
+typedef zipFile__ *zipFile;
+#else
+typedef voidp zipFile;
+#endif
+
+#define ZIP_OK                          (0)
+#define ZIP_EOF                         (0)
+#define ZIP_ERRNO                       (Z_ERRNO)
+#define ZIP_PARAMERROR                  (-102)
+#define ZIP_BADZIPFILE                  (-103)
+#define ZIP_INTERNALERROR               (-104)
+
+#define ZIP_WRITE_DATA_DESCRIPTOR 0x8u
+#define ZIP_AUTO_CLOSE 0x1u
+#define ZIP_SEQUENTIAL 0x2u
+#define ZIP_DEFAULT_FLAGS (ZIP_AUTO_CLOSE | ZIP_WRITE_DATA_DESCRIPTOR)
+
+#ifndef DEF_MEM_LEVEL
+#  if MAX_MEM_LEVEL >= 8
+#    define DEF_MEM_LEVEL 8
+#  else
+#    define DEF_MEM_LEVEL  MAX_MEM_LEVEL
+#  endif
+#endif
+/* default memLevel */
+
+/* tm_zip contain date/time info */
+typedef struct tm_zip_s
+{
+    uInt tm_sec;            /* seconds after the minute - [0,59] */
+    uInt tm_min;            /* minutes after the hour - [0,59] */
+    uInt tm_hour;           /* hours since midnight - [0,23] */
+    uInt tm_mday;           /* day of the month - [1,31] */
+    uInt tm_mon;            /* months since January - [0,11] */
+    uInt tm_year;           /* years - [1980..2044] */
+} tm_zip;
+
+typedef struct
+{
+    tm_zip      tmz_date;       /* date in understandable format           */
+    uLong       dosDate;       /* if dos_date == 0, tmu_date is used      */
+/*    uLong       flag;        */   /* general purpose bit flag        2 bytes */
+
+    uLong       internal_fa;    /* internal file attributes        2 bytes */
+    uLong       external_fa;    /* external file attributes        4 bytes */
+} zip_fileinfo;
+
+typedef const char* zipcharpc;
+
+
+#define APPEND_STATUS_CREATE        (0)
+#define APPEND_STATUS_CREATEAFTER   (1)
+#define APPEND_STATUS_ADDINZIP      (2)
+
+extern zipFile ZEXPORT zipOpen OF((voidpf file, int append));
+extern zipFile ZEXPORT zipOpen64 OF((voidpf file, int append));
+/*
+  Create a zipfile.
+     the file argument depends on the API used, for QuaZIP it's a QIODevice
+       pointer.
+     if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip
+       will be created at the end of the file.
+         (useful if the file contain a self extractor code)
+     if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will
+       add files in existing zip (be sure you don't add file that doesn't exist)
+     If the zipfile cannot be opened, the return value is NULL.
+     Else, the return value is a zipFile Handle, usable with other function
+       of this zip package.
+*/
+
+/* Note : there is no delete function into a zipfile.
+   If you want delete file into a zipfile, you must open a zipfile, and create another
+   Of couse, you can use RAW reading and writing to copy the file you did not want delte
+*/
+
+extern zipFile ZEXPORT zipOpen2 OF((voidpf file,
+                                   int append,
+                                   zipcharpc* globalcomment,
+                                   zlib_filefunc_def* pzlib_filefunc_def));
+
+extern zipFile ZEXPORT zipOpen2_64 OF((voidpf file,
+                                   int append,
+                                   zipcharpc* globalcomment,
+                                   zlib_filefunc64_def* pzlib_filefunc_def));
+
+/*
+ * Exported by Sergey A. Tachenov to suit the needs of QuaZIP.
+ * Note that this function MAY change signature in order to
+ * provide new QuaZIP features. You have been warned!
+ * */
+extern zipFile ZEXPORT zipOpen3 (voidpf file,
+                                 int append,
+                                 zipcharpc* globalcomment,
+                                 zlib_filefunc64_32_def* pzlib_filefunc64_32_def,
+                                 unsigned flags);
+
+extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
+                       const char* filename,
+                       const zip_fileinfo* zipfi,
+                       const void* extrafield_local,
+                       uInt size_extrafield_local,
+                       const void* extrafield_global,
+                       uInt size_extrafield_global,
+                       const char* comment,
+                       int method,
+                       int level));
+
+extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file,
+                       const char* filename,
+                       const zip_fileinfo* zipfi,
+                       const void* extrafield_local,
+                       uInt size_extrafield_local,
+                       const void* extrafield_global,
+                       uInt size_extrafield_global,
+                       const char* comment,
+                       int method,
+                       int level,
+                       int zip64));
+
+/*
+  Open a file in the ZIP for writing.
+  filename : the filename in zip (if NULL, '-' without quote will be used
+  *zipfi contain supplemental information
+  if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local
+    contains the extrafield data the the local header
+  if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
+    contains the extrafield data the the local header
+  if comment != NULL, comment contain the comment string
+  method contain the compression method (0 for store, Z_DEFLATED for deflate)
+  level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
+  zip64 is set to 1 if a zip64 extended information block should be added to the local file header.
+                    this MUST be '1' if the uncompressed size is >= 0xffffffff.
+
+*/
+
+
+extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file,
+                                            const char* filename,
+                                            const zip_fileinfo* zipfi,
+                                            const void* extrafield_local,
+                                            uInt size_extrafield_local,
+                                            const void* extrafield_global,
+                                            uInt size_extrafield_global,
+                                            const char* comment,
+                                            int method,
+                                            int level,
+                                            int raw));
+
+
+extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file,
+                                            const char* filename,
+                                            const zip_fileinfo* zipfi,
+                                            const void* extrafield_local,
+                                            uInt size_extrafield_local,
+                                            const void* extrafield_global,
+                                            uInt size_extrafield_global,
+                                            const char* comment,
+                                            int method,
+                                            int level,
+                                            int raw,
+                                            int zip64));
+/*
+  Same than zipOpenNewFileInZip, except if raw=1, we write raw file
+ */
+
+extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,
+                                            const char* filename,
+                                            const zip_fileinfo* zipfi,
+                                            const void* extrafield_local,
+                                            uInt size_extrafield_local,
+                                            const void* extrafield_global,
+                                            uInt size_extrafield_global,
+                                            const char* comment,
+                                            int method,
+                                            int level,
+                                            int raw,
+                                            int windowBits,
+                                            int memLevel,
+                                            int strategy,
+                                            const char* password,
+                                            uLong crcForCrypting));
+
+extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file,
+                                            const char* filename,
+                                            const zip_fileinfo* zipfi,
+                                            const void* extrafield_local,
+                                            uInt size_extrafield_local,
+                                            const void* extrafield_global,
+                                            uInt size_extrafield_global,
+                                            const char* comment,
+                                            int method,
+                                            int level,
+                                            int raw,
+                                            int windowBits,
+                                            int memLevel,
+                                            int strategy,
+                                            const char* password,
+                                            uLong crcForCrypting,
+                                            int zip64
+                                            ));
+
+/*
+  Same than zipOpenNewFileInZip2, except
+    windowBits,memLevel,,strategy : see parameter strategy in deflateInit2
+    password : crypting password (NULL for no crypting)
+    crcForCrypting : crc of file to compress (needed for crypting)
+ */
+
+extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file,
+                                            const char* filename,
+                                            const zip_fileinfo* zipfi,
+                                            const void* extrafield_local,
+                                            uInt size_extrafield_local,
+                                            const void* extrafield_global,
+                                            uInt size_extrafield_global,
+                                            const char* comment,
+                                            int method,
+                                            int level,
+                                            int raw,
+                                            int windowBits,
+                                            int memLevel,
+                                            int strategy,
+                                            const char* password,
+                                            uLong crcForCrypting,
+                                            uLong versionMadeBy,
+                                            uLong flagBase
+                                            ));
+
+
+extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file,
+                                            const char* filename,
+                                            const zip_fileinfo* zipfi,
+                                            const void* extrafield_local,
+                                            uInt size_extrafield_local,
+                                            const void* extrafield_global,
+                                            uInt size_extrafield_global,
+                                            const char* comment,
+                                            int method,
+                                            int level,
+                                            int raw,
+                                            int windowBits,
+                                            int memLevel,
+                                            int strategy,
+                                            const char* password,
+                                            uLong crcForCrypting,
+                                            uLong versionMadeBy,
+                                            uLong flagBase,
+                                            int zip64
+                                            ));
+/*
+  Same than zipOpenNewFileInZip4, except
+    versionMadeBy : value for Version made by field
+    flag : value for flag field (compression level info will be added)
+ */
+
+
+extern int ZEXPORT zipWriteInFileInZip OF((zipFile file,
+                       const void* buf,
+                       unsigned len));
+/*
+  Write data in the zipfile
+*/
+
+extern int ZEXPORT zipCloseFileInZip OF((zipFile file));
+/*
+  Close the current file in the zipfile
+*/
+
+extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file,
+                                            uLong uncompressed_size,
+                                            uLong crc32));
+
+extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file,
+                                            ZPOS64_T uncompressed_size,
+                                            uLong crc32));
+
+/*
+  Close the current file in the zipfile, for file opened with
+    parameter raw=1 in zipOpenNewFileInZip2
+  uncompressed_size and crc32 are value for the uncompressed size
+*/
+
+extern int ZEXPORT zipClose OF((zipFile file,
+                const char* global_comment));
+/*
+  Close the zipfile
+*/
+
+
+extern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader));
+/*
+  zipRemoveExtraInfoBlock -  Added by Mathias Svensson
+
+  Remove extra information block from a extra information data for the local file header or central directory header
+
+  It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode.
+
+  0x0001 is the signature header for the ZIP64 extra information blocks
+
+  usage.
+                        Remove ZIP64 Extra information from a central director extra field data
+              zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001);
+
+                        Remove ZIP64 Extra information from a Local File Header extra field data
+        zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001);
+*/
+
+/*
+   Added by Sergey A. Tachenov to tweak zipping behaviour.
+*/
+extern int ZEXPORT zipSetFlags(zipFile file, unsigned flags);
+extern int ZEXPORT zipClearFlags(zipFile file, unsigned flags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _zip64_H */
diff --git a/3rdparty/quazip-0.7/qztest/coverage.sh b/3rdparty/quazip-0.7/qztest/coverage.sh
new file mode 100755
index 0000000..6890810
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/coverage.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+lcov --capture -b ../quazip -d ../quazip/.obj --output-file cov.info
+genhtml --demangle-cpp cov.info --output-directory cov
diff --git a/3rdparty/quazip-0.7/qztest/qztest.cpp b/3rdparty/quazip-0.7/qztest/qztest.cpp
new file mode 100644
index 0000000..48c196f
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/qztest.cpp
@@ -0,0 +1,231 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "qztest.h"
+#include "testquazip.h"
+#include "testquazipfile.h"
+#include "testquachecksum32.h"
+#include "testjlcompress.h"
+#include "testquazipdir.h"
+#include "testquagzipfile.h"
+#include "testquaziodevice.h"
+#include "testquazipnewinfo.h"
+#include "testquazipfileinfo.h"
+
+#include <quazip/quazip.h>
+#include <quazip/quazipfile.h>
+
+#include <QCoreApplication>
+#include <QDir>
+#include <QFileInfo>
+#include <QTextStream>
+
+#include <QtTest/QtTest>
+
+bool createTestFiles(const QStringList &fileNames, const QString &dir)
+{
+    QDir curDir;
+    foreach (QString fileName, fileNames) {
+        QString filePath = QDir(dir).filePath(fileName);
+        QDir testDir = QFileInfo(filePath).dir();
+        if (!testDir.exists()) {
+            if (!curDir.mkpath(testDir.path())) {
+                qWarning("Couldn't mkpath %s",
+                        testDir.path().toUtf8().constData());
+                return false;
+            }
+        }
+        if (fileName.endsWith('/')) {
+            if (!curDir.mkpath(filePath)) {
+                qWarning("Couldn't mkpath %s",
+				fileName.toUtf8().constData());
+                return false;
+            }
+        } else {
+            QFile testFile(filePath);
+            if (!testFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
+                qWarning("Couldn't create %s",
+                        fileName.toUtf8().constData());
+                return false;
+            }
+            QTextStream testStream(&testFile);
+            testStream << "This is a test file named " << fileName << endl;
+        }
+    }
+    return true;
+}
+
+bool createTestArchive(QuaZip &zip, const QString &zipName,
+                       const QStringList &fileNames,
+                       QTextCodec *codec,
+                       const QString &dir)
+{
+    if (codec != NULL) {
+        zip.setFileNameCodec(codec);
+    }
+    if (!zip.open(QuaZip::mdCreate)) {
+        qWarning("Couldn't open %s", zipName.toUtf8().constData());
+        return false;
+    }
+    int i = 0;
+    QDateTime dt1;
+    foreach (QString fileName, fileNames) {
+        QuaZipFile zipFile(&zip);
+        QString filePath = QDir(dir).filePath(fileName);
+        QFileInfo fileInfo(filePath);
+        QuaZipNewInfo newInfo(fileName, filePath);
+        if (i == 0) // to test code that needs different timestamps
+            newInfo.dateTime = newInfo.dateTime.addSecs(-60);
+        else if (i == 1) // will use for the next file too
+            dt1 = newInfo.dateTime;
+        else if (i == 2) // to test identical timestamps
+            newInfo.dateTime = dt1;
+        if (!zipFile.open(QIODevice::WriteOnly,
+                newInfo, NULL, 0,
+                fileInfo.isDir() ? 0 : 8)) {
+            qWarning("Couldn't open %s in %s", fileName.toUtf8()
+                .constData(), zipName.toUtf8().constData());
+            return false;
+        }
+        if (!fileInfo.isDir()) {
+            QFile file(filePath);
+            if (!file.open(QIODevice::ReadOnly)) {
+                qWarning("Couldn't open %s", filePath.toUtf8()
+                    .constData());
+                return false;
+            }
+            while (!file.atEnd()) {
+                char buf[4096];
+                qint64 l = file.read(buf, 4096);
+                if (l <= 0) {
+                    qWarning("Couldn't read %s", filePath.toUtf8()
+                        .constData());
+                    return false;
+                }
+                if (zipFile.write(buf, l) != l) {
+                    qWarning("Couldn't write to %s in %s",
+                        filePath.toUtf8().constData(),
+                        zipName.toUtf8().constData());
+                    return false;
+                }
+            }
+            file.close();
+        }
+        zipFile.close();
+        ++i;
+    }
+    zip.setComment(QString("This is the test archive"));
+    zip.close();
+    if (zipName.startsWith("<")) { // something like "<QIODevice pointer>"
+        return true;
+    } else {
+        return QFileInfo(zipName).exists();
+    }
+}
+
+bool createTestArchive(const QString &zipName,
+                       const QStringList &fileNames,
+                       const QString &dir) {
+    return createTestArchive(zipName, fileNames, NULL, dir);
+}
+
+bool createTestArchive(QIODevice *ioDevice,
+                              const QStringList &fileNames,
+                              QTextCodec *codec,
+                              const QString &dir)
+{
+    QuaZip zip(ioDevice);
+    return createTestArchive(zip, "<QIODevice pointer>", fileNames, codec, dir);
+}
+
+bool createTestArchive(const QString &zipName,
+                              const QStringList &fileNames,
+                              QTextCodec *codec,
+                              const QString &dir) {
+    QuaZip zip(zipName);
+    return createTestArchive(zip, zipName, fileNames, codec, dir);
+}
+
+void removeTestFiles(const QStringList &fileNames, const QString &dir)
+{
+    QDir curDir;
+    foreach (QString fileName, fileNames) {
+        curDir.remove(QDir(dir).filePath(fileName));
+    }
+    foreach (QString fileName, fileNames) {
+        QDir fileDir = QFileInfo(QDir(dir).filePath(fileName)).dir();
+        if (fileDir.exists()) {
+            // Non-empty dirs won't get removed, and that's good.
+            curDir.rmpath(fileDir.path());
+        }
+    }
+}
+
+int main(int argc, char **argv)
+{
+    QCoreApplication app(argc, argv);
+    int err = 0;
+    {
+        TestQuaZip testQuaZip;
+        err = qMax(err, QTest::qExec(&testQuaZip, app.arguments()));
+    }
+    {
+        TestQuaZipFile testQuaZipFile;
+        err = qMax(err, QTest::qExec(&testQuaZipFile, app.arguments()));
+    }
+    {
+        TestQuaChecksum32 testQuaChecksum32;
+        err = qMax(err, QTest::qExec(&testQuaChecksum32, app.arguments()));
+    }
+    {
+        TestJlCompress testJlCompress;
+        err = qMax(err, QTest::qExec(&testJlCompress, app.arguments()));
+    }
+    {
+        TestQuaZipDir testQuaZipDir;
+        err = qMax(err, QTest::qExec(&testQuaZipDir, app.arguments()));
+    }
+    {
+        TestQuaZIODevice testQuaZIODevice;
+        err = qMax(err, QTest::qExec(&testQuaZIODevice, app.arguments()));
+    }
+    {
+        TestQuaGzipFile testQuaGzipFile;
+        err = qMax(err, QTest::qExec(&testQuaGzipFile, app.arguments()));
+    }
+    {
+        TestQuaZipNewInfo testQuaZipNewInfo;
+        err = qMax(err, QTest::qExec(&testQuaZipNewInfo, app.arguments()));
+    }
+    {
+        TestQuaZipFileInfo testQuaZipFileInfo;
+        err = qMax(err, QTest::qExec(&testQuaZipFileInfo, app.arguments()));
+    }
+    if (err == 0) {
+        qDebug("All tests executed successfully");
+    } else {
+        qWarning("There were errors in some of the tests above.");
+    }
+    return err;
+}
diff --git a/3rdparty/quazip-0.7/qztest/qztest.h b/3rdparty/quazip-0.7/qztest/qztest.h
new file mode 100644
index 0000000..5e8c42c
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/qztest.h
@@ -0,0 +1,49 @@
+#ifndef QUAZIP_TEST_QZTEST_H
+#define QUAZIP_TEST_QZTEST_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QIODevice>
+#include <QString>
+#include <QStringList>
+#include <QTextCodec>
+
+extern bool createTestFiles(const QStringList &fileNames, const QString
+        &dir = "tmp");
+extern void removeTestFiles(const QStringList &fileNames, const QString
+        &dir = "tmp");
+extern bool createTestArchive(const QString &zipName, 
+                              const QStringList &fileNames, 
+                              const QString &dir = "tmp");
+extern bool createTestArchive(const QString &zipName,
+                              const QStringList &fileNames,
+                              QTextCodec *codec,
+                              const QString &dir = "tmp");
+extern bool createTestArchive(QIODevice *ioDevice,
+                              const QStringList &fileNames,
+                              QTextCodec *codec,
+                              const QString &dir = "tmp");
+
+#endif // QUAZIP_TEST_QZTEST_H
diff --git a/3rdparty/quazip-0.7/qztest/qztest.pro b/3rdparty/quazip-0.7/qztest/qztest.pro
new file mode 100644
index 0000000..1329197
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/qztest.pro
@@ -0,0 +1,46 @@
+TEMPLATE = app
+QT -= gui
+QT += network
+CONFIG += qtestlib
+CONFIG += console
+CONFIG -= app_bundle
+DEPENDPATH += .
+INCLUDEPATH += .
+!win32: LIBS += -lz
+win32 {
+    # workaround for qdatetime.h macro bug
+    DEFINES += NOMINMAX
+}
+
+# Input
+HEADERS += qztest.h \
+testjlcompress.h \
+testquachecksum32.h \
+testquagzipfile.h \
+testquaziodevice.h \
+testquazipdir.h \
+testquazipfile.h \
+testquazip.h \
+    testquazipnewinfo.h \
+    testquazipfileinfo.h
+
+SOURCES += qztest.cpp \
+testjlcompress.cpp \
+testquachecksum32.cpp \
+testquagzipfile.cpp \
+testquaziodevice.cpp \
+testquazip.cpp \
+testquazipdir.cpp \
+testquazipfile.cpp \
+    testquazipnewinfo.cpp \
+    testquazipfileinfo.cpp
+
+OBJECTS_DIR = .obj
+MOC_DIR = .moc
+
+win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../quazip/release/ -lquazip
+else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../quazip/debug/ -lquazip
+else:unix: LIBS += -L$$OUT_PWD/../quazip/ -lquazip
+
+INCLUDEPATH += $$PWD/..
+DEPENDPATH += $$PWD/../quazip
diff --git a/3rdparty/quazip-0.7/qztest/qztest.sln b/3rdparty/quazip-0.7/qztest/qztest.sln
new file mode 100644
index 0000000..e993a0b
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/qztest.sln
@@ -0,0 +1,26 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual C++ Express 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qztest", "qztest.vcproj", "{7632B767-D089-4F15-8B1E-C4B3F9EBF592}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "quazip", "..\quazip\quazip.vcproj", "{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{7632B767-D089-4F15-8B1E-C4B3F9EBF592}.Debug|Win32.ActiveCfg = Debug|Win32
+		{7632B767-D089-4F15-8B1E-C4B3F9EBF592}.Debug|Win32.Build.0 = Debug|Win32
+		{7632B767-D089-4F15-8B1E-C4B3F9EBF592}.Release|Win32.ActiveCfg = Release|Win32
+		{7632B767-D089-4F15-8B1E-C4B3F9EBF592}.Release|Win32.Build.0 = Release|Win32
+		{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}.Debug|Win32.Build.0 = Debug|Win32
+		{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}.Release|Win32.ActiveCfg = Release|Win32
+		{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/3rdparty/quazip-0.7/qztest/qztest.vcproj b/3rdparty/quazip-0.7/qztest/qztest.vcproj
new file mode 100644
index 0000000..8dc7033
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/qztest.vcproj
@@ -0,0 +1,293 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="qztest"
+	ProjectGUID="{7632B767-D089-4F15-8B1E-C4B3F9EBF592}"
+	RootNamespace="qztest"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="Debug"
+			ConfigurationType="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories=".."
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="QtCored4.lib QtTestd4.lib"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="Release"
+			ConfigurationType="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".."
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="QtCore4.lib QtTest4.lib"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+		<ProjectReference
+			ReferencedProjectIdentifier="{E4AC5F56-B711-4F0E-BC83-CDE8B6CD53AD}"
+			RelativePathToProject=".\quazip\quazip.vcproj"
+		/>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath=".\qztest.h"
+				>
+			</File>
+			<File
+				RelativePath=".\testjlcompress.h"
+				>
+			</File>
+			<File
+				RelativePath=".\testquachecksum32.h"
+				>
+			</File>
+			<File
+				RelativePath=".\testquagzipfile.h"
+				>
+			</File>
+			<File
+				RelativePath=".\testquaziodevice.h"
+				>
+			</File>
+			<File
+				RelativePath=".\testquazip.h"
+				>
+			</File>
+			<File
+				RelativePath=".\testquazipdir.h"
+				>
+			</File>
+			<File
+				RelativePath=".\testquazipfile.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\moc_testjlcompress.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\moc_testquachecksum32.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\moc_testquagzipfile.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\moc_testquaziodevice.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\moc_testquazip.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\moc_testquazipdir.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\moc_testquazipfile.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\qztest.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\testjlcompress.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\testquachecksum32.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\testquagzipfile.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\testquaziodevice.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\testquazip.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\testquazipdir.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\testquazipfile.cpp"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath=".\debug\BuildLog.htm"
+			>
+		</File>
+		<File
+			RelativePath=".\release\BuildLog.htm"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/3rdparty/quazip-0.7/qztest/qztest.vcxproj b/3rdparty/quazip-0.7/qztest/qztest.vcxproj
new file mode 100644
index 0000000..902b69e
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/qztest.vcxproj
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{7632B767-D089-4F15-8B1E-C4B3F9EBF592}</ProjectGuid>
+    <RootNamespace>qztest</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\..\qt4.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\..\qt4.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>QtCored4.lib;QtTestd4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>copy /y $(SolutionDir)\quazip\Debug\quazip.dll $(OutDir)\</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>QtCore4.lib;QtTest4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Command>copy /y $(SolutionDir)\quazip\Release\quazip.dll $(OutDir)\</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\quazip\quazip.vcxproj">
+      <Project>{e4ac5f56-b711-4f0e-bc83-cde8b6cd53ad}</Project>
+      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
+      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="qztest.h" />
+    <ClInclude Include="testjlcompress.h" />
+    <ClInclude Include="testquachecksum32.h" />
+    <ClInclude Include="testquagzipfile.h" />
+    <ClInclude Include="testquaziodevice.h" />
+    <ClInclude Include="testquazip.h" />
+    <ClInclude Include="testquazipdir.h" />
+    <ClInclude Include="testquazipfile.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="moc\moc_testjlcompress.cpp" />
+    <ClCompile Include="moc\moc_testquachecksum32.cpp" />
+    <ClCompile Include="moc\moc_testquagzipfile.cpp" />
+    <ClCompile Include="moc\moc_testquaziodevice.cpp" />
+    <ClCompile Include="moc\moc_testquazip.cpp" />
+    <ClCompile Include="moc\moc_testquazipdir.cpp" />
+    <ClCompile Include="moc\moc_testquazipfile.cpp" />
+    <ClCompile Include="qztest.cpp" />
+    <ClCompile Include="testjlcompress.cpp" />
+    <ClCompile Include="testquachecksum32.cpp" />
+    <ClCompile Include="testquagzipfile.cpp" />
+    <ClCompile Include="testquaziodevice.cpp" />
+    <ClCompile Include="testquazip.cpp" />
+    <ClCompile Include="testquazipdir.cpp" />
+    <ClCompile Include="testquazipfile.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="debug\BuildLog.htm" />
+    <None Include="release\BuildLog.htm" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/qztest/qztest.vcxproj.filters b/3rdparty/quazip-0.7/qztest/qztest.vcxproj.filters
new file mode 100644
index 0000000..996f087
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/qztest.vcxproj.filters
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx</Extensions>
+    </Filter>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="qztest.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="testjlcompress.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="testquachecksum32.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="testquagzipfile.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="testquaziodevice.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="testquazip.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="testquazipdir.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="testquazipfile.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="qztest.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="testjlcompress.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="testquachecksum32.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="testquagzipfile.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="testquaziodevice.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="testquazip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="testquazipdir.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="testquazipfile.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="moc\moc_testjlcompress.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="moc\moc_testquachecksum32.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="moc\moc_testquagzipfile.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="moc\moc_testquaziodevice.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="moc\moc_testquazip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="moc\moc_testquazipdir.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="moc\moc_testquazipfile.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="debug\BuildLog.htm" />
+    <None Include="release\BuildLog.htm" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/3rdparty/quazip-0.7/qztest/run_moc.bat b/3rdparty/quazip-0.7/qztest/run_moc.bat
new file mode 100644
index 0000000..7aea175
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/run_moc.bat
@@ -0,0 +1,7 @@
+moc -o moc\moc_testjlcompress.cpp testjlcompress.h
+moc -o moc\moc_testquachecksum32.cpp testquachecksum32.h
+moc -o moc\moc_testquazip.cpp testquazip.h
+moc -o moc\moc_testquazipfile.cpp testquazipfile.h
+moc -o moc\moc_testquazipdir.cpp testquazipdir.h
+moc -o moc\moc_testquagzipfile.cpp testquagzipfile.h
+moc -o moc\moc_testquaziodevice.cpp testquaziodevice.h
diff --git a/3rdparty/quazip-0.7/qztest/testjlcompress.cpp b/3rdparty/quazip-0.7/qztest/testjlcompress.cpp
new file mode 100644
index 0000000..bcfbcbd
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testjlcompress.cpp
@@ -0,0 +1,316 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "testjlcompress.h"
+
+#include "qztest.h"
+
+#include <QDir>
+#include <QFileInfo>
+
+#include <QtTest/QtTest>
+
+#include <quazip/JlCompress.h>
+
+void TestJlCompress::compressFile_data()
+{
+    QTest::addColumn<QString>("zipName");
+    QTest::addColumn<QString>("fileName");
+    QTest::newRow("simple") << "jlsimplefile.zip" << "test0.txt";
+}
+
+void TestJlCompress::compressFile()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QString, fileName);
+    QDir curDir;
+    if (curDir.exists(zipName)) {
+        if (!curDir.remove(zipName))
+            QFAIL("Can't remove zip file");
+    }
+    if (!createTestFiles(QStringList() << fileName)) {
+        QFAIL("Can't create test file");
+    }
+    QVERIFY(JlCompress::compressFile(zipName, "tmp/" + fileName));
+    // get the file list and check it
+    QStringList fileList = JlCompress::getFileList(zipName);
+    QCOMPARE(fileList.count(), 1);
+    QVERIFY(fileList[0] == fileName);
+    removeTestFiles(QStringList() << fileName);
+    curDir.remove(zipName);
+}
+
+void TestJlCompress::compressFiles_data()
+{
+    QTest::addColumn<QString>("zipName");
+    QTest::addColumn<QStringList>("fileNames");
+    QTest::newRow("simple") << "jlsimplefiles.zip" <<
+        (QStringList() << "test0.txt" << "test00.txt");
+    QTest::newRow("different subdirs") << "jlsubdirfiles.zip" <<
+        (QStringList() << "subdir1/test1.txt" << "subdir2/test2.txt");
+}
+
+void TestJlCompress::compressFiles()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QStringList, fileNames);
+    QDir curDir;
+    if (curDir.exists(zipName)) {
+        if (!curDir.remove(zipName))
+            QFAIL("Can't remove zip file");
+    }
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Can't create test files");
+    }
+    QStringList realNamesList, shortNamesList;
+    foreach (QString fileName, fileNames) {
+        QString realName = "tmp/" + fileName;
+        realNamesList += realName;
+        shortNamesList += QFileInfo(realName).fileName();
+    }
+    QVERIFY(JlCompress::compressFiles(zipName, realNamesList));
+    // get the file list and check it
+    QStringList fileList = JlCompress::getFileList(zipName);
+    QCOMPARE(fileList, shortNamesList);
+    removeTestFiles(fileNames);
+    curDir.remove(zipName);
+}
+
+void TestJlCompress::compressDir_data()
+{
+    QTest::addColumn<QString>("zipName");
+    QTest::addColumn<QStringList>("fileNames");
+    QTest::addColumn<QStringList>("expected");
+    QTest::newRow("simple") << "jldir.zip"
+        << (QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt")
+		<< (QStringList() << "test0.txt"
+			<< "testdir1/" << "testdir1/test1.txt"
+            << "testdir2/" << "testdir2/test2.txt"
+			<< "testdir2/subdir/" << "testdir2/subdir/test2sub.txt");
+    QTest::newRow("empty dirs") << "jldir_empty.zip"
+		<< (QStringList() << "testdir1/" << "testdir2/testdir3/")
+		<< (QStringList() << "testdir1/" << "testdir2/"
+            << "testdir2/testdir3/");
+}
+
+void TestJlCompress::compressDir()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QStringList, fileNames);
+    QFETCH(QStringList, expected);
+    QDir curDir;
+    if (curDir.exists(zipName)) {
+        if (!curDir.remove(zipName))
+            QFAIL("Can't remove zip file");
+    }
+    if (!createTestFiles(fileNames, "compressDir_tmp")) {
+        QFAIL("Can't create test files");
+    }
+    QVERIFY(JlCompress::compressDir(zipName, "compressDir_tmp"));
+    // get the file list and check it
+    QStringList fileList = JlCompress::getFileList(zipName);
+    qSort(fileList);
+    qSort(expected);
+    QCOMPARE(fileList, expected);
+    removeTestFiles(fileNames, "compressDir_tmp");
+    curDir.remove(zipName);
+}
+
+void TestJlCompress::extractFile_data()
+{
+    QTest::addColumn<QString>("zipName");
+    QTest::addColumn<QStringList>("fileNames");
+    QTest::addColumn<QString>("fileToExtract");
+    QTest::addColumn<QString>("destName");
+    QTest::addColumn<QByteArray>("encoding");
+    QTest::newRow("simple") << "jlextfile.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt")
+        << "testdir2/test2.txt" << "test2.txt" << QByteArray();
+    QTest::newRow("russian") << "jlextfilerus.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << QString::fromUtf8("testdir2/тест2.txt")
+            << "testdir2/subdir/test2sub.txt")
+        << QString::fromUtf8("testdir2/тест2.txt")
+        << QString::fromUtf8("тест2.txt") << QByteArray("IBM866");
+    QTest::newRow("extract dir") << "jlextdir.zip" << (
+            QStringList() << "testdir1/")
+        << "testdir1/" << "testdir1/" << QByteArray();
+}
+
+void TestJlCompress::extractFile()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QStringList, fileNames);
+    QFETCH(QString, fileToExtract);
+    QFETCH(QString, destName);
+    QFETCH(QByteArray, encoding);
+    QDir curDir;
+    if (!curDir.mkpath("jlext/jlfile")) {
+        QFAIL("Couldn't mkpath jlext/jlfile");
+    }
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Couldn't create test files");
+    }
+    QFile srcFile("tmp/" + fileToExtract);
+    QFile::Permissions srcPerm = srcFile.permissions();
+    // Invert the "write other" flag so permissions
+    // are NOT default any more. Otherwise it's impossible
+    // to figure out whether the permissions were set correctly
+    // or JlCompress failed to set them completely,
+    // thus leaving them at the default setting.
+    srcPerm ^= QFile::WriteOther;
+    QVERIFY(srcFile.setPermissions(srcPerm));
+    if (!createTestArchive(zipName, fileNames,
+                           QTextCodec::codecForName(encoding))) {
+        QFAIL("Can't create test archive");
+    }
+    QuaZip::setDefaultFileNameCodec(encoding);
+    QVERIFY(!JlCompress::extractFile(zipName, fileToExtract,
+                "jlext/jlfile/" + destName).isEmpty());
+    QFileInfo destInfo("jlext/jlfile/" + destName), srcInfo("tmp/" +
+            fileToExtract);
+    QCOMPARE(destInfo.size(), srcInfo.size());
+    QCOMPARE(destInfo.permissions(), srcInfo.permissions());
+    curDir.remove("jlext/jlfile/" + destName);
+    if (!fileToExtract.endsWith("/")) {
+        // If we aren't extracting a directory, we need to check
+        // that extractFile() fails if there is a directory
+        // with the same name as the file being extracted.
+        curDir.mkdir("jlext/jlfile/" + destName);
+        QVERIFY(JlCompress::extractFile(zipName, fileToExtract,
+                    "jlext/jlfile/" + destName).isEmpty());
+    }
+    // Here we either delete the target dir or the dir created in the
+    // test above.
+    curDir.rmpath("jlext/jlfile/" + destName);
+    removeTestFiles(fileNames);
+    curDir.remove(zipName);
+}
+
+void TestJlCompress::extractFiles_data()
+{
+    QTest::addColumn<QString>("zipName");
+    QTest::addColumn<QStringList>("fileNames");
+    QTest::addColumn<QStringList>("filesToExtract");
+    QTest::newRow("simple") << "jlextfiles.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt")
+        << (QStringList() << "testdir2/test2.txt" << "testdir1/test1.txt");
+}
+
+void TestJlCompress::extractFiles()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QStringList, fileNames);
+    QFETCH(QStringList, filesToExtract);
+    QDir curDir;
+    if (!curDir.mkpath("jlext/jlfiles")) {
+        QFAIL("Couldn't mkpath jlext/jlfiles");
+    }
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Couldn't create test files");
+    }
+    if (!JlCompress::compressDir(zipName, "tmp")) {
+        QFAIL("Couldn't create test archive");
+    }
+    QVERIFY(!JlCompress::extractFiles(zipName, filesToExtract,
+                "jlext/jlfiles").isEmpty());
+    foreach (QString fileName, filesToExtract) {
+        QFileInfo fileInfo("jlext/jlfiles/" + fileName);
+        QFileInfo extInfo("tmp/" + fileName);
+        QCOMPARE(fileInfo.size(), extInfo.size());
+        QCOMPARE(fileInfo.permissions(), extInfo.permissions());
+        curDir.remove("jlext/jlfiles/" + fileName);
+        curDir.rmpath(fileInfo.dir().path());
+    }
+    curDir.rmpath("jlext/jlfiles");
+    removeTestFiles(fileNames);
+    curDir.remove(zipName);
+}
+
+void TestJlCompress::extractDir_data()
+{
+    QTest::addColumn<QString>("zipName");
+    QTest::addColumn<QStringList>("fileNames");
+    QTest::newRow("simple") << "jlextdir.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt");
+    QTest::newRow("separate dir") << "sepdir.zip" << (
+            QStringList() << "laj/" << "laj/lajfile.txt");
+}
+
+void TestJlCompress::extractDir()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QStringList, fileNames);
+    QDir curDir;
+    if (!curDir.mkpath("jlext/jldir")) {
+        QFAIL("Couldn't mkpath jlext/jldir");
+    }
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Couldn't create test files");
+    }
+    if (!createTestArchive(zipName, fileNames)) {
+        QFAIL("Couldn't create test archive");
+    }
+    QStringList extracted;
+    QCOMPARE((extracted = JlCompress::extractDir(zipName, "jlext/jldir"))
+        .count(), fileNames.count());
+    foreach (QString fileName, fileNames) {
+        QString fullName = "jlext/jldir/" + fileName;
+        QFileInfo fileInfo(fullName);
+        QFileInfo extInfo("tmp/" + fileName);
+        if (!fileInfo.isDir())
+            QCOMPARE(fileInfo.size(), extInfo.size());
+        QCOMPARE(fileInfo.permissions(), extInfo.permissions());
+        curDir.remove(fullName);
+        curDir.rmpath(fileInfo.dir().path());
+        QString absolutePath = fileInfo.absoluteFilePath();
+        if (fileInfo.isDir() && !absolutePath.endsWith('/'))
+	    absolutePath += '/';
+        QVERIFY(extracted.contains(absolutePath));
+    }
+    curDir.rmpath("jlext/jldir");
+    removeTestFiles(fileNames);
+    curDir.remove(zipName);
+}
+
+void TestJlCompress::zeroPermissions()
+{
+    QuaZip zipCreator("zero.zip");
+    QVERIFY(zipCreator.open(QuaZip::mdCreate));
+    QuaZipFile zeroFile(&zipCreator);
+    QuaZipNewInfo newInfo("zero.txt");
+    newInfo.externalAttr = 0; // should be zero anyway, but just in case
+    QVERIFY(zeroFile.open(QIODevice::WriteOnly, newInfo));
+    zeroFile.close();
+    zipCreator.close();
+    QVERIFY(!JlCompress::extractFile("zero.zip", "zero.txt").isEmpty());
+    QVERIFY(QFile("zero.txt").permissions() != 0);
+    QDir curDir;
+    curDir.remove("zero.zip");
+    curDir.remove("zero.txt");
+}
diff --git a/3rdparty/quazip-0.7/qztest/testjlcompress.h b/3rdparty/quazip-0.7/qztest/testjlcompress.h
new file mode 100644
index 0000000..978ada2
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testjlcompress.h
@@ -0,0 +1,48 @@
+#ifndef QUAZIP_TEST_JLCOMPRESS_H
+#define QUAZIP_TEST_JLCOMPRESS_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QObject>
+
+class TestJlCompress: public QObject {
+    Q_OBJECT
+private slots:
+    void compressFile_data();
+    void compressFile();
+    void compressFiles_data();
+    void compressFiles();
+    void compressDir_data();
+    void compressDir();
+    void extractFile_data();
+    void extractFile();
+    void extractFiles_data();
+    void extractFiles();
+    void extractDir_data();
+    void extractDir();
+    void zeroPermissions();
+};
+
+#endif // QUAZIP_TEST_JLCOMPRESS_H
diff --git a/3rdparty/quazip-0.7/qztest/testquachecksum32.cpp b/3rdparty/quazip-0.7/qztest/testquachecksum32.cpp
new file mode 100644
index 0000000..5da1160
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquachecksum32.cpp
@@ -0,0 +1,50 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "testquachecksum32.h"
+
+#include <quazip/quaadler32.h>
+#include <quazip/quacrc32.h>
+
+#include <QtTest/QtTest>
+
+void TestQuaChecksum32::calculate()
+{
+    QuaCrc32 crc32;
+    QCOMPARE(crc32.calculate("Wikipedia"), 0xADAAC02Eu);
+    QuaAdler32 adler32;
+    QCOMPARE(adler32.calculate("Wikipedia"), 0x11E60398u);
+}
+
+void TestQuaChecksum32::update()
+{
+    QuaCrc32 crc32;
+    crc32.update("Wiki");
+    crc32.update("pedia");
+    QCOMPARE(crc32.value(), 0xADAAC02Eu);
+    QuaAdler32 adler32;
+    adler32.update("Wiki");
+    adler32.update("pedia");
+    QCOMPARE(adler32.value(), 0x11E60398u);
+}
diff --git a/3rdparty/quazip-0.7/qztest/testquachecksum32.h b/3rdparty/quazip-0.7/qztest/testquachecksum32.h
new file mode 100644
index 0000000..e274f1b
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquachecksum32.h
@@ -0,0 +1,37 @@
+#ifndef QUAZIP_TEST_QUACHECKSUM32_H
+#define QUAZIP_TEST_QUACHECKSUM32_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QObject>
+
+class TestQuaChecksum32: public QObject {
+    Q_OBJECT
+private slots:
+    void calculate();
+    void update();
+};
+
+#endif // QUAZIP_TEST_QUACHECKSUM32_H
diff --git a/3rdparty/quazip-0.7/qztest/testquagzipfile.cpp b/3rdparty/quazip-0.7/qztest/testquagzipfile.cpp
new file mode 100644
index 0000000..f2c2caf
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquagzipfile.cpp
@@ -0,0 +1,79 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "testquagzipfile.h"
+#include <zlib.h>
+#include <QDir>
+#include <quazip/quagzipfile.h>
+#include <QtTest/QtTest>
+
+void TestQuaGzipFile::read()
+{
+    QDir curDir;
+    curDir.mkpath("tmp");
+    gzFile file = gzopen("tmp/test.gz", "wb");
+    gzwrite(file, "test", 4);
+    gzclose(file);
+    QuaGzipFile testFile("tmp/test.gz");
+    QVERIFY(testFile.open(QIODevice::ReadOnly));
+    char buf[5];
+    buf[4] = '\0';
+    QCOMPARE(testFile.read(buf, 5), static_cast<qint64>(4));
+    testFile.close();
+    QVERIFY(!testFile.isOpen());
+    QCOMPARE(static_cast<const char*>(buf), "test");
+    curDir.remove("tmp/test.gz");
+    curDir.rmdir("tmp");
+}
+
+void TestQuaGzipFile::write()
+{
+    QDir curDir;
+    curDir.mkpath("tmp");
+    QuaGzipFile testFile;
+    testFile.setFileName("tmp/test.gz");
+    QCOMPARE(testFile.getFileName(), QString::fromLatin1("tmp/test.gz"));
+    QVERIFY(testFile.open(QIODevice::WriteOnly));
+    QCOMPARE(testFile.write("test", 4), static_cast<qint64>(4));
+    QVERIFY(testFile.flush());
+    testFile.close();
+    QVERIFY(!testFile.isOpen());
+    gzFile file = gzopen("tmp/test.gz", "rb");
+    char buf[5];
+    buf[4] = '\0';
+    QCOMPARE(gzread(file, buf, 5), 4);
+    gzclose(file);
+    QCOMPARE(static_cast<const char*>(buf), "test");
+    curDir.remove("tmp/test.gz");
+    curDir.rmdir("tmp");
+}
+
+void TestQuaGzipFile::constructorDestructor()
+{
+    QuaGzipFile *f1 = new QuaGzipFile();
+    delete f1; // D0 destructor
+    QObject parent;
+    QuaGzipFile f2(&parent);
+    QuaGzipFile f3("test.gz", &parent);
+}
diff --git a/3rdparty/quazip-0.7/qztest/testquagzipfile.h b/3rdparty/quazip-0.7/qztest/testquagzipfile.h
new file mode 100644
index 0000000..72d31c6
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquagzipfile.h
@@ -0,0 +1,38 @@
+#ifndef QUAZIP_TEST_QUAGZIPFILE_H
+#define QUAZIP_TEST_QUAGZIPFILE_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QObject>
+
+class TestQuaGzipFile: public QObject {
+    Q_OBJECT
+private slots:
+    void read();
+    void write();
+    void constructorDestructor();
+};
+
+#endif // QUAZIP_TEST_QUAGZIPFILE_H
diff --git a/3rdparty/quazip-0.7/qztest/testquaziodevice.cpp b/3rdparty/quazip-0.7/qztest/testquaziodevice.cpp
new file mode 100644
index 0000000..c3d2f02
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquaziodevice.cpp
@@ -0,0 +1,83 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "testquaziodevice.h"
+#include <quazip/quaziodevice.h>
+#include <QBuffer>
+#include <QByteArray>
+#include <QtTest/QtTest>
+
+void TestQuaZIODevice::read()
+{
+    QByteArray buf(256, 0);
+    z_stream zouts;
+    zouts.zalloc = (alloc_func) NULL;
+    zouts.zfree = (free_func) NULL;
+    zouts.opaque = NULL;
+    deflateInit(&zouts, Z_DEFAULT_COMPRESSION);
+    zouts.next_in = reinterpret_cast<Bytef*>(const_cast<char*>("test"));
+    zouts.avail_in = 4;
+    zouts.next_out = reinterpret_cast<Bytef*>(buf.data());
+    zouts.avail_out = buf.size();
+    deflate(&zouts, Z_FINISH);
+    deflateEnd(&zouts);
+    QBuffer testBuffer(&buf);
+    testBuffer.open(QIODevice::ReadOnly);
+    QuaZIODevice testDevice(&testBuffer);
+    QVERIFY(testDevice.open(QIODevice::ReadOnly));
+    char outBuf[5];
+    QCOMPARE(testDevice.read(outBuf, 5), static_cast<qint64>(4));
+    testDevice.close();
+    QVERIFY(!testDevice.isOpen());
+}
+
+void TestQuaZIODevice::write()
+{
+    QByteArray buf(256, 0);
+    QBuffer testBuffer(&buf);
+    testBuffer.open(QIODevice::WriteOnly);
+    QuaZIODevice *testDevice = new QuaZIODevice(&testBuffer);
+    QCOMPARE(testDevice->getIoDevice(), &testBuffer);
+    QVERIFY(testDevice->open(QIODevice::WriteOnly));
+    QCOMPARE(testDevice->write("test", 4), static_cast<qint64>(4));
+    testDevice->close();
+    QVERIFY(!testDevice->isOpen());
+    z_stream zins;
+    zins.zalloc = (alloc_func) NULL;
+    zins.zfree = (free_func) NULL;
+    zins.opaque = NULL;
+    inflateInit(&zins);
+    zins.next_in = reinterpret_cast<Bytef*>(buf.data());
+    zins.avail_in = testBuffer.pos();
+    char outBuf[5];
+    zins.next_out = reinterpret_cast<Bytef*>(outBuf);
+    zins.avail_out = 5;
+    inflate(&zins, Z_FINISH);
+    inflateEnd(&zins);
+    int size = 5 - zins.avail_out;
+    QCOMPARE(size, 4);
+    outBuf[4] = '\0';
+    QCOMPARE(static_cast<const char*>(outBuf), "test");
+    delete testDevice; // Test D0 destructor
+}
diff --git a/3rdparty/quazip-0.7/qztest/testquaziodevice.h b/3rdparty/quazip-0.7/qztest/testquaziodevice.h
new file mode 100644
index 0000000..9324636
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquaziodevice.h
@@ -0,0 +1,37 @@
+#ifndef QUAZIP_TEST_QUAZIODEVICE_H
+#define QUAZIP_TEST_QUAZIODEVICE_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QObject>
+
+class TestQuaZIODevice: public QObject {
+    Q_OBJECT
+private slots:
+    void read();
+    void write();
+};
+
+#endif // QUAZIP_TEST_QUAZIODEVICE_H
diff --git a/3rdparty/quazip-0.7/qztest/testquazip.cpp b/3rdparty/quazip-0.7/qztest/testquazip.cpp
new file mode 100644
index 0000000..78910b6
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquazip.cpp
@@ -0,0 +1,441 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "testquazip.h"
+
+#include "qztest.h"
+
+#include <QDataStream>
+#include <QDir>
+#include <QFileInfo>
+#include <QHash>
+#ifdef QUAZIP_TEST_QSAVEFILE
+#include <QSaveFile>
+#endif
+#include <QTcpServer>
+#include <QTcpSocket>
+#include <QTextCodec>
+
+#include <QtTest/QtTest>
+
+#include <quazip/quazip.h>
+#include <quazip/JlCompress.h>
+
+void TestQuaZip::getFileList_data()
+{
+    QTest::addColumn<QString>("zipName");
+    QTest::addColumn<QStringList>("fileNames");
+    QTest::newRow("simple") << "qzfilelist.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt");
+    QTest::newRow("russian") << QString::fromUtf8("файл.zip") << (
+        QStringList() << QString::fromUtf8("test0.txt") << QString::fromUtf8("test1/test1.txt")
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt");
+    QTest::newRow("japanese") << QString::fromUtf8("テスト.zip") << (
+        QStringList() << QString::fromUtf8("test.txt"));
+    QTest::newRow("hebrew") << QString::fromUtf8("פתח תקווה.zip") << (
+        QStringList() << QString::fromUtf8("test.txt"));
+}
+
+void TestQuaZip::getFileList()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QStringList, fileNames);
+    qSort(fileNames);
+    QDir curDir;
+    if (curDir.exists(zipName)) {
+        if (!curDir.remove(zipName))
+            QFAIL("Can't remove zip file");
+    }
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Can't create test file");
+    }
+    if (!createTestArchive(zipName, fileNames)) {
+        QFAIL("Can't create test archive");
+    }
+    QuaZip testZip(zipName);
+    QVERIFY(testZip.open(QuaZip::mdUnzip));
+    QVERIFY(testZip.goToFirstFile());
+    QString firstFile = testZip.getCurrentFileName();
+    QStringList fileList = testZip.getFileNameList();
+    qSort(fileList);
+    QCOMPARE(fileList, fileNames);
+    QHash<QString, QFileInfo> srcInfo;
+    foreach (QString fileName, fileNames) {
+        srcInfo[fileName] = QFileInfo("tmp/" + fileName);
+    }
+    QList<QuaZipFileInfo> destList = testZip.getFileInfoList();
+    QCOMPARE(destList.size(), srcInfo.size());
+    for (int i = 0; i < destList.size(); i++) {
+        QCOMPARE(static_cast<qint64>(destList[i].uncompressedSize),
+                srcInfo[destList[i].name].size());
+    }
+    // Now test zip64
+    QList<QuaZipFileInfo64> destList64 = testZip.getFileInfoList64();
+    QCOMPARE(destList64.size(), srcInfo.size());
+    for (int i = 0; i < destList64.size(); i++) {
+        QCOMPARE(static_cast<qint64>(destList64[i].uncompressedSize),
+                srcInfo[destList64[i].name].size());
+    }
+    // test that we didn't mess up the current file
+    QCOMPARE(testZip.getCurrentFileName(), firstFile);
+    testZip.close();
+    // clean up
+    removeTestFiles(fileNames);
+    curDir.remove(zipName);
+}
+
+void TestQuaZip::add_data()
+{
+    QTest::addColumn<QString>("zipName");
+    QTest::addColumn<QStringList>("fileNames");
+    QTest::addColumn<QStringList>("fileNamesToAdd");
+    QTest::newRow("simple") << "qzadd.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt")
+            << (QStringList() << "testAdd.txt");
+}
+
+void TestQuaZip::add()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QStringList, fileNames);
+    QFETCH(QStringList, fileNamesToAdd);
+    QDir curDir;
+    if (curDir.exists(zipName)) {
+        if (!curDir.remove(zipName))
+            QFAIL("Can't remove zip file");
+    }
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Can't create test file");
+    }
+    if (!createTestArchive(zipName, fileNames)) {
+        QFAIL("Can't create test archive");
+    }
+    if (!createTestFiles(fileNamesToAdd)) {
+        QFAIL("Can't create test files to add");
+    }
+    QuaZip testZip(zipName);
+    QVERIFY(testZip.open(QuaZip::mdUnzip));
+    // according to the bug #3485459 the global is lost, so we test it
+    QString globalComment = testZip.getComment();
+    testZip.close();
+    QVERIFY(testZip.open(QuaZip::mdAdd));
+    foreach (QString fileName, fileNamesToAdd) {
+        QuaZipFile testFile(&testZip);
+        QVERIFY(testFile.open(QIODevice::WriteOnly, 
+            QuaZipNewInfo(fileName, "tmp/" + fileName)));
+        QFile inFile("tmp/" + fileName);
+        QVERIFY(inFile.open(QIODevice::ReadOnly));
+        testFile.write(inFile.readAll());
+        inFile.close();
+        testFile.close();
+    }
+    testZip.close();
+    QVERIFY(testZip.open(QuaZip::mdUnzip));
+    QStringList allNames = fileNames + fileNamesToAdd;
+    QCOMPARE(testZip.getEntriesCount(), allNames.size());
+    QCOMPARE(testZip.getFileNameList(), allNames);
+    QCOMPARE(testZip.getComment(), globalComment);
+    testZip.close();
+    removeTestFiles(fileNames);
+    removeTestFiles(fileNamesToAdd);
+    curDir.remove(zipName);
+}
+
+void TestQuaZip::setFileNameCodec_data()
+{
+    QTest::addColumn<QString>("zipName");
+    QTest::addColumn<QStringList>("fileNames");
+    QTest::addColumn<QByteArray>("encoding");
+    QTest::newRow("russian") << QString::fromUtf8("russian.zip") << (
+        QStringList() << QString::fromUtf8("тест.txt")) << QByteArray("IBM866");
+}
+
+void TestQuaZip::setFileNameCodec()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QStringList, fileNames);
+    QFETCH(QByteArray, encoding);
+    qSort(fileNames);
+    QDir curDir;
+    if (curDir.exists(zipName)) {
+        if (!curDir.remove(zipName))
+            QFAIL("Can't remove zip file");
+    }
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Can't create test file");
+    }
+    if (!createTestArchive(zipName, fileNames,
+                           QTextCodec::codecForName(encoding))) {
+        QFAIL("Can't create test archive");
+    }
+    QuaZip testZip(zipName);
+    QVERIFY(testZip.open(QuaZip::mdUnzip));
+    QStringList fileList = testZip.getFileNameList();
+    qSort(fileList);
+    QVERIFY(fileList[0] != fileNames[0]);
+    testZip.close();
+    testZip.setFileNameCodec(encoding);
+    QVERIFY(testZip.open(QuaZip::mdUnzip));
+    fileList = testZip.getFileNameList();
+    qSort(fileList);
+    QCOMPARE(fileList, fileNames);
+    testZip.close();
+    // clean up
+    removeTestFiles(fileNames);
+    curDir.remove(zipName);
+}
+
+void TestQuaZip::setDataDescriptorWritingEnabled()
+{
+    QString zipName = "zip10.zip";
+    QDir curDir;
+    if (curDir.exists(zipName)) {
+        if (!curDir.remove(zipName))
+            QFAIL("Can't remove zip file");
+    }
+    QuaZip testZip(zipName);
+    testZip.setDataDescriptorWritingEnabled(false);
+    QVERIFY(testZip.open(QuaZip::mdCreate));
+    QuaZipFile testZipFile(&testZip);
+    QVERIFY(testZipFile.open(QIODevice::WriteOnly,
+                             QuaZipNewInfo("vegetation_info.xml"), NULL, 0, 0));
+    QByteArray contents = "<vegetation_info version=\"4096\" />\n";
+    testZipFile.write(contents);
+    testZipFile.close();
+    testZip.close();
+    QuaZipFile readZipFile(zipName, "vegetation_info.xml");
+    QVERIFY(readZipFile.open(QIODevice::ReadOnly));
+    // Test that file is not compressed.
+    QCOMPARE(readZipFile.csize(), static_cast<qint64>(contents.size()));
+    readZipFile.close();
+    QCOMPARE(QFileInfo(zipName).size(), static_cast<qint64>(171));
+    QFile zipFile(zipName);
+    QVERIFY(zipFile.open(QIODevice::ReadOnly));
+    QDataStream zipData(&zipFile);
+    zipData.setByteOrder(QDataStream::LittleEndian);
+    quint32 magic = 0;
+    quint16 versionNeeded = 0;
+    zipData >> magic;
+    zipData >> versionNeeded;
+    QCOMPARE(magic, static_cast<quint32>(0x04034b50));
+    QCOMPARE(versionNeeded, static_cast<quint16>(10));
+    zipFile.close();
+    curDir.remove(zipName);
+    // now test 2.0
+    zipName = "zip20.zip";
+    if (curDir.exists(zipName)) {
+        if (!curDir.remove(zipName))
+            QFAIL("Can't remove zip file");
+    }
+    QuaZip testZip20(zipName);
+    QVERIFY(testZip20.open(QuaZip::mdCreate));
+    QuaZipFile testZipFile20(&testZip20);
+    QVERIFY(testZipFile20.open(QIODevice::WriteOnly,
+                             QuaZipNewInfo("vegetation_info.xml"), NULL, 0, 0));
+    testZipFile20.write("<vegetation_info version=\"4096\" />\n");
+    testZipFile20.close();
+    testZip20.close();
+    QCOMPARE(QFileInfo(zipName).size(),
+            static_cast<qint64>(171 + 16)); // 16 bytes = data descriptor
+    QFile zipFile20(zipName);
+    QVERIFY(zipFile20.open(QIODevice::ReadOnly));
+    QDataStream zipData20(&zipFile20);
+    zipData20.setByteOrder(QDataStream::LittleEndian);
+    magic = 0;
+    versionNeeded = 0;
+    zipData20 >> magic;
+    zipData20 >> versionNeeded;
+    QCOMPARE(magic, static_cast<quint32>(0x04034b50));
+    QCOMPARE(versionNeeded, static_cast<quint16>(20));
+    zipFile20.close();
+    curDir.remove(zipName);
+}
+
+void TestQuaZip::testQIODeviceAPI()
+{
+    QString zipName = "qiodevice_api.zip";
+    QStringList fileNames;
+    fileNames << "test.txt";
+    QDir curDir;
+    if (curDir.exists(zipName)) {
+        if (!curDir.remove(zipName))
+            QFAIL("Can't remove zip file");
+    }
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Can't create test file");
+    }
+    if (!createTestArchive(zipName, fileNames)) {
+        QFAIL("Can't create test archive");
+    }
+    QBuffer buffer;
+    if (!createTestArchive(&buffer, fileNames, NULL)) {
+        QFAIL("Can't create test archive");
+    }
+    QFile diskFile(zipName);
+    QVERIFY(diskFile.open(QIODevice::ReadOnly));
+    QByteArray bufferArray = buffer.buffer();
+    QByteArray fileArray = diskFile.readAll();
+    diskFile.close();
+    QCOMPARE(bufferArray.size(), fileArray.size());
+    QCOMPARE(bufferArray, fileArray);
+    curDir.remove(zipName);
+}
+
+void TestQuaZip::setZipName()
+{
+    QuaZip zip;
+    zip.setZipName("testSetZipName.zip");
+    zip.open(QuaZip::mdCreate);
+    zip.close();
+    QVERIFY(QFileInfo(zip.getZipName()).exists());
+    QDir().remove(zip.getZipName());
+}
+
+void TestQuaZip::setIoDevice()
+{
+    QuaZip zip;
+    QFile file("testSetIoDevice.zip");
+    zip.setIoDevice(&file);
+    QCOMPARE(zip.getIoDevice(), &file);
+    zip.open(QuaZip::mdCreate);
+    QVERIFY(file.isOpen());
+    zip.close();
+    QVERIFY(!file.isOpen());
+    QVERIFY(file.exists());
+    QDir().remove(file.fileName());
+}
+
+void TestQuaZip::setCommentCodec()
+{
+    QuaZip zip("commentCodec.zip");
+    QVERIFY(zip.open(QuaZip::mdCreate));
+    zip.setCommentCodec("WINDOWS-1251");
+    zip.setComment(QString::fromUtf8("Вопрос"));
+    QuaZipFile zipFile(&zip);
+    QVERIFY(zipFile.open(QIODevice::WriteOnly, QuaZipNewInfo("test.txt")));
+    zipFile.close();
+    zip.close();
+    QVERIFY(zip.open(QuaZip::mdUnzip));
+    zip.setCommentCodec(QTextCodec::codecForName("KOI8-R"));
+    QCOMPARE(zip.getComment(), QString::fromUtf8("бНОПНЯ"));
+    zip.close();
+    QDir().remove(zip.getZipName());
+}
+
+void TestQuaZip::setAutoClose()
+{
+    {
+        QBuffer buf;
+        QuaZip zip(&buf);
+        QVERIFY(zip.isAutoClose());
+        QVERIFY(zip.open(QuaZip::mdCreate));
+        QVERIFY(buf.isOpen());
+        zip.close();
+        QVERIFY(!buf.isOpen());
+        QVERIFY(zip.open(QuaZip::mdCreate));
+    }
+    {
+        QBuffer buf;
+        QuaZip zip(&buf);
+        QVERIFY(zip.isAutoClose());
+        zip.setAutoClose(false);
+        QVERIFY(!zip.isAutoClose());
+        QVERIFY(zip.open(QuaZip::mdCreate));
+        QVERIFY(buf.isOpen());
+        zip.close();
+        QVERIFY(buf.isOpen());
+        QVERIFY(zip.open(QuaZip::mdCreate));
+    }
+}
+
+#ifdef QUAZIP_TEST_QSAVEFILE
+void TestQuaZip::saveFileBug()
+{
+    QDir curDir;
+    QString zipName = "testSaveFile.zip";
+    if (curDir.exists(zipName)) {
+        if (!curDir.remove(zipName)) {
+            QFAIL("Can't remove testSaveFile.zip");
+        }
+    }
+    QuaZip zip;
+    QSaveFile saveFile(zipName);
+    zip.setIoDevice(&saveFile);
+    QCOMPARE(zip.getIoDevice(), &saveFile);
+    zip.open(QuaZip::mdCreate);
+    zip.close();
+    QVERIFY(QFileInfo(saveFile.fileName()).exists());
+    curDir.remove(saveFile.fileName());
+}
+#endif
+
+void TestQuaZip::testSequential()
+{
+    QTcpServer server;
+    QVERIFY(server.listen());
+    quint16 port = server.serverPort();
+    QTcpSocket socket;
+    socket.connectToHost(QHostAddress(QHostAddress::LocalHost), port);
+    QVERIFY(socket.waitForConnected());
+    QVERIFY(server.waitForNewConnection(30000));
+    QTcpSocket *client = server.nextPendingConnection();
+    QuaZip zip(&socket);
+    zip.setAutoClose(false);
+    QVERIFY(zip.open(QuaZip::mdCreate));
+    QVERIFY(socket.isOpen());
+    QuaZipFile zipFile(&zip);
+    QuaZipNewInfo info("test.txt");
+    QVERIFY(zipFile.open(QIODevice::WriteOnly, info, NULL, 0, 0));
+    QCOMPARE(zipFile.write("test"), static_cast<qint64>(4));
+    zipFile.close();
+    zip.close();
+    QVERIFY(socket.isOpen());
+    socket.disconnectFromHost();
+    QVERIFY(socket.waitForDisconnected());
+    QVERIFY(client->waitForReadyRead());
+    QByteArray received = client->readAll();
+#ifdef QUAZIP_QZTEST_QUAZIP_DEBUG_SOCKET
+    QFile debug("testSequential.zip");
+    debug.open(QIODevice::WriteOnly);
+    debug.write(received);
+    debug.close();
+#endif
+    client->close();
+    QBuffer buffer(&received);
+    QuaZip receivedZip(&buffer);
+    QVERIFY(receivedZip.open(QuaZip::mdUnzip));
+    QVERIFY(receivedZip.goToFirstFile());
+    QuaZipFileInfo64 receivedInfo;
+    QVERIFY(receivedZip.getCurrentFileInfo(&receivedInfo));
+    QCOMPARE(receivedInfo.name, QString::fromLatin1("test.txt"));
+    QCOMPARE(receivedInfo.uncompressedSize, static_cast<quint64>(4));
+    QuaZipFile receivedFile(&receivedZip);
+    QVERIFY(receivedFile.open(QIODevice::ReadOnly));
+    QByteArray receivedText = receivedFile.readAll();
+    QCOMPARE(receivedText, QByteArray("test"));
+    receivedFile.close();
+    receivedZip.close();
+}
diff --git a/3rdparty/quazip-0.7/qztest/testquazip.h b/3rdparty/quazip-0.7/qztest/testquazip.h
new file mode 100644
index 0000000..f4c53cb
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquazip.h
@@ -0,0 +1,55 @@
+#ifndef QUAZIP_TEST_QUAZIP_H
+#define QUAZIP_TEST_QUAZIP_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QObject>
+
+#if (QT_VERSION >= 0x050100)
+#define QUAZIP_TEST_QSAVEFILE
+#endif
+
+class TestQuaZip: public QObject {
+    Q_OBJECT
+private slots:
+    void getFileList_data();
+    void getFileList();
+    void add_data();
+    void add();
+    void setFileNameCodec_data();
+    void setFileNameCodec();
+    void setDataDescriptorWritingEnabled();
+    void testQIODeviceAPI();
+    void setZipName();
+    void setIoDevice();
+    void setCommentCodec();
+    void setAutoClose();
+#ifdef QUAZIP_TEST_QSAVEFILE
+    void saveFileBug();
+#endif
+    void testSequential();
+};
+
+#endif // QUAZIP_TEST_QUAZIP_H
diff --git a/3rdparty/quazip-0.7/qztest/testquazipdir.cpp b/3rdparty/quazip-0.7/qztest/testquazipdir.cpp
new file mode 100644
index 0000000..b5801ea
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquazipdir.cpp
@@ -0,0 +1,348 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "testquazipdir.h"
+#include "qztest.h"
+#include <QtTest/QtTest>
+#include <quazip/quazip.h>
+#include <quazip/quazipdir.h>
+
+void TestQuaZipDir::entryList_data()
+{
+    QTest::addColumn<QString>("zipName");
+    QTest::addColumn<QStringList>("fileNames");
+    QTest::addColumn<QString>("dirName");
+    QTest::addColumn<QStringList>("nameFilters");
+    // QDir::Filters type breaks Qt meta type system on MSVC
+    QTest::addColumn<int>("filter");
+    QTest::addColumn<int>("sort");
+    QTest::addColumn<QStringList>("entries");
+    QTest::addColumn<int>("caseSensitivity");
+    QTest::newRow("simple") << "simple.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt")
+            << "testdir2" << QStringList()
+            << static_cast<int>(QDir::NoFilter)
+            << static_cast<int>(QDir::Unsorted)
+            << (QStringList() << "test2.txt" << "subdir/") << -1;
+    QTest::newRow("separate dir") << "sepdir.zip" << (
+            QStringList() << "laj/" << "laj/lajfile.txt")
+            << "" << QStringList()
+            << static_cast<int>(QDir::NoFilter)
+            << static_cast<int>(QDir::Unsorted)
+            << (QStringList() << "laj/") << -1;
+    QTest::newRow("separate dir (subdir listing)") << "sepdirsub.zip" << (
+            QStringList() << "laj/" << "laj/lajfile.txt")
+            << "laj" << QStringList()
+            << static_cast<int>(QDir::NoFilter)
+            << static_cast<int>(QDir::Unsorted)
+            << (QStringList() << "lajfile.txt") << -1;
+    QTest::newRow("dirs only") << "dirsonly.zip" << (
+            QStringList() << "file" << "dir/")
+            << "" << QStringList()
+            << static_cast<int>(QDir::Dirs)
+            << static_cast<int>(QDir::Unsorted)
+            << (QStringList() << "dir/") << -1;
+    QTest::newRow("files only") << "filesonly.zip" << (
+            QStringList() << "file1" << "parent/dir/" << "parent/file2")
+            << "parent" << QStringList()
+            << static_cast<int>(QDir::Files)
+            << static_cast<int>(QDir::Unsorted)
+            << (QStringList() << "file2") << -1;
+    QTest::newRow("sorted") << "sorted.zip" << (
+            QStringList() << "file1" << "parent/subdir/" << "parent/subdir2/file3" << "parent/file2" << "parent/file0")
+            << "parent" << QStringList()
+            << static_cast<int>(QDir::NoFilter)
+            << static_cast<int>(QDir::Name)
+            << (QStringList() << "file0" << "file2" << "subdir/" << "subdir2/")
+            << -1;
+    QTest::newRow("sorted dirs first") << "sorted-dirs.zip" << (
+            QStringList() << "file1" << "parent/subdir/" << "parent/subdir2/file3" << "parent/file2" << "parent/file0")
+            << "parent" << QStringList()
+            << static_cast<int>(QDir::NoFilter)
+            << static_cast<int>(QDir::Name | QDir::DirsFirst)
+            << (QStringList() << "subdir/" << "subdir2/" << "file0" << "file2")
+            << -1;
+    QTest::newRow("sorted dirs first reversed") << "sorted-reverse.zip" << (
+            QStringList() << "file1" << "parent/subdir/" << "parent/subdir2/file3" << "parent/file2" << "parent/file0")
+            << "parent" << QStringList()
+            << static_cast<int>(QDir::NoFilter)
+            << static_cast<int>(QDir::Name | QDir::DirsFirst | QDir::Reversed)
+            << (QStringList() << "subdir2/" << "subdir/" << "file2" << "file0")
+            << -1;
+    QTest::newRow("sorted by size") << "sorted-size.zip" << (
+            QStringList() << "file000" << "file10")
+            << "/" << QStringList()
+            << static_cast<int>(QDir::NoFilter)
+            << static_cast<int>(QDir::Size)
+            << (QStringList() << "file10" << "file000") << -1;
+    QTest::newRow("sorted by time") << "sorted-time.zip" << (
+            QStringList() << "file04" << "file03" << "file02" << "subdir/subfile")
+            << "/" << QStringList()
+            << static_cast<int>(QDir::NoFilter)
+            << static_cast<int>(QDir::Time)
+            << (QStringList() << "subdir/" << "file04" << "file02" << "file03")
+            << -1;
+    QTest::newRow("sorted by type") << "sorted-type.zip" << (
+            QStringList() << "file1.txt" << "file2.dat")
+            << "/" << QStringList()
+            << static_cast<int>(QDir::NoFilter)
+            << static_cast<int>(QDir::Type)
+            << (QStringList() << "file2.dat" << "file1.txt") << -1;
+    QTest::newRow("name filter") << "name-filter.zip" << (
+            QStringList() << "file01" << "file02" << "laj")
+            << "/" << QStringList("file*")
+            << static_cast<int>(QDir::NoFilter)
+            << static_cast<int>(QDir::Name)
+            << (QStringList() << "file01" << "file02") << -1;
+    QTest::newRow("case sensitive") << "case-sensitive.zip" << (
+            QStringList() << "a" << "B")
+            << "/" << QStringList()
+            << static_cast<int>(QDir::NoFilter)
+            << static_cast<int>(QDir::Name)
+            << (QStringList() << "B" << "a")
+            << static_cast<int>(QuaZip::csSensitive);
+    QTest::newRow("case insensitive") << "case-insensitive.zip" << (
+            QStringList() << "B" << "a")
+            << "/" << QStringList()
+            << static_cast<int>(QDir::NoFilter)
+            << static_cast<int>(QDir::Name)
+            << (QStringList() << "a" << "B")
+            << static_cast<int>(QuaZip::csInsensitive);
+}
+
+void TestQuaZipDir::entryList()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QStringList, fileNames);
+    QFETCH(QString, dirName);
+    QFETCH(QStringList, nameFilters);
+    QFETCH(int, filter);
+    QFETCH(int, sort);
+    QDir::Filters filters = static_cast<QDir::Filters>(filter);
+    QDir::SortFlags sorting = static_cast<QDir::SortFlags>(sort);
+    QFETCH(QStringList, entries);
+    QFETCH(int, caseSensitivity);
+    QDir curDir;
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Couldn't create test files");
+    }
+    if (!createTestArchive(zipName, fileNames)) {
+        QFAIL("Couldn't create test archive");
+    }
+    removeTestFiles(fileNames);
+    QuaZip zip(zipName);
+    QVERIFY(zip.open(QuaZip::mdUnzip));
+    QuaZipDir dir(&zip, dirName);
+    QVERIFY(dir.exists());
+    if (caseSensitivity != -1) {
+        dir.setCaseSensitivity(static_cast<QuaZip::CaseSensitivity>(
+                                   caseSensitivity));
+        QCOMPARE(dir.caseSensitivity(), static_cast<QuaZip::CaseSensitivity>(
+                     caseSensitivity));
+    }
+    QCOMPARE(dir.entryList(nameFilters, filters, sorting), entries);
+    // Test default sorting setting.
+    dir.setSorting(sorting);
+    QCOMPARE(dir.sorting(), sorting);
+    QCOMPARE(dir.entryList(nameFilters, filters), entries);
+    // Test default name filter setting.
+    dir.setNameFilters(nameFilters);
+    QCOMPARE(dir.nameFilters(), nameFilters);
+    QCOMPARE(dir.entryList(filters), entries);
+    // Test default filters.
+    dir.setFilter(filters);
+    QCOMPARE(dir.filter(), filters);
+    QCOMPARE(dir.entryList(), entries);
+    QCOMPARE(dir.entryList().count(), static_cast<int>(dir.count()));
+    zip.close();
+    curDir.remove(zipName);
+}
+
+void TestQuaZipDir::cd_data()
+{
+    QTest::addColumn<QString>("zipName");
+    QTest::addColumn<QStringList>("fileNames");
+    QTest::addColumn<QString>("dirName");
+    QTest::addColumn<QString>("targetDirName");
+    QTest::addColumn<QString>("result");
+    QTest::newRow("cdDown") << "simple.zip" << (
+            QStringList() << "cddown.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt")
+            << "" << "testdir1" << "testdir1";
+    QTest::newRow("cdUp") << "cdup.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt")
+            << "testdir1" << ".." << "";
+    QTest::newRow("cdSide") << "cdside.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt")
+            << "testdir1" << "../testdir2" << "testdir2";
+    QTest::newRow("cdDownUp") << "cdside.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt")
+            << "" << "testdir1/.." << "";
+    QTest::newRow("cdDeep") << "cdside.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt")
+            << "" << "testdir2/subdir" << "testdir2/subdir";
+    QTest::newRow("cdDeeper") << "cdside.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/subdir2/subdir3/test2sub.txt")
+            << "testdir2/subdir" << "subdir2/subdir3" << "testdir2/subdir/subdir2/subdir3";
+    QTest::newRow("cdRoot") << "cdup.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt")
+            << "testdir1" << "/" << "";
+}
+
+void TestQuaZipDir::cd()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QStringList, fileNames);
+    QFETCH(QString, dirName);
+    QFETCH(QString, targetDirName);
+    QFETCH(QString, result);
+    QDir curDir;
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Couldn't create test files");
+    }
+    if (!createTestArchive(zipName, fileNames)) {
+        QFAIL("Couldn't create test archive");
+    }
+    removeTestFiles(fileNames);
+    QuaZip zip(zipName);
+    QVERIFY(zip.open(QuaZip::mdUnzip));
+    QuaZipDir dir(&zip, dirName);
+    if (dirName.startsWith('/')) {
+        dirName = dirName.mid(1);
+    }
+    if (dirName.endsWith('/')) {
+        dirName.chop(1);
+    }
+    QCOMPARE(dir.path(), dirName);
+    {
+        int lastSlash = dirName.lastIndexOf('/');
+        if (lastSlash == -1) {
+            // dirName is just a single name
+            if (dirName.isEmpty()) {
+                QCOMPARE(dir.dirName(), QString::fromLatin1("."));
+            } else {
+                QCOMPARE(dir.dirName(), dirName);
+            }
+        } else {
+            // dirName is a sequence
+            QCOMPARE(dir.dirName(), dirName.mid(lastSlash + 1));
+        }
+    }
+    if (targetDirName == "..") {
+        QVERIFY(dir.cdUp());
+    } else {
+        QVERIFY(dir.cd(targetDirName));
+    }
+    QCOMPARE(dir.path(), result);
+    // Try to go back
+    dir.setPath(dirName);
+    QCOMPARE(dir.path(), dirName);
+    zip.close();
+    curDir.remove(zipName);
+}
+
+void TestQuaZipDir::entryInfoList()
+{
+    QString zipName = "entryInfoList.zip";
+    QStringList fileNames;
+    fileNames << "test.txt";
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Couldn't create test files");
+    }
+    if (!createTestArchive(zipName, fileNames)) {
+        QFAIL("Couldn't create test archive");
+    }
+    removeTestFiles(fileNames);
+    QuaZip zip(zipName);
+    QDir curDir;
+    QVERIFY(zip.open(QuaZip::mdUnzip));
+    QuaZipDir dir(&zip, "/");
+    QCOMPARE(dir.entryInfoList().size(), 1);
+    QCOMPARE(dir.entryInfoList64().size(), 1);
+    zip.close();
+    curDir.remove(zipName);
+}
+
+void TestQuaZipDir::operators()
+{
+    QString zipName = "zipDirOperators.zip";
+    QStringList fileNames;
+    fileNames << "dir/test.txt" << "root.txt";
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Couldn't create test files");
+    }
+    if (!createTestArchive(zipName, fileNames)) {
+        QFAIL("Couldn't create test archive");
+    }
+    removeTestFiles(fileNames);
+    QuaZip zip(zipName);
+    QDir curDir;
+    QVERIFY(zip.open(QuaZip::mdUnzip));
+    QuaZipDir dir(&zip, "dir");
+    QuaZipDir dir2 = dir; // Copy constructor
+    QCOMPARE(dir2.path(), QString::fromLatin1("dir"));
+    dir2.cdUp();
+    QCOMPARE(dir2.path(), QString::fromLatin1(""));
+    QCOMPARE(dir.path(), QString::fromLatin1("dir"));
+    dir2 = dir; // operator=()
+    QCOMPARE(dir2.path(), QString::fromLatin1("dir"));
+    QVERIFY(dir2 == dir); // opertor==
+    dir.cd("/");
+    QCOMPARE(dir[0], QString::fromLatin1("dir/"));
+    QCOMPARE(dir[1], QString::fromLatin1("root.txt"));
+    zip.close();
+    curDir.remove(zipName);
+}
+
+void TestQuaZipDir::filePath()
+{
+    QString zipName = "entryInfoList.zip";
+    QStringList fileNames;
+    fileNames << "root.txt" << "dir/test.txt";
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Couldn't create test files");
+    }
+    if (!createTestArchive(zipName, fileNames)) {
+        QFAIL("Couldn't create test archive");
+    }
+    removeTestFiles(fileNames);
+    QuaZip zip(zipName);
+    QDir curDir;
+    QVERIFY(zip.open(QuaZip::mdUnzip));
+    QuaZipDir dir(&zip);
+    QVERIFY(dir.cd("dir"));
+    QCOMPARE(dir.relativeFilePath("/root.txt"),
+             QString::fromLatin1("../root.txt"));
+    QCOMPARE(dir.filePath("test.txt"),
+             QString::fromLatin1("dir/test.txt"));
+    zip.close();
+    curDir.remove(zipName);
+}
diff --git a/3rdparty/quazip-0.7/qztest/testquazipdir.h b/3rdparty/quazip-0.7/qztest/testquazipdir.h
new file mode 100644
index 0000000..804b850
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquazipdir.h
@@ -0,0 +1,42 @@
+#ifndef QUAZIP_TEST_QUAZIPDIR_H
+#define QUAZIP_TEST_QUAZIPDIR_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QObject>
+
+class TestQuaZipDir: public QObject {
+    Q_OBJECT
+private slots:
+    void entryList_data();
+    void entryList();
+    void cd_data();
+    void cd();
+    void entryInfoList();
+    void operators();
+    void filePath();
+};
+
+#endif // QUAZIP_TEST_QUAZIPDIR_H
diff --git a/3rdparty/quazip-0.7/qztest/testquazipfile.cpp b/3rdparty/quazip-0.7/qztest/testquazipfile.cpp
new file mode 100644
index 0000000..692282f
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquazipfile.cpp
@@ -0,0 +1,512 @@
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include "testquazipfile.h"
+
+#include "qztest.h"
+
+#include <quazip/JlCompress.h>
+#include <quazip/quazipfile.h>
+#include <quazip/quazip.h>
+
+#include <QFile>
+#include <QString>
+#include <QStringList>
+
+#include <QtTest/QtTest>
+
+void TestQuaZipFile::zipUnzip_data()
+{
+    QTest::addColumn<QString>("zipName");
+    QTest::addColumn<QStringList>("fileNames");
+    QTest::addColumn<QByteArray>("fileNameCodec");
+    QTest::addColumn<QByteArray>("password");
+    QTest::addColumn<bool>("zip64");
+    QTest::newRow("simple") << "simple.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt")
+        << QByteArray() << QByteArray() << false;
+    QTest::newRow("Cyrillic") << "cyrillic.zip" << (
+            QStringList()
+            << QString::fromUtf8("русское имя файла с пробелами.txt"))
+        << QByteArray("IBM866") << QByteArray() << false;
+    QTest::newRow("password") << "password.zip" << (
+            QStringList() << "test.txt")
+        << QByteArray() << QByteArray("PassPass") << false;
+    QTest::newRow("zip64") << "zip64.zip" << (
+            QStringList() << "test64.txt")
+        << QByteArray() << QByteArray() << true;
+}
+
+void TestQuaZipFile::zipUnzip()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QStringList, fileNames);
+    QFETCH(QByteArray, fileNameCodec);
+    QFETCH(QByteArray, password);
+    QFETCH(bool, zip64);
+    QFile testFile(zipName);
+    if (testFile.exists()) {
+        if (!testFile.remove()) {
+            QFAIL("Couldn't remove existing archive to create a new one");
+        }
+    }
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Couldn't create test files for zipping");
+    }
+    QuaZip testZip(&testFile);
+    testZip.setZip64Enabled(zip64);
+    if (!fileNameCodec.isEmpty())
+        testZip.setFileNameCodec(fileNameCodec);
+    QVERIFY(testZip.open(QuaZip::mdCreate));
+    QString comment = "Test comment";
+    testZip.setComment(comment);
+    foreach (QString fileName, fileNames) {
+        QFile inFile("tmp/" + fileName);
+        if (!inFile.open(QIODevice::ReadOnly)) {
+            qDebug("File name: %s", fileName.toUtf8().constData());
+            QFAIL("Couldn't open input file");
+        }
+        QuaZipFile outFile(&testZip);
+        QVERIFY(outFile.open(QIODevice::WriteOnly, QuaZipNewInfo(fileName,
+                        inFile.fileName()),
+                password.isEmpty() ? NULL : password.constData()));
+        for (qint64 pos = 0, len = inFile.size(); pos < len; ) {
+            char buf[4096];
+            qint64 readSize = qMin(static_cast<qint64>(4096), len - pos);
+            qint64 l;
+            if ((l = inFile.read(buf, readSize)) != readSize) {
+                qDebug("Reading %ld bytes from %s at %ld returned %ld",
+                        static_cast<long>(readSize),
+                        fileName.toUtf8().constData(),
+                        static_cast<long>(pos),
+                        static_cast<long>(l));
+                QFAIL("Read failure");
+            }
+            QVERIFY(outFile.write(buf, readSize));
+            pos += readSize;
+        }
+        inFile.close();
+        outFile.close();
+        QCOMPARE(outFile.getZipError(), ZIP_OK);
+    }
+    testZip.close();
+    QCOMPARE(testZip.getZipError(), ZIP_OK);
+    // now test unzip
+    QuaZip testUnzip(&testFile);
+    if (!fileNameCodec.isEmpty())
+        testUnzip.setFileNameCodec(fileNameCodec);
+    QVERIFY(testUnzip.open(QuaZip::mdUnzip));
+    QCOMPARE(testUnzip.getComment(), comment);
+    QVERIFY(testUnzip.goToFirstFile());
+    foreach (QString fileName, fileNames) {
+        QCOMPARE(testUnzip.getCurrentFileName(), fileName);
+        QFile original("tmp/" + fileName);
+        QVERIFY(original.open(QIODevice::ReadOnly));
+        QuaZipFile archived(&testUnzip);
+        QVERIFY(archived.open(QIODevice::ReadOnly,
+                         password.isEmpty() ? NULL : password.constData()));
+        QByteArray originalData = original.readAll();
+        QByteArray archivedData = archived.readAll();
+        QCOMPARE(archivedData, originalData);
+        testUnzip.goToNextFile();
+    }
+    testUnzip.close();
+    QCOMPARE(testUnzip.getZipError(), UNZ_OK);
+    // clean up
+    removeTestFiles(fileNames);
+    testFile.remove();
+}
+
+void TestQuaZipFile::bytesAvailable_data()
+{
+    QTest::addColumn<QString>("zipName");
+    QTest::addColumn<QStringList>("fileNames");
+    QTest::newRow("simple") << "test.zip" << (
+            QStringList() << "test0.txt" << "testdir1/test1.txt"
+            << "testdir2/test2.txt" << "testdir2/subdir/test2sub.txt");
+}
+
+void TestQuaZipFile::bytesAvailable()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QStringList, fileNames);
+    QDir curDir;
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Couldn't create test files");
+    }
+    if (!JlCompress::compressDir(zipName, "tmp")) {
+        QFAIL("Couldn't create test archive");
+    }
+    QuaZip testZip(zipName);
+    QVERIFY(testZip.open(QuaZip::mdUnzip));
+    foreach (QString fileName, fileNames) {
+        QFileInfo fileInfo("tmp/" + fileName);
+        QVERIFY(testZip.setCurrentFile(fileName));
+        QuaZipFile zipFile(&testZip);
+        QVERIFY(zipFile.open(QIODevice::ReadOnly));
+        QCOMPARE(zipFile.bytesAvailable(), fileInfo.size());
+        QCOMPARE(zipFile.read(1).size(), 1);
+        QCOMPARE(zipFile.bytesAvailable(), fileInfo.size() - 1);
+        QCOMPARE(zipFile.read(fileInfo.size() - 1).size(),
+                static_cast<int>(fileInfo.size() - 1));
+        QCOMPARE(zipFile.bytesAvailable(), (qint64) 0);
+    }
+    removeTestFiles(fileNames);
+    testZip.close();
+    curDir.remove(zipName);
+}
+
+void TestQuaZipFile::atEnd_data()
+{
+    bytesAvailable_data();
+}
+
+void TestQuaZipFile::atEnd()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QStringList, fileNames);
+    QDir curDir;
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Couldn't create test files");
+    }
+    if (!JlCompress::compressDir(zipName, "tmp")) {
+        QFAIL("Couldn't create test archive");
+    }
+    QuaZip testZip(zipName);
+    QVERIFY(testZip.open(QuaZip::mdUnzip));
+    foreach (QString fileName, fileNames) {
+        QFileInfo fileInfo("tmp/" + fileName);
+        QVERIFY(testZip.setCurrentFile(fileName));
+        QuaZipFile zipFile(&testZip);
+        QVERIFY(zipFile.open(QIODevice::ReadOnly));
+        QCOMPARE(zipFile.atEnd(), false);
+        QCOMPARE(zipFile.read(1).size(), 1);
+        QCOMPARE(zipFile.atEnd(), false);
+        QCOMPARE(zipFile.read(fileInfo.size() - 1).size(),
+                static_cast<int>(fileInfo.size() - 1));
+        QCOMPARE(zipFile.atEnd(), true);
+    }
+    removeTestFiles(fileNames);
+    testZip.close();
+    curDir.remove(zipName);
+}
+
+void TestQuaZipFile::pos_data()
+{
+    bytesAvailable_data();
+}
+
+void TestQuaZipFile::pos()
+{
+    QFETCH(QString, zipName);
+    QFETCH(QStringList, fileNames);
+    QDir curDir;
+    if (!createTestFiles(fileNames)) {
+        QFAIL("Couldn't create test files");
+    }
+    if (!JlCompress::compressDir(zipName, "tmp")) {
+        QFAIL("Couldn't create test archive");
+    }
+    QuaZip testZip(zipName);
+    QVERIFY(testZip.open(QuaZip::mdUnzip));
+    foreach (QString fileName, fileNames) {
+        QFileInfo fileInfo("tmp/" + fileName);
+        QVERIFY(testZip.setCurrentFile(fileName));
+        QuaZipFile zipFile(&testZip);
+        QVERIFY(zipFile.open(QIODevice::ReadOnly));
+        QCOMPARE(zipFile.pos(), (qint64) 0);
+        QCOMPARE(zipFile.read(1).size(), 1);
+        QCOMPARE(zipFile.pos(), (qint64) 1);
+        QCOMPARE(zipFile.read(fileInfo.size() - 1).size(),
+                static_cast<int>(fileInfo.size() - 1));
+        QCOMPARE(zipFile.pos(), fileInfo.size());
+    }
+    removeTestFiles(fileNames);
+    testZip.close();
+    curDir.remove(zipName);
+}
+
+void TestQuaZipFile::getZip()
+{
+    QuaZip testZip;
+    QuaZipFile f1(&testZip);
+    QCOMPARE(f1.getZip(), &testZip);
+    QuaZipFile f2("doesntexist.zip", "someFile");
+    QCOMPARE(f2.getZip(), static_cast<QuaZip*>(NULL));
+    f2.setZip(&testZip);
+    QCOMPARE(f2.getZip(), &testZip);
+}
+
+void TestQuaZipFile::setZipName()
+{
+    QString testFileName = "testZipName.txt";
+    QString testZipName = "testZipName.zip";
+    QVERIFY(createTestFiles(QStringList() << testFileName));
+    QVERIFY(createTestArchive(testZipName, QStringList() << testFileName));
+    QuaZipFile testFile;
+    testFile.setZipName(testZipName);
+    QCOMPARE(testFile.getZipName(), testZipName);
+    testFile.setFileName(testFileName);
+    QVERIFY(testFile.open(QIODevice::ReadOnly));
+    testFile.close();
+    removeTestFiles(QStringList() << testFileName);
+    QDir curDir;
+    curDir.remove(testZipName);
+}
+
+void TestQuaZipFile::getFileInfo()
+{
+    QuaZipFileInfo info32;
+    QuaZipFileInfo64 info64;
+    QString testFileName = "testZipName.txt";
+    QStringList testFiles;
+    testFiles << testFileName;
+    QString testZipName = "testZipName.zip";
+    QVERIFY(createTestFiles(testFiles));
+    QVERIFY(createTestArchive(testZipName, testFiles));
+    QuaZipFile testFile;
+    testFile.setZipName(testZipName);
+    testFile.setFileName(testFileName);
+    QVERIFY(testFile.open(QIODevice::ReadOnly));
+    QVERIFY(testFile.getFileInfo(&info32));
+    QVERIFY(testFile.getFileInfo(&info64));
+    QCOMPARE(info32.name, info64.name);
+    QCOMPARE(info32.versionCreated, info64.versionCreated);
+    QCOMPARE(info32.versionNeeded, info64.versionNeeded);
+    QCOMPARE(info32.flags, info64.flags);
+    QCOMPARE(info32.method, info64.method);
+    QCOMPARE(info32.dateTime, info64.dateTime);
+    QCOMPARE(info32.crc, info64.crc);
+    QCOMPARE(info32.compressedSize,
+             static_cast<quint32>(info64.compressedSize));
+    QCOMPARE(info32.uncompressedSize,
+             static_cast<quint32>(info64.uncompressedSize));
+    QCOMPARE(info32.diskNumberStart, info64.diskNumberStart);
+    QCOMPARE(info32.internalAttr, info64.internalAttr);
+    QCOMPARE(info32.externalAttr, info64.externalAttr);
+    QCOMPARE(info32.comment, info64.comment);
+    QCOMPARE(info32.extra, info64.extra);
+    testFile.close();
+    removeTestFiles(testFiles);
+    QDir curDir;
+    curDir.remove(testZipName);
+}
+
+void TestQuaZipFile::setFileName()
+{
+    QString testFileName = "testZipName.txt";
+    QString testZipName = "testZipName.zip";
+    QVERIFY(createTestFiles(QStringList() << testFileName));
+    QVERIFY(createTestArchive(testZipName, QStringList() << testFileName));
+    QuaZipFile testFile(testZipName);
+    testFile.setFileName(testFileName.toUpper());
+#ifdef Q_WS_WIN
+    QVERIFY(testFile.open(QIODevice::ReadOnly));
+    testFile.close();
+#else
+    QVERIFY(!testFile.open(QIODevice::ReadOnly));
+#endif
+    testFile.setFileName(testFileName.toUpper(), QuaZip::csInsensitive);
+    QCOMPARE(testFile.getCaseSensitivity(), QuaZip::csInsensitive);
+    QVERIFY(testFile.open(QIODevice::ReadOnly));
+    QCOMPARE(testFile.getActualFileName(), testFileName);
+    testFile.close();
+    testFile.setFileName(testFileName.toUpper(), QuaZip::csSensitive);
+    QCOMPARE(testFile.getFileName(), testFileName.toUpper());
+    QCOMPARE(testFile.getActualFileName(), QString());
+    QVERIFY(!testFile.open(QIODevice::ReadOnly));
+    testFile.setFileName(testFileName);
+    removeTestFiles(QStringList() << testFileName);
+    QDir curDir;
+    curDir.remove(testZipName);
+}
+
+void TestQuaZipFile::constructorDestructor()
+{
+    // Just test that all constructors and destructors are available.
+    // (So there are none that are declared but not defined.)
+    QuaZip testZip;
+    QuaZipFile *f1 = new QuaZipFile();
+    delete f1; // test D0 destructor
+    QObject parent;
+    QuaZipFile f2(&testZip, &parent);
+    QuaZipFile f3(&parent);
+    QuaZipFile f4("zipName.zip");
+    QuaZipFile f5("zipName.zip", "fileName.txt", QuaZip::csDefault, &parent);
+}
+
+void TestQuaZipFile::setFileAttrs()
+{
+    QuaZip testZip("setFileAttrs.zip");
+    QVERIFY(testZip.open(QuaZip::mdCreate));
+    QuaZipFile zipFile(&testZip);
+    QuaZipNewInfo newInfo("testPerm.txt");
+    newInfo.setPermissions(QFile::ReadOwner);
+    QVERIFY(zipFile.open(QIODevice::WriteOnly, newInfo));
+    zipFile.close();
+    QString fileTestAttr = "testAttr.txt";
+    QStringList fileNames;
+    fileNames << fileTestAttr;
+    QVERIFY(createTestFiles(fileNames));
+    newInfo.name = fileTestAttr;
+    newInfo.setFileDateTime("tmp/" + fileTestAttr);
+    newInfo.setFilePermissions("tmp/" + fileTestAttr);
+    QVERIFY(zipFile.open(QIODevice::WriteOnly, newInfo));
+    zipFile.close();
+    testZip.close();
+    QuaZipFileInfo64 info;
+    {
+        QuaZipFile readFilePerm("setFileAttrs.zip", "testPerm.txt");
+        QVERIFY(readFilePerm.open(QIODevice::ReadOnly));
+        QVERIFY(readFilePerm.getFileInfo(&info));
+        QCOMPARE(info.getPermissions(), QFile::ReadOwner);
+        readFilePerm.close();
+    }
+    {
+        QuaZipFile readFileAttrs("setFileAttrs.zip", "testAttr.txt");
+        QVERIFY(readFileAttrs.open(QIODevice::ReadOnly));
+        QVERIFY(readFileAttrs.getFileInfo(&info));
+        QFileInfo srcInfo("tmp/" + fileTestAttr);
+        QFile::Permissions usedPermissions =
+                QFile::WriteOwner | QFile::ReadOwner | QFile::ExeOwner |
+                QFile::WriteGroup | QFile::ReadGroup | QFile::ExeGroup |
+                QFile::WriteOther | QFile::ReadOther | QFile::ExeOther;
+        QCOMPARE(info.getPermissions() & usedPermissions,
+                 srcInfo.permissions() & usedPermissions);
+        // I really hope Qt 6 will use quint64 for time_t!
+        quint64 newTime = info.dateTime.toTime_t();
+        quint64 oldTime = srcInfo.lastModified().toTime_t();
+        // ZIP uses weird format with 2 second precision
+        QCOMPARE(newTime / 2, oldTime / 2);
+        readFileAttrs.close();
+    }
+    removeTestFiles(fileNames);
+    QDir().remove(testZip.getZipName());
+}
+
+void TestQuaZipFile::largeFile()
+{
+    QDir curDir;
+    QVERIFY(curDir.mkpath("tmp"));
+    QFile fakeLargeFile("tmp/large.zip");
+    QVERIFY(fakeLargeFile.open(QIODevice::WriteOnly));
+    QDataStream ds(&fakeLargeFile);
+    ds.setByteOrder(QDataStream::LittleEndian);
+    QList<qint64> localOffsets;
+    const int numFiles = 2; // name fixed to 5 bytes, so MAX 10 FILES!!!
+    for (int i = 0; i < numFiles; ++i) {
+        localOffsets.append(fakeLargeFile.pos());
+        QBuffer extra;
+        extra.open(QIODevice::WriteOnly);
+        QDataStream es(&extra);
+        es.setByteOrder(QDataStream::LittleEndian);
+        // prepare extra
+        es << static_cast<quint16>(0x0001u); // zip64
+        es << static_cast<quint16>(16); // extra data size
+        es << static_cast<quint64>(0); // uncompressed size
+        es << static_cast<quint64>(0); // compressed size
+        // now the local header
+        ds << static_cast<quint32>(0x04034b50u); // local magic
+        ds << static_cast<quint16>(45); // version needed
+        ds << static_cast<quint16>(0); // flags
+        ds << static_cast<quint16>(0); // method
+        ds << static_cast<quint16>(0); // time 00:00:00
+        ds << static_cast<quint16>(0x21); // date 1980-01-01
+        ds << static_cast<quint32>(0); // CRC-32
+        ds << static_cast<quint32>(0xFFFFFFFFu); // compressed size
+        ds << static_cast<quint32>(0xFFFFFFFFu); // uncompressed size
+        ds << static_cast<quint16>(5); // name length
+        ds << static_cast<quint16>(extra.size()); // extra length
+        ds.writeRawData("file", 4); // name
+        ds << static_cast<qint8>('0' + i); // name (contd.)
+        ds.writeRawData(extra.buffer(), extra.size());
+    }
+    // central dir:
+    qint64 centralStart = fakeLargeFile.pos();
+    for (int i = 0; i < numFiles; ++i) {
+        QBuffer extra;
+        extra.open(QIODevice::WriteOnly);
+        QDataStream es(&extra);
+        es.setByteOrder(QDataStream::LittleEndian);
+        // prepare extra
+        es << static_cast<quint16>(0x0001u); // zip64
+        es << static_cast<quint16>(24); // extra data size
+        es << static_cast<quint64>(0); // uncompressed size
+        es << static_cast<quint64>(0); // compressed size
+        es << static_cast<quint64>(localOffsets[i]);
+        // now the central dir header
+        ds << static_cast<quint32>(0x02014b50u); // central magic
+        ds << static_cast<quint16>(45); // version made by
+        ds << static_cast<quint16>(45); // version needed
+        ds << static_cast<quint16>(0); // flags
+        ds << static_cast<quint16>(0); // method
+        ds << static_cast<quint16>(0); // time 00:00:00
+        ds << static_cast<quint16>(0x21); // date 1980-01-01
+        ds << static_cast<quint32>(0); // CRC-32
+        ds << static_cast<quint32>(0xFFFFFFFFu); // compressed size
+        ds << static_cast<quint32>(0xFFFFFFFFu); // uncompressed size
+        ds << static_cast<quint16>(5); // name length
+        ds << static_cast<quint16>(extra.size()); // extra length
+        ds << static_cast<quint16>(0); // comment length
+        ds << static_cast<quint16>(0); // disk number
+        ds << static_cast<quint16>(0); // internal attrs
+        ds << static_cast<quint32>(0); // external attrs
+        ds << static_cast<quint32>(0xFFFFFFFFu); // local offset
+        ds.writeRawData("file", 4); // name
+        ds << static_cast<qint8>('0' + i); // name (contd.)
+        ds.writeRawData(extra.buffer(), extra.size());
+    }
+    qint64 centralEnd = fakeLargeFile.pos();
+    // zip64 end
+    ds << static_cast<quint32>(0x06064b50); // zip64 end magic
+    ds << static_cast<quint64>(44); // size of the zip64 end
+    ds << static_cast<quint16>(45); // version made by
+    ds << static_cast<quint16>(45); // version needed
+    ds << static_cast<quint32>(0); // disk number
+    ds << static_cast<quint32>(0); // central dir disk number
+    ds << static_cast<quint64>(2); // number of entries on disk
+    ds << static_cast<quint64>(2); // total number of entries
+    ds << static_cast<quint64>(centralEnd - centralStart); // size
+    ds << static_cast<quint64>(centralStart); // offset
+    // zip64 locator
+    ds << static_cast<quint32>(0x07064b50); // zip64 locator magic
+    ds << static_cast<quint32>(0); // disk number
+    ds << static_cast<quint64>(centralEnd); // offset
+    ds << static_cast<quint32>(1); // number of disks
+    // zip32 end
+    ds << static_cast<quint32>(0x06054b50); // end magic
+    ds << static_cast<quint16>(0); // disk number
+    ds << static_cast<quint16>(0); // central dir disk number
+    ds << static_cast<quint16>(2); // number of entries
+    ds << static_cast<quint32>(0xFFFFFFFFu); // central dir size
+    ds << static_cast<quint32>(0xFFFFFFFFu); // central dir offset
+    ds << static_cast<quint16>(0); // comment length
+    fakeLargeFile.close();
+    QuaZip fakeLargeZip("tmp/large.zip");
+    QVERIFY(fakeLargeZip.open(QuaZip::mdUnzip));
+    QCOMPARE(fakeLargeZip.getFileInfoList().size(), numFiles);
+    QCOMPARE(fakeLargeZip.getFileInfoList()[0].uncompressedSize,
+            static_cast<quint32>(0));
+}
diff --git a/3rdparty/quazip-0.7/qztest/testquazipfile.h b/3rdparty/quazip-0.7/qztest/testquazipfile.h
new file mode 100644
index 0000000..c00c0f8
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquazipfile.h
@@ -0,0 +1,51 @@
+#ifndef QUAZIP_TEST_QUAZIPFILE_H
+#define QUAZIP_TEST_QUAZIPFILE_H
+
+/*
+Copyright (C) 2005-2014 Sergey A. Tachenov
+
+This file is part of QuaZIP test suite.
+
+QuaZIP is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+QuaZIP 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with QuaZIP.  If not, see <http://www.gnu.org/licenses/>.
+
+See COPYING file for the full LGPL text.
+
+Original ZIP package is copyrighted by Gilles Vollant and contributors,
+see quazip/(un)zip.h files for details. Basically it's the zlib license.
+*/
+
+#include <QObject>
+#include <QStringList>
+
+class TestQuaZipFile: public QObject {
+    Q_OBJECT
+private slots:
+    void zipUnzip_data();
+    void zipUnzip();
+    void bytesAvailable_data();
+    void bytesAvailable();
+    void atEnd_data();
+    void atEnd();
+    void pos_data();
+    void pos();
+    void getZip();
+    void setZipName();
+    void getFileInfo();
+    void setFileName();
+    void constructorDestructor();
+    void setFileAttrs();
+    void largeFile();
+};
+
+#endif // QUAZIP_TEST_QUAZIPFILE_H
diff --git a/3rdparty/quazip-0.7/qztest/testquazipfileinfo.cpp b/3rdparty/quazip-0.7/qztest/testquazipfileinfo.cpp
new file mode 100644
index 0000000..416a960
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquazipfileinfo.cpp
@@ -0,0 +1,108 @@
+#include "testquazipfileinfo.h"
+
+#include "qztest.h"
+
+#include <QByteArray>
+#include <QDir>
+#include <QFileInfo>
+
+#include <QtTest/QtTest>
+
+#include "quazip/quazip.h"
+#include "quazip/quazipfile.h"
+#include "quazip/quazipfileinfo.h"
+#include "quazip/quazipnewinfo.h"
+
+TestQuaZipFileInfo::TestQuaZipFileInfo(QObject *parent) :
+    QObject(parent)
+{
+}
+
+void TestQuaZipFileInfo::getNTFSTime()
+{
+    QString zipName = "newtimes.zip";
+    QStringList testFiles;
+    testFiles << "test.txt";
+    QDir curDir;
+    if (curDir.exists(zipName)) {
+        if (!curDir.remove(zipName))
+            QFAIL("Can't remove zip file");
+    }
+    if (!createTestFiles(testFiles)) {
+        QFAIL("Can't create test file");
+    }
+    QDateTime base(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC);
+    quint64 mTicks, aTicks, cTicks;
+    QFileInfo fileInfo("tmp/test.txt");
+    {
+        // create
+        QuaZip zip(zipName);
+        QVERIFY(zip.open(QuaZip::mdCreate));
+        QuaZipFile zipFile(&zip);
+        QDateTime lm = fileInfo.lastModified().toUTC();
+        QDateTime lr = fileInfo.lastRead().toUTC();
+        QDateTime cr = fileInfo.created().toUTC();
+        mTicks = (static_cast<qint64>(base.date().daysTo(lm.date()))
+                * Q_UINT64_C(86400000)
+                + static_cast<qint64>(base.time().msecsTo(lm.time())))
+            * Q_UINT64_C(10000);
+        aTicks = (static_cast<qint64>(base.date().daysTo(lr.date()))
+                * Q_UINT64_C(86400000)
+                + static_cast<qint64>(base.time().msecsTo(lr.time())))
+            * Q_UINT64_C(10000);
+        cTicks = (static_cast<qint64>(base.date().daysTo(cr.date()))
+                * Q_UINT64_C(86400000)
+                + static_cast<qint64>(base.time().msecsTo(cr.time())))
+            * Q_UINT64_C(10000);
+        QuaZipNewInfo newInfo("test.txt", "tmp/test.txt");
+        QByteArray extra(36, 0);
+        extra[0] = 0x0A; // magic
+        extra[1] = 0x00;
+        extra[2] = 32; // size
+        extra[3] = 0;
+        extra[4] = extra[5] = extra[6] = extra[7] = 0; // reserved
+        extra[8] = 0x01; // time tag
+        extra[9] = 0x00;
+        extra[10] = 24; // time tag size
+        extra[11] = 0;
+        for (int i = 12; i < 36; i += 8) {
+            quint64 ticks;
+            if (i == 12) {
+                ticks = mTicks;
+            } else if (i == 20) {
+                ticks = aTicks;
+            } else if (i == 28) {
+                ticks = cTicks;
+            } else {
+                QFAIL("Stupid programming bug here");
+            }
+            extra[i] = static_cast<char>(ticks);
+            extra[i + 1] = static_cast<char>(ticks >> 8);
+            extra[i + 2] = static_cast<char>(ticks >> 16);
+            extra[i + 3] = static_cast<char>(ticks >> 24);
+            extra[i + 4] = static_cast<char>(ticks >> 32);
+            extra[i + 5] = static_cast<char>(ticks >> 40);
+            extra[i + 6] = static_cast<char>(ticks >> 48);
+            extra[i + 7] = static_cast<char>(ticks >> 56);
+        }
+        newInfo.extraLocal = extra;
+        newInfo.extraGlobal = extra;
+        QVERIFY(zipFile.open(QIODevice::WriteOnly, newInfo));
+        zipFile.close();
+        zip.close();
+    }
+    {
+        // check
+        QuaZip zip(zipName);
+        QVERIFY(zip.open(QuaZip::mdUnzip));
+        zip.goToFirstFile();
+        QuaZipFileInfo64 zipFileInfo;
+        QVERIFY(zip.getCurrentFileInfo(&zipFileInfo));
+        zip.close();
+        QCOMPARE(zipFileInfo.getNTFSmTime(), fileInfo.lastModified());
+        QCOMPARE(zipFileInfo.getNTFSaTime(), fileInfo.lastRead());
+        QCOMPARE(zipFileInfo.getNTFScTime(), fileInfo.created());
+    }
+    removeTestFiles(testFiles);
+    curDir.remove(zipName);
+}
diff --git a/3rdparty/quazip-0.7/qztest/testquazipfileinfo.h b/3rdparty/quazip-0.7/qztest/testquazipfileinfo.h
new file mode 100644
index 0000000..e29d39e
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquazipfileinfo.h
@@ -0,0 +1,15 @@
+#ifndef TESTQUAZIPFILEINFO_H
+#define TESTQUAZIPFILEINFO_H
+
+#include <QObject>
+
+class TestQuaZipFileInfo : public QObject
+{
+    Q_OBJECT
+public:
+    explicit TestQuaZipFileInfo(QObject *parent = 0);
+private slots:
+    void getNTFSTime();
+};
+
+#endif // TESTQUAZIPFILEINFO_H
diff --git a/3rdparty/quazip-0.7/qztest/testquazipnewinfo.cpp b/3rdparty/quazip-0.7/qztest/testquazipnewinfo.cpp
new file mode 100644
index 0000000..60f511c
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquazipnewinfo.cpp
@@ -0,0 +1,146 @@
+#include "testquazipnewinfo.h"
+
+#include "qztest.h"
+
+#include <QDir>
+#include <QFileInfo>
+#include <QtTest/QtTest>
+
+#include <quazip/quazip.h>
+#include <quazip/quazipfile.h>
+#include <quazip/quazipnewinfo.h>
+#include <quazip/quazipfileinfo.h>
+
+TestQuaZipNewInfo::TestQuaZipNewInfo(QObject *parent) :
+    QObject(parent)
+{
+}
+
+void TestQuaZipNewInfo::setFileNTFSTimes()
+{
+    QString zipName = "newtimes.zip";
+    QStringList testFiles;
+    testFiles << "test.txt";
+    QDir curDir;
+    if (curDir.exists(zipName)) {
+        if (!curDir.remove(zipName))
+            QFAIL("Can't remove zip file");
+    }
+    if (!createTestFiles(testFiles)) {
+        QFAIL("Can't create test file");
+    }
+    QDateTime base(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC);
+    quint64 mTicks, aTicks, cTicks;
+    {
+        // create
+        QuaZip zip(zipName);
+        QVERIFY(zip.open(QuaZip::mdCreate));
+        QuaZipFile zipFile(&zip);
+        QFileInfo fileInfo("tmp/test.txt");
+        QDateTime lm = fileInfo.lastModified().toUTC();
+        QDateTime lr = fileInfo.lastRead().toUTC();
+        QDateTime cr = fileInfo.created().toUTC();
+        mTicks = (static_cast<qint64>(base.date().daysTo(lm.date()))
+                * Q_UINT64_C(86400000)
+                + static_cast<qint64>(base.time().msecsTo(lm.time())))
+            * Q_UINT64_C(10000);
+        aTicks = (static_cast<qint64>(base.date().daysTo(lr.date()))
+                * Q_UINT64_C(86400000)
+                + static_cast<qint64>(base.time().msecsTo(lr.time())))
+            * Q_UINT64_C(10000);
+        cTicks = (static_cast<qint64>(base.date().daysTo(cr.date()))
+                * Q_UINT64_C(86400000)
+                + static_cast<qint64>(base.time().msecsTo(cr.time())))
+            * Q_UINT64_C(10000);
+        QuaZipNewInfo newInfo("test.txt", "tmp/test.txt");
+        newInfo.setFileNTFSTimes("tmp/test.txt");
+        QVERIFY(zipFile.open(QIODevice::WriteOnly, newInfo));
+        zipFile.close();
+        zip.close();
+    }
+    {
+        // check
+        QuaZip zip(zipName);
+        QVERIFY(zip.open(QuaZip::mdUnzip));
+        zip.goToFirstFile();
+        QuaZipFileInfo64 fileInfo;
+        QVERIFY(zip.getCurrentFileInfo(&fileInfo));
+        zip.close();
+        QByteArray &extra = fileInfo.extra;
+        bool ntfsFound = false;
+        int timesFound = 0;
+        for (int i = 0; i <= extra.size() - 4; ) {
+            unsigned type = static_cast<unsigned>(static_cast<unsigned char>(
+                                                      extra.at(i)))
+                    | (static_cast<unsigned>(static_cast<unsigned char>(
+                                                 extra.at(i + 1))) << 8);
+            i += 2;
+            unsigned length = static_cast<unsigned>(static_cast<unsigned char>(
+                                                        extra.at(i)))
+                    | (static_cast<unsigned>(static_cast<unsigned char>(
+                                                 extra.at(i + 1))) << 8);
+            i += 2;
+            if (type == 0x000Au && length >= 32) {
+                ntfsFound = true;
+                i += 4; // reserved
+                while (i <= extra.size() - 4) {
+                    unsigned tag = static_cast<unsigned>(
+                                static_cast<unsigned char>(extra.at(i)))
+                            | (static_cast<unsigned>(
+                                   static_cast<unsigned char>(extra.at(i + 1)))
+                               << 8);
+                    i += 2;
+                    unsigned tagsize = static_cast<unsigned>(
+                                static_cast<unsigned char>(extra.at(i)))
+                            | (static_cast<unsigned>(
+                                   static_cast<unsigned char>(extra.at(i + 1)))
+                               << 8);
+                    i += 2;
+                    QCOMPARE(tagsize, static_cast<unsigned>(24));
+                    if (tag == 0x0001u && tagsize >= 24) {
+                        for (int timesPos = i;
+                             i < timesPos + 24;
+                             i += 8, tagsize -= 8) {
+                            quint64 time = static_cast<quint64>(
+                                static_cast<unsigned char>(extra.at(i)))
+                            | (static_cast<quint64>(static_cast<unsigned char>(
+                                                       extra.at(i + 1))) << 8)
+                            | (static_cast<quint64>(static_cast<unsigned char>(
+                                                       extra.at(i + 2))) << 16)
+                            | (static_cast<quint64>(static_cast<unsigned char>(
+                                                       extra.at(i + 3))) << 24)
+                            | (static_cast<quint64>(static_cast<unsigned char>(
+                                                       extra.at(i + 4))) << 32)
+                            | (static_cast<quint64>(static_cast<unsigned char>(
+                                                       extra.at(i + 5))) << 40)
+                            | (static_cast<quint64>(static_cast<unsigned char>(
+                                                       extra.at(i + 6))) << 48)
+                            | (static_cast<quint64>(static_cast<unsigned char>(
+                                                       extra.at(i + 7))) << 56);
+                            ++timesFound;
+                            if (i - timesPos == 0) {
+                                QCOMPARE(time, mTicks);
+                            } else if (i - timesPos == 8) {
+                                QCOMPARE(time, aTicks);
+                            } else if (i - timesPos == 16) {
+                                QCOMPARE(time, cTicks);
+                            } else {
+                                QFAIL("Wrong position");
+                            }
+                        }
+                        i += tagsize;
+                    } else {
+                        i += tagsize;
+                    }
+
+                }
+            } else {
+                i += length;
+            }
+        }
+        QVERIFY(ntfsFound);
+        QCOMPARE(timesFound, 3);
+    }
+    removeTestFiles(testFiles);
+    curDir.remove(zipName);
+}
diff --git a/3rdparty/quazip-0.7/qztest/testquazipnewinfo.h b/3rdparty/quazip-0.7/qztest/testquazipnewinfo.h
new file mode 100644
index 0000000..a736455
--- /dev/null
+++ b/3rdparty/quazip-0.7/qztest/testquazipnewinfo.h
@@ -0,0 +1,15 @@
+#ifndef TESTQUAZIPNEWINFO_H
+#define TESTQUAZIPNEWINFO_H
+
+#include <QObject>
+
+class TestQuaZipNewInfo : public QObject
+{
+    Q_OBJECT
+public:
+    explicit TestQuaZipNewInfo(QObject *parent = 0);
+private slots:
+    void setFileNTFSTimes();
+};
+
+#endif // TESTQUAZIPNEWINFO_H
diff --git a/AUTHORS b/AUTHORS
index ea16836..1a8dafc 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,9 +1,10 @@
-Copyright 2006-2010 Bart Vanhauwaert, Chris Browet and others
+Copyright 2006-2014 Bart Vanhauwaert, Chris Browet, Ladislav Láska and others
 
 AUTHORS
 
 Bart Vanhauwaert bvh-osm at irule.be
 Chris "Koying" Browet
+Ladislav Láska <krakonos at krakonos.org>
 Elrond elrond+openstreetmap.org at samba-tng.org
 Oliver Heesakkers
 Patric Cameron
@@ -19,6 +20,8 @@ Tomás Mika
 Yves "LonelyPixel" Goergen
 Toby Speight
 James Hogan
+Richard Brinkman
+Balgofil
 
 Merkaartor uses icons from the Tango Desktop Project 
 (http://tango-freedesktop.org/)
diff --git a/CHANGELOG b/CHANGELOG
index dea9047..135924b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,4 +1,77 @@
+v0.18.2
+    * CHG : Updated spatialite API to 4.1.0 version using spatialite_init_ex().
+    * FIX : Updated the INSTALL file with current instructions both for Linux and Windows.
+    * FIX : Fixed version info on Linux, and added 32/64bit information to the version string.
+    * CHG : Migrated GDAL to 2.0 API.
+    * ADD : Improved Windows Installer splash image.
+    * FIX : Fixed a lot of the Windows build system.
+    * DEL : Remove semperMerk
+    * FIX : Fix bug #44: infinite loop in network code when password is wrong.
+    * FIX : Use proper capitalization for the Qt framework
+    * FIX : Fix build failure with Qt 5.5 snapshot
+    * FIX : Plugin path and debug builds fixed.
+    * DEL : Removed reference to qWinMsgHandler.
+    * CHG : Updated install instructions to reflect debug/release.
+    * FIX : Removed the Win32 assembly in Layers/OsmRenderLayer.cpp
+    * FIX : Fixed some plugin interfaces for Qt5.
+    * DEL : Removed plugins/qtstyle.
+    * FIX : Fixed file saving.
+    * CHG : Clean up DownloadOSM a bit.
+    * FIX : Update after upload.
+    * CHG : Remove all remaining references to Boost, incl. translations
+    * CHG : Remove built-in GGL copy
+    * CHG : Keep Symbian #ifndef's for busy cursors in one place only
+    * CHG : Move single file importing into separate method
+    * ChG : Merge uselessly explicit management of MapAdapter implementations
+    * CHG : Factor together some instances of preference file localization
+    * CHG : Better name for MerkaartorPreferences::loadBookmark
+    * CHG : Factor together loading of QSettings
+    * FIX : Fixed Wireframe.mas style.
+    * ADD : Support for address sanitizer.
+    * FIX : Fixed random crashes while changing styles.
+    * CHG : Removed the use of IDocument in OsmRenderLayer and MapView.
+    * FIX : Segfault in QRegExp.
+    * ADD : travis-ci automated builds.
+    * ADD : Qt5 support.
+    * FIX : A potential deadlock in Realtion/Way.
+    * FIX : Replace bashism in Config.pri
+    * ADD : Support for building with system qtsingleapplication and quazip
+    * FIX : Fixed crash on moving virtual node.
+    * CHG : Added debug_and_release CONFIG option.
+    * FIX : Fixed loading of plugins (at least for some cases).
+    * FIX : Moved the QToolBarDialog into src/.
+    * FIX : Removed the inline assembler in OsmRenderLayer.cpp
+    * FIX : Added locking to Feature::updatePainters.
+    * ADD : The openstreetmap.org/#map= URL parsing.
+    * FIX : Re-enable virtual node movement.
+    * FIX : After layer is closed, all of its features are deleted.
+    * FIX : Define QT_WA macro on QT5 to always use unicode.
+    * FIX : Conflict sometimes create Nodes without layers.
+    * FIX : Fix building markaartor on arm.
+    * FIX : Fix building with gcc 4.7 and later.
+    * FIX : Merkaartor needs to link libsqlite3.
+    * FIX : Replaced the static version of quazip with a new one.
+    * CHG : Updated Authors.
+    * FIX : Removed 3 memory leaks
+    * FIX : splitting of roads containing duplicate nodes
+    * FIX : Fixed SlippyMap (bad requests caused by a typo).
+    * FIX : Minor fixes in the Qt4/Qt5 usage.
+    * DEL : Removed the qtstyle plugins from compilation.
+    * FIX : Updated the plugin interface for Qt5.
+    * FIX : Removed deprecated call to ::translate.
+    * FIX : Added locking to Way::add and Way::remove.
+    * ADD : Implemented jOSM-like load_objects feature.
+    * FIX : Don't try GET ... /full on nodes, as API does not support it.
+    * FIX : GDAL crash
+    * FIX : Virtual nodes not highlighted on hover (fixes #3333)
+    * FIX : French cadastre parsing issue (fixes #3334)
+    * FIX : openSUSE build
+    * FIX : libgps20 build fix (from Dirk Stocker)
+    * FIX : secondary road simple color
+    * FIX : Assert "width > 0" with wireframe with style
+
 v0.18
+    * ADD : Self-contained style packages (*.msz)
     * FIX : mutex deadlock (refs #3319)
     * FIX : Protect updatemeta (fixes #3317)
     * ADD : Allow to show/hide the toolbars labels (toolbar context menu)
diff --git a/INSTALL b/INSTALL
index a828c17..b12f00a 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,11 +1,73 @@
+This document is about compiling Merkaartor from source. It's useful if you want
+to tinker with it, want newest version, report bugs, or there is no premade
+package for your distribution. It's not meant as the primary source for regular
+users; please, refer to the README.md on how to get a premade package.
+
+If you still want to build your own Merkaartor, here is how, it's pretty simple:
+
 Prerequisites:
-* Working C++ compiler
-* Qt 4.4.0 or later development environment
+==============
+
+ * Working C++ compiler
+ * Qt 4.4.0 or later development environment (for Qt 5.x.y, use qt5 branch)
+ * Proj.4
+ * GDAL (2.0.0 or newer for GDAL exports)
+ * spatialite-4.1.0 or newer for GDAL exports
+ * (For Windows Installer) NSIS-3
+
+Linux
+-----
+
+Do install the packages in question, and if your distribution uses -dev packages
+for development tools, install them too. As there is way too many distributions,
+I won't go into details.
+
+Windows (32bit/64bit)
+---------------------
+
+In both cases, you will need to download MSYS2 for your architecture, and
+install some packages from msys shell (msys2_shell.bat).
+
+For 32bit, they are (the w64 is not a bug!):
+
+$ pacman -S base-devel \
+	msys/git \
+	mingw32/mingw-w64-i686-qt5 \
+	mingw32/mingw-w64-i686-gdal \
+	mingw32/mingw-w64-i686-proj \
+	mingw32/mingw-w64-i686-openjpeg2 \
+	mingw32/mingw-w64-i686-json-c
+
+For 64bit, they are:
+
+$ pacman -S base-devel \
+	msys/git \
+	mingw64/mingw-w64-x86_64-qt5 \
+	mingw64/mingw-w64-x86_64-gdal \
+	mingw64/mingw-w64-x86_64-proj \
+	mingw64/mingw-w64-x86_64-openjpeg2 \
+	mingw64/mingw-w64-x86_64-json-c
 
-On (K)ubuntu Edgy it is sufficient to install the qt4-dev package
-to satisfy these requirements.
+Done? Continue to the next step, but run a different msys shell, the mingw32 or
+mingw64, based on your architecture. Note that if you'll run mingw32 shell from
+64bit msys installtion, strange stuff will happen, so don't do it.
 
-Instructions
+
+Instructions:
+=============
+
+0. Get the sources, either tarball or git:
+
+$ git clone https://github.com/openstreetmap/merkaartor.git
+
+ !  By default, this is the latest development version. If you want to use an older
+ !  one, you have to checkout the commit/tag:
+ !  
+ !  $ git checkout 0.17.0
+ !  
+ !  Please, use this only for testing (for example, if some feature does not
+ !  work, but it did in older release and you want to check which one), never
+ !  report bugs for older versions.
 
 1. Change directory to the one in which you unpacked Merkaartor
 
@@ -14,11 +76,11 @@ $ cd /home/me/src/Merkaartor-0.xx
 
 2. Run qmake
 
-$ qmake
+$ qmake -r
 
-Note that you need the Qt4 version of qmake - running the Qt3 version
-will generate incorrect makefiles.  If both are installed, take care
-to run the correct version.  For example, on Fedora run
+Note that you need the Qt4 or Qt5 version of qmake - running the Qt3 version
+will generate incorrect makefiles.  If both are installed, take care to run the
+correct version.  For example, on Fedora/Debian run
 
 $ qmake-qt4
 
@@ -28,24 +90,48 @@ $ /usr/share/qt4/bin/qmake
 
 2.1 Other qmake parameters for Merkaartor.pro
 
-PREFIX=<path>			- base prefix for installation (unix only)
-TRANSDIR_MERKAARTOR=<path>	- where will the Merkaartor translations be installed
-TRANSDIR_SYSTEM=<path>		- where your global Qt translation directory is
-NODEBUG=1			- release target
-NOUSEWEBKIT                 	- disable use of WebKit (Yahoo adapter)
+PREFIX=<path>               - base prefix for installation (unix only)
+TRANSDIR_MERKAARTOR=<path>  - where will the Merkaartor translations be installed
+TRANSDIR_SYSTEM=<path>      - where your global Qt translation directory is
+NODEBUG=1                   - release target
+NOUSEWEBKIT                 - disable use of WebKit (Yahoo adapter)
+SYSTEM_QTSA                 - use system copy of qtsingleapplication instead of internal
+SYSTEM_QUAZIP               - use system copy of quazip instead of internal
+SPATIALITE=1                - compile spatialite backend (not working) and
+                              SpatialiteBackground plugin (state unknown). Use
+                              at your own risk.
+
+
+3. Run make.
+
+On Windows:           $ make release
+On other platforms:   $ make
+Debug build:          $ make debug
+
+On Linux, make release fails, as the qmake does not generate proper goal in
+Makefiles, but release is the default. On most Windows installations, the debug
+is the default and we need to specify the release manually. Sorry about that.
+
+4. If you are lucky, you'll find an executable in the binaries subdirectory.
+Otherwise, check our github page [1], especially check the issues and possibly
+report yours.
+
+[1] https://github.com/openstreetmap/merkaartor
+
+5. (Optional: Building Windows Bundle/Installer)
 
-see http://wiki.openstreetmap.org/wiki/Merkaartor/Compiling for the complete list
+You first have to copy all dependencies of merkaartor to the binaries/bin
+directory. The windows/copydeps.sh script does just that:
 
-3. Run your build tool, make for posix like systems, nmake for
-Windows C++ Build system
+$ ./windows/copydeps.sh
 
-$ make
-or
-$ nmake
+You can now copy the directory to a flash drive and carry it with you
+everywhere. Yey! If you need an installer, you'll have to install NSIS 3 and
+compile the windows/installer.nsi
 
-4. If you are lucky, you'll find an executable in the
-binaries subdirectory. Otherwise mail a complete error log to
-bvh-osm at irule.be
+Note that if you made a debug build, all the debug libraries will end up in
+binaries/bin, and there they take almost 1.1G (that's why I'm not publishing
+installer with debug symbols).
 
-Bart Vanhauwaert
 
+Bart Vanhauwaert, Ladislav Láska, and others
diff --git a/Icons/AllIcons.qrc b/Icons/AllIcons.qrc
index 37cbe4c..fb532a1 100644
--- a/Icons/AllIcons.qrc
+++ b/Icons/AllIcons.qrc
@@ -1,5 +1,6 @@
 <RCC>
     <qresource prefix="/Icons">
+        <file>actions/build_bridge.png</file>
         <file>actions/GPS.png</file>
         <file>actions/camera.png</file>
         <file>Merkaartor.xpm</file>
diff --git a/Icons/Merkaartor_installer.bmp b/Icons/Merkaartor_installer.bmp
new file mode 100644
index 0000000..3cddbb2
Binary files /dev/null and b/Icons/Merkaartor_installer.bmp differ
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/src/images/back.png b/Icons/QToolBarDialog/back.png
similarity index 100%
rename from 3rdparty/qttoolbardialog-2.2_1-opensource/src/images/back.png
rename to Icons/QToolBarDialog/back.png
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/src/images/down.png b/Icons/QToolBarDialog/down.png
similarity index 100%
rename from 3rdparty/qttoolbardialog-2.2_1-opensource/src/images/down.png
rename to Icons/QToolBarDialog/down.png
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/src/images/forward.png b/Icons/QToolBarDialog/forward.png
similarity index 100%
rename from 3rdparty/qttoolbardialog-2.2_1-opensource/src/images/forward.png
rename to Icons/QToolBarDialog/forward.png
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/src/images/minus.png b/Icons/QToolBarDialog/minus.png
similarity index 100%
rename from 3rdparty/qttoolbardialog-2.2_1-opensource/src/images/minus.png
rename to Icons/QToolBarDialog/minus.png
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/src/images/plus.png b/Icons/QToolBarDialog/plus.png
similarity index 100%
rename from 3rdparty/qttoolbardialog-2.2_1-opensource/src/images/plus.png
rename to Icons/QToolBarDialog/plus.png
diff --git a/Icons/QToolBarDialog/qttoolbardialog.qrc b/Icons/QToolBarDialog/qttoolbardialog.qrc
new file mode 100644
index 0000000..5d83eac
--- /dev/null
+++ b/Icons/QToolBarDialog/qttoolbardialog.qrc
@@ -0,0 +1,10 @@
+<RCC version="1.0">
+    <qresource prefix="/qttoolbardialog">
+        <file>up.png</file>
+        <file>down.png</file>
+        <file>forward.png</file>
+        <file>back.png</file>
+        <file>plus.png</file>
+        <file>minus.png</file>
+    </qresource>
+</RCC>
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/src/images/up.png b/Icons/QToolBarDialog/up.png
similarity index 100%
rename from 3rdparty/qttoolbardialog-2.2_1-opensource/src/images/up.png
rename to Icons/QToolBarDialog/up.png
diff --git a/Icons/actions/build_bridge.png b/Icons/actions/build_bridge.png
new file mode 100644
index 0000000..2404351
Binary files /dev/null and b/Icons/actions/build_bridge.png differ
diff --git a/Icons/src/actions/build_bridge.xcf b/Icons/src/actions/build_bridge.xcf
new file mode 100644
index 0000000..4dd749f
Binary files /dev/null and b/Icons/src/actions/build_bridge.xcf differ
diff --git a/Icons/src/actions/shadow.xcf b/Icons/src/actions/shadow.xcf
new file mode 100644
index 0000000..482dd4b
Binary files /dev/null and b/Icons/src/actions/shadow.xcf differ
diff --git a/Merkaartor.pro b/Merkaartor.pro
index 5b8af46..cda882d 100644
--- a/Merkaartor.pro
+++ b/Merkaartor.pro
@@ -1,3 +1,4 @@
+CONFIG += debug_and_release
 TEMPLATE = subdirs
 SUBDIRS += src \
     plugins
diff --git a/Styles/Wireframe.mas b/Styles/Wireframe.mas
index 4948f3f..4c5e800 100644
--- a/Styles/Wireframe.mas
+++ b/Styles/Wireframe.mas
@@ -40,7 +40,7 @@
 </painter>
 <painter
  zoomUnder="0.02" zoomUpper="1e+07"
- backgroundColor="#a37b48fc" backgroundScale="30" backgroundOffset="3"
+ backgroundColor="#a37b48fc" backgroundScale="0" backgroundOffset="3"
  foregroundColor="#fdbf6ffc" foregroundScale="0" foregroundOffset="1"
  drawTrafficDirectionMarks="yes" trafficDirectionMarksColor="#000000ff"
  labelColor="#a37b48fc" labelScale="1.3" labelOffset="4"
diff --git a/include/builtin-ggl/ggl/algorithms/append.hpp b/include/builtin-ggl/ggl/algorithms/append.hpp
deleted file mode 100644
index b3f39cf..0000000
--- a/include/builtin-ggl/ggl/algorithms/append.hpp
+++ /dev/null
@@ -1,197 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_APPEND_HPP
-#define GGL_ALGORITHMS_APPEND_HPP
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-#include <boost/type_traits/remove_const.hpp>
-#include <boost/concept_check.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/point_type.hpp>
-#include <ggl/core/tags.hpp>
-#include <ggl/util/copy.hpp>
-
-namespace ggl
-{
-
-namespace traits
-{
-
-/*!
-    \brief Traits class, optional, might be implemented to append a point
-    \details If a geometry type should not use the std "push_back" then it can specialize
-    the "use_std" traits class to false, it should then implement (a.o.) append_point
-    \ingroup traits
-    \par Geometries:
-        - linestring
-        - linear_ring
-    \par Specializations should provide:
-        - run
- */
-template <typename G, typename P>
-struct append_point
-{
-};
-
-} // namespace traits
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace append {
-
-template <typename G, typename P, bool Std>
-struct append_point {};
-
-template <typename G, typename P>
-struct append_point<G, P, true>
-{
-    static inline void apply(G& geometry, P const& point, int , int )
-    {
-        typename point_type<G>::type point_type;
-
-        copy_coordinates(point, point_type);
-        geometry.push_back(point_type);
-    }
-};
-
-template <typename G, typename P>
-struct append_point<G, P, false>
-{
-    static inline void apply(G& geometry, P const& point, int ring_index, int multi_index)
-    {
-        traits::append_point<G, P>::apply(geometry, point, ring_index, multi_index);
-    }
-};
-
-template <typename G, typename R, bool Std>
-struct append_range
-{
-    typedef typename boost::range_value<R>::type point_type;
-
-    static inline void apply(G& geometry, R const& range, int ring_index, int multi_index)
-    {
-        for (typename boost::range_const_iterator<R>::type it = boost::begin(range);
-             it != boost::end(range); ++it)
-        {
-            append_point<G, point_type, Std>::apply(geometry, *it, ring_index, multi_index);
-        }
-    }
-};
-
-template <typename P, typename T, bool Std>
-struct point_to_poly
-{
-    typedef typename ring_type<P>::type range_type;
-
-    static inline void apply(P& polygon, T const& point, int ring_index, int multi_index)
-    {
-        boost::ignore_unused_variable_warning(multi_index);
-
-        if (ring_index == -1)
-        {
-            append_point<range_type, T, Std>::apply(exterior_ring(polygon), point, -1, -1);
-        }
-        else if (ring_index < boost::size(interior_rings(polygon)))
-        {
-            append_point<range_type, T, Std>::apply(interior_rings(polygon)[ring_index], point, -1, -1);
-        }
-    }
-};
-
-template <typename P, typename R, bool Std>
-struct range_to_poly
-{
-    typedef typename ring_type<P>::type ring_type;
-
-    static inline void apply(P& polygon, R const& range, int ring_index, int multi_index)
-    {
-        if (ring_index == -1)
-        {
-            append_range<ring_type, R, Std>::apply(exterior_ring(polygon), range, -1, -1);
-        }
-        else if (ring_index < boost::size(interior_rings(polygon)))
-        {
-            append_range<ring_type, R, Std>::apply(interior_rings(polygon)[ring_index], range, -1, -1);
-        }
-    }
-};
-
-}} // namespace detail::append
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-// (RoP = range or point, Std = use std library)
-
-// Default case (where RoP will be range/array/etc)
-template <typename Tag, typename TagRoP, typename G, typename RoP, bool Std>
-struct append : detail::append::append_range<G, RoP, Std> {};
-
-// Append a point to any geometry
-template <typename Tag, typename G, typename P, bool Std>
-struct append<Tag, point_tag, G, P, Std>
-    : detail::append::append_point<G, P, Std> {};
-
-// Never possible to append anything to a point/box/n-sphere
-template <typename TagRoP, typename P, typename RoP, bool Std>
-struct append<point_tag, TagRoP, P, RoP, Std> {};
-
-template <typename TagRoP, typename B, typename RoP, bool Std>
-struct append<box_tag, TagRoP, B, RoP, Std> {};
-
-template <typename TagRoP, typename N, typename RoP, bool Std>
-struct append<nsphere_tag, TagRoP, N, RoP, Std> {};
-
-template <typename P, typename TAG_R, typename R, bool Std>
-struct append<polygon_tag, TAG_R, P, R, Std>
-        : detail::append::range_to_poly<P, R, Std> {};
-
-template <typename P, typename T, bool Std>
-struct append<polygon_tag, point_tag, P, T, Std>
-        : detail::append::point_to_poly<P, T, Std> {};
-
-// Multi-linestring and multi-polygon might either implement traits or use standard...
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief Appends one or more points to a linestring, linear-ring, polygon, multi
-    \ingroup access
-    \param geometry a geometry
-    \param range_or_point the point or range to add
-    \param ring_index the index of the ring in case of a polygon: exterior ring (-1, the default) or
-        interior ring index
-    \param multi_index reserved for multi polygons
- */
-template <typename G, typename RoP>
-inline void append(G& geometry, const RoP& range_or_point,
-            int ring_index = -1, int multi_index = 0)
-{
-    typedef typename boost::remove_const<G>::type ncg_type;
-
-    dispatch::append
-        <
-            typename tag<G>::type,
-            typename tag<RoP>::type,
-            ncg_type,
-            RoP,
-            traits::use_std<ncg_type>::value
-        >::apply(geometry, range_or_point, ring_index, multi_index);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_APPEND_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/area.hpp b/include/builtin-ggl/ggl/algorithms/area.hpp
deleted file mode 100644
index 44a55e8..0000000
--- a/include/builtin-ggl/ggl/algorithms/area.hpp
+++ /dev/null
@@ -1,252 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_AREA_HPP
-#define GGL_ALGORITHMS_AREA_HPP
-
-#include <boost/concept/requires.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/detail/calculate_null.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/core/ring_type.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/core/concepts/nsphere_concept.hpp>
-#include <ggl/strategies/strategies.hpp>
-#include <ggl/util/loop.hpp>
-#include <ggl/util/math.hpp>
-
-/*!
-\defgroup area area calculation
-
-\par Performance
-2776 * 1000 area calculations are done in 0.11 seconds (other libraries: 0.125 seconds, 0.125 seconds, 0.5 seconds)
-
-\par Coordinate systems and strategies
-Area calculation can be done in Cartesian and in spherical/geographic coordinate systems.
-
-\par Geometries
-The area algorithm calculates the surface area of all geometries having a surface:
-box, circle, polygon, multi_polygon. The units are the square of the units used for the points
-defining the surface. If the polygon is defined in meters, the area is in square meters.
-
-\par Example:
-Example showing area calculation of polygons built of xy-points and of latlong-points
-\dontinclude doxygen_examples.cpp
-\skip example_area_polygon()
-\line {
-\until }
-
-*/
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace area {
-
-template<typename B, typename S>
-struct box_area
-{
-    typedef typename coordinate_type<B>::type return_type;
-
-    static inline return_type apply(B const& b, S const&)
-    {
-        // Currently only works for Cartesian boxes
-        // Todo: use strategy
-        // Todo: use concept
-        assert_dimension<B, 2>();
-
-        return_type const dx = get<max_corner, 0>(b) - get<min_corner, 0>(b);
-        return_type const dy = get<max_corner, 1>(b) - get<min_corner, 1>(b);
-
-        return dx * dy;
-    }
-};
-
-
-template<typename C, typename S>
-struct circle_area
-{
-    typedef typename coordinate_type<C>::type coordinate_type;
-
-    // Returning the coordinate precision, but if integer, returning a double
-    typedef typename boost::mpl::if_c
-            <
-                boost::is_integral<coordinate_type>::type::value,
-                double,
-                coordinate_type
-            >::type return_type;
-
-    static inline return_type apply(C const& c, S const&)
-    {
-        // Currently only works for Cartesian circles
-        // Todo: use strategy
-        // Todo: use concept
-        assert_dimension<C, 2>();
-
-        return_type r = get_radius<0>(c);
-        r *= r * ggl::math::pi;
-        return r;
-    }
-};
-
-
-// Area of a linear linear_ring, assuming a closed linear_ring
-template<typename R, typename S>
-struct ring_area
-{
-    typedef typename S::return_type type;
-    static inline type apply(R const& ring, S const& strategy)
-    {
-        assert_dimension<R, 2>();
-
-        // A closed linear_ring has at least four points, if not there is no area
-        if (boost::size(ring) >= 4)
-        {
-            typename S::state_type state_type;
-            if (loop(ring, strategy, state_type))
-            {
-                return state_type.area();
-            }
-        }
-
-        return type();
-    }
-};
-
-// Area of a polygon, either clockwise or anticlockwise
-template<typename Polygon, typename Strategy>
-class polygon_area
-{
-    typedef typename Strategy::return_type type;
-    static inline type call_abs(type const& v)
-    {
-#if defined(NUMERIC_ADAPTOR_INCLUDED)
-        return boost::abs(v);
-#else
-        return std::abs(v);
-#endif
-    }
-
-public:
-    static inline type apply(Polygon const& poly,
-                    Strategy const& strategy)
-    {
-        assert_dimension<Polygon, 2>();
-
-        typedef typename ring_type<Polygon>::type ring_type;
-        typedef typename boost::range_const_iterator
-            <
-                typename interior_type<Polygon>::type
-            >::type iterator_type;
-
-        type a = call_abs(
-            ring_area<ring_type, Strategy>::apply(exterior_ring(poly), strategy));
-
-        for (iterator_type it = boost::begin(interior_rings(poly));
-             it != boost::end(interior_rings(poly)); ++it)
-        {
-            a -= call_abs(ring_area<ring_type, Strategy>::apply(*it, strategy));
-        }
-        return a;
-    }
-};
-
-}} // namespace detail::area
-
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-template <typename Tag, typename G, typename S>
-struct area : detail::calculate_null<typename S::return_type, G, S> {};
-
-
-template <typename G, typename S>
-struct area<box_tag, G, S> : detail::area::box_area<G, S> {};
-
-
-template <typename G, typename S>
-struct area<nsphere_tag, G, S> : detail::area::circle_area<G, S> {};
-
-
-// Area of ring currently returns area of closed rings but it might be argued
-// that it is 0.0, because a ring is just a line.
-template <typename G, typename S>
-struct area<ring_tag, G, S> : detail::area::ring_area<G, S> {};
-
-template <typename G, typename S>
-struct area<polygon_tag, G, S> : detail::area::polygon_area<G, S> {};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-template <typename Geometry>
-struct area_result
-{
-    typedef typename point_type<Geometry>::type point_type;
-    typedef typename strategy_area
-        <
-            typename cs_tag<point_type>::type,
-            point_type
-        >::type strategy_type;
-    typedef typename strategy_type::return_type return_type;
-};
-
-/*!
-    \brief Calculate area of a geometry
-    \ingroup area
-    \details The function area returns the area of a polygon, ring, box or circle,
-    using the default area-calculation strategy. Strategies are
-    provided for cartesian ans spherical points
-    The geometries should correct, polygons should be closed and orientated clockwise, holes,
-    if any, must be orientated counter clockwise
-    \param geometry a geometry
-    \return the area
- */
-template <typename Geometry>
-inline typename area_result<Geometry>::return_type area(Geometry const& geometry)
-{
-    typedef typename area_result<Geometry>::strategy_type strategy_type;
-
-    return dispatch::area
-        <
-            typename tag<Geometry>::type,
-            Geometry,
-            strategy_type
-        >::apply(geometry, strategy_type());
-}
-
-/*!
-    \brief Calculate area of a geometry using a strategy
-    \ingroup area
-    \details This version of area calculation takes a strategy
-    \param geometry a geometry
-    \param strategy the strategy to calculate area. Especially for spherical areas there are
-        some approaches.
-    \return the area
- */
-template <typename Geometry, typename Strategy>
-inline typename Strategy::return_type area(
-        Geometry const& geometry, Strategy const& strategy)
-{
-    return dispatch::area
-        <
-            typename tag<Geometry>::type,
-            Geometry,
-            Strategy
-        >::apply(geometry, strategy);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_AREA_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/assign.hpp b/include/builtin-ggl/ggl/algorithms/assign.hpp
deleted file mode 100644
index 3ad0ee6..0000000
--- a/include/builtin-ggl/ggl/algorithms/assign.hpp
+++ /dev/null
@@ -1,410 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_ASSIGN_HPP
-#define GGL_ALGORITHMS_ASSIGN_HPP
-
-#include <cstddef>
-
-#include <boost/concept/requires.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/numeric/conversion/bounds.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <ggl/algorithms/append.hpp>
-#include <ggl/algorithms/clear.hpp>
-#include <ggl/core/access.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/radius.hpp>
-#include <ggl/core/tags.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/util/copy.hpp>
-#include <ggl/util/for_each_coordinate.hpp>
-
-/*!
-\defgroup access access: get/set coordinate values, make objects, clear geometries, append point(s)
-\details There are many ways to edit geometries. It is possible to:
-- use the geometries themselves, so access point.x(). This is not done inside the library because it is agnostic
- to geometry type. However, library users can use this as it is intuitive.
-- use the standard library, so use .push_back(point) or use inserters. This is also avoided inside the library.
-However, library users can use it if they are used to the standard library
-- use the functionality provided in this geometry library. These are the functions in this module.
-
-The library provides the following functions to edit geometries:
-- set to set one coordinate value
-- assign to set two or more coordinate values
-- make to construct and return geometries with specified coordinates.
-- append to append one or more points to a geometry
-- clear to remove all points from a geometry
-
-For getting coordinates it is similar:
-- get to get a coordinate value
-- or use the standard library
-- or use the geometries themselves
-
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace assign {
-
-template <typename C>
-struct assign_operation
-{
-    inline assign_operation(C const& value)
-        : m_value(value)
-    {}
-
-    template <typename P, std::size_t I>
-    inline void apply(P& point) const
-    {
-        set<I>(point, m_value);
-    }
-
-private:
-
-    C m_value;
-};
-
-
-/*!
-    \brief Assigns all coordinates of a specific point to a value
-    \ingroup access
-    \details
-    \param p Point
-    \param value Value which is assigned to all coordinates of point p
- */
-template <typename P>
-inline void assign_value(P& p, typename coordinate_type<P>::type const& value)
-{
-    for_each_coordinate(p,
-            assign_operation<typename coordinate_type<P>::type>(value));
-}
-
-
-
-template <typename B, std::size_t C, std::size_t I, std::size_t D>
-struct initialize
-{
-    typedef typename coordinate_type<B>::type coordinate_type;
-
-    static inline void apply(B& box, const coordinate_type& value)
-    {
-        set<C, I>(box, value);
-        initialize<B, C, I + 1, D>::apply(box, value);
-    }
-};
-
-template <typename B, std::size_t C, std::size_t D>
-struct initialize<B, C, D, D>
-{
-    typedef typename coordinate_type<B>::type coordinate_type;
-
-    static inline void apply(B& box, const coordinate_type& value)
-    {
-        boost::ignore_unused_variable_warning(box);
-        boost::ignore_unused_variable_warning(value);
-    }
-};
-
-template <typename Point>
-struct assign_zero_point
-{
-    static inline void apply(Point& point)
-    {
-        typedef typename coordinate_type<Point>::type coordinate_type;
-        assign_value(point, 0);
-    }
-};
-
-
-template <typename Box>
-struct assign_inverse_box
-{
-    typedef typename point_type<Box>::type point_type;
-
-    static inline void apply(Box& box)
-    {
-        typedef typename coordinate_type<point_type>::type coordinate_type;
-
-        initialize
-            <
-                Box, min_corner, 0, dimension<Box>::type::value
-            >::apply(
-            box, boost::numeric::bounds<coordinate_type>::highest());
-        initialize
-            <
-                Box, max_corner, 0, dimension<Box>::type::value
-            >::apply(
-            box, boost::numeric::bounds<coordinate_type>::lowest());
-    }
-};
-
-template <typename Box>
-struct assign_zero_box
-{
-    static inline void apply(Box& box)
-    {
-        typedef typename coordinate_type<Box>::type coordinate_type;
-
-        initialize
-            <
-                Box, min_corner, 0, dimension<Box>::type::value
-            >::apply(box, coordinate_type());
-        initialize
-            <
-                Box, max_corner, 0, dimension<Box>::type::value
-            >::apply(box, coordinate_type());
-    }
-};
-
-
-
-
-}} // namespace detail::assign
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename GeometryTag, typename Geometry, std::size_t DimensionCount>
-struct assign {};
-
-template <typename P>
-struct assign<point_tag, P, 2>
-{
-    typedef typename coordinate_type<P>::type coordinate_type;
-
-    template <typename T>
-    static inline void apply(P& point, T const& c1, T const& c2)
-    {
-        set<0>(point, boost::numeric_cast<coordinate_type>(c1));
-        set<1>(point, boost::numeric_cast<coordinate_type>(c2));
-    }
-};
-
-template <typename P>
-struct assign<point_tag, P, 3>
-{
-    typedef typename coordinate_type<P>::type coordinate_type;
-
-    template <typename T>
-    static inline void apply(P& point, T const& c1, T const& c2, T const& c3)
-    {
-        set<0>(point, boost::numeric_cast<coordinate_type>(c1));
-        set<1>(point, boost::numeric_cast<coordinate_type>(c2));
-        set<2>(point, boost::numeric_cast<coordinate_type>(c3));
-    }
-};
-
-template <typename B>
-struct assign<box_tag, B, 2>
-{
-    typedef typename coordinate_type<B>::type coordinate_type;
-
-    // Here we assign 4 coordinates to a box.
-    // -> Most logical is: x1,y1,x2,y2
-    // In case the user reverses x1/x2 or y1/y2, we could reverse them (THAT IS NOT IMPLEMENTED)
-
-    // Note also comment in util/assign_box_corner ->
-    //   ("Most logical is LOWER, UPPER and sub-order LEFT, RIGHT")
-    //   (That is assigning 4 points from a box. So lower-left, lower-right, upper-left, upper-right)
-    template <typename T>
-    static inline void apply(B& box, T const& x1, T const& y1, T const& x2, T const& y2)
-    {
-        set<min_corner, 0>(box, boost::numeric_cast<coordinate_type>(x1));
-        set<min_corner, 1>(box, boost::numeric_cast<coordinate_type>(y1));
-        set<max_corner, 0>(box, boost::numeric_cast<coordinate_type>(x2));
-        set<max_corner, 1>(box, boost::numeric_cast<coordinate_type>(y2));
-    }
-};
-
-
-
-
-
-template <typename S>
-struct assign<nsphere_tag, S, 2>
-{
-    typedef typename coordinate_type<S>::type coordinate_type;
-    typedef typename radius_type<S>::type radius_type;
-
-    /// 2-value version for an n-sphere is valid for circle and sets the center
-    template <typename T>
-    static inline void apply(S& sphercle, T const& c1, T const& c2)
-    {
-        set<0>(sphercle, boost::numeric_cast<coordinate_type>(c1));
-        set<1>(sphercle, boost::numeric_cast<coordinate_type>(c2));
-    }
-
-    template <typename T, typename R>
-    static inline void apply(S& sphercle, T const& c1,
-        T const& c2, R const& radius)
-    {
-        set<0>(sphercle, boost::numeric_cast<coordinate_type>(c1));
-        set<1>(sphercle, boost::numeric_cast<coordinate_type>(c2));
-        set_radius<0>(sphercle, boost::numeric_cast<radius_type>(radius));
-    }
-};
-
-template <typename S>
-struct assign<nsphere_tag, S, 3>
-{
-    typedef typename coordinate_type<S>::type coordinate_type;
-    typedef typename radius_type<S>::type radius_type;
-
-    /// 4-value version for an n-sphere is valid for a sphere and sets the center and the radius
-    template <typename T>
-    static inline void apply(S& sphercle, T const& c1, T const& c2, T const& c3)
-    {
-        set<0>(sphercle, boost::numeric_cast<coordinate_type>(c1));
-        set<1>(sphercle, boost::numeric_cast<coordinate_type>(c2));
-        set<2>(sphercle, boost::numeric_cast<coordinate_type>(c3));
-    }
-
-    /// 4-value version for an n-sphere is valid for a sphere and sets the center and the radius
-    template <typename T, typename R>
-    static inline void apply(S& sphercle, T const& c1,
-        T const& c2, T const& c3, R const& radius)
-    {
-
-        set<0>(sphercle, boost::numeric_cast<coordinate_type>(c1));
-        set<1>(sphercle, boost::numeric_cast<coordinate_type>(c2));
-        set<2>(sphercle, boost::numeric_cast<coordinate_type>(c3));
-        set_radius<0>(sphercle, boost::numeric_cast<radius_type>(radius));
-    }
-
-};
-
-
-template <typename GeometryTag, typename Geometry>
-struct assign_zero {};
-
-
-template <typename Point>
-struct assign_zero<point_tag, Point>
-    : detail::assign::assign_zero_point<Point>
-{};
-
-template <typename Box>
-struct assign_zero<box_tag, Box>
-    : detail::assign::assign_zero_box<Box>
-{};
-
-
-template <typename GeometryTag, typename Geometry>
-struct assign_inverse {};
-
-template <typename Box>
-struct assign_inverse<box_tag, Box>
-    : detail::assign::assign_inverse_box<Box>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief assign two values to a 2D point
-    \ingroup access
- */
-template <typename G, typename T>
-inline void assign(G& geometry, T const& c1, T const& c2)
-{
-    dispatch::assign
-        <
-            typename tag<G>::type,
-            G,
-            ggl::dimension<G>::type::value
-        >::apply(geometry, c1, c2);
-}
-
-/*!
-    \brief assign three values to a 3D point or the center + radius to a circle
-    \ingroup access
- */
-template <typename G, typename T>
-inline void assign(G& geometry, T const& c1, T const& c2, T const& c3)
-{
-    dispatch::assign
-        <
-            typename tag<G>::type,
-            G,
-            ggl::dimension<G>::type::value
-        >::apply(geometry, c1, c2, c3);
-}
-
-/*!
-    \brief assign center + radius to a sphere
-    \ingroup access
- */
-template <typename G, typename T>
-inline void assign(G& geometry, T const& c1, T const& c2, T const& c3, T const& c4)
-{
-    dispatch::assign
-        <
-            typename tag<G>::type,
-            G,
-            ggl::dimension<G>::type::value
-        >::apply(geometry, c1, c2, c3, c4);
-}
-
-
-/*!
-    \brief assign a range of points to a linestring, ring or polygon
-    \note The point-type of the range might be different from the point-type of the geometry
-    \ingroup access
- */
-template <typename G, typename R>
-inline void assign(G& geometry, R const& range)
-{
-    clear(geometry);
-    ggl::append(geometry, range, -1, 0);
-}
-
-
-/*!
-    \brief assign to a box inverse infinite
-    \details The assign_inverse function initialize a 2D or 3D box with large coordinates, the
-    min corner is very large, the max corner is very small. This is a convenient starting point to
-    collect the minimum bounding box of a geometry.
-    \ingroup access
- */
-template <typename G>
-inline void assign_inverse(G& geometry)
-{
-    dispatch::assign_inverse
-        <
-            typename tag<G>::type,
-            G
-        >::apply(geometry);
-}
-
-/*!
-    \brief assign zero values to a box, point
-    \ingroup access
-    \details The assign_zero function initializes a 2D or 3D point or box with coordinates of zero
-    \tparam G the geometry type
- */
-template <typename G>
-inline void assign_zero(G& geometry)
-{
-    dispatch::assign_zero
-        <
-            typename tag<G>::type,
-            G
-        >::apply(geometry);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_ASSIGN_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/buffer.hpp b/include/builtin-ggl/ggl/algorithms/buffer.hpp
deleted file mode 100644
index c531813..0000000
--- a/include/builtin-ggl/ggl/algorithms/buffer.hpp
+++ /dev/null
@@ -1,153 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_BUFFER_HPP
-#define GGL_ALGORITHMS_BUFFER_HPP
-
-#include <cstddef>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <ggl/arithmetic/arithmetic.hpp>
-#include <ggl/core/concepts/box_concept.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/util/assign_box_corner.hpp>
-
-// Buffer functions
-// Was before: "grow" but then only for box
-// Now "buffer", but still only implemented for a box...
-
-/*!
-\defgroup buffer buffer calculation
-\par Source description:
-- OGC: Returns a geometric object that represents all Points whose distance
-from this geometric object is less than or equal to distance. Calculations are in the spatial reference system of
-this geometric object. Because of the limitations of linear interpolation, there will often be some relatively
-small error in this distance, but it should be near the resolution of the coordinates used
-\see http://en.wikipedia.org/wiki/Buffer_(GIS)
-*/
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer {
-
-template <typename BoxIn, typename BoxOut, typename T, std::size_t C, std::size_t D, std::size_t N>
-struct box_loop
-{
-    typedef typename coordinate_type<BoxOut>::type coordinate_type;
-
-    static inline void apply(BoxIn const& box_in, T const& distance, BoxOut& box_out)
-    {
-        set<C, D>(box_out, boost::numeric_cast<coordinate_type>(get<C, D>(box_in) + distance));
-        box_loop<BoxIn, BoxOut, T, C, D + 1, N>::apply(box_in, distance, box_out);
-    }
-};
-
-template <typename BoxIn, typename BoxOut, typename T, std::size_t C, std::size_t N>
-struct box_loop<BoxIn, BoxOut, T, C, N, N>
-{
-    static inline void apply(BoxIn const&, T const&, BoxOut&) {}
-};
-
-// Extends a box with the same amount in all directions
-template<typename BoxIn, typename BoxOut, typename T>
-inline void buffer_box(BoxIn const& box_in, T const& distance, BoxOut& box_out)
-{
-    assert_dimension_equal<BoxIn, BoxOut>();
-
-    static const std::size_t N = dimension<BoxIn>::value;
-
-    box_loop<BoxIn, BoxOut, T, min_corner, 0, N>::apply(box_in, -distance, box_out);
-    box_loop<BoxIn, BoxOut, T, max_corner, 0, N>::apply(box_in, +distance, box_out);
-}
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename TagIn, typename TagOut, typename Input, typename T, typename Output>
-struct buffer {};
-
-
-template <typename BoxIn, typename T, typename BoxOut>
-struct buffer<box_tag, box_tag, BoxIn, T, BoxOut>
-{
-    static inline void apply(BoxIn const& box_in, T const& distance,
-                T const& chord_length, BoxIn& box_out)
-    {
-        detail::buffer::buffer_box(box_in, distance, box_out);
-    }
-};
-
-// Many things to do. Point is easy, other geometries require self intersections
-// For point, note that it should output as a polygon (like the rest). Buffers
-// of a set of geometries are often lateron combined using a "dissolve" operation.
-// Two points close to each other get a combined kidney shaped buffer then.
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief Calculate buffer (= new geometry) around specified distance of geometry
-    \ingroup buffer
-    \param geometry_in input geometry
-    \param distance the distance used in buffer
-    \param chord_length length of the chord's in the generated arcs around points or bends
-    \param geometry_out buffered geometry
-    \note Currently only implemented for box, the trivial case, but still useful
-    \par Use case:
-        BOX + distance -> BOX: it is allowed that "geometry_out" the same object as "geometry_in"
- */
-template <typename Input, typename Output, typename T>
-inline void buffer(const Input& geometry_in, Output& geometry_out,
-            T const& distance, T const& chord_length = -1)
-{
-    dispatch::buffer
-        <
-            typename tag<Input>::type,
-            typename tag<Output>::type,
-            Input,
-            T,
-            Output
-        >::apply(geometry_in, distance, chord_length, geometry_out);
-}
-
-/*!
-    \brief Calculate and return buffer (= new geometry) around specified distance of geometry
-    \ingroup buffer
-    \param geometry input geometry
-    \param distance the distance used in buffer
-    \param chord_length length of the chord's in the generated arcs around points or bends
-    \return the buffered geometry
-    \note See also: buffer
- */
-template <typename Output, typename Input, typename T>
-Output make_buffer(const Input& geometry, T const& distance, T const& chord_length = -1)
-{
-    Output geometry_out;
-
-    dispatch::buffer
-        <
-            typename tag<Input>::type,
-            typename tag<Output>::type,
-            Input,
-            T,
-            Output
-        >::apply(geometry, distance, chord_length, geometry_out);
-
-    return geometry_out;
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_BUFFER_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/centroid.hpp b/include/builtin-ggl/ggl/algorithms/centroid.hpp
deleted file mode 100644
index e6beb09..0000000
--- a/include/builtin-ggl/ggl/algorithms/centroid.hpp
+++ /dev/null
@@ -1,277 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_CENTROID_HPP
-#define GGL_ALGORITHMS_CENTROID_HPP
-
-#include <cstddef>
-
-#include <boost/concept/requires.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/core/cs.hpp>
-#include <ggl/core/exception.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/strategies/strategies.hpp>
-#include <ggl/util/copy.hpp>
-#include <ggl/util/loop.hpp>
-
-/*!
-\defgroup centroid centroid calculation
-\par Source descriptions:
-- OGC description: The mathematical centroid for this Surface as a Point. The result is not guaranteed to be on this Surface.
-- From Wikipedia: Informally, it is the "average" of all points
-\see http://en.wikipedia.org/wiki/Centroid
-\note The "centroid" functions are taking a non const reference to the centroid. The "make_centroid" functions
-return the centroid, the type has to be specified.
-
-\note There are versions where the centroid calculation strategy can be specified
-\par Geometries:
-- RING: \image html centroid_ring.png
-- BOX: the centroid of a 2D or 3D box is the center of the box
-- CIRCLE: the centroid of a circle or a sphere is its center
-- POLYGON \image html centroid_polygon.png
-- POINT, LINESTRING, SEGMENT: trying to calculate the centroid will result in a compilation error
-*/
-
-namespace ggl
-{
-
-class centroid_exception : public ggl::exception
-{
-public:
-
-    centroid_exception()  {}
-
-    virtual char const* what() const throw()
-    {
-        return "centroid calculation exception";
-    }
-};
-
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace centroid {
-
-/*!
-    \brief Generic function which checks if enough points are present
-*/
-template<typename P, typename R>
-inline bool ring_ok(R const& ring, P& c)
-{
-    std::size_t const n = boost::size(ring);
-    if (n > 1)
-    {
-        return true;
-    }
-    else if (n <= 0)
-    {
-        throw centroid_exception();
-    }
-    else
-    {
-        // n == 1: Take over the first point in a "coordinate neutral way"
-        copy_coordinates(ring.front(), c);
-        return false;
-    }
-    return true;
-}
-
-/*!
-    \brief Calculate the centroid of a ring.
-*/
-template<typename Ring, typename Point, typename Strategy>
-struct centroid_ring
-{
-    static inline void apply(Ring const& ring, Point& c, Strategy const& strategy)
-    {
-        if (ring_ok(ring, c))
-        {
-            typename Strategy::state_type state;
-            loop(ring, strategy, state);
-            state.centroid(c);
-        }
-    }
-};
-
-
-/*!
-    \brief Centroid of a polygon.
-    \note Because outer ring is clockwise, inners are counter clockwise,
-    triangle approach is OK and works for polygons with rings.
-*/
-template<typename Polygon, typename Point, typename Strategy>
-struct centroid_polygon
-{
-    static inline void apply(Polygon const& poly, Point& c, Strategy const& strategy)
-    {
-        if (ring_ok(exterior_ring(poly), c))
-        {
-            typename Strategy::state_type state;
-
-            loop(exterior_ring(poly), strategy, state);
-
-            typedef typename boost::range_const_iterator
-                <
-                    typename interior_type<Polygon>::type
-                >::type iterator_type;
-
-            for (iterator_type it = boost::begin(interior_rings(poly));
-                 it != boost::end(interior_rings(poly));
-                 ++it)
-            {
-                loop(*it, strategy, state);
-            }
-            state.centroid(c);
-        }
-    }
-};
-
-/*!
-    \brief Calculate centroid (==center) of a box
-    \todo Implement strategy
-*/
-template<typename Box, typename Point, typename Strategy>
-struct centroid_box
-{
-    static inline void apply(Box const& box, Point& c, Strategy const&)
-    {
-        // TODO: adapt using strategies
-        assert_dimension<Box, 2>();
-        set<0>(c, (get<min_corner, 0>(box) + get<max_corner, 0>(box)) / 2);
-        set<1>(c, (get<min_corner, 1>(box) + get<max_corner, 1>(box)) / 2);
-    }
-};
-
-}} // namespace detail::centroid
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Tag, typename Geometry, typename Point, typename Strategy>
-struct centroid {};
-
-template <typename Box, typename Point, typename Strategy>
-struct centroid<box_tag, Box, Point, Strategy>
-    : detail::centroid::centroid_box<Box, Point, Strategy>
-{};
-
-template <typename Ring, typename Point, typename Strategy>
-struct centroid<ring_tag, Ring, Point, Strategy>
-    : detail::centroid::centroid_ring<Ring, Point, Strategy>
-{};
-
-template <typename Polygon, typename Point, typename Strategy>
-struct centroid<polygon_tag, Polygon, Point, Strategy>
-    : detail::centroid::centroid_polygon<Polygon, Point, Strategy>
-
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief Calculate centroid
-    \ingroup centroid
-    \details The function centroid calculates the centroid of a geometry using the default strategy.
-    A polygon should be closed and orientated clockwise, holes, if any, must be orientated
-    counter clockwise
-    \param geometry a geometry (e.g. closed ring or polygon)
-    \param c reference to point which will contain the centroid
-    \exception centroid_exception if calculation is not successful, e.g. because polygon didn't contain points
-    \par Example:
-    Example showing centroid calculation
-    \dontinclude doxygen_examples.cpp
-    \skip example_centroid_polygon
-    \line {
-    \until }
- */
-template<typename G, typename P>
-inline void centroid(const G& geometry, P& c)
-{
-    typedef typename point_type<G>::type point_type;
-    typedef typename strategy_centroid
-        <
-            typename cs_tag<point_type>::type,
-            P,
-            point_type
-        >::type strategy_type;
-
-    dispatch::centroid
-        <
-            typename tag<G>::type,
-            G,
-            P,
-            strategy_type
-        >::apply(geometry, c, strategy_type());
-}
-
-/*!
-    \brief Calculate centroid using a specified strategy
-    \ingroup centroid
-    \param geometry the geometry to calculate centroid from
-    \param c reference to point which will contain the centroid
-    \param strategy Calculation strategy for centroid
-    \exception centroid_exception if calculation is not successful, e.g. because polygon didn't contain points
- */
-template<typename G, typename P, typename S>
-inline void centroid(const G& geometry, P& c, S const& strategy)
-{
-    dispatch::centroid
-        <
-            typename tag<G>::type,
-            G,
-            P,
-            S
-        >::apply(geometry, c, strategy);
-}
-
-// Versions returning a centroid
-
-/*!
-    \brief Calculate and return centroid
-    \ingroup centroid
-    \param geometry the geometry to calculate centroid from
-    \return the centroid
-    \exception centroid_exception if calculation is not successful, e.g. because polygon didn't contain points
- */
-template<typename P, typename G>
-inline P make_centroid(const G& geometry)
-{
-    P c;
-    centroid(geometry, c);
-    return c;
-}
-
-/*!
-    \brief Calculate and return centroid
-    \ingroup centroid
-    \param geometry the geometry to calculate centroid from
-    \param strategy Calculation strategy for centroid
-    \return the centroid
-    \exception centroid_exception if calculation is not successful, e.g. because polygon didn't contain points
- */
-template<typename P, typename G, typename S>
-inline P make_centroid(const G& geometry, S const& strategy)
-{
-    P c;
-    centroid(geometry, c, strategy);
-    return c;
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_CENTROID_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/clear.hpp b/include/builtin-ggl/ggl/algorithms/clear.hpp
deleted file mode 100644
index de07e98..0000000
--- a/include/builtin-ggl/ggl/algorithms/clear.hpp
+++ /dev/null
@@ -1,161 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_CLEAR_HPP
-#define GGL_ALGORITHMS_CLEAR_HPP
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-
-namespace ggl
-{
-
-// This traits is currently NOT defined in ../core/ but here, just because it default
-// does not have to be implemented
-namespace traits
-{
-
-/*!
-    \brief Traits class, optional, might be implemented to clear a geometry
-    \details If a geometry type should not use the std ".clear()" then it can specialize
-    the "use_std" traits class to false, it should then implement (a.o.) clear
-    \ingroup traits
-    \par Geometries:
-        - linestring
-        - linear_ring
-    \par Specializations should provide:
-        - apply
- */
-template <typename G>
-struct clear
-{
-};
-
-} // namespace traits
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace clear {
-
-template <typename G>
-struct use_std_clear
-{
-    static inline void apply(G& geometry)
-    {
-        geometry.clear();
-    }
-};
-
-template <typename G>
-struct use_traits_clear
-{
-    static inline void apply(G& geometry)
-    {
-        traits::clear<G>::apply(geometry);
-    }
-};
-
-template <typename P>
-struct polygon_clear
-{
-    static inline void apply(P& polygon)
-    {
-        interior_rings(polygon).clear();
-        exterior_ring(polygon).clear();
-    }
-};
-
-template <typename G>
-struct no_action
-{
-    static inline void apply(G& geometry)
-    {
-    }
-};
-
-}} // namespace detail::clear
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Tag, bool Std, typename G>
-struct clear
-{};
-
-// True (default for all geometry types, unless otherwise implemented in traits)
-// uses std::clear
-template <typename Tag, typename G>
-struct clear<Tag, true, G>
-    : detail::clear::use_std_clear<G>
-{};
-
-// If any geometry specializes use_std<G> to false, specialize to use the traits clear.
-template <typename Tag, typename G>
-struct clear<Tag, false, G>
-    : detail::clear::use_traits_clear<G>
-{};
-
-// Point/box/nsphere/segment do not have clear. So specialize to do nothing.
-template <typename G>
-struct clear<point_tag, true, G>
-    : detail::clear::no_action<G>
-{};
-
-template <typename G>
-struct clear<box_tag, true, G>
-    : detail::clear::no_action<G>
-{};
-
-template <typename G>
-struct clear<segment_tag, true, G>
-    : detail::clear::no_action<G>
-{};
-
-
-template <typename G>
-struct clear<nsphere_tag, true, G>
-    : detail::clear::no_action<G>
-{};
-
-
-// Polygon can (indirectly) use std for clear
-template <typename P>
-struct clear<polygon_tag, true, P>
-    : detail::clear::polygon_clear<P>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief Clears a linestring, linear ring or polygon (exterior+interiors) or multi*
-    \details Generic function to clear a geometry
-    \ingroup access
-    \note points and boxes cannot be cleared, instead they can be set to zero by "assign_zero"
-*/
-template <typename G>
-inline void clear(G& geometry)
-{
-    typedef typename boost::remove_const<G>::type ncg_type;
-
-    dispatch::clear
-        <
-        typename tag<G>::type,
-        traits::use_std<ncg_type>::value,
-        ncg_type
-        >::apply(geometry);
-}
-
-}  // namespace ggl
-
-#endif // GGL_ALGORITHMS_CLEAR_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/combine.hpp b/include/builtin-ggl/ggl/algorithms/combine.hpp
deleted file mode 100644
index fd0e204..0000000
--- a/include/builtin-ggl/ggl/algorithms/combine.hpp
+++ /dev/null
@@ -1,189 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_COMBINE_HPP
-#define GGL_ALGORITHMS_COMBINE_HPP
-
-#include <cstddef>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <ggl/arithmetic/arithmetic.hpp>
-#include <ggl/core/coordinate_dimension.hpp>
-#include <ggl/core/concepts/box_concept.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/util/assign_box_corner.hpp>
-#include <ggl/util/select_coordinate_type.hpp>
-
-/*!
-\defgroup combine combine: add a geometry to a bounding box
-\par Geometries:
-- BOX + BOX -> BOX: the box will be combined with the other box \image html combine_box_box.png
-- BOX + POINT -> BOX: the box will combined with the point  \image html combine_box_point.png
-\note Previously called "grow"
-*/
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace combine {
-
-template
-<
-    typename Box, typename Point,
-    std::size_t Dimension, std::size_t DimensionCount
->
-struct point_loop
-{
-    typedef typename coordinate_type<Point>::type coordinate_type;
-
-    static inline void apply(Box& box, Point const& source)
-    {
-        coordinate_type const coord = get<Dimension>(source);
-
-        if (coord < get<min_corner, Dimension>(box))
-        {
-            set<min_corner, Dimension>(box, coord );
-        }
-
-        if (coord > get<max_corner, Dimension>(box))
-        {
-            set<max_corner, Dimension>(box, coord);
-        }
-
-        point_loop<Box, Point, Dimension + 1, DimensionCount>::apply(box, source);
-    }
-};
-
-
-template
-<
-    typename Box, typename Point,
-    std::size_t DimensionCount
->
-struct point_loop<Box, Point, DimensionCount, DimensionCount>
-{
-    static inline void apply(Box&, Point const&) {}
-};
-
-
-template
-<
-    typename BoxIn, typename BoxOut,
-    std::size_t Corner,
-    std::size_t Dimension, std::size_t DimensionCount
->
-struct box_loop
-{
-    typedef typename select_coordinate_type<BoxIn, BoxOut>::type coordinate_type;
-
-    static inline void apply(BoxIn& box, BoxOut const& source)
-    {
-        coordinate_type const coord = get<Corner, Dimension>(source);
-
-        if (coord < get<min_corner, Dimension>(box))
-        {
-            set<min_corner, Dimension>(box, coord);
-        }
-
-        if (coord > get<max_corner, Dimension>(box))
-        {
-            set<max_corner, Dimension>(box, coord);
-        }
-
-        box_loop
-            <
-                BoxIn, BoxOut, Corner, Dimension + 1, DimensionCount
-            >::apply(box, source);
-    }
-};
-
-
-template
-<
-    typename BoxIn, typename BoxOut,
-    std::size_t Corner, std::size_t DimensionCount
->
-struct box_loop<BoxIn, BoxOut, Corner, DimensionCount, DimensionCount>
-{
-    static inline void apply(BoxIn&, BoxOut const&) {}
-};
-
-
-// Changes a box b such that it also contains point p
-template<typename Box, typename Point>
-struct combine_box_with_point
-    : point_loop<Box, Point, 0, dimension<Point>::type::value>
-{};
-
-
-// Changes a box such that the other box is also contained by the box
-template<typename BoxOut, typename BoxIn>
-struct combine_box_with_box
-{
-    static inline void apply(BoxOut& b, BoxIn const& other)
-    {
-        box_loop<BoxOut, BoxIn, min_corner, 0,
-                    dimension<BoxIn>::type::value>::apply(b, other);
-        box_loop<BoxOut, BoxIn, max_corner, 0,
-                    dimension<BoxIn>::type::value>::apply(b, other);
-    }
-};
-
-}} // namespace detail::combine
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Tag, typename BoxOut, typename Geometry>
-struct combine
-{};
-
-
-// Box + point -> new box containing also point
-template <typename BoxOut, typename Point>
-struct combine<point_tag, BoxOut, Point>
-    : detail::combine::combine_box_with_point<BoxOut, Point>
-{};
-
-
-// Box + box -> new box containing two input boxes
-template <typename BoxOut, typename BoxIn>
-struct combine<box_tag, BoxOut, BoxIn>
-    : detail::combine::combine_box_with_box<BoxOut, BoxIn>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief Combines a box with another geometry (box, point)
-    \ingroup combine
-    \tparam Box type of the box
-    \tparam Geometry of second geometry, to be combined with the box
-    \param box box to combine another geometry with, might be changed
-    \param geometry other geometry
- */
-template <typename Box, typename Geometry>
-inline void combine(Box& box, Geometry const& geometry)
-{
-    assert_dimension_equal<Box, Geometry>();
-    dispatch::combine
-        <
-            typename tag<Geometry>::type,
-            Box, Geometry
-        >::apply(box, geometry);
-}
-
-} // namespace ggl
-
-#endif // GGL_COMBINE_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/convert.hpp b/include/builtin-ggl/ggl/algorithms/convert.hpp
deleted file mode 100644
index b9b9253..0000000
--- a/include/builtin-ggl/ggl/algorithms/convert.hpp
+++ /dev/null
@@ -1,161 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_CONVERT_HPP
-#define GGL_ALGORITHMS_CONVERT_HPP
-
-#include <cstddef>
-
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/append.hpp>
-#include <ggl/algorithms/for_each.hpp>
-#include <ggl/core/cs.hpp>
-#include <ggl/geometries/segment.hpp>
-#include <ggl/strategies/strategies.hpp>
-
-/*!
-\defgroup convert convert geometries from one type to another
-\details Convert from one geometry type to another type, for example from BOX to POLYGON
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace convert {
-
-template <typename P, typename B, std::size_t C, std::size_t D, std::size_t N>
-struct point_to_box
-{
-    static inline void apply(P const& point, B& box)
-    {
-        typedef typename coordinate_type<B>::type coordinate_type;
-
-        set<C, D>(box, boost::numeric_cast<coordinate_type>(get<D>(point)));
-        point_to_box<P, B, C, D + 1, N>::apply(point, box);
-    }
-};
-
-template <typename P, typename B, std::size_t C, std::size_t N>
-struct point_to_box<P, B, C, N, N>
-{
-    static inline void apply(P const& point, B& box)
-    {}
-};
-
-}} // namespace detail::convert
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename T1, typename T2, typename G1, typename G2>
-struct convert
-{
-};
-
-template <typename T, typename G1, typename G2>
-struct convert<T, T, G1, G2>
-{
-    // Same geometry type -> copy coordinates from G1 to G2
-};
-
-template <typename T, typename G>
-struct convert<T, T, G, G>
-{
-    // Same geometry -> can be copied
-};
-
-
-// Partial specializations
-template <typename B, typename R>
-struct convert<box_tag, ring_tag, B, R>
-{
-    static inline void apply(B const& box, R& ring)
-    {
-        // go from box to ring -> add coordinates in correct order
-        // only valid for 2D
-        assert_dimension<B, 2>();
-
-        ring.clear();
-        typename point_type<B>::type point;
-
-        ggl::assign(point, get<min_corner, 0>(box), get<min_corner, 1>(box));
-        ggl::append(ring, point);
-
-        ggl::assign(point, get<min_corner, 0>(box), get<max_corner, 1>(box));
-        ggl::append(ring, point);
-
-        ggl::assign(point, get<max_corner, 0>(box), get<max_corner, 1>(box));
-        ggl::append(ring, point);
-
-        ggl::assign(point, get<max_corner, 0>(box), get<min_corner, 1>(box));
-        ggl::append(ring, point);
-
-        ggl::assign(point, get<min_corner, 0>(box), get<min_corner, 1>(box));
-        ggl::append(ring, point);
-    }
-};
-
-template <typename B, typename P>
-struct convert<box_tag, polygon_tag, B, P>
-{
-    static inline void apply(B const& box, P& polygon)
-    {
-        typedef typename ring_type<P>::type ring_type;
-
-        convert<box_tag, ring_tag, B, ring_type>::apply(box, exterior_ring(polygon));
-    }
-};
-
-template <typename P, typename B>
-struct convert<point_tag, box_tag, P, B>
-{
-    static inline void apply(P const& point, B& box)
-    {
-        // go from point to box -> box with volume of zero, 2D or 3D
-        static const std::size_t N = dimension<P>::value;
-
-        detail::convert::point_to_box<P, B, min_corner, 0, N>::apply(point, box);
-        detail::convert::point_to_box<P, B, max_corner, 0, N>::apply(point, box);
-    }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-/*!
-    \brief Converts one geometry to another geometry
-    \details The convert algorithm converts one geometry, e.g. a BOX, to another geometry, e.g. a RING. This only
-    if it is possible and applicable.
-    \ingroup convert
-    \tparam G1 first geometry type
-    \tparam G2 second geometry type
-    \param geometry1 first geometry
-    \param geometry2 second geometry
- */
-template <typename G1, typename G2>
-inline void convert(G1 const& geometry1, G2& geometry2)
-{
-    dispatch::convert
-        <
-            typename tag<G1>::type,
-            typename tag<G2>::type,
-            G1,
-            G2
-        >::apply(geometry1, geometry2);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_CONVERT_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/convex_hull.hpp b/include/builtin-ggl/ggl/algorithms/convex_hull.hpp
deleted file mode 100644
index ca7c6a5..0000000
--- a/include/builtin-ggl/ggl/algorithms/convex_hull.hpp
+++ /dev/null
@@ -1,127 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_CONVEX_HULL_HPP
-#define GGL_ALGORITHMS_CONVEX_HULL_HPP
-
-
-#include <boost/concept/requires.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-#include <ggl/core/cs.hpp>
-#include <ggl/core/is_multi.hpp>
-
-#include <ggl/core/concepts/point_concept.hpp>
-
-
-#include <ggl/strategies/strategies.hpp>
-#include <ggl/util/as_range.hpp>
-
-
-/*!
-\defgroup convex_hull convex hull calculation
-\par Source descriptions:
-- OGC description: Returns a geometric object that represents the convex hull of this geometric
-object. Convex hulls, being dependent on straight lines, can be accurately represented in linear interpolations
-for any geometry restricted to linear interpolations.
-\see http://en.wikipedia.org/wiki/Convex_hull
-
-\par Performance
-2776 counties of US are "hulled" in 0.52 seconds (other libraries: 2.8 seconds, 2.4 seconds, 3.4 seconds, 1.1 seconds)
-
-\note The convex hull is always a ring, holes are not possible. Therefore it is modelled as an output iterator.
-This gives the most flexibility, the user can decide what to do with it.
-\par Geometries:
-In the images below the convex hull is painted in red.
-- POINT: will not compile
-- POLYGON: will deliver a polygon without holes \image html convexhull_polygon_polygon.png
-*/
-namespace ggl {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace convex_hull {
-
-template <typename Geometry, typename OutputIterator>
-struct hull
-{
-    static inline OutputIterator apply(Geometry const& geometry,
-            OutputIterator out)
-    {
-        typedef typename point_type<Geometry>::type point_type;
-
-        typedef typename strategy_convex_hull
-            <
-                typename cs_tag<point_type>::type,
-                point_type
-            >::type strategy_type;
-
-        strategy_type s(as_range<typename as_range_type<Geometry>::type>(geometry));
-        s.get(out);
-        return out;
-    }
-};
-
-
-}} // namespace detail::convex_hull
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
-    typename GeometryTag,
-    bool IsMulti,
-    typename Geometry,
-    typename OutputIterator
- >
-struct convex_hull {};
-
-template <typename Linestring, typename OutputIterator>
-struct convex_hull<linestring_tag, false, Linestring, OutputIterator>
-    : detail::convex_hull::hull<Linestring, OutputIterator> 
-{};
-
-template <typename Ring, typename OutputIterator>
-struct convex_hull<ring_tag, false, Ring, OutputIterator>
-    : detail::convex_hull::hull<Ring, OutputIterator> 
-{};
-
-template <typename Polygon, typename OutputIterator>
-struct convex_hull<polygon_tag, false, Polygon, OutputIterator>
-    : detail::convex_hull::hull<Polygon, OutputIterator> 
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-/*!
-    \brief Calculate the convex hull of a geometry
-    \ingroup convex_hull
-    \param geometry the geometry to calculate convex hull from
-    \param out an output iterator outputing points of the convex hull
-    \return the output iterator
- */
-template<typename Geometry, typename OutputIterator>
-inline OutputIterator convex_hull(Geometry const& geometry, OutputIterator out)
-{
-    typedef typename boost::remove_const<Geometry>::type ncg_type;
-
-    return dispatch::convex_hull
-        <
-            typename tag<ncg_type>::type,
-            is_multi<ncg_type>::type::value,
-            Geometry,
-            OutputIterator
-        >::apply(geometry, out);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_CONVEX_HULL_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/correct.hpp b/include/builtin-ggl/ggl/algorithms/correct.hpp
deleted file mode 100644
index 8cd9e49..0000000
--- a/include/builtin-ggl/ggl/algorithms/correct.hpp
+++ /dev/null
@@ -1,161 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_CORRECT_HPP
-#define GGL_ALGORITHMS_CORRECT_HPP
-
-#include <algorithm>
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/core/cs.hpp>
-#include <ggl/core/ring_type.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-
-#include <ggl/core/concepts/point_concept.hpp>
-
-#include <ggl/algorithms/area.hpp>
-#include <ggl/algorithms/disjoint.hpp>
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace correct {
-
-// correct an box: make min/max are correct
-template <typename B>
-inline void correct_box(B& b)
-{
-    // Currently only for Cartesian coordinates
-    // TODO: adapt using strategies
-    // TODO: adapt using traits
-    typedef typename coordinate_type<B>::type coordinate_type;
-
-    if (get<min_corner, 0>(b) > get<max_corner, 0>(b))
-    {
-        coordinate_type max_value = get<min_corner, 0>(b);
-        coordinate_type min_value = get<max_corner, 0>(b);
-        set<min_corner, 0>(b, min_value);
-        set<max_corner, 0>(b, max_value);
-    }
-
-    if (get<min_corner, 1>(b) > get<max_corner, 1>(b))
-    {
-        coordinate_type max_value = get<min_corner, 1>(b);
-        coordinate_type min_value = get<max_corner, 1>(b);
-        set<min_corner, 1>(b, min_value);
-        set<max_corner, 1>(b, max_value);
-    }
-}
-
-// close a linear_ring, if not closed
-template <typename R>
-inline void ensure_closed_ring(R& r)
-{
-    if (boost::size(r) > 2)
-    {
-        // check if closed, if not, close it
-        if (ggl::disjoint(r.front(), r.back()))
-        {
-            r.push_back(r.front());
-        }
-    }
-}
-
-// correct a polygon: normalizes all rings, sets outer linear_ring clockwise, sets all
-// inner rings counter clockwise
-template <typename Y>
-inline void correct_polygon(Y& poly)
-{
-    typename ring_type<Y>::type& outer = exterior_ring(poly);
-    ensure_closed_ring(outer);
-
-    typedef typename point_type<Y>::type point_type;
-    typedef typename ring_type<Y>::type ring_type;
-    typedef typename strategy_area
-        <
-            typename cs_tag<point_type>::type,
-            point_type
-        >::type strategy_type;
-
-    strategy_type strategy;
-
-    if (detail::area::ring_area<ring_type, strategy_type>::apply(outer, strategy) < 0)
-    {
-        std::reverse(boost::begin(outer), boost::end(outer));
-    }
-
-    typedef typename boost::range_iterator
-        <
-            typename interior_type<Y>::type
-        >::type iterator_type;
-
-    for (iterator_type it = boost::begin(interior_rings(poly));
-         it != boost::end(interior_rings(poly)); ++it)
-    {
-        ensure_closed_ring(*it);
-        if (detail::area::ring_area<ring_type, strategy_type>::apply(*it, strategy) > 0)
-        {
-            std::reverse(boost::begin(*it), boost::end(*it));
-        }
-    }
-}
-
-}} // namespace detail::correct
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Tag, typename G>
-struct correct {};
-
-template <typename B>
-struct correct<box_tag, B>
-{
-    static inline void apply(B& box)
-    {
-        detail::correct::correct_box(box);
-    }
-};
-
-template <typename R>
-struct correct<ring_tag, R>
-{
-    static inline void apply(R& ring)
-    {
-        detail::correct::ensure_closed_ring(ring);
-    }
-};
-
-template <typename P>
-struct correct<polygon_tag, P>
-{
-    static inline void apply(P& poly)
-    {
-        detail::correct::correct_polygon(poly);
-    }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-template <typename G>
-inline void correct(G& geometry)
-{
-    dispatch::correct<typename tag<G>::type, G>::apply(geometry);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_CORRECT_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/detail/calculate_null.hpp b/include/builtin-ggl/ggl/algorithms/detail/calculate_null.hpp
deleted file mode 100644
index ef736c8..0000000
--- a/include/builtin-ggl/ggl/algorithms/detail/calculate_null.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_DETAIL_CALCULATE_NULL_HPP
-#define GGL_ALGORITHMS_DETAIL_CALCULATE_NULL_HPP
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template<typename ReturnValue, typename Geometry, typename Strategy>
-struct calculate_null
-{
-    static inline ReturnValue apply(Geometry const& , Strategy const&)
-    {
-        return ReturnValue();
-    }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_DETAIL_CALCULATE_NULL_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/detail/not.hpp b/include/builtin-ggl/ggl/algorithms/detail/not.hpp
deleted file mode 100644
index f480673..0000000
--- a/include/builtin-ggl/ggl/algorithms/detail/not.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_DETAIL_NOT_HPP
-#define GGL_ALGORITHMS_DETAIL_NOT_HPP
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-
-/*!
-    \brief Structure negating the result of specified policy
-    \tparam Geometry1 first geometry type
-    \tparam Geometry2 second geometry type
-    \tparam Policy
-    \param geometry1 first geometry
-    \param geometry2 second geometry
-    \return Negation of the result of the policy
- */
-template <typename Geometry1, typename Geometry2, typename Policy>
-struct not_
-{
-    static inline bool apply(Geometry1 const &geometry1, Geometry2 const& geometry2)
-    {
-        return ! Policy::apply(geometry1, geometry2);
-    }
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_DETAIL_NOT_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/disjoint.hpp b/include/builtin-ggl/ggl/algorithms/disjoint.hpp
deleted file mode 100644
index bdce46f..0000000
--- a/include/builtin-ggl/ggl/algorithms/disjoint.hpp
+++ /dev/null
@@ -1,221 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_DISJOINT_HPP
-#define GGL_ALGORITHMS_DISJOINT_HPP
-
-#include <boost/mpl/if.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-#include <boost/static_assert.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/coordinate_dimension.hpp>
-#include <ggl/core/is_multi.hpp>
-#include <ggl/core/reverse_dispatch.hpp>
-#include <ggl/util/math.hpp>
-#include <ggl/util/select_coordinate_type.hpp>
-
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint {
-
-template <typename P1, typename P2, std::size_t D, std::size_t N>
-struct point_point
-{
-    typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
-
-    static inline bool apply(P1 const& p1, P2 const& p2)
-    {
-        if (! math::equals(get<D>(p1), get<D>(p2)))
-        {
-            return true;
-        }
-        return point_point<P1, P2, D + 1, N>::apply(p1, p2);
-    }
-};
-
-template <typename P1, typename P2, std::size_t N>
-struct point_point<P1, P2, N, N>
-{
-    static inline bool apply(P1 const& , P2 const& )
-    {
-        return false;
-    }
-};
-
-
-template <typename P, typename B, std::size_t D, std::size_t N>
-struct point_box
-{
-    static inline bool apply(P const& point, B const& box)
-    {
-        if (get<D>(point) < get<min_corner, D>(box)
-            || get<D>(point) > get<max_corner, D>(box))
-        {
-            return true;
-        }
-        return point_box<P, B, D + 1, N>::apply(point, box);
-    }
-};
-
-template <typename P, typename B, std::size_t N>
-struct point_box<P, B, N, N>
-{
-    static inline bool apply(P const& , B const& )
-    {
-        return false;
-    }
-};
-
-
-template <typename B1, typename B2, std::size_t D, std::size_t N>
-struct box_box
-{
-    static inline bool apply(B1 const& box1, B2 const& box2)
-    {
-        if (get<max_corner, D>(box1) < get<min_corner, D>(box2))
-        {
-            return true;
-        }
-        if (get<min_corner, D>(box1) > get<max_corner, D>(box2))
-        {
-            return true;
-        }
-        return box_box<B1, B2, D + 1, N>::apply(box1, box2);
-    }
-};
-
-template <typename B1, typename B2, std::size_t N>
-struct box_box<B1, B2, N, N>
-{
-    static inline bool apply(B1 const& , B2 const& )
-    {
-        return false;
-    }
-};
-
-
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
-    typename GeometryTag1, typename GeometryTag2,
-    typename G1, typename G2,
-    bool IsMulti1, bool IsMulti2,
-    std::size_t DimensionCount
->
-struct disjoint
-{
-};
-
-template <typename P1, typename P2, std::size_t DimensionCount>
-struct disjoint<point_tag, point_tag, P1, P2, false, false, DimensionCount>
-    : detail::disjoint::point_point<P1, P2, 0, DimensionCount>
-{
-};
-
-template <typename B1, typename B2, std::size_t DimensionCount>
-struct disjoint<box_tag, box_tag, B1, B2, false, false, DimensionCount>
-    : detail::disjoint::box_box<B1, B2, 0, DimensionCount>
-{
-};
-
-template <typename P, typename B, std::size_t DimensionCount>
-struct disjoint<point_tag, box_tag, P, B, false, false, DimensionCount>
-    : detail::disjoint::point_box<P, B, 0, DimensionCount>
-{
-};
-
-
-template
-<
-    typename GeometryTag1, typename GeometryTag2,
-    typename G1, typename G2,
-    bool IsMulti1, bool IsMulti2,
-    std::size_t DimensionCount
->
-struct disjoint_reversed
-{
-    static inline bool apply(G1 const& g1, G2 const& g2)
-    {
-        return disjoint
-            <
-                GeometryTag2, GeometryTag1,
-                G2, G1,
-                IsMulti2, IsMulti1,
-                DimensionCount
-            >::apply(g2, g1);
-    }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-/*!
-    \brief Calculate if two geometries are disjoint
-    \ingroup boolean_relations
-    \tparam Geometry1 first geometry type
-    \tparam Geometry2 second geometry type
-    \param geometry1 first geometry
-    \param geometry2 second geometry
-    \return true if disjoint, else false
- */
-template <typename Geometry1, typename Geometry2>
-inline bool disjoint(const Geometry1& geometry1,
-            const Geometry2& geometry2)
-{
-    assert_dimension_equal<Geometry1, Geometry2>();
-
-    typedef typename boost::remove_const<Geometry1>::type ncg1_type;
-    typedef typename boost::remove_const<Geometry2>::type ncg2_type;
-
-    return boost::mpl::if_c
-        <
-            reverse_dispatch<Geometry1, Geometry2>::type::value,
-            dispatch::disjoint_reversed
-            <
-                typename tag<ncg1_type>::type,
-                typename tag<ncg2_type>::type,
-                ncg1_type,
-                ncg2_type,
-                is_multi<ncg1_type>::type::value,
-                is_multi<ncg2_type>::type::value,
-                dimension<ncg1_type>::type::value
-            >,
-            dispatch::disjoint
-            <
-                typename tag<ncg1_type>::type,
-                typename tag<ncg2_type>::type,
-                ncg1_type,
-                ncg2_type,
-                is_multi<ncg1_type>::type::value,
-                is_multi<ncg2_type>::type::value,
-                dimension<ncg1_type>::type::value
-            >
-        >::type::apply(geometry1, geometry2);
-}
-
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_DISJOINT_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/distance.hpp b/include/builtin-ggl/ggl/algorithms/distance.hpp
deleted file mode 100644
index 110e2f5..0000000
--- a/include/builtin-ggl/ggl/algorithms/distance.hpp
+++ /dev/null
@@ -1,360 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_DISTANCE_HPP
-#define GGL_ALGORITHMS_DISTANCE_HPP
-
-#include <boost/mpl/if.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-#include <boost/static_assert.hpp>
-
-#include <ggl/core/cs.hpp>
-#include <ggl/core/is_multi.hpp>
-#include <ggl/core/reverse_dispatch.hpp>
-#include <ggl/geometries/segment.hpp>
-#include <ggl/strategies/distance_result.hpp>
-#include <ggl/strategies/strategies.hpp>
-
-/*!
-\defgroup distance distance calculation
-The distance algorithm returns the distance between two geometries.
-\par Coordinate systems and strategies:
-With help of strategies the distance function returns the appropriate distance.
-If the input is in cartesian coordinates, the Euclidian distance (Pythagoras) is calculated.
-If the input is in spherical coordinates (either degree or radian), the distance over the sphere is returned.
-If the input is in geographic coordinates, distance is calculated over the globe and returned in meters.
-
-\par Distance result:
-Depending on calculation type the distance result is either a structure, convertable
-to a double, or a double value. In case of Pythagoras it makes sense to not draw the square root in the
-strategy itself. Taking a square root is relative expensive and is not necessary when comparing distances.
-
-\par Geometries:
-Currently implemented, for both cartesian and spherical/geographic:
-- POINT - POINT
-- POINT - SEGMENT and v.v.
-- POINT - LINESTRING and v.v.
-
-Not yet implemented:
-- POINT - RING etc, note that it will return a zero if the point is anywhere within the ring
-
-\par Example:
-Example showing distance calculation of two points, in xy and in latlong coordinates
-\dontinclude doxygen_examples.cpp
-\skip example_distance_point_point
-\line {
-\until }
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance {
-
-template <typename P1, typename P2, typename Strategy>
-struct point_to_point
-{
-    static inline typename Strategy::return_type apply(P1 const& p1,
-                P2 const& p2, Strategy const& strategy)
-    {
-        return strategy(p1, p2);
-    }
-};
-
-
-template<typename Point, typename Segment, typename Strategy>
-struct point_to_segment
-{
-    static inline typename Strategy::return_type apply(Point const& point,
-                Segment const& segment, Strategy const& strategy)
-    {
-        typename strategy_distance_segment
-            <
-            typename cs_tag<Point>::type,
-            typename cs_tag<Segment>::type,
-            Point,
-            Segment
-            >::type segment_strategy;
-
-        return segment_strategy(point, segment);
-    }
-};
-
-
-template<typename P, typename L, typename PPStrategy, typename PSStrategy>
-struct point_to_linestring
-{
-    typedef typename PPStrategy::return_type return_type;
-
-    static inline return_type apply(P const& point, L const& linestring,
-            PPStrategy const& pp_strategy, PSStrategy const& ps_strategy)
-    {
-        typedef segment<const typename point_type<L>::type> segment_type;
-
-        if (boost::begin(linestring) == boost::end(linestring))
-        {
-            return return_type(0);
-        }
-
-        // line of one point: return point square_distance
-        typedef typename boost::range_const_iterator<L>::type iterator_type;
-        iterator_type it = boost::begin(linestring);
-        iterator_type prev = it++;
-        if (it == boost::end(linestring))
-        {
-            return pp_strategy(point, *boost::begin(linestring));
-        }
-
-
-        // start with first segment distance
-        return_type d = ps_strategy(point, segment_type(*prev, *it));
-
-        // check if other segments are closer
-        prev = it++;
-        while(it != boost::end(linestring))
-        {
-            return_type ds = ps_strategy(point, segment_type(*prev, *it));
-            if (ggl::close_to_zero(ds))
-            {
-                return return_type(0);
-            }
-            else if (ds < d)
-            {
-                d = ds;
-            }
-            prev = it++;
-        }
-
-        return d;
-    }
-};
-
-
-
-}} // namespace detail::distance
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
-    typename GeometryTag1, typename GeometryTag2,
-    typename G1, typename G2,
-    typename StrategyTag, typename Strategy,
-    bool IsMulti1, bool IsMulti2
->
-struct distance
-{};
-
-
-template <typename P1, typename P2, typename Strategy>
-struct distance
-<
-    point_tag, point_tag,
-    P1, P2,
-    strategy_tag_distance_point_point, Strategy,
-    false, false
-> : detail::distance::point_to_point<P1, P2, Strategy>
-{};
-
-/// Point-line version 1, where point-point strategy is specified
-template <typename Point, typename Linestring, typename Strategy>
-struct distance
-<
-    point_tag, linestring_tag,
-    Point, Linestring,
-    strategy_tag_distance_point_point, Strategy,
-    false, false
->
-{
-
-    static inline typename Strategy::return_type apply(Point const& point,
-            Linestring const& linestring,
-            Strategy const& strategy)
-    {
-        typedef segment<const typename point_type<Linestring>::type> segment_type;
-        typedef typename ggl::strategy_distance_segment
-                    <
-                            typename cs_tag<Point>::type,
-                            typename cs_tag<segment_type>::type,
-                            Point,
-                            segment_type
-                    >::type ps_strategy_type;
-
-        return detail::distance::point_to_linestring
-            <
-                Point, Linestring, Strategy, ps_strategy_type
-            >::apply(point, linestring, strategy, ps_strategy_type());
-    }
-};
-
-
-/// Point-line version 2, where point-segment strategy is specified
-template <typename Point, typename Linestring, typename Strategy>
-struct distance
-<
-    point_tag, linestring_tag,
-    Point, Linestring,
-    strategy_tag_distance_point_segment, Strategy,
-    false, false
->
-{
-    static inline typename Strategy::return_type apply(Point const& point,
-            Linestring const& linestring,
-            Strategy const& strategy)
-    {
-        typedef typename Strategy::point_strategy_type pp_strategy_type;
-        return detail::distance::point_to_linestring
-            <
-                Point, Linestring, pp_strategy_type, Strategy
-            >::apply(point, linestring, pp_strategy_type(), strategy);
-    }
-};
-
-
-template <typename Point, typename Segment, typename Strategy>
-struct distance
-<
-    point_tag, segment_tag,
-    Point, Segment,
-    strategy_tag_distance_point_point, Strategy,
-    false, false
-> : detail::distance::point_to_segment<Point, Segment, Strategy>
-{};
-
-
-// Strictly spoken this might be in namespace <impl> again
-template
-<
-    typename GeometryTag1, typename GeometryTag2,
-    typename G1, typename G2,
-    typename StrategyTag, typename Strategy,
-    bool IsMulti1, bool IsMulti2
->
-struct distance_reversed
-{
-    static inline typename Strategy::return_type apply(G1 const& g1,
-                G2 const& g2, Strategy const& strategy)
-    {
-        return distance
-            <
-                GeometryTag2, GeometryTag1,
-                G2, G1,
-                StrategyTag, Strategy,
-                IsMulti2, IsMulti1
-            >::apply(g2, g1, strategy);
-    }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-/*!
-    \brief Calculate distance between two geometries with a specified strategy
-    \ingroup distance
-    \tparam Geometry1 first geometry type
-    \tparam Geometry2 second geometry type
-    \tparam S point-point-distance strategy type
-    \param geometry1 first geometry
-    \param geometry2 second geometry
-    \param strategy strategy to calculate distance between two points
-    \return the distance (either a double or a distance_result, (convertable to double))
-    \note The strategy can be a point-point strategy. In case of distance point-line/point-polygon
-        it may also be a point-segment strategy.
-    \par Example:
-    Example showing distance calculation of two lat long points, using the accurate Vincenty approximation
-    \dontinclude doxygen_examples.cpp
-    \skip example_distance_point_point_strategy
-    \line {
-    \until }
- */
-template <typename Geometry1, typename Geometry2, typename Strategy>
-inline typename Strategy::return_type distance(Geometry1 const& geometry1,
-            Geometry2 const& geometry2, Strategy const& strategy)
-{
-    typedef typename boost::remove_const<Geometry1>::type ncg1_type;
-    typedef typename boost::remove_const<Geometry2>::type ncg2_type;
-
-    return boost::mpl::if_c
-        <
-            ggl::reverse_dispatch<Geometry1, Geometry2>::type::value,
-            dispatch::distance_reversed
-                <
-                    typename tag<ncg1_type>::type,
-                    typename tag<ncg2_type>::type,
-                    ncg1_type,
-                    ncg2_type,
-                    typename strategy_tag<Strategy>::type,
-                    Strategy,
-                    is_multi<ncg1_type>::value,
-                    is_multi<ncg2_type>::value
-                >,
-                dispatch::distance
-                <
-                    typename tag<ncg1_type>::type,
-                    typename tag<ncg2_type>::type,
-                    ncg1_type,
-                    ncg2_type,
-                    typename strategy_tag<Strategy>::type,
-                    Strategy,
-                    is_multi<ncg1_type>::value,
-                    is_multi<ncg2_type>::value
-                >
-        >::type::apply(geometry1, geometry2, strategy);
-}
-
-
-/*!
-    \brief Calculate distance between two geometries
-    \ingroup distance
-    \details The default strategy is used, belonging to the corresponding coordinate system of the geometries
-    \tparam G1 first geometry type
-    \tparam G2 second geometry type
-    \param geometry1 first geometry
-    \param geometry2 second geometry
-    \return the distance (either a double or a distance result, convertable to double)
- */
-template <typename Geometry1, typename Geometry2>
-inline typename distance_result<Geometry1, Geometry2>::type distance(
-                Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
-    typedef typename point_type<Geometry1>::type point1_type;
-    typedef typename point_type<Geometry2>::type point2_type;
-
-    // Define a point-point-distance-strategy
-    // for either the normal case, either the reversed case
-    typedef typename boost::mpl::if_c
-        <
-            ggl::reverse_dispatch<Geometry1, Geometry2>::type::value,
-            typename strategy_distance
-                <
-                    typename cs_tag<point2_type>::type,
-                    typename cs_tag<point1_type>::type,
-                    point2_type,
-                    point1_type
-                >::type,
-            typename strategy_distance
-                <
-                    typename cs_tag<point1_type>::type,
-                    typename cs_tag<point2_type>::type,
-                    point1_type,
-                    point2_type
-                >::type
-        >::type strategy;
-
-    return distance(geometry1, geometry2, strategy());
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_DISTANCE_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/envelope.hpp b/include/builtin-ggl/ggl/algorithms/envelope.hpp
deleted file mode 100644
index f32e595..0000000
--- a/include/builtin-ggl/ggl/algorithms/envelope.hpp
+++ /dev/null
@@ -1,329 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_ENVELOPE_HPP
-#define GGL_ALGORITHMS_ENVELOPE_HPP
-
-#include <boost/concept/requires.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <ggl/algorithms/combine.hpp>
-#include <ggl/algorithms/convert.hpp>
-#include <ggl/core/cs.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/concepts/box_concept.hpp>
-#include <ggl/core/concepts/linestring_concept.hpp>
-#include <ggl/core/concepts/nsphere_concept.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/core/concepts/polygon_concept.hpp>
-#include <ggl/core/concepts/ring_concept.hpp>
-#include <ggl/strategies/strategies.hpp>
-
-/*!
-\defgroup envelope envelope calculation
-\par Source descriptions:
-- OGC: Envelope (): Geometry - The minimum bounding rectangle (MBR) for this Geometry,
-returned as a Geometry. The polygon is defined by the corner points of the bounding
-box [(MINX, MINY), (MAXX, MINY), (MAXX, MAXY), (MINX, MAXY), (MINX, MINY)].
-
-\note Implemented in the Generic Geometry Library: The minimum bounding box, always as a box, having min <= max
-
-The envelope algorithm calculates the bounding box, or envelope, of a geometry. There are two versions:
-- envelope, taking a reference to a box as second parameter
-- make_envelope, returning a newly constructed box (type as a template parameter in the function call)
-- either of them has an optional strategy
-
-\par Geometries:
-- POINT: a box with zero area, the maximum and the minimum point of the box are
-set to the point itself.
-- LINESTRING, RING or RANGE is the smallest box that contains all points of the specified
-point sequence.
-If the linestring is empty, the envelope is the inverse infinite box, that is, the minimum point is very
-large (max infinite) and the maximum point is very small (min infinite).
-- POLYGON, the envelope of the outer ring
-\image html envelope_polygon.png
-
-\par Example:
-Example showing envelope calculation
-\dontinclude doxygen_examples.cpp
-\skip example_envelope_linestring
-\line {
-\until }
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace envelope {
-
-/// Calculate envelope of an n-sphere, circle or sphere (currently only for Cartesian 2D points)
-template<typename B, typename S, typename Strategy>
-struct envelope_nsphere
-{
-    static inline void apply(S const& s, B& mbr, Strategy const&)
-    {
-        assert_dimension<S, 2>();
-        assert_dimension<B, 2>();
-
-        typename radius_type<S>::type r = get_radius<0>(s);
-        set<min_corner, 0>(mbr, get<0>(s) - r);
-        set<min_corner, 1>(mbr, get<1>(s) - r);
-        set<max_corner, 0>(mbr, get<0>(s) + r);
-        set<max_corner, 1>(mbr, get<1>(s) + r);
-    }
-};
-
-
-/// Calculate envelope of an 2D or 3D point
-template<typename P, typename B, typename Strategy>
-struct envelope_point
-{
-    static inline void apply(P const& p, B& mbr, Strategy const&)
-    {
-        // Envelope of a point is an empty box, a box with zero volume, located at the point.
-        // We just use the convert algorithm here
-        ggl::convert(p, mbr);
-    }
-};
-
-
-/// Calculate envelope of an 2D or 3D segment
-template<typename S, typename B, typename Strategy>
-struct envelope_segment
-{
-    static inline void apply(S const& s, B& mbr, Strategy const&)
-    {
-        ggl::assign_inverse(mbr);
-        ggl::combine(mbr, s.first);
-        ggl::combine(mbr, s.second);
-    }
-};
-
-
-/// Version with state iterating through range (also used in multi*)
-template<typename R, typename Strategy>
-inline void envelope_range_state(R const& range, Strategy const& strategy, typename Strategy::state_type& state)
-{
-    typedef typename boost::range_const_iterator<R>::type iterator_type;
-
-    for (iterator_type it = boost::begin(range); it != boost::end(range); it++)
-    {
-        strategy(*it, state);
-    }
-}
-
-
-
-/// Generic range dispatching struct
-template <typename R, typename B, typename Strategy>
-struct envelope_range
-{
-    /// Calculate envelope of range using a strategy
-    static inline void apply(R const& range, B& mbr, Strategy const& strategy)
-    {
-        typename Strategy::state_type state(mbr);
-        envelope_range_state(range, strategy, state);
-    }
-};
-
-}} // namespace detail::envelope
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
-    typename Tag1, typename Tag2,
-    typename Geometry, typename Box,
-    typename Strategy
->
-struct envelope {};
-
-
-template <typename P, typename B, typename Strategy>
-struct envelope<point_tag, box_tag, P, B, Strategy>
-    : detail::envelope::envelope_point<P, B, Strategy>
-{
-private:
-    BOOST_CONCEPT_ASSERT( (concept::ConstPoint<P>) );
-    BOOST_CONCEPT_ASSERT( (concept::Box<B>) );
-};
-
-
-template <typename B, typename Strategy>
-struct envelope<box_tag, box_tag, B, B, Strategy>
-{
-    /*!
-        \brief Calculate envelope of a box
-        \details The envelope of a box is itself, provided for consistency
-        for consistency, on itself it is not useful.
-     */
-    static inline void apply(B const& b, B& mbr, Strategy const&)
-    {
-        mbr = b;
-    }
-
-private:
-    BOOST_CONCEPT_ASSERT( (concept::Box<B>) );
-};
-
-
-template <typename S, typename B, typename Strategy>
-struct envelope<segment_tag, box_tag, S, B, Strategy>
-    : detail::envelope::envelope_segment<S, B, Strategy>
-{};
-
-
-template <typename S, typename B, typename Strategy>
-struct envelope<nsphere_tag, box_tag, S, B, Strategy>
-    : detail::envelope::envelope_nsphere<S, B, Strategy>
-{
-private:
-    BOOST_CONCEPT_ASSERT( (concept::ConstNsphere<S>) );
-    BOOST_CONCEPT_ASSERT( (concept::Box<B>) );
-};
-
-template <typename L, typename B, typename Strategy>
-struct envelope<linestring_tag, box_tag, L, B, Strategy>
-    : detail::envelope::envelope_range<L, B, Strategy>
-{
-private:
-    BOOST_CONCEPT_ASSERT( (concept::ConstLinestring<L>) );
-    BOOST_CONCEPT_ASSERT( (concept::Box<B>) );
-};
-
-
-template <typename R, typename B, typename Strategy>
-struct envelope<ring_tag, box_tag, R, B, Strategy>
-    : detail::envelope::envelope_range<R, B, Strategy>
-{
-private:
-    BOOST_CONCEPT_ASSERT( (concept::ConstRing<R>) );
-    BOOST_CONCEPT_ASSERT( (concept::Box<B>) );
-};
-
-
-template <typename P, typename B, typename Strategy>
-struct envelope<polygon_tag, box_tag, P, B, Strategy>
-{
-    static inline void apply(P const& poly, B& mbr, Strategy const& strategy)
-    {
-        // For polygon inspecting outer linear_ring is sufficient
-
-        detail::envelope::envelope_range
-            <
-                typename ring_type<P>::type,
-                B,
-                Strategy
-            >::apply(exterior_ring(poly), mbr, strategy);
-    }
-
-private:
-    BOOST_CONCEPT_ASSERT( (concept::ConstPolygon<P>) );
-    BOOST_CONCEPT_ASSERT( (concept::Box<B>) );
-};
-
-
-} // namespace dispatch
-#endif
-
-
-/*!
-\brief Calculate envelope of a geometry, using a specified strategy
-\ingroup envelope
-\param geometry the geometry
-\param mbr the box receiving the envelope
-\param strategy strategy to be used
-*/
-template<typename G, typename B, typename S>
-inline void envelope(G const& geometry, B& mbr, S const& strategy)
-{
-    dispatch::envelope
-        <
-            typename tag<G>::type, typename tag<B>::type,
-            G, B, S
-        >::apply(geometry, mbr, strategy);
-}
-
-
-
-
-/*!
-\brief Calculate envelope of a geometry
-\ingroup envelope
-\param geometry the geometry
-\param mbr the box receiving the envelope
-\par Example:
-Example showing envelope calculation, using point_ll latlong points
-\dontinclude doxygen_examples.cpp
-\skip example_envelope_polygon
-\line {
-\until }
-*/
-template<typename G, typename B>
-inline void envelope(G const& geometry, B& mbr)
-{
-    typename strategy_envelope
-        <
-        typename cs_tag<typename point_type<G>::type>::type,
-        typename cs_tag<typename point_type<B>::type>::type,
-        typename point_type<G>::type,
-        B
-        >::type strategy;
-
-    envelope(geometry, mbr, strategy);
-}
-
-
-/*!
-\brief Calculate and return envelope of a geometry
-\ingroup envelope
-\param geometry the geometry
-\param strategy the strategy to be used
-*/
-template<typename B, typename G, typename S>
-inline B make_envelope(G const& geometry, S const& strategy)
-{
-    B box;
-    dispatch::envelope
-        <
-            typename tag<G>::type, typename tag<B>::type,
-            G, B, S
-        >::apply(geometry, box, strategy);
-
-    return box;
-}
-
-
-/*!
-\brief Calculate and return envelope of a geometry
-\ingroup envelope
-\param geometry the geometry
-*/
-template<typename B, typename G>
-inline B make_envelope(G const& geometry)
-{
-    typename strategy_envelope
-        <
-        typename cs_tag<typename point_type<G>::type>::type,
-        typename cs_tag<typename point_type<B>::type>::type,
-        typename point_type<G>::type,
-        B
-        >::type strategy;
-    return make_envelope<B>(geometry, strategy);
-}
-
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_ENVELOPE_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/equals.hpp b/include/builtin-ggl/ggl/algorithms/equals.hpp
deleted file mode 100644
index e19af49..0000000
--- a/include/builtin-ggl/ggl/algorithms/equals.hpp
+++ /dev/null
@@ -1,134 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_EQUALS_HPP
-#define GGL_ALGORITHMS_EQUALS_HPP
-
-#include <cstddef>
-
-#include <boost/static_assert.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/coordinate_dimension.hpp>
-#include <ggl/core/is_multi.hpp>
-#include <ggl/algorithms/disjoint.hpp>
-#include <ggl/algorithms/detail/not.hpp>
-#include <ggl/util/math.hpp>
-
-/*!
-
-\defgroup boolean_relations boolean relationships (equals, disjoint, overlaps, etc)
-
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace equals {
-
-template <typename B1, typename B2, std::size_t D, std::size_t N>
-struct box_box
-{
-    static inline bool apply(B1 const& box1, B2 const& box2)
-    {
-        if (!math::equals(get<min_corner, D>(box1), get<min_corner, D>(box2))
-            || !math::equals(get<max_corner, D>(box1), get<max_corner, D>(box2)))
-        {
-            return false;
-        }
-        return box_box<B1, B2, D + 1, N>::apply(box1, box2);
-    }
-};
-
-template <typename B1, typename B2, std::size_t N>
-struct box_box<B1, B2, N, N>
-{
-    static inline bool apply(B1 const& , B2 const& )
-    {
-        return true;
-    }
-};
-
-}} // namespace detail::equals
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
-    typename GeometryTag,
-    bool IsMulti,
-    typename G1,
-    typename G2,
-    std::size_t DimensionCount
->
-struct equals
-{
-};
-
-template <typename P1, typename P2, std::size_t DimensionCount>
-struct equals<point_tag, false, P1, P2, DimensionCount>
-    : ggl::detail::not_
-        <
-            P1,
-            P2,
-            detail::disjoint::point_point<P1, P2, 0, DimensionCount>
-        >
-{
-};
-
-template <typename B1, typename B2, std::size_t DimensionCount>
-struct equals<box_tag, false, B1, B2, DimensionCount>
-    : detail::equals::box_box<B1, B2, 0, DimensionCount>
-{
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief Calculate if two geometries are equals
-    \ingroup boolean_relations
-    \tparam Geometry1 first geometry type
-    \tparam Geometry2 second geometry type
-    \param geometry1 first geometry
-    \param geometry2 second geometry
-    \return true if equals, else false
- */
-template <typename Geometry1, typename Geometry2>
-inline bool equals(Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
-    assert_dimension_equal<Geometry1, Geometry2>();
-
-// TODO: assert types equal:
-// typename tag<ncg1_type>::type, typename tag<ncg2_type>::type,
-// (LATER): NO! a linestring can be spatially equal to a multi_linestring
-
-    typedef typename boost::remove_const<Geometry1>::type ncg1_type;
-    typedef typename boost::remove_const<Geometry2>::type ncg2_type;
-
-    return dispatch::equals
-            <
-                typename tag<ncg1_type>::type,
-                is_multi<ncg1_type>::type::value,
-                ncg1_type,
-                ncg2_type,
-                dimension<ncg1_type>::type::value
-            >::apply(geometry1, geometry2);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_EQUALS_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/for_each.hpp b/include/builtin-ggl/ggl/algorithms/for_each.hpp
deleted file mode 100644
index 0dfb486..0000000
--- a/include/builtin-ggl/ggl/algorithms/for_each.hpp
+++ /dev/null
@@ -1,268 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_FOR_EACH_HPP
-#define GGL_ALGORITHMS_FOR_EACH_HPP
-
-/*!
-\defgroup loop loops and for-each functionality
-There are several algorithms provided which walk through the points or segments
-of linestrings and polygons. They are called for_each_point, for_each_segment, after
-the standard library, and \b loop which is more adapted and of which the functor
-could break out if necessary.
-Of the for_each algorithms there is a \b const and a non-const version provided.
-*/
-
-#include <algorithm>
-
-#include <boost/concept/requires.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/geometries/segment.hpp>
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace for_each {
-
-template <typename P, typename F>
-struct fe_point
-{
-    static inline F for_each_const_point(P const& p, F f)
-    {
-        f(p);
-        return (f);
-    }
-
-    static inline F for_each_point(P& p, F f)
-    {
-        f(p);
-        return (f);
-    }
-};
-
-template <typename R, typename F>
-struct fe_range
-{
-    static inline F for_each_const_point(R const& range, F f)
-    {
-        return (std::for_each(boost::begin(range), boost::end(range), f));
-    }
-
-    static inline F for_each_point(R& range, F f)
-    {
-        return (std::for_each(boost::begin(range), boost::end(range), f));
-    }
-
-    static inline F for_each_const_segment(R const& range, F f)
-    {
-        typedef typename boost::range_const_iterator<R>::type iterator_type;
-
-        iterator_type it = boost::begin(range);
-        iterator_type previous = it++;
-        while(it != boost::end(range))
-        {
-            segment<typename point_type<R>::type> s(*previous, *it);
-            f(s);
-            previous = it++;
-        }
-
-        return (f);
-    }
-
-    static inline F for_each_segment(R& range, F f)
-    {
-        typedef typename boost::range_iterator<R>::type iterator_type;
-
-        iterator_type it = boost::begin(range);
-        iterator_type previous = it++;
-        while(it != boost::end(range))
-        {
-            segment<typename point_type<R>::type> s(*previous, *it);
-            f(s);
-            previous = it++;
-        }
-
-        return (f);
-    }
-};
-
-template <typename P, typename F>
-struct fe_polygon
-{
-    static inline F for_each_const_point(P const& poly, F f)
-    {
-        typedef typename ring_type<P>::type ring_type;
-        typedef typename boost::range_const_iterator
-            <
-            typename interior_type<P>::type
-            >::type iterator_type;
-
-        f = fe_range<ring_type, F>::for_each_const_point(exterior_ring(poly), f);
-
-        for (iterator_type it = boost::begin(interior_rings(poly));
-             it != boost::end(interior_rings(poly)); it++)
-        {
-            f = fe_range<ring_type, F>::for_each_const_point(*it, f);
-        }
-
-        return (f);
-    }
-
-    static inline F for_each_point(P& poly, F f)
-    {
-        typedef typename ring_type<P>::type ring_type;
-        typedef typename boost::range_iterator
-            <
-            typename interior_type<P>::type
-            >::type iterator_type;
-
-        f = fe_range<ring_type, F>::for_each_point(exterior_ring(poly), f);
-
-        for (iterator_type it = boost::begin(interior_rings(poly));
-             it != boost::end(interior_rings(poly)); it++)
-        {
-            f = fe_range<ring_type, F>::for_each_point(*it, f);
-        }
-
-        return (f);
-    }
-
-    static inline F for_each_const_segment(P const& poly, F f)
-    {
-        typedef typename ring_type<P>::type ring_type;
-        typedef typename boost::range_const_iterator
-            <
-            typename interior_type<P>::type
-            >::type iterator_type;
-
-        f = fe_range<ring_type, F>::for_each_const_segment(exterior_ring(poly), f);
-
-        for (iterator_type it = boost::begin(interior_rings(poly));
-             it != boost::end(interior_rings(poly)); it++)
-        {
-            f = fe_range<ring_type, F>::for_each_const_segment(*it, f);
-        }
-
-        return (f);
-    }
-
-    static inline F for_each_segment(P& poly, F f)
-    {
-        typedef typename ring_type<P>::type ring_type;
-        typedef typename boost::range_iterator
-            <
-            typename interior_type<P>::type
-            >::type iterator_type;
-
-        f = fe_range<ring_type, F>::for_each_segment(exterior_ring(poly), f);
-
-        for (iterator_type it = boost::begin(interior_rings(poly));
-             it != boost::end(interior_rings(poly)); it++)
-        {
-            f = fe_range<ring_type, F>::for_each_segment(*it, f);
-        }
-
-        return (f);
-    }
-};
-
-}} // namespace detail::for_each
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename T, typename G, typename F>
-struct for_each {};
-
-template <typename P, typename F>
-struct for_each<point_tag, P, F> : detail::for_each::fe_point<P, F> {};
-
-template <typename L, typename F>
-struct for_each<linestring_tag, L, F> : detail::for_each::fe_range<L, F> {};
-
-template <typename R, typename F>
-struct for_each<ring_tag, R, F> : detail::for_each::fe_range<R, F> {};
-
-template <typename P, typename F>
-struct for_each<polygon_tag, P, F> : detail::for_each::fe_polygon<P, F> {};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-/*!
-    \brief Calls functor for geometry
-    \ingroup loop
-    \param geometry geometry to loop through
-    \param f functor to use
-    \details Calls the functor the specified \b const geometry
-*/
-template<typename G, typename F>
-inline F for_each_point(G const& geometry, F f)
-{
-    typedef typename dispatch::for_each
-        <
-        typename tag<G>::type,
-        G,
-        F
-        >::for_each_const_point for_each_type;
-
-    return for_each_type(geometry, f);
-}
-
-/*!
-    \brief Calls functor for geometry
-    \ingroup loop
-    \param geometry geometry to loop through
-    \param f functor to use
-    \details Calls the functor for the specified geometry
-*/
-template<typename G, typename F>
-inline F for_each_point(G& geometry, F f)
-{
-    return (dispatch::for_each<typename tag<G>::type, G, F>::for_each_point(geometry, f));
-}
-
-/*!
-    \brief Calls functor for segments on linestrings, rings, polygons, ...
-    \ingroup loop
-    \param geometry geometry to loop through
-    \param f functor to use
-    \details Calls the functor all \b const segments of the specified \b const geometry
-*/
-template<typename G, typename F>
-inline F for_each_segment(const G& geometry, F f)
-{
-    return (dispatch::for_each<typename tag<G>::type, G, F>::for_each_const_segment(geometry, f));
-}
-
-
-/*!
-    \brief Calls functor for segments on linestrings, rings, polygons, ...
-    \ingroup loop
-    \param geometry geometry to loop through
-    \param f functor to use
-    \details Calls the functor all segments of the specified geometry
-*/
-template<typename G, typename F>
-inline F for_each_segment(G& geometry, F f)
-{
-    return (dispatch::for_each<typename tag<G>::type, G, F>::for_each_segment(geometry, f));
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_FOR_EACH_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/get_section.hpp b/include/builtin-ggl/ggl/algorithms/get_section.hpp
deleted file mode 100644
index ec10fe7..0000000
--- a/include/builtin-ggl/ggl/algorithms/get_section.hpp
+++ /dev/null
@@ -1,102 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_GET_SECTION_HPP
-#define GGL_ALGORITHMS_GET_SECTION_HPP
-
-
-#include <boost/concept_check.hpp>
-#include <boost/concept/requires.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-
-#include <ggl/iterators/point_const_iterator.hpp>
-
-#include <ggl/geometries/segment.hpp>
-
-
-
-namespace ggl
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Tag, typename Geometry, typename Section>
-struct get_section
-{
-    typedef typename ggl::point_const_iterator<Geometry>::type iterator_type;
-    static inline void apply(Geometry const& geometry, Section const& section,
-                iterator_type& begin, iterator_type& end)
-    {
-        begin = boost::begin(geometry) + section.begin_index;
-        end = boost::begin(geometry) + section.end_index + 1;
-    }
-};
-
-template <typename Polygon, typename Section>
-struct get_section<polygon_tag, Polygon, Section>
-{
-    typedef typename ggl::point_const_iterator<Polygon>::type iterator_type;
-    static inline void apply(Polygon const& polygon, Section const& section,
-                iterator_type& begin, iterator_type& end)
-    {
-        typedef typename ggl::ring_type<Polygon>::type ring_type;
-        ring_type const& ring = section.ring_index < 0
-            ? ggl::exterior_ring(polygon)
-            : ggl::interior_rings(polygon)[section.ring_index];
-
-        begin = boost::begin(ring) + section.begin_index;
-        end = boost::begin(ring) + section.end_index + 1;
-    }
-};
-
-} // namespace dispatch
-#endif
-
-
-
-
-/*!
-    \brief Get iterators for a specified section
-    \ingroup sectionalize
-    \tparam Geometry type
-    \tparam Section type of section to get from
-    \param geometry geometry which might be located in the neighborhood
-    \param section structure with section
-    \param begin begin-iterator (const iterator over points of section)
-    \param end end-iterator (const iterator over points of section)
-    \todo Create non-const version as well
-
- */
-template <typename Geometry, typename Section>
-inline void get_section(Geometry const& geometry, Section const& section,
-    typename point_const_iterator<Geometry>::type& begin,
-    typename point_const_iterator<Geometry>::type& end)
-{
-    dispatch::get_section
-        <
-            typename tag<Geometry>::type,
-            Geometry,
-            Section
-        >::apply(geometry, section, begin, end);
-}
-
-
-
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_GET_SECTION_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/intermediate.hpp b/include/builtin-ggl/ggl/algorithms/intermediate.hpp
deleted file mode 100644
index 4adc16f..0000000
--- a/include/builtin-ggl/ggl/algorithms/intermediate.hpp
+++ /dev/null
@@ -1,126 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_INTERMEDIATE_HPP
-#define GGL_ALGORITHMS_INTERMEDIATE_HPP
-
-#include <cstddef>
-#include <iterator>
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/core/cs.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/strategies/strategies.hpp>
-
-/*!
-\defgroup intermediate intermediate calculation
-The intermediate algorithm calculate points IN BETWEEN of other points
-\par Purpose:
-- Remove corners in rectangular lines / polygons. Calling them several times will result in smooth lines
-- Creating 3D models
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intermediate {
-
-template <typename Src, typename Dst, std::size_t Dimension, std::size_t DimensionCount>
-struct calculate_coordinate
-{
-    static inline void apply(Src const& p1, Src const& p2, Dst& p)
-    {
-        ggl::set<Dimension>(p,
-                    (ggl::get<Dimension>(p1) + ggl::get<Dimension>(p2)) / 2.0);
-        calculate_coordinate<Src, Dst, Dimension + 1, DimensionCount>::apply(p1, p2, p);
-    }
-};
-
-template <typename Src, typename Dst, std::size_t DimensionCount>
-struct calculate_coordinate<Src, Dst, DimensionCount, DimensionCount>
-{
-    static inline void apply(Src const&, Src const&, Dst&)
-    {
-    }
-};
-
-template<typename R, typename Iterator>
-struct range_intermediate
-{
-    static inline void apply(R const& range, bool start_and_end, Iterator out)
-    {
-        typedef typename point_type<R>::type point_type;
-        typedef typename boost::range_const_iterator<R>::type iterator_type;
-
-        iterator_type it = boost::begin(range);
-
-        if (start_and_end)
-        {
-            (*out++) = *it;
-        }
-
-        iterator_type prev = it++;
-        for (; it != boost::end(range); prev = it++)
-        {
-            point_type p;
-            calculate_coordinate
-                <
-                    point_type,
-                    point_type,
-                    0,
-                    dimension<point_type>::type::value
-                >::apply(*prev, *it, p);
-            *(out++) = p;
-        }
-
-        if (start_and_end)
-        {
-            (*out++) = *prev;
-        }
-    }
-};
-
-}} // namespace detail::intermediate
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename GeometryTag, typename G, typename Iterator>
-struct intermediate  {};
-
-template <typename G, typename Iterator>
-struct intermediate<ring_tag, G, Iterator>
-        : detail::intermediate::range_intermediate<G, Iterator> {};
-
-template <typename G, typename Iterator>
-struct intermediate<linestring_tag, G, Iterator>
-        : detail::intermediate::range_intermediate<G, Iterator> {};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief Calculate intermediate of a geometry
-    \ingroup intermediate
- */
-template<typename G, typename Iterator>
-inline void intermediate(const G& geometry, bool start_and_end, Iterator out)
-{
-    dispatch::intermediate<typename tag<G>::type, G, Iterator>::apply(geometry, start_and_end, out);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_INTERMEDIATE_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/intersection.hpp b/include/builtin-ggl/ggl/algorithms/intersection.hpp
deleted file mode 100644
index 2af8bd3..0000000
--- a/include/builtin-ggl/ggl/algorithms/intersection.hpp
+++ /dev/null
@@ -1,455 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_INTERSECTION_HPP
-#define GGL_ALGORITHMS_INTERSECTION_HPP
-
-#include <deque>
-
-#include <ggl/algorithms/intersection_linestring.hpp>
-
-#include <ggl/algorithms/overlay/get_intersection_points.hpp>
-#include <ggl/algorithms/overlay/merge_intersection_points.hpp>
-#include <ggl/algorithms/overlay/adapt_turns.hpp>
-#include <ggl/algorithms/overlay/enrich_intersection_points.hpp>
-#include <ggl/algorithms/overlay/traverse.hpp>
-
-#include <ggl/algorithms/assign.hpp>
-#include <ggl/algorithms/convert.hpp>
-#include <ggl/algorithms/within.hpp>
-
-
-
-/*!
-\defgroup overlay overlay operations (intersection, union, clipping)
-\details The intersection of two geometries A and B is the geometry containing all points of A also belonging to B,
-but no other elements. The so-called clip is an intersection of a geometry with a box.
-\par Source description:
-- OGC: Returns a geometric object that represents the Point set intersection of this geometric object with another Geometry.
-\see http://en.wikipedia.org/wiki/Intersection_(set_theory)
-\note Any intersection can result in no geometry at all
-
-\note Used strategies still have to be modelled. Working only for cartesian
-\par Geometries:
-The intersection result is painted with a red outline.
-- clip: POLYGON + BOX -> output iterator of polygons
-\image html clip_polygon.png
-- clip: LINESTRING + BOX -> output iterator of linestrings
-\image html clip_linestring.png
-\note There are some difficulties to model an intersection in the template world. The intersection of two segments can
-result into nothing, into a point, into another segment. At compiletime the result type is not known. An output iterator
-iterating points is appropriate here.
-\image html clip_segment_segment.png
-An intersection of two linestrings can result into nothing, one or more points, one or more segments or one or more
-linestrings. So an output iterator will NOT do here.
-So the output might be changed into a unified algorithm where the output is a multi-geometry.
-For the current clip-only operations the output iterator will do.
-
-\par Example:
-Example showing clipping of linestring with box
-\dontinclude doxygen_examples.cpp
-\skip example_intersection_linestring1
-\line {
-\until }
-\par Example:
-Example showing clipping of vector, outputting vectors, with box
-\dontinclude doxygen_examples.cpp
-\skip example_intersection_linestring2
-\line {
-\until }
-\par Example:
-Example showing clipping of polygon with box
-\dontinclude doxygen_examples.cpp
-\skip example_intersection_polygon1
-\line {
-\until }
-*/
-
-namespace ggl
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersection {
-
-
-template
-<
-    typename Polygon1, typename Polygon2,
-    typename OutputIterator, typename GeometryOut
->
-struct intersection_polygon_polygon
-{
-    static inline OutputIterator apply(Polygon1 const& polygon1,
-                Polygon2 const& polygon2, OutputIterator out)
-    {
-        typedef detail::intersection::intersection_point
-            <
-                typename ggl::point_type<GeometryOut>::type
-            > ip_type;
-        typedef std::deque<ip_type> ips_container;
-
-        typedef typename ggl::ring_type<GeometryOut>::type ring_type;
-
-        ips_container ips;
-
-        bool trivial = ggl::get_intersection_points(polygon1, polygon2, ips);
-
-        if (ips.size() <= 0)
-        {
-            // If there are no IP-s, check if one point is in other polygon
-            // assume both polygons having points
-            if (ggl::within(ggl::exterior_ring(polygon1).front(), polygon2))
-            {
-                // Assume same type (output = input)
-                // TODO: solve this (we go to specialize again...)
-                *out = polygon1;
-                out++;
-            }
-            else if (ggl::within(ggl::exterior_ring(polygon2).front(), polygon1))
-            {
-                *out = polygon2;
-                out++;
-            }
-        }
-        else
-        {
-            if (! trivial)
-            {
-                ggl::merge_intersection_points(ips);
-                ggl::adapt_turns(ips);
-
-            }
-
-            ggl::enrich_intersection_points(ips, trivial);
-
-
-            std::vector<ring_type> v;
-            ggl::traverse<ring_type>
-                (
-                    polygon1,
-                    polygon2,
-                    -1,
-                    ips,
-                    trivial,
-                    std::back_inserter(v)
-                );
-
-
-            // TODO:
-            // assemble rings / inner rings / to polygons
-            for (typename std::vector<ring_type>::const_iterator it = v.begin();
-                it != v.end(); ++it)
-            {
-                // How can we avoid the double copy here! It is really bad!
-                // We have to create a polygon, then copy it to the output iterator.
-                // Having an output-vector would have been better: append it to the vector!
-                // So output iterators are not that good.
-                GeometryOut poly;
-                poly.outer() = *it;
-                *out = poly;
-                out++;
-            }
-        }
-
-
-        return out;
-    }
-};
-
-
-
-
-template
-<
-    typename Polygon, typename Box,
-    typename OutputIterator, typename GeometryOut
->
-struct intersection_polygon_box
-{
-    static inline OutputIterator apply(Polygon const& polygon,
-                Box const& box, OutputIterator out)
-    {
-        typedef typename ggl::point_type<GeometryOut>::type point_type;
-        typedef detail::intersection::intersection_point<point_type> ip_type;
-        typedef std::deque<ip_type> ips_container;
-
-        typedef typename ggl::ring_type<GeometryOut>::type ring_type;
-
-        ips_container ips;
-
-        bool trivial = ggl::get_intersection_points(polygon, box, ips);
-
-        // TODO: share this all with polygon_polygon using an "assemble" function!
-        // It is only different in the 'within' calls, can be sorted out with specialization
-
-
-        if (ips.size() <= 0)
-        {
-            // If there are no IP-s, check if one point is in other polygon
-            // assume both polygons having points
-            if (ggl::within(ggl::exterior_ring(polygon).front(), box))
-            {
-                // Assume same type (output = input)
-                // TODO: solve this (we go to specialize again...)
-                *out = polygon;
-                out++;
-            }
-            else
-            {
-                typename ggl::point_type<Box>::type p;
-                ggl::set<0>(p, ggl::get<min_corner, 0>(box));
-                ggl::set<1>(p, ggl::get<min_corner, 1>(box));
-                if (ggl::within(p, polygon))
-                {
-                    GeometryOut boxpoly;
-                    ggl::convert(box, boxpoly);
-                    *out = boxpoly;
-                    out++;
-                }
-            }
-        }
-        else
-        {
-            if (trivial)
-            {
-                ggl::merge_intersection_points(ips);
-            }
-
-            ggl::enrich_intersection_points(ips, trivial);
-
-            std::vector<ring_type> v;
-            ggl::traverse<ring_type>
-                (
-                    polygon,
-                    box,
-                    -1,
-                    ips,
-                    trivial,
-                    std::back_inserter(v)
-                );
-
-            // TODO:
-            // assemble rings / inner rings / to polygons
-            for (typename std::vector<ring_type>::const_iterator it = v.begin();
-                it != v.end(); ++it)
-            {
-                // How can we avoid the double copy here! It is really bad!
-                // We have to create a polygon, then copy it to the output iterator.
-                // Having an output-vector would have been better: append it to the vector!
-                // So output iterators are not that good.
-                GeometryOut poly;
-                poly.outer() = *it;
-                *out = poly;
-                out++;
-            }
-        }
-
-
-        return out;
-    }
-};
-
-
-}} // namespace detail::intersection
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
-    typename Tag1, typename Tag2, typename Tag3,
-    typename G1, typename G2,
-    typename OutputIterator,
-    typename GeometryOut
->
-struct intersection {};
-
-
-template
-<
-    typename Segment1, typename Segment2,
-    typename OutputIterator, typename GeometryOut
->
-struct intersection
-    <
-        segment_tag, segment_tag, point_tag,
-        Segment1, Segment2,
-        OutputIterator, GeometryOut
-    >
-{
-    static inline OutputIterator apply(Segment1 const& segment1,
-            Segment2 const& segment2, OutputIterator out)
-    {
-        typedef typename point_type<GeometryOut>::type point_type;
-
-        // Get the intersection point (or two points)
-        segment_intersection_points<point_type> is
-            = strategy::intersection::relate_cartesian_segments
-            <
-                policies::relate::segments_intersection_points
-                    <
-                        Segment1,
-                        Segment2,
-                        segment_intersection_points<point_type>
-                    >
-            >::relate(segment1, segment2);
-        for (int i = 0; i < is.count; i++)
-        {
-            GeometryOut p;
-            ggl::copy_coordinates(is.intersections[i], p);
-            *out = p;
-            out++;
-        }
-        return out;
-    }
-};
-
-
-template
-<
-    typename Linestring, typename Box,
-    typename OutputIterator, typename GeometryOut
->
-struct intersection
-    <
-        linestring_tag, box_tag, linestring_tag,
-        Linestring, Box,
-        OutputIterator, GeometryOut
-    >
-{
-    static inline OutputIterator apply(Linestring const& linestring,
-            Box const& box, OutputIterator out)
-    {
-        typedef typename point_type<GeometryOut>::type point_type;
-        strategy::intersection::liang_barsky<Box, point_type> strategy;
-        return detail::intersection::clip_linestring_with_box<GeometryOut>(box, linestring, out, strategy);
-    }
-};
-
-
-template
-<
-    typename Polygon1, typename Polygon2,
-    typename OutputIterator, typename GeometryOut
->
-struct intersection
-    <
-        polygon_tag, polygon_tag, polygon_tag,
-        Polygon1, Polygon2,
-        OutputIterator, GeometryOut
-    >
-    : detail::intersection::intersection_polygon_polygon
-        <Polygon1, Polygon2, OutputIterator, GeometryOut>
-{};
-
-
-
-template
-<
-    typename Polygon, typename Box,
-    typename OutputIterator, typename GeometryOut
->
-struct intersection
-<
-    polygon_tag, box_tag, polygon_tag,
-    Polygon, Box,
-    OutputIterator, GeometryOut
->
-    : detail::intersection::intersection_polygon_box
-        <Polygon, Box, OutputIterator, GeometryOut>
-{};
-
-
-
-template
-<
-    typename GeometryTag1, typename GeometryTag2, typename GeometryTag3,
-    typename G1, typename G2,
-    typename OutputIterator, typename GeometryOut
->
-struct intersection_reversed
-{
-    static inline OutputIterator apply(G1 const& g1, G2 const& g2, OutputIterator out)
-    {
-        return intersection
-            <
-                GeometryTag2, GeometryTag1, GeometryTag3,
-                G2, G1,
-                OutputIterator, GeometryOut
-            >::apply(g2, g1, out);
-    }
-};
-
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-/*!
-    \brief Intersects two geometries which each other
-    \ingroup overlay
-    \details A sequence of points is intersected (clipped) by the specified box
-    and the resulting linestring, or pieces of linestrings, are sent to the specified output operator.
-    \tparam GeometryOut output geometry type, must be specified
-    \tparam Geometry1 first geometry type
-    \tparam Geometry2 second geometry type
-    \tparam OutputIterator output iterator
-    \param geometry1 first geometry (currently only a BOX)
-    \param geometry2 second geometry (range, linestring, polygon)
-    \param out the output iterator, outputting linestrings or polygons
-    \return the output iterator
-    \note For linestrings: the default clipping strategy, Liang-Barsky, is used. The algorithm is currently only
-    implemented for 2D xy points. It could be generic for most ll cases, but not across the 180
-    meridian so that issue is still on the todo-list.
-*/
-template
-<
-    typename GeometryOut,
-    typename Geometry1,
-    typename Geometry2,
-    typename OutputIterator
->
-inline OutputIterator intersection(Geometry1 const& geometry1,
-            Geometry2 const& geometry2,
-            OutputIterator out)
-{
-
-    return boost::mpl::if_c
-        <
-            reverse_dispatch<Geometry1, Geometry2>::type::value,
-            dispatch::intersection_reversed
-            <
-                typename tag<Geometry1>::type,
-                typename tag<Geometry2>::type,
-                typename tag<GeometryOut>::type,
-                Geometry1,
-                Geometry2,
-                OutputIterator, GeometryOut
-            >,
-            dispatch::intersection
-            <
-                typename tag<Geometry1>::type,
-                typename tag<Geometry2>::type,
-                typename tag<GeometryOut>::type,
-                Geometry1,
-                Geometry2,
-                OutputIterator, GeometryOut
-            >
-        >::type::apply(geometry1, geometry2, out);
-}
-
-} // ggl
-
-#endif //GGL_ALGORITHMS_INTERSECTION_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/intersection_linestring.hpp b/include/builtin-ggl/ggl/algorithms/intersection_linestring.hpp
deleted file mode 100644
index 1f48b88..0000000
--- a/include/builtin-ggl/ggl/algorithms/intersection_linestring.hpp
+++ /dev/null
@@ -1,236 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_INTERSECTION_LINESTRING_HPP
-#define GGL_ALGORITHMS_INTERSECTION_LINESTRING_HPP
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/append.hpp>
-#include <ggl/algorithms/clear.hpp>
-#include <ggl/util/copy.hpp>
-#include <ggl/util/select_coordinate_type.hpp>
-#include <ggl/geometries/segment.hpp>
-
-namespace ggl
-{
-
-namespace strategy { namespace intersection {
-
-/*!
-    \brief Strategy: line clipping algorithm after Liang Barsky
-    \ingroup overlay
-    \details The Liang-Barsky line clipping algorithm clips a line with a clipping box.
-    It is slightly adapted in the sense that it returns which points are clipped
-    \tparam B input box type of clipping box
-    \tparam P input/output point-type of segments to be clipped
-    \note The algorithm is currently only implemented for 2D Cartesian points
-    \author Barend Gehrels, and the following recourses
-    - A tutorial: http://www.skytopia.com/project/articles/compsci/clipping.html
-    - a German applet (link broken): http://ls7-www.cs.uni-dortmund.de/students/projectgroups/acit/lineclip.shtml
-*/
-template<typename B, typename P>
-class liang_barsky
-{
-private:
-    typedef ggl::segment<P> segment_type;
-
-    inline bool check_edge(double const& p, double const& q, double& t1, double& t2) const
-    {
-        bool visible = true;
-
-        if(p < 0)
-        {
-            // TODO: Move r definition one scope level up to reuse --mloskot
-            double const r = q / p;
-            if (r > t2)
-                visible = false;
-            else if (r > t1)
-                t1 = r;
-        }
-        else if(p > 0)
-        {
-            double const r = q / p;
-            if (r < t1)
-                visible = false;
-            else if (r < t2)
-                t2 = r;
-        }
-        else
-        {
-            if (q < 0)
-                visible = false;
-        }
-
-        return visible;
-    }
-
-public:
-
-    bool clip_segment(B const& b, segment_type& s, bool& sp1_clipped, bool& sp2_clipped) const
-    {
-        typedef typename select_coordinate_type<B, P>::type coordinate_type;
-
-        double t1 = 0;
-        double t2 = 1;
-
-        coordinate_type const dx = get<1, 0>(s) - get<0, 0>(s);
-        coordinate_type const dy = get<1, 1>(s) - get<0, 1>(s);
-
-        coordinate_type const p1 = -dx;
-        coordinate_type const p2 = dx;
-        coordinate_type const p3 = -dy;
-        coordinate_type const p4 = dy;
-
-        coordinate_type const q1 = get<0, 0>(s) - get<min_corner, 0>(b);
-        coordinate_type const q2 = get<max_corner, 0>(b) - get<0, 0>(s);
-        coordinate_type const q3 = get<0, 1>(s) - get<min_corner, 1>(b);
-        coordinate_type const q4 = get<max_corner, 1>(b) - get<0, 1>(s);
-
-        if (check_edge(p1, q1, t1, t2)      // left
-            && check_edge(p2, q2, t1, t2)   // right
-            && check_edge(p3, q3, t1, t2)   // bottom
-            && check_edge(p4, q4, t1, t2))   // top
-        {
-            sp1_clipped = t1 > 0;
-            sp2_clipped = t2 < 1;
-
-            // TODO: maybe round coordinates in case of integer? define some round_traits<> or so?
-            // Take boost-round of Fernando
-            if (sp2_clipped)
-            {
-                set<1, 0>(s, get<0, 0>(s) + t2 * dx);
-                set<1, 1>(s, get<0, 1>(s) + t2 * dy);
-            }
-
-            if(sp1_clipped)
-            {
-                set<0, 0>(s, get<0, 0>(s) + t1 * dx);
-                set<0, 1>(s, get<0, 1>(s) + t1 * dy);
-            }
-
-            return true;
-        }
-
-        return false;
-    }
-
-    template<typename L, typename OutputIterator>
-    inline void add(L& line_out, OutputIterator out) const
-    {
-        if (!boost::empty(line_out))
-        {
-            *out = line_out;
-            ++out;
-            ggl::clear(line_out);
-        }
-    }
-};
-}} // namespace strategy::intersection
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersection {
-
-/*!
-    \brief Clips a linestring with a box
-    \details A linestring is intersected (clipped) by the specified box
-    and the resulting linestring, or pieces of linestrings, are sent to the specified output operator.
-    \tparam OutputLinestring type of the output linestrings
-    \tparam OutputIterator an output iterator which outputs linestrings
-    \tparam Linestring linestring-type, for example a vector of points, matching the output-iterator type,
-         the points should also match the input-iterator type
-    \tparam Box box type
-    \tparam Strategy strategy, a clipping strategy which should implement the methods "clip_segment" and "add"
-*/
-template
-<
-    typename OutputLinestring,
-    typename OutputIterator,
-    typename Linestring,
-    typename Box,
-    typename Strategy
->
-OutputIterator clip_linestring_with_box(Box const& b, Linestring const& linestring,
-            OutputIterator out, Strategy const& strategy)
-{
-    if (boost::begin(linestring) == boost::end(linestring))
-    {
-        return out;
-    }
-
-    typedef typename point_type<OutputLinestring>::type point_type;
-
-    OutputLinestring line_out;
-
-    typedef typename boost::range_const_iterator<Linestring>::type iterator_type;
-    iterator_type vertex = boost::begin(linestring);
-    for(iterator_type previous = vertex++;
-            vertex != boost::end(linestring);
-            previous = vertex++)
-    {
-        point_type p1, p2;
-        copy_coordinates(*previous, p1);
-        copy_coordinates(*vertex, p2);
-
-        // Clip the segment. Five situations:
-        // 1. Segment is invisible, finish line if any (shouldn't occur)
-        // 2. Segment is completely visible. Add (p1)-p2 to line
-        // 3. Point 1 is invisible (clipped), point 2 is visible. Start new line from p1-p2...
-        // 4. Point 1 is visible, point 2 is invisible (clipped). End the line with ...p2
-        // 5. Point 1 and point 2 are both invisible (clipped). Start/finish an independant line p1-p2
-        //
-        // This results in:
-        // a. if p1 is clipped, start new line
-        // b. if segment is partly or completely visible, add the segment
-        // c. if p2 is clipped, end the line
-
-        bool c1 = false;
-        bool c2 = false;
-        segment<point_type> s(p1, p2);
-
-        if (!strategy.clip_segment(b, s, c1, c2))
-        {
-            strategy.add(line_out, out);
-        }
-        else
-        {
-            // a. If necessary, finish the line and add a start a new one
-            if (c1)
-            {
-                strategy.add(line_out, out);
-            }
-
-            // b. Add p1 only if it is the first point, then add p2
-            if (boost::empty(line_out))
-            {
-                ggl::append(line_out, p1);
-            }
-            ggl::append(line_out, p2);
-
-            // c. If c2 is clipped, finish the line
-            if (c2)
-            {
-                strategy.add(line_out, out);
-            }
-        }
-
-    }
-
-    // Add last part
-    strategy.add(line_out, out);
-    return out;
-}
-
-}} // namespace detail::intersection
-#endif // DOXYGEN_NO_DETAIL
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_INTERSECTION_LINESTRING_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/intersects.hpp b/include/builtin-ggl/ggl/algorithms/intersects.hpp
deleted file mode 100644
index f3d3c85..0000000
--- a/include/builtin-ggl/ggl/algorithms/intersects.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_INTERSECTS_HPP
-#define GGL_ALGORITHMS_INTERSECTS_HPP
-
-#include <ggl/algorithms/intersection_linestring.hpp>
-
-#include <ggl/algorithms/overlay/get_intersection_points.hpp>
-#include <ggl/algorithms/overlay/self_intersection_points.hpp>
-#include <ggl/algorithms/overlay/adapt_turns.hpp>
-#include <ggl/algorithms/overlay/enrich_intersection_points.hpp>
-#include <ggl/algorithms/overlay/traverse.hpp>
-
-#include <ggl/algorithms/assign.hpp>
-#include <ggl/algorithms/convert.hpp>
-#include <ggl/algorithms/within.hpp>
-
-
-
-namespace ggl
-{
-
-/*!
-    \brief Determine if there is at least one intersection
-        (crossing or self-tangency)
-    \note This function can be called for one geometry (self-intersection) and
-        also for two geometries (intersection)
-    \ingroup overlay
-    \tparam Geometry geometry type
-    \param geometry geometry
-    \return TRUE if there are intersections, else FALSE
- */
-template <typename Geometry>
-inline bool intersects(Geometry const& geometry)
-{
-    typedef typename boost::remove_const<Geometry>::type ncg_type;
-
-    typedef std::vector<ggl::detail::intersection::intersection_point
-        <typename ggl::point_type<Geometry>::type> > ip_vector;
-
-    ip_vector ips;
-
-    dispatch::self_intersection_points
-            <
-                typename tag<ncg_type>::type,
-                is_multi<ncg_type>::type::value,
-                ncg_type,
-                ip_vector
-            >::apply(geometry, true, ips);
-    return ips.size() > 0;
-}
-
-} // ggl
-
-#endif //GGL_ALGORITHMS_INTERSECTS_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/labelinfo.hpp b/include/builtin-ggl/ggl/algorithms/labelinfo.hpp
deleted file mode 100644
index ec06375..0000000
--- a/include/builtin-ggl/ggl/algorithms/labelinfo.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_LABELINFO_HPP
-#define GGL_ALGORITHMS_LABELINFO_HPP
-
-// Algorithms to generate appropriate labelpoint(s) for all geometries
-
-#include <boost/concept/requires.hpp>
-
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/algorithms/centroid.hpp>
-
-namespace ggl
-{
-
-// For a polygon the broadest line is probably the best, so two points (left/right)
-// For a line either the centerpoint, of the longest line, or the most horizontal line,
-//   or more than two points to smooth the text around some points. So one/two or more points.
-// For a point just return the point.
-
-// The algorithms output to an output iterator
-// They have a label_option to influence behaviour. Not yet implemented.
-// Is there a better approach? Class?
-
-enum label_option
-{
-    label_default,
-    // line
-    label_longest,
-    label_horizontal,
-    // polygon
-    label_centroid,
-    label_broadest
-};
-
-template<typename P, typename M>
-inline
-BOOST_CONCEPT_REQUIRES(((Point<P>))
-(void)) label_info_point(const P& point, label_option option, M& mp)
-{
-    mp.resize(1);
-    get<0>(mp.front()) = get<0>(point);
-    get<1>(mp.front()) = get<1>(point);
-}
-
-template<typename Y, typename M>
-inline void label_info_polygon(const Y& poly, label_option option, M& mp)
-{
-    mp.resize(0);
-    mp.push_back(centroid_polygon<typename boost::range_value<M>::type>(poly));
-}
-
-template<typename B, typename M>
-inline void label_info_box(const B& box, label_option option, M& mp)
-{
-    mp.resize(0);
-    mp.push_back(centroid_box(box));
-}
-
-//-------------------------------------------------------------------------------------------------------
-// General "label_info" versions
-//-------------------------------------------------------------------------------------------------------
-template<typename P, typename M>
-inline
-BOOST_CONCEPT_REQUIRES(((ConstPoint<P>))
-(void)) label_info(const P& p, label_option option, M& mp)
-{
-    label_info_point(p, option, mp);
-}
-
-template<typename P, typename M>
-inline
-BOOST_CONCEPT_REQUIRES(((ConstPoint<P>))
-(void)) label_info(const box<P>& b, label_option option, M& mp)
-{
-    label_info_box(b, option, mp);
-}
-
-template
-<
-    typename P,
-    template<typename, typename> class PointList,
-    template<typename, typename> class RingList,
-    template<typename> class PointAlloc,
-    template<typename> class RingAlloc,
-    typename M
->
-inline
-BOOST_CONCEPT_REQUIRES(((ConstPoint<P>))
-(void)) label_info(const polygon<P, PointList, RingList, PointAlloc, RingAlloc>& poly, label_option option, M& mp)
-{
-    label_info_polygon(poly, option, mp);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_LABELINFO_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/length.hpp b/include/builtin-ggl/ggl/algorithms/length.hpp
deleted file mode 100644
index 91b2259..0000000
--- a/include/builtin-ggl/ggl/algorithms/length.hpp
+++ /dev/null
@@ -1,181 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_LENGTH_HPP
-#define GGL_ALGORITHMS_LENGTH_HPP
-
-#include <iterator>
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits.hpp>
-
-
-#include <ggl/algorithms/detail/calculate_null.hpp>
-#include <ggl/core/cs.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/strategies/strategies.hpp>
-
-/*!
-\defgroup length length calculation
-The length algorithm is implemented for the linestring and the multi_linestring geometry and results
-in the length of the linestring. If the points of a linestring have coordinates expressed in kilometers,
-the length of the line is expressed in kilometers as well.
-\par Example:
-Example showing length calculation
-\dontinclude doxygen_examples.cpp
-\skip example_length_linestring_iterators1
-\line {
-\until }
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace length {
-
-
-template<typename Segment, typename Strategy>
-struct segment_length
-{
-    static inline double apply(Segment const& segment, Strategy const& strategy)
-    {
-        // BSG 10 APR 2009
-        // TODO: the segment concept has to be such that it is easy to return a point from it.
-        // Now it only accesses per coordinate
-        return strategy(segment.first, segment.second);
-    }
-};
-
-/*!
-\brief Internal, calculates length of a linestring using iterator pairs and specified strategy
-\note for_each could be used here, now that point_type is changed by boost range iterator
-*/
-template<typename Range, typename Strategy>
-struct range_length
-{
-    static inline double apply(Range const& range, Strategy const& strategy)
-    {
-        typedef typename ggl::coordinate_type<Range>::type coordinate_type;
-
-        // Because result is square-rooted, for integer, the cast should
-        // go to double and NOT to T
-        typedef typename
-            boost::mpl::if_c
-            <
-                boost::is_integral<coordinate_type>::type::value,
-                double,
-                coordinate_type
-            >::type calculation_type;
-
-        calculation_type sum = 0.0;
-
-        typedef typename boost::range_const_iterator<Range>::type iterator_type;
-        iterator_type it = boost::begin(range);
-        if (it != boost::end(range))
-        {
-            iterator_type previous = it++;
-            while(it != boost::end(range))
-            {
-                // Add point-point distance using the return type belonging to strategy
-                sum += strategy(*previous, *it);
-                previous = it++;
-            }
-        }
-
-        return sum;
-    }
-};
-
-}} // namespace detail::length
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Tag, typename G, typename S>
-struct length : detail::calculate_null<double, G, S>
-{};
-
-
-template <typename G, typename S>
-struct length<linestring_tag, G, S>
-    : detail::length::range_length<G, S>
-{};
-
-
-// RING: length is currently 0.0 but it might be argued that it is the "perimeter"
-template <typename G, typename S>
-struct length<segment_tag, G, S> : detail::length::segment_length<G, S>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-/*!
-    \brief Calculate length of a geometry
-    \ingroup length
-    \details The function length returns the length of a geometry, using the default distance-calculation-strategy
-    \param geometry the geometry, being a ggl::linestring, vector, iterator pair, or any other boost compatible range
-    \return the length
-    Example showing length calculation on a vector
-    \dontinclude doxygen_examples.cpp
-    \skip example_length_linestring_iterators2
-    \line {
-    \until }
- */
-template<typename G>
-inline double length(const G& geometry)
-{
-    typedef typename point_type<G>::type point_type;
-    typedef typename cs_tag<point_type>::type cs_tag;
-    typedef typename strategy_distance
-        <
-            cs_tag,
-            cs_tag,
-            point_type,
-            point_type
-        >::type strategy_type;
-
-    return dispatch::length
-        <
-            typename tag<G>::type,
-            G,
-            strategy_type
-        >::apply(geometry, strategy_type());
-}
-
-/*!
-    \brief Calculate length of a geometry
-    \ingroup length
-    \details The function length returns the length of a geometry, using specified strategy
-    \param geometry the geometry, being a ggl::linestring, vector, iterator pair, or any other boost compatible range
-    \param strategy strategy to be used for distance calculations.
-    \return the length
-    \par Example:
-    Example showing length calculation using iterators and the Vincenty strategy
-    \dontinclude doxygen_examples.cpp
-    \skip example_length_linestring_iterators3
-    \line {
-    \until }
- */
-template<typename G, typename S>
-inline double length(G const& geometry, S const& strategy)
-{
-    return dispatch::length<typename tag<G>::type, G, S>::apply(geometry, strategy);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_LENGTH_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/make.hpp b/include/builtin-ggl/ggl/algorithms/make.hpp
deleted file mode 100644
index a47129c..0000000
--- a/include/builtin-ggl/ggl/algorithms/make.hpp
+++ /dev/null
@@ -1,123 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_MAKE_HPP
-#define GGL_ALGORITHMS_MAKE_HPP
-
-#include <ggl/algorithms/assign.hpp>
-
-namespace ggl
-{
-
-/*!
-    \brief Make a geometry
-    \ingroup access
-    \details the Generic Geometry Library uses concepts for all its geometries. Therefore it does not rely
-    on constructors. The "make" functions are object generators creating geometries. There are overloads
-    with two, three, four or six values, which are implemented depending on the geometry specified.
-    \tparam G the geometry type
-    \tparam T the coordinate type
-    \return the geometry
- */
-template <typename G, typename T>
-inline G make(T const& c1, T const& c2)
-{
-    G geometry;
-    dispatch::assign
-        <
-            typename tag<G>::type,
-            G,
-            ggl::dimension<G>::type::value
-        >::apply(geometry, c1, c2);
-    return geometry;
-}
-
-/*!
-    \brief Make a geometry
-    \ingroup access
-    \return a 3D point, a circle
- */
-template <typename G, typename T>
-inline G make(T const& c1, T const& c2, T const& c3)
-{
-    G geometry;
-    dispatch::assign
-        <
-            typename tag<G>::type,
-            G,
-            ggl::dimension<G>::type::value
-        >::apply(geometry, c1, c2, c3);
-    return geometry;
-}
-
-template <typename G, typename T>
-inline G make(T const& c1, T const& c2, T const& c3, T const& c4)
-{
-    G geometry;
-    dispatch::assign
-        <
-            typename tag<G>::type,
-            G,
-            ggl::dimension<G>::type::value
-        >::apply(geometry, c1, c2, c3, c4);
-    return geometry;
-}
-
-
-
-template <typename G, typename R>
-inline G make(R const& range)
-{
-    G geometry;
-    append(geometry, range);
-    return geometry;
-}
-
-
-/*!
-    \brief Create a box with inverse infinite coordinates
-    \ingroup access
-    \details The make_inverse function initialize a 2D or 3D box with large coordinates, the
-    min corner is very large, the max corner is very small
-    \tparam G the geometry type
-    \return the box
- */
-template <typename G>
-inline G make_inverse()
-{
-    G geometry;
-    dispatch::assign_inverse
-        <
-            typename tag<G>::type,
-            G
-        >::apply(geometry);
-    return geometry;
-}
-
-/*!
-    \brief Create a geometry with "zero" coordinates
-    \ingroup access
-    \details The make_zero function initializes a 2D or 3D point or box with coordinates of zero
-    \tparam G the geometry type
-    \return the geometry
- */
-template <typename G>
-inline G make_zero()
-{
-    G geometry;
-    dispatch::assign_zero
-        <
-            typename tag<G>::type,
-            G
-        >::apply(geometry);
-    return geometry;
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_MAKE_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/num_points.hpp b/include/builtin-ggl/ggl/algorithms/num_points.hpp
deleted file mode 100644
index 1565ab3..0000000
--- a/include/builtin-ggl/ggl/algorithms/num_points.hpp
+++ /dev/null
@@ -1,147 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_NUM_POINTS_HPP
-#define GGL_ALGORITHMS_NUM_POINTS_HPP
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-#include <ggl/core/is_linear.hpp>
-#include <ggl/core/interior_rings.hpp>
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace num_points {
-
-
-template <typename Range>
-struct range_count
-{
-    static inline std::size_t apply(Range const& range)
-    {
-        return boost::size(range);
-    }
-};
-
-template <typename Geometry, std::size_t D>
-struct other_count
-{
-    static inline std::size_t apply(Geometry const& geometry)
-    {
-        return D;
-    }
-};
-
-template <typename Polygon>
-struct polygon_count
-{
-    static inline std::size_t apply(Polygon const& poly)
-    {
-        std::size_t n = boost::size(exterior_ring(poly));
-        typedef typename boost::range_const_iterator
-            <
-                typename interior_type<Polygon>::type
-            >::type iterator;
-
-        for (iterator it = boost::begin(interior_rings(poly));
-             it != boost::end(interior_rings(poly));
-             ++it)
-        {
-            n += boost::size(*it);
-        }
-
-        return n;
-    }
-};
-
-}} // namespace detail::num_points
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename GeometryTag, bool Linear, typename Geometry>
-struct num_points
-{
-};
-
-template <typename GeometryTag, typename Geometry>
-struct num_points<GeometryTag, true, Geometry>
-        : detail::num_points::range_count<Geometry>
-{
-};
-
-template <typename Geometry>
-struct num_points<point_tag, false, Geometry>
-        : detail::num_points::other_count<Geometry, 1>
-{
-};
-
-template <typename Geometry>
-struct num_points<box_tag, false, Geometry>
-        : detail::num_points::other_count<Geometry, 4>
-{
-};
-
-template <typename Geometry>
-struct num_points<segment_tag, false, Geometry>
-        : detail::num_points::other_count<Geometry, 2>
-{
-};
-
-template <typename Geometry>
-struct num_points<nsphere_tag, false, Geometry>
-        : detail::num_points::other_count<Geometry, 1>
-{
-};
-
-template <typename Geometry>
-struct num_points<polygon_tag, false, Geometry>
-        : detail::num_points::polygon_count<Geometry>
-{
-};
-
-} // namespace dispatch
-#endif
-
-
-/*!
-    \brief get number of points
-    \ingroup access
-    \tparam Geometry geometry type
-    \param geometry the geometry to get number of points from
-    \return number of points
-    \note For linestrings/rings also boost::size or .size() could be used, however,
-        for polygons this is less obvious. So this function is provided. Besides that
-        it is described by OGC (numPoints)
-*/
-template <typename Geometry>
-inline std::size_t num_points(Geometry const& geometry)
-{
-    typedef typename boost::remove_const<Geometry>::type ncg_type;
-
-    return dispatch::num_points
-        <
-            typename tag<Geometry>::type,
-            is_linear<ncg_type>::value,
-            ncg_type
-        >::apply(geometry);
-}
-
-}
-
-
-#endif // GGL_ALGORITHMS_NUM_POINTS_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/overlaps.hpp b/include/builtin-ggl/ggl/algorithms/overlaps.hpp
deleted file mode 100644
index 6d9e658..0000000
--- a/include/builtin-ggl/ggl/algorithms/overlaps.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_OVERLAPS_HPP
-#define GGL_ALGORITHMS_OVERLAPS_HPP
-
-#include <ggl/core/access.hpp>
-
-
-namespace ggl
-{
-
-/*!
-    \brief Determines overlap between two geometries
-    \details parameters are now boxes but in the future will be geometries
-    \ingroup boolean_relations
-    \return true if there is overlap
-
-
-    \par Source descriptions:
-    - Egenhofer: Two objects overlap if they have common interior faces and the bounding faces have common parts
-    with the opposite interior faces.
-
-    \note Implemented in scratch the Generic Geometry library. Will be reworked internally to support more geometries
-    but function call will stay as it is now.
-    \see http://docs.codehaus.org/display/GEOTDOC/02+Geometry+Relationships#02GeometryRelationships-Overlaps
-    where is stated that "inside" is not an "overlap", this is probably true and should then be implemented as such.
-
- */
-template <typename B>
-inline bool overlaps(const B& b1, const B& b2)
-{
-    return !(
-            get<max_corner, 0>(b1) <= get<min_corner, 0>(b2) ||
-            get<min_corner, 0>(b1) >= get<max_corner, 0>(b2) ||
-            get<max_corner, 1>(b1) <= get<min_corner, 1>(b2) ||
-            get<min_corner, 1>(b1) >= get<max_corner, 1>(b2)
-            );
-
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_OVERLAPS_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/overlay/adapt_turns.hpp b/include/builtin-ggl/ggl/algorithms/overlay/adapt_turns.hpp
deleted file mode 100644
index 4b34b30..0000000
--- a/include/builtin-ggl/ggl/algorithms/overlay/adapt_turns.hpp
+++ /dev/null
@@ -1,556 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ADAPT_TURNS_HPP
-#define GGL_ADAPT_TURNS_HPP
-
-#include <algorithm>
-
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-
-#include <ggl/core/coordinate_type.hpp>
-
-#include <ggl/algorithms/equals.hpp>
-
-
-namespace ggl
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersection {
-
-
-
-// TEMP: another COPY of side
-// TODO: solve this inside SIDE!!!
-template <typename P1, typename P2, typename P>
-inline int the_side(P1 const& p1, P2 const& p2, P const& p)
-{
-    typedef typename select_coordinate_type<P, P1>::type T;
-
-    T dx = get<0>(p2) - get<0>(p1);
-    T dy = get<1>(p2) - get<1>(p1);
-    T dpx = get<0>(p) - get<0>(p1);
-    T dpy = get<1>(p) - get<1>(p1);
-    T product =  dx * dpy - dy * dpx;
-    return product > 0 ? 1 : product < 0 ? -1 : 0;
-}
-
-template <typename T>
-inline void join_adapt(T& info, int direction)
-{
-    info.first->direction = direction;
-    info.second->direction = direction;
-}
-
-
-
-template <typename T>
-inline void both_same(T const& pi, T & pk, T const& qu, T& qw, int dir_p, int dir_q, int direction)
-{
-    // Comments are for "both Left"
-    if (dir_q == direction) // If (Qw left-of Qu)
-    {
-        if (dir_p == -direction) // if (Pk right-of Pi)
-        {
-            // make Pk Right, Qw Left
-            join_adapt(pk, -direction);
-            join_adapt(qw, direction);
-        }
-        else if (pk.first->direction == -direction) // else if (Pk right-of Qu)
-        {
-            // make both Right
-            join_adapt(pk, -direction);
-            join_adapt(qw, -direction);
-        }
-    }
-    else
-    {
-        if (dir_p == -direction // if (Pk right-of Pi
-            || pk.first->direction == direction) // || Pk left-of Qu)
-        {
-            //  make both Left
-            join_adapt(pk, direction);
-            join_adapt(qw, direction);
-        }
-    }
-}
-
-template <typename T>
-inline void crossing(T const& pi, T & pk, T const& qu, T& qw, int dir_p, int dir_q, int direction)
-{
-    if (dir_p == direction) // If (Pk left-of Pi)
-    {
-        if (pk.first->direction == -direction) // if (Pk right-of Qu)
-        {
-            // make both Right
-            join_adapt(pk, -direction);
-            join_adapt(qw, -direction);
-        }
-        else
-        {
-            // make Pk Left, Qw Right
-            join_adapt(pk, direction);
-            join_adapt(qw, -direction);
-        }
-    }
-}
-
-
-
-template <typename T>
-inline void collinear(T const& pi, T & pk, T const& qu, T& qw, int dir_p, int dir_q, int direction)
-{
-    if (dir_p == direction // If (Pk left-of Pi
-        && dir_q == direction // && Qw left-of Qu
-        && pk.first->direction == -direction) // && Pk right-of Qu
-    {
-        // make both Right
-        join_adapt(pk, -direction);
-        join_adapt(qw, -direction);
-    }
-    else if (dir_p == -direction // If (Pk right-of Pi
-        && dir_q == -direction) // && Qw right-of Qu
-    {
-        // make both Left
-        join_adapt(pk, direction);
-        join_adapt(qw, direction);
-    }
-
-}
-
-template <typename T, typename P>
-inline void assign_pq(T const& info, P& p, P& q)
-{
-    if (info.seg_id.source_index == 0)
-    {
-        if (info.arrival == 1)
-        {
-            p.first = info.other_point;
-        }
-        else if (info.arrival == -1)
-        {
-            p.second = info.other_point;
-        }
-    }
-    else
-    {
-        if (info.arrival == 1)
-        {
-            q.first = info.other_point;
-        }
-        else if (info.arrival == -1)
-        {
-            q.second = info.other_point;
-        }
-    }
-}
-
-template <typename Info, typename Point>
-inline void touch_in_the_middle(Info& info, Point const& point)
-{
-    typedef typename boost::range_iterator<Info>::type iterator;
-
-    // Determine which is Q, and assign points
-    iterator qu, qw, p;
-    int count = 0;
-
-    // Find out which one is arriving/departing from the middle
-    for (iterator it = boost::begin(info);
-        it != boost::end(info);
-        ++it)
-    {
-        // One arrives AND departs in the middle of the other.
-        if(it->how == 'm' && it->arrival == 1)
-        {
-            qu = it;
-            count |= 1;
-        }
-        else if(it->how == 's' && it->arrival == -1)
-        {
-            qw = it;
-            count |= 2;
-        }
-        else if (it->how == 's') //  or m, does not really matter
-        {
-            p = it;
-            count |= 4;
-        }
-
-    }
-    // Adapt it
-    if (count == 7
-        && qu->direction == qw->direction
-        && qu->seg_id.source_index == qw->seg_id.source_index)
-    {
-        int dir_q = the_side(qu->other_point, point, qw->other_point);
-
-#ifdef GGL_DEBUG_INTERSECTION
-        std::cout << "Both "
-            << (qu->direction == 1 ? "Left" : "Right")
-            << ", Turn " << (dir_q == 1 ? "Left" : dir_q == -1 ? "Right" : "?")
-            << std::endl;
-#endif
-
-        // Let P also be starting
-        p->arrival = -1;
-
-        // This is also symmetric. See slides:
-        // Qu left-of P && Qw left-of P
-        if (qu->direction == 1 && dir_q == -1)
-        {
-            // make both Left
-            p->direction = 1;
-            qw->direction = 1;
-        }
-        // else, symmetric version
-        else if (qu->direction == -1 && dir_q == 1)
-        {
-            p->direction = -1;
-            qw->direction = -1;
-        }
-    }
-}
-
-
-
-
-template <typename Info>
-inline void arrive_in_the_middle(Info& info)
-{
-    typedef typename boost::range_iterator<Info>::type iterator;
-
-    // Find out which one is NOT arriving in the middle,
-    // and the direction of the one arriving in the middle
-    int departing = -1;
-    int direction = 0;
-    for (iterator it = boost::begin(info);
-        it != boost::end(info);
-        ++it)
-    {
-        if(it->how == 'm')
-        {
-            switch(it->arrival)
-            {
-                case 1 : direction = it->direction; break;
-                default : departing = it->seg_id.source_index;
-            }
-        }
-    }
-
-    // Make this the departing one, following collinear in opposite segment,
-    // same direction as established above
-    for (iterator it = boost::begin(info);
-        it != boost::end(info);
-        ++it)
-    {
-        if (it->how == 'c' && it->seg_id.source_index == departing)
-        {
-            it->arrival = -1;
-            it->direction = direction;
-        }
-    }
-}
-
-template <typename Info>
-inline void start_in_the_middle(Info& info, bool opposite)
-{
-    typedef typename boost::range_iterator<Info>::type iterator;
-
-    for (iterator it = boost::begin(info);
-        it != boost::end(info);
-        ++it)
-    {
-        if(it->how == 's')
-        {
-            if (! opposite)
-            {
-                // Not opposite, all "start" traversals can also be made "departing"
-                it->arrival = -1;
-            }
-            else if (opposite && it->arrival == 0)
-            {
-                // Prevent the collinear the "start" from "departing",
-                // if it is in opposite direction
-                it->arrival = 1;
-                it->direction = 0;
-                it->flagged = true; // might be deleted
-            }
-        }
-    }
-}
-
-
-template <typename V>
-inline void adapt_turns(V& intersection_points)
-{
-    typedef typename boost::range_iterator<V>::type iterator_type;
-    typedef typename boost::range_value<V>::type ip_type;
-    typedef typename ip_type::traversal_type info_type;
-
-    typedef typename boost::range_value<V>::type::traversal_vector vector_type;
-    typedef typename boost::range_iterator<vector_type>::type tvit_type;
-
-    for (iterator_type it = boost::begin(intersection_points);
-         it != boost::end(intersection_points);
-         ++it)
-    {
-        if (! it->trivial)
-        {
-            if (boost::size(it->info) == 4)
-            {
-                /*
-                    can be ARRIVE/START from the middle (#11)
-                        src 0 seg 1 (// 1.0) how m[A R] p // qu
-                        src 0 seg 1 (// 1.1) how s[D L] p // qw
-                        src 1 seg 0 (// 0.1) how m[A R] qu / p
-                        src 1 seg 1 (// 0.1) how s[D R] qw / p
-
-                    or can be ARRIVE at COLLINEARITY (#8, #13)
-                        src 0 seg 1 (// 1.1) how m[A L] p // qu
-                        src 0 seg 1 (// 1.2) how c[- -] p // qw
-                        src 1 seg 1 (// 0.1) how m[A L] qu // p
-                        src 1 seg 2 (// 0.1) how c[- -] qw // p
-
-                    or can be START from COLLINEARITY (#8, #13)
-                        src 0 seg 1 (// 1.2) how c[- -] p // qu
-                        src 0 seg 1 (// 1.0) how s[D R] p // qw
-                        src 1 seg 2 (// 0.1) how c[- -] qu // p
-                        src 1 seg 0 (// 0.1) how s[D L] qw // p
-                */
-
-                 // First detect the case and if it is opposite
-                int count_m = 0, count_s = 0, count_c = 0;
-
-                bool opposite = false;
-                for (tvit_type tvit = boost::begin(it->info);
-                    tvit != boost::end(it->info);
-                    ++tvit)
-                {
-                    switch(tvit->how)
-                    {
-                        case 'm' : count_m++; break;
-                        case 's' : count_s++; break;
-                        case 'c' : count_c++; break;
-                    }
-                    if (tvit->opposite)
-                    {
-                        opposite = true;
-                    }
-                }
-
-
-                if (count_m == 2 && count_s == 2)
-                {
-#ifdef GGL_DEBUG_INTERSECTION
-                    std::cout << "Touching the middle " << std::endl;
-#endif
-
-                    touch_in_the_middle(it->info, it->point);
-                }
-                else if (count_m == 2 && count_c == 2 && opposite)
-                {
-#ifdef GGL_DEBUG_INTERSECTION
-                    std::cout << "Arriving the middle/collinearity, opposite" << std::endl;
-#endif
-
-                    arrive_in_the_middle(it->info);
-                }
-                else if (count_s == 2 && count_c == 2)
-                {
-#ifdef GGL_DEBUG_INTERSECTION
-                    std::cout << "Starting from middle/collinearity"
-                        << (opposite ? " , opposite"  : "")
-                        << std::endl;
-#endif
-
-                    start_in_the_middle(it->info, opposite);
-                }
-            }
-
-            if (boost::size(it->info) == 8)
-            {
-                /*
-                  src 0 seg 1 (// 1.0) how t[A R]   pi // qu   pi.first
-                  src 0 seg 1 (// 1.1) how a[A R]   pi // qw   pi.second
-                  src 0 seg 2 (// 1.0) how a[D R]   pk // qu   pk.first
-                  src 0 seg 2 (// 1.1) how f[D L]   pk // qw   pk.second
-
-                  src 1 seg 0 (// 0.1) how t[A L]   qu // pi
-                  src 1 seg 0 (// 0.2) how a[A R]   qu // pk
-                  src 1 seg 1 (// 0.1) how a[D R]   qw // pi
-                  src 1 seg 1 (// 0.2) how f[D R]   qw // pk
-                */
-
-                std::pair<tvit_type, tvit_type> pi, pk, qu, qw;
-                std::pair<typename info_type::point_type, typename info_type::point_type> p, q;
-
-
-                // Find out which is which
-                for (tvit_type tvit = boost::begin(it->info);
-                    tvit != boost::end(it->info);
-                    ++tvit)
-                {
-                    assign_pq(*tvit, p, q);
-                    if (tvit->seg_id.source_index == 0)
-                    {
-                        if (tvit->arrival == 1)
-                        {
-                            if(tvit->how != 'a')
-                            {
-                                pi.first = tvit;
-                            }
-                            else
-                            {
-                                pi.second = tvit;
-                            }
-
-                        }
-                        else if (tvit->arrival == -1)
-                        {
-                            if (tvit->how == 'a')
-                            {
-                                pk.first = tvit;
-                            }
-                            else
-                            {
-                                pk.second = tvit;
-                            }
-                        }
-                    }
-                    else
-                    {
-                        if (tvit->arrival == 1)
-                        {
-                            if(tvit->how != 'a')
-                            {
-                                qu.first = tvit;
-                            }
-                            else
-                            {
-                                qu.second = tvit;
-                            }
-                        }
-                        else if (tvit->arrival == -1)
-                        {
-                            if (tvit->how == 'a')
-                            {
-                                qw.first = tvit;
-                            }
-                            else
-                            {
-                                qw.second = tvit;
-                            }
-                        }
-                    }
-                }
-
-                int dir_p = the_side(p.first, it->point, p.second);
-                int dir_q = the_side(q.first, it->point, q.second);
-
-#ifdef GGL_DEBUG_INTERSECTION
-                std::cout << "Pi//Qu : " << *pi.first << std::endl;
-                std::cout << "Pi//Qw : " << *pi.second << std::endl;
-                std::cout << "Pk//Qu : " << *pk.first << std::endl;
-                std::cout << "Pk//Qw : " << *pk.second << std::endl;
-                std::cout << "Qu//Pi : " << *qu.first << std::endl;
-                std::cout << "Qu//Pk : " << *qu.second << std::endl;
-                std::cout << "Qw//Pi : " << *qw.first << std::endl;
-                std::cout << "Qw//Pk : " << *qw.second << std::endl;
-                if (dir_p == 1) std::cout << "P turns left" << std::endl;
-                if (dir_p == -1) std::cout << "P turns right" << std::endl;
-                if (dir_q == 1) std::cout << "Q turns left" << std::endl;
-                if (dir_q == -1) std::cout << "Q turns right" << std::endl;
-#endif
-
-                if (qu.first->direction == qw.first->direction)
-                {
-                    // Both Right or Both Left
-#ifdef GGL_DEBUG_INTERSECTION
-                    std::cout << "Both "
-                        << (qu.first->direction == 1 ? "Left" : "Right")
-                        << std::endl;
-#endif
-
-                    both_same(pi, pk, qu, qw, dir_p, dir_q, qu.first->direction);
-                }
-                else if (qu.first->direction == -qw.first->direction)
-                {
-                    // From Left to Right, or from Right to Left
-#ifdef GGL_DEBUG_INTERSECTION
-                    std::cout << "Left to/from Right" << std::endl;
-#endif
-                    crossing(pi, pk, qu, qw, dir_p, dir_q, qu.first->direction);
-                }
-                else if (qw.first->direction == 1 || qu.first->direction == 1)
-                {
-                    // Collinear left
-#ifdef GGL_DEBUG_INTERSECTION
-                    std::cout << "Collinear left" << std::endl;
-#endif
-                    collinear(pi, pk, qu, qw, dir_p, dir_q, 1);
-                }
-                else if (qw.first->direction == -1 || qu.first->direction == -1)
-                {
-                    // Collinear right
-#ifdef GGL_DEBUG_INTERSECTION
-                    std::cout << "Collinear right" << std::endl;
-#endif
-                    collinear(pi, pk, qu, qw, dir_p, dir_q, -1);
-                }
-
-
-                for (tvit_type tvit = boost::begin(it->info);
-                    tvit != boost::end(it->info);
-                    ++tvit)
-                {
-                    if (tvit->how == 'a')
-                    {
-                        tvit->direction = 0;
-                    }
-                }
-
-
-             }
-        }
-    }
-
-#ifdef GGL_DEBUG_INTERSECTION
-    std::cout << "Adapted turns: " << std::endl;
-    report_ip(intersection_points);
-#endif
-}
-
-
-
-}} // namespace detail::intersection
-#endif //DOXYGEN_NO_DETAIL
-
-
-
-template <typename V>
-inline void adapt_turns(V& intersection_points)
-{
-    // If there are merges, there might be merged IP's which have right turns
-    detail::intersection::adapt_turns(intersection_points);
-
-#ifdef GGL_DEBUG_INTERSECTION
-    std::cout << "Merged (2): " << std::endl;
-    report_ip(intersection_points);
-#endif
-
-}
-
-
-} // namespace ggl
-
-#endif // GGL_ADAPT_TURNS_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/overlay/copy_segments.hpp b/include/builtin-ggl/ggl/algorithms/overlay/copy_segments.hpp
deleted file mode 100644
index 6bbab2d..0000000
--- a/include/builtin-ggl/ggl/algorithms/overlay/copy_segments.hpp
+++ /dev/null
@@ -1,211 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_OVERLAY_COPY_SEGMENTS_HPP
-#define GGL_ALGORITHMS_OVERLAY_COPY_SEGMENTS_HPP
-
-
-#include <ggl/core/ring_type.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-
-#include <ggl/algorithms/overlay/intersection_point.hpp>
-
-#include <ggl/iterators/ever_circling_iterator.hpp>
-#include <ggl/iterators/point_const_iterator.hpp>
-
-
-namespace ggl
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace copy_segments {
-
-
-template <typename Ring, typename SegmentIdentifier, typename RangeOut>
-struct copy_segments_ring
-{
-    static inline void apply(Ring const& ring,
-            SegmentIdentifier const& seg_id, int to_index,
-            RangeOut& current_output)
-    {
-
-        typedef typename ggl::point_const_iterator<Ring>::type iterator;
-        typedef ggl::ever_circling_iterator<iterator> ec_iterator;
-
-        // The problem: sometimes we want to from "3" to "2" -> end = "3" -> end == begin
-        // This is not convenient with iterators.
-
-        // So we use the ever-circling iterator and determine when to step out
-
-        int from_index = seg_id.segment_index + 1;
-
-        // Sanity check
-        BOOST_ASSERT(from_index < boost::size(ring));
-
-        ec_iterator it(boost::begin(ring), boost::end(ring),
-                    boost::begin(ring) + from_index);
-
-        // [2..4] -> 4 - 2 + 1 = 3 -> {2,3,4} -> OK
-        // [4..2],size=6 -> 6 - 4 + 2 + 1 = 5 -> {4,5,0,1,2} -> OK
-        // [1..1], travel the whole ring round
-        int count = from_index <= to_index
-            ? to_index - from_index + 1
-            : boost::size(ring) - from_index + to_index + 1;
-
-        for (int i = 0; i < count; ++i, ++it)
-        {
-            // TODO: use 'copy coordinates' to handle different point types
-#ifdef GGL_DEBUG_INTERSECTION
-            std::cout << "  add: (" 
-                << ggl::get<0>(*it) << ", " << ggl::get<1>(*it) << ")" 
-                << std::endl;
-#endif
-            current_output.push_back(*it);
-        }
-    }
-};
-
-
-template <typename Polygon, typename SegmentIdentifier, typename RangeOut>
-struct copy_segments_polygon
-{
-    static inline void apply(Polygon const& polygon,
-            SegmentIdentifier const& seg_id, int to_index,
-            RangeOut& current_output)
-    {
-        // Call ring-version with the right ring
-        copy_segments_ring
-            <
-                typename ggl::ring_type<Polygon>::type,
-                SegmentIdentifier,
-                RangeOut
-            >::apply
-                (
-                    seg_id.ring_index < 0
-                    ? ggl::exterior_ring(polygon)
-                    : ggl::interior_rings(polygon)[seg_id.ring_index],
-                    seg_id, to_index, 
-                    current_output
-                );
-    }
-};
-
-
-template <typename Box, typename SegmentIdentifier, typename RangeOut>
-struct copy_segments_box
-{
-    static inline void apply(Box const& box,
-            SegmentIdentifier const& seg_id, int to_index,
-            RangeOut& current_output)
-    {
-        // Convert again...
-        // TODO: avoid that...
-
-        typedef typename point_type<Box>::type point_type;
-
-        point_type ll, lr, ul, ur;
-        assign_box_corners(box, ll, lr, ul, ur);
-
-        std::vector<point_type> points;
-        points.push_back(ll);
-        points.push_back(ul);
-        points.push_back(ur);
-        points.push_back(lr);
-        points.push_back(ll);
-
-        copy_segments_ring
-            <
-                std::vector<point_type>,
-                SegmentIdentifier,
-                RangeOut
-            >
-            ::apply(points, seg_id, to_index, current_output);
-    }
-};
-
-
-
-
-}} // namespace detail::copy_segments
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-
-template
-<
-    typename Tag,
-    typename GeometryIn,
-    typename SegmentIdentifier,
-    typename RangeOut
->
-struct copy_segments
-{
-};
-
-
-template <typename Ring, typename SegmentIdentifier, typename RangeOut>
-struct copy_segments<ring_tag, Ring, SegmentIdentifier, RangeOut>
-    : detail::copy_segments::copy_segments_ring
-        <
-            Ring, SegmentIdentifier, RangeOut
-        >
-{};
-
-template <typename Polygon, typename SegmentIdentifier, typename RangeOut>
-struct copy_segments<polygon_tag, Polygon, SegmentIdentifier, RangeOut>
-    : detail::copy_segments::copy_segments_polygon
-        <
-            Polygon, SegmentIdentifier, RangeOut
-        >
-{};
-
-
-template <typename Box, typename SegmentIdentifier, typename RangeOut>
-struct copy_segments<box_tag, Box, SegmentIdentifier, RangeOut>
-    : detail::copy_segments::copy_segments_box
-        <
-            Box, SegmentIdentifier, RangeOut
-        >
-{};
-
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-
-
-/*!
-    \brief Traverses through intersection points / geometries
-    \ingroup overlay
- */
-template<typename Geometry, typename SegmentIdentifier, typename RangeOut>
-inline void copy_segments(Geometry const& geometry,
-            SegmentIdentifier const& seg_id, int to_index,
-            RangeOut& range_out)
-{
-    dispatch::copy_segments
-        <
-            typename tag<Geometry>::type,
-            Geometry,
-            SegmentIdentifier,
-            RangeOut
-        >::apply(geometry, seg_id, to_index, range_out);
-}
-
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_OVERLAY_COPY_SEGMENTS_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/overlay/enrich_intersection_points.hpp b/include/builtin-ggl/ggl/algorithms/overlay/enrich_intersection_points.hpp
deleted file mode 100644
index 832121d..0000000
--- a/include/builtin-ggl/ggl/algorithms/overlay/enrich_intersection_points.hpp
+++ /dev/null
@@ -1,501 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_ENRICH_INTERSECTION_POINTS_HPP
-#define GGL_ALGORITHMS_ENRICH_INTERSECTION_POINTS_HPP
-
-#include <cstddef>
-#include <algorithm>
-#include <map>
-#include <vector>
-#ifdef GGL_DEBUG_INTERSECTION
-#include <iostream>
-#endif
-
-#include <boost/concept_check.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersection {
-
-#ifdef GGL_DEBUG_INTERSECTION
-
-template <typename M>
-inline void report_map(M const& map)
-{
-    std::cout << "Map [source,segment(,ring,multi)] -> [count]:" << std::endl;
-    for (typename M::const_iterator it = map.begin(); it != map.end(); it++)
-    {
-        std::cout << "(" << it->first << ")"
-            << " -> " << "(" << it->second << ")" << std::endl;
-    }
-}
-
-
-template <typename V>
-inline void report_indexed(V const& index)
-{
-    typedef typename boost::range_const_iterator<V>::type iterator_type;
-
-    for (iterator_type it = boost::begin(index); it != boost::end(index); ++it)
-    {
-        std::cout << it->index << ": " << it->subject;
-    }
-}
-
-#endif // GGL_DEBUG_INTERSECTION
-
-
-template <typename T>
-struct indexed_source_segment
-{
-    std::size_t index;
-    T subject;
-
-    inline indexed_source_segment() {}
-
-    inline indexed_source_segment(std::size_t i, T const& s, segment_identifier const& seg_id)
-        : index(i)
-    {
-        s.clone_except_info(subject);
-
-        typedef typename T::traversal_vector vector_type;
-        for (typename boost::range_const_iterator<vector_type>::type it = s.info.begin();
-             it != s.info.end(); ++it)
-        {
-            // Copy info-record if belonging to source and to segment
-            if (it->seg_id == seg_id)
-            {
-                subject.info.push_back(*it);
-            }
-        }
-    }
-};
-
-
-template <typename T>
-struct indexed_source
-{
-    T subject;
-    std::size_t index;
-
-    inline indexed_source() {}
-
-    inline indexed_source(std::size_t i, T const& s,
-            int source_index, int multi_index, int ring_index)
-        : index(i)
-    {
-        s.clone_except_info(subject);
-
-        typedef typename T::traversal_vector vector_type;
-        for (typename boost::range_const_iterator<vector_type>::type it = s.info.begin();
-             it != s.info.end(); ++it)
-        {
-            // Copy info-record if belonging to source
-            if (it->seg_id.source_index == source_index
-                && it->seg_id.multi_index == multi_index
-                && it->seg_id.ring_index == ring_index)
-            {
-                subject.info.push_back(*it);
-            }
-        }
-    }
-};
-
-
-template <typename Indexed>
-struct sort_on_distance
-{
-    inline bool operator()(Indexed const& left, Indexed const& right) const
-    {
-        // Sanity check, there should be info-records because only those are copied
-        BOOST_ASSERT (left.subject.info.size() > 0 && right.subject.info.size() > 0);
-
-        return left.subject.info.front().distance < right.subject.info.front().distance;
-    }
-};
-
-// Sorts on segment + ring_index + multi_index
-template <typename Indexed>
-struct sort_on_segment_identifier
-{
-    inline bool operator()(Indexed const& left, Indexed const& right) const
-    {
-        // Sanity check
-        BOOST_ASSERT (left.subject.info.size() > 0 && right.subject.info.size() > 0);
-
-        segment_identifier const& sl = left.subject.info.front().seg_id;
-        segment_identifier const& sr = right.subject.info.front().seg_id;
-
-        return sl == sr
-            ? left.subject.info.front().distance < right.subject.info.front().distance
-            : sl < sr;
-    }
-};
-
-
-template <typename Info>
-struct on_source_segment_dir
-{
-    inline bool operator()(Info const& left, Info const& right) const
-    {
-        int ldir = left.direction;
-        int rdir = right.direction;
-        if (ldir == -1) ldir = 2;
-        if (rdir == -1) rdir = 2;
-
-
-        return left.seg_id.source_index == right.seg_id.source_index
-            ? (left.seg_id.segment_index == right.seg_id.segment_index
-                ? ldir < rdir
-                : left.seg_id.segment_index < right.seg_id.segment_index
-               )
-
-            : left.seg_id.source_index < right.seg_id.source_index;
-    }
-};
-
-
-
-
-
-// Assigns IP[index] . info[source/multi/ring/segment] . next_ip_index
-template <typename V>
-static inline void assign_next_ip_index(V& intersection_points, int index,
-            segment_identifier const& seg_id,
-            int next_ip_index)
-{
-    typedef typename boost::range_value<V>::type ip_type;
-    typedef typename ip_type::traversal_vector vector_type;
-    typedef typename boost::range_iterator<vector_type>::type iterator_type;
-
-    ip_type& ip = intersection_points[index];
-
-    for (iterator_type it = boost::begin(ip.info);
-            it != boost::end(ip.info);
-            ++it)
-    {
-        if (it->seg_id == seg_id)
-        {
-            it->next_ip_index = next_ip_index;
-            // Note: there can be MORE than one here. So do NOT return
-        }
-    }
-}
-
-
-// Assigns IP[index] . info[source_index] . travels_to_[vertex,ip]_index
-template <typename V>
-static inline void assign_last_vertex(V& intersection_points, int index,
-            int source_index,
-            int travels_to_vertex_index, int travels_to_ip_index)
-{
-    typedef typename boost::range_value<V>::type ip_type;
-    typedef typename ip_type::traversal_vector vector_type;
-    typedef typename boost::range_iterator<vector_type>::type iterator_type;
-
-    ip_type& ip = intersection_points[index];
-
-    for (iterator_type it = boost::begin(ip.info); it != boost::end(ip.info); ++it)
-    {
-        if (it->seg_id.source_index == source_index)
-        {
-            it->travels_to_vertex_index = travels_to_vertex_index;
-            it->travels_to_ip_index = travels_to_ip_index;
-            // do not return here, there can be more than one
-        }
-    }
-}
-
-
-// Creates selection of IP-s of only this unique source/segment,
-// then sorts on distance,
-// then assigns for each IP which is the next IP on this segment.
-// This is only applicable (but essential) for segments having
-// more than one IP on it. It is not the usual situation, so not
-// computational intensive.
-template <typename V>
-static inline bool assign_next_points(V& intersection_points,
-            segment_identifier const& seg_id)
-{
-    typedef typename boost::range_value<V>::type ip_type;
-    typedef typename boost::range_const_iterator<V>::type iterator_type;
-    typedef indexed_source_segment<ip_type> indexed_type;
-    typedef typename ip_type::traversal_vector vector_type;
-    typedef typename boost::range_const_iterator<vector_type>::type tvit_type;
-
-    // Create a copy of all IP's on this segment from this source
-
-    std::vector<indexed_type> copy;
-    copy.reserve(intersection_points.size());
-    std::size_t index = 0;
-    for (iterator_type it = boost::begin(intersection_points);
-         it != boost::end(intersection_points);
-         ++it, ++index)
-    {
-        bool to_be_copied = false;
-        for (tvit_type tvit = boost::begin(it->info);
-             !to_be_copied && tvit != boost::end(it->info);
-             ++tvit)
-        {
-            if (tvit->seg_id == seg_id)
-            {
-                to_be_copied = true;
-            }
-        }
-
-        if (to_be_copied)
-        {
-            // Copy this row, plus ONLY the related information
-            copy.push_back(indexed_type(index, *it, seg_id));
-        }
-    }
-
-    // Normally there are more elements in "copy".
-    // But in case of merges there could be only one.
-    if (boost::size(copy) <= 1)
-    {
-        return false;
-    }
-
-    std::sort(copy.begin(), copy.end(), sort_on_distance<indexed_type>());
-
-
-    // Now that it is sorted, do the main purpose: assign the next points
-    typedef typename boost::range_iterator
-        <
-            std::vector<indexed_type>
-        >::type indexed_iterator_type;
-
-    indexed_iterator_type it = boost::begin(copy);
-    for (indexed_iterator_type prev = it++; it != boost::end(copy); prev = it++)
-    {
-        for (
-#ifdef GGL_DEBUG_INTERSECTION
-        typename boost::range_iterator<vector_type>::type
-#else
-        tvit_type
-#endif
-            tvit = boost::begin(it->subject.info);
-             tvit != boost::end(it->subject.info);
-             ++tvit)
-        {
-            if (tvit->seg_id == seg_id)
-            {
-                assign_next_ip_index(intersection_points, prev->index, seg_id, it->index);
-
-#ifdef GGL_DEBUG_INTERSECTION
-                tvit->next_ip_index = it->index;
-#endif
-
-            }
-        }
-    }
-
-#ifdef GGL_DEBUG_INTERSECTION
-    std::cout << "Enrichment - sorted (on distance, " << seg_id << "): " << std::endl;
-    report_indexed(copy);
-#endif
-
-    return true;
-}
-
-
-// If a segment has more than one IP, we determine what is the next IP
-// on that segment
-template <typename M, typename V>
-static inline bool assign_next_points(M& map, V& intersection_points)
-{
-    bool assigned = false;
-    for (typename M::iterator mit = map.begin(); mit != map.end(); ++mit)
-    {
-        // IF there are more IP's on this segment
-        if (mit->second > 1)
-        {
-            if (assign_next_points(intersection_points, mit->first))
-            {
-                assigned = true;
-            }
-        }
-    }
-
-#ifdef GGL_DEBUG_INTERSECTION
-    std::cout << "Enrichment - assigned next points on same segment: " << std::endl;
-    report_ip(intersection_points);
-#endif
-
-    return assigned;
-}
-
-
-template <typename V>
-static inline bool assign_order(V& intersection_points,
-            int source_index, int multi_index, int ring_index)
-{
-    typedef typename boost::range_value<V>::type ip_type;
-    typedef typename boost::range_const_iterator<V>::type iterator_type;
-    typedef indexed_source<ip_type> indexed_type;
-    typedef typename ip_type::traversal_vector vector_type;
-    typedef typename boost::range_const_iterator<vector_type>::type tvit_type;
-
-    // Create a copy of all IP's from this source
-    std::vector<indexed_type> copy;
-    copy.reserve(intersection_points.size());
-    std::size_t index = 0;
-    for (iterator_type it = boost::begin(intersection_points);
-         it != boost::end(intersection_points);
-         ++it, ++index)
-    {
-        bool to_be_copied = false;
-        for (tvit_type tvit = boost::begin(it->info);
-             !to_be_copied && tvit != boost::end(it->info);
-             ++tvit)
-        {
-            if (tvit->seg_id.source_index == source_index
-                && tvit->seg_id.multi_index == multi_index
-                && tvit->seg_id.ring_index == ring_index)
-            {
-                to_be_copied = true;
-            }
-        }
-
-        if (to_be_copied)
-        {
-            // Copy this row, plus ONLY the related information
-            copy.push_back(indexed_type(index, *it, source_index, multi_index, ring_index));
-        }
-    }
-
-#ifdef GGL_DEBUG_INTERSECTION
-    std::cout << "Enrichment - ordered/copy (on segment "
-        << " src: " << source_index
-        << "): " << std::endl;
-    report_indexed(copy);
-#endif
-
-    std::sort(copy.begin(), copy.end(), sort_on_segment_identifier<indexed_type>());
-
-    typedef typename boost::range_const_iterator<std::vector<indexed_type> >::type iit_type;
-
-    // Now that it is sorted, do the main purpose:
-    // assign travel-to-vertex/ip index for each IP
-    // Because IP's are circular, PREV starts at the very last one,
-    // being assigned from the first one.
-    iit_type it = boost::begin(copy);
-    for (iit_type prev = it + (boost::size(copy) - 1);
-         it != boost::end(copy);
-         prev = it++)
-    {
-        for (tvit_type tvit = boost::begin(it->subject.info);
-             tvit != boost::end(it->subject.info);
-             ++tvit)
-        {
-            if (tvit->seg_id.source_index == source_index
-                && tvit->seg_id.multi_index == multi_index
-                && tvit->seg_id.ring_index == ring_index)
-            {
-                assign_last_vertex(intersection_points, prev->index, source_index,
-                    tvit->seg_id.segment_index, it->index);
-            }
-        }
-    }
-
-#ifdef GGL_DEBUG_INTERSECTION
-    std::cout << "Enrichment - ordered  on segment (src: "
-        << source_index << "): " << std::endl;
-    report_ip(intersection_points);
-#endif
-
-    return true;
-}
-
-template <typename M, typename V>
-static inline void assign_order(M const& map, V& intersection_points)
-{
-    typename M::const_iterator prev;
-    bool first = true;
-    for (typename M::const_iterator mit = map.begin(); mit != map.end(); ++mit)
-    {
-        if (first
-            || prev->first.source_index != mit->first.source_index
-            || prev->first.ring_index != mit->first.ring_index
-            || prev->first.multi_index != mit->first.multi_index)
-        {
-            assign_order(intersection_points, mit->first.source_index,
-                         mit->first.multi_index, mit->first.ring_index);
-            first = false;
-        }
-        prev = mit;
-    }
-
-#ifdef GGL_DEBUG_INTERSECTION
-    std::cout << "Enrichment - assigned order: " << std::endl;
-    report_ip(intersection_points);
-#endif
-
-}
-
-
-
-
-}} // namespace detail::intersection
-#endif //DOXYGEN_NO_DETAIL
-
-
-/*!
-    \brief All intersection points are enriched with successor information
-    \ingroup overlay
-    \tparam IntersectionPoints type of intersection container (e.g. vector of "intersection_point"'s)
-    \param intersection_points container containing intersectionpoints
-    \param trivial Boolean flag to indicate that it is trivial, only intersections,
-        no touch, collinearities, etc.
- */
-template <typename IntersectionPoints>
-inline void enrich_intersection_points(IntersectionPoints& intersection_points, bool /* trivial */)
-{
-
-    // Create a map of segment<source_index,segment_index,ring_index,multi_index>
-    // to <number of IP's on this segment>
-    // Purpose: count IP's per source/segment, sort them lateron
-    std::map<segment_identifier, int> map;
-
-    typedef typename boost::range_const_iterator<IntersectionPoints>::type iterator_type;
-    for (iterator_type it = boost::begin(intersection_points);
-         it != boost::end(intersection_points);
-         ++it)
-    {
-        typedef typename boost::range_value
-            <
-                IntersectionPoints
-            >::type::traversal_vector vector_type;
-        typedef typename boost::range_const_iterator<vector_type>::type tvit_type;
-        for (tvit_type tvit = boost::begin(it->info);
-            tvit != boost::end(it->info);
-            ++tvit)
-        {
-            map[tvit->seg_id]++;
-        }
-    }
-
-#ifdef GGL_DEBUG_INTERSECTION
-    detail::intersection::report_map(map);
-#endif
-
-    detail::intersection::assign_next_points(map, intersection_points);
-
-    detail::intersection::assign_order(map, intersection_points);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_ENRICH_INTERSECTION_POINTS_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/overlay/get_intersection_points.hpp b/include/builtin-ggl/ggl/algorithms/overlay/get_intersection_points.hpp
deleted file mode 100644
index 8268e0a..0000000
--- a/include/builtin-ggl/ggl/algorithms/overlay/get_intersection_points.hpp
+++ /dev/null
@@ -1,722 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_GET_INTERSECTION_POINTS_HPP
-#define GGL_ALGORITHMS_GET_INTERSECTION_POINTS_HPP
-
-#include <cstddef>
-
-#include <boost/mpl/if.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/coordinate_dimension.hpp>
-#include <ggl/core/is_multi.hpp>
-#include <ggl/core/reverse_dispatch.hpp>
-
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/core/ring_type.hpp>
-
-#include <ggl/util/math.hpp>
-
-#include <ggl/geometries/box.hpp>
-
-#include <ggl/strategies/cartesian/cart_intersect.hpp>
-#include <ggl/strategies/intersection_result.hpp>
-
-#include <ggl/policies/relate/intersection_points.hpp>
-#include <ggl/policies/relate/direction.hpp>
-#include <ggl/policies/relate/tupled.hpp>
-
-#include <ggl/algorithms/overlay/intersection_point.hpp>
-
-#include <ggl/algorithms/distance.hpp>
-#include <ggl/algorithms/disjoint.hpp>
-#include <ggl/algorithms/sectionalize.hpp>
-#include <ggl/algorithms/get_section.hpp>
-#include <ggl/algorithms/within.hpp>
-
-
-
-namespace ggl
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace get_intersection_points {
-
-
-template <typename Segment1, typename Segment2, typename IntersectionPoints>
-struct relate
-{
-    static inline bool apply(Segment1 const& s1, Segment2 const& s2,
-                segment_identifier const& seg_id1,
-                segment_identifier const& seg_id2,
-                IntersectionPoints& out, bool& trivial)
-    {
-
-        typedef typename boost::range_value
-            <
-                IntersectionPoints
-            >::type intersection_point;
-        typedef segment_intersection_points<intersection_point> ip_type;
-
-        typedef boost::tuple
-            <
-                ip_type,
-                policies::relate::direction_type
-            > result_type;
-
-        result_type result = strategy::intersection::relate_cartesian_segments
-            <
-                policies::relate::segments_tupled
-                    <
-                        policies::relate::segments_intersection_points
-                            <
-                                Segment1,
-                                Segment2,
-                                ip_type
-                            > ,
-                        policies::relate::segments_direction
-                            <
-                                Segment1,
-                                Segment2
-                            >
-                    >
-            >::relate(s1, s2);
-
-        ip_type& is = result.get<0>();
-        policies::relate::direction_type & dir = result.get<1>();
-
-        for (int i = 0; i < is.count; i++)
-        {
-            typedef typename point_type<Segment1>::type point1_type;
-            typedef typename cs_tag<point1_type>::type tag;
-
-            typename intersection_point::traversal_type info;
-
-            info.how = dir.how;
-            info.opposite = dir.opposite;
-
-            // First info-record, containing info about segment 1
-            info.seg_id = seg_id1;
-            info.other_id = seg_id2;
-            info.other_point = dir.how_a == 1 ? s1.first : s1.second;
-
-            info.distance = ggl::distance(is.intersections[i], s1.first);
-
-            //info.distance = dir.ra; // NOTE: not possible for collinear intersections!
-            info.arrival = dir.how_a;
-            info.direction = dir.dir_a;
-            is.intersections[i].info.push_back(info);
-
-
-            // Second info-record, containing info about segment 2
-            info.seg_id = seg_id2;
-            info.other_id = seg_id1;
-            info.other_point = dir.how_b == 1 ? s2.first : s2.second;
-
-            info.distance = ggl::distance(is.intersections[i], s2.first);
-            //info.distance = dir.rb;
-
-            info.arrival = dir.how_b;
-            info.direction = dir.dir_b;
-            is.intersections[i].info.push_back(info);
-
-            if (dir.how != 'i')
-            {
-                trivial = false;
-                is.intersections[i].trivial = false;
-            }
-
-            // Robustness: due to IEEE floating point errors, also in double, it might be
-            // that the IP is at the same location as s1.first/s1.second, and still
-            // being classified as an 'i' (normal intersection). Then handle it as non-trivial,
-            // such that the IP's will be merged lateron.
-
-            double eps = 1.0e-10;
-            if (dir.how == 'i'
-                && (dir.ra < eps
-                    || dir.rb < eps
-                    || 1.0 - dir.ra < eps
-                    || 1.0 - dir.rb <  eps
-                    )
-                )
-            {
-                // Handle them as non-trivial. This will case a "merge" lateron,
-                // which could be done anyway (because of other intersections)
-                // So it is never harmful to do this with a larger epsilon.
-                // However, it has to be handled (more) carefully lateron, in
-                // 'merge' or 'adapt_turns'
-                trivial = false;
-                is.intersections[i].trivial = false;
-
-
-#ifdef GGL_DEBUG_INTERSECTION
-                std::cout << "INTERSECTION suspicious: " << std::setprecision(20)
-                    << " ra: " << dir.ra
-                    << " rb: " << dir.rb
-                    << std::endl
-                    << " dist1: " << ggl::distance(is.intersections[i], s1.first)
-                    << " dist2: " << ggl::distance(is.intersections[i], s1.second)
-                    << std::endl;
-#endif
-            }
-
-            out.push_back(is.intersections[i]);
-        }
-        return is.count > 0;
-    }
-};
-
-template
-<
-    typename Geometry1, typename Geometry2,
-    typename Section1, typename Section2,
-    typename IntersectionPoints
->
-class get_ips_in_sections
-{
-public :
-    static inline void apply(
-            std::size_t source_id1, Geometry1 const& geometry1,
-                Section1 const& sec1,
-            std::size_t source_id2, Geometry2 const& geometry2,
-                Section2 const& sec2,
-            bool return_if_found,
-            IntersectionPoints& intersection_points,
-            bool& trivial)
-    {
-
-        typedef typename ggl::point_const_iterator
-            <
-                Geometry1
-            >::type range1_iterator;
-        typedef typename ggl::point_const_iterator
-            <
-                Geometry2
-            >::type range2_iterator;
-
-        int const dir1 = sec1.directions[0];
-        int const dir2 = sec2.directions[0];
-        int index1 = sec1.begin_index;
-        int ndi1 = sec1.non_duplicate_index;
-
-        bool const same_source =
-            source_id1 == source_id2
-                    && sec1.multi_index == sec2.multi_index
-                    && sec1.ring_index == sec2.ring_index;
-
-        // Note that it is NOT possible to have section-iterators here
-        // because of the logistics of "index" (the section-iterator automatically
-        // skips to the begin-point, we loose the index or have to recalculate it)
-        // So we mimic it here
-        range1_iterator it1, end1;
-        get_section(geometry1, sec1, it1, end1);
-
-        // Mimic 1: Skip to point such that section interects other box
-        range1_iterator prev1 = it1++;
-        for(; it1 != end1 && preceding<0>(dir1, *it1, sec2.bounding_box);
-            prev1 = it1++, index1++, ndi1++)
-        {
-        }
-        // Go back one step because we want to start completely preceding
-        it1 = prev1;
-
-        // Walk through section and stop if we exceed the other box
-        for (prev1 = it1++;
-            it1 != end1 && ! exceeding<0>(dir1, *prev1, sec2.bounding_box);
-            prev1 = it1++, index1++, ndi1++)
-        {
-            segment1_type s1(*prev1, *it1);
-
-            int index2 = sec2.begin_index;
-            int ndi2 = sec2.non_duplicate_index;
-
-            range2_iterator it2, end2;
-            get_section(geometry2, sec2, it2, end2);
-
-            range2_iterator prev2 = it2++;
-
-            // Mimic 2:
-            for(; it2 != end2 && preceding<0>(dir2, *it2, sec1.bounding_box);
-                prev2 = it2++, index2++, ndi2++)
-            {
-            }
-            it2 = prev2;
-
-            for (prev2 = it2++;
-                it2 != end2 && ! exceeding<0>(dir2, *prev2, sec1.bounding_box);
-                prev2 = it2++, index2++, ndi2++)
-            {
-                bool skip = same_source;
-                if (skip)
-                {
-                    // If sources are the same (possibly self-intersecting):
-                    // check if it is a neighbouring sement.
-                    // (including first-last segment
-                    //  and two segments with one or more degenerate/duplicate
-                    //  (zero-length) segments in between)
-
-                    // Also skip if index1 < index2 to avoid getting all
-                    // intersections twice (only do this on same source!)
-
-                    // About n-2:
-                    //   (square: range_count=5, indices 0,1,2,3
-                    //    -> 0-3 are adjacent)
-                    skip = index2 >= index1
-                        || ndi1 == ndi2 + 1
-                        || (index2 == 0 && index1 >= int(sec1.range_count) - 2)
-                        ;
-                }
-
-                if (! skip)
-                {
-                    if (relate<segment1_type, segment2_type, IntersectionPoints>
-                        ::apply(s1, segment2_type(*prev2, *it2),
-                            segment_identifier(source_id1,
-                                        sec1.multi_index, sec1.ring_index, index1),
-                            segment_identifier(source_id2,
-                                        sec2.multi_index, sec2.ring_index, index2),
-                            intersection_points, trivial)
-                        && return_if_found)
-                    {
-                        return;
-                    }
-                }
-            }
-        }
-    }
-
-
-private :
-    typedef typename ggl::point_type<Geometry1>::type point1_type;
-    typedef typename ggl::point_type<Geometry2>::type point2_type;
-    typedef typename ggl::segment<const point1_type> segment1_type;
-    typedef typename ggl::segment<const point2_type> segment2_type;
-
-
-    template <size_t Dim, typename Point, typename Box>
-    static inline bool preceding(int dir, Point const& point, Box const& box)
-    {
-        return (dir == 1  && get<Dim>(point) < get<min_corner, Dim>(box))
-            || (dir == -1 && get<Dim>(point) > get<max_corner, Dim>(box));
-    }
-
-    template <size_t Dim, typename Point, typename Box>
-    static inline bool exceeding(int dir, Point const& point, Box const& box)
-    {
-        return (dir == 1  && get<Dim>(point) > get<max_corner, Dim>(box))
-            || (dir == -1 && get<Dim>(point) < get<min_corner, Dim>(box));
-    }
-
-
-};
-
-
-template
-<
-    typename Ring, typename Box,
-    typename Section1, typename Section2,
-    typename IntersectionPoints
->
-class get_ips_range_box
-{
-public :
-    static inline void apply(
-            std::size_t source_id1, Ring const& ring,
-            std::size_t source_id2, Box const& box,
-            Section1 const& sec1, Section2 const& sec2,
-            IntersectionPoints& intersection_points, bool& trivial)
-    {
-        get_ips_in_sections<Ring, Box, Section1, Section2, IntersectionPoints>
-            ::apply(
-                source_id1, ring, sec1,
-                source_id2, box, sec2,
-                false,
-                intersection_points, trivial);
-    }
-};
-
-
-
-
-template<typename Geometry1, typename Geometry2, typename IntersectionPoints>
-struct get_ips_generic
-{
-    static inline bool apply(
-            std::size_t source_id1, Geometry1 const& geometry1,
-            std::size_t source_id2, Geometry2 const& geometry2,
-            IntersectionPoints& intersection_points)
-    {
-        // Create monotonic sections in ONE direction
-        // - in most cases ONE direction is faster (e.g. ~1% faster for the NLP4 testset)
-        // - the sections now have a limit (default 10) so will not be too large
-        typedef typename ggl::sections
-            <
-                ggl::box < typename ggl::point_type<Geometry1>::type >, 1
-            > sections1_type;
-        typedef typename ggl::sections
-            <
-                ggl::box < typename ggl::point_type<Geometry2>::type >, 1
-            > sections2_type;
-
-        sections1_type sec1;
-        sections2_type sec2;
-
-        ggl::sectionalize(geometry1, sec1);
-        ggl::sectionalize(geometry2, sec2);
-
-        bool trivial = true;
-        for (typename boost::range_const_iterator<sections1_type>::type
-                    it1 = sec1.begin();
-            it1 != sec1.end();
-            ++it1)
-        {
-            for (typename boost::range_const_iterator<sections2_type>::type
-                        it2 = sec2.begin();
-                it2 != sec2.end();
-                ++it2)
-            {
-                if (! ggl::disjoint(it1->bounding_box, it2->bounding_box))
-                {
-                    get_ips_in_sections
-                    <
-                        Geometry1,
-                        Geometry2,
-                        typename boost::range_value<sections1_type>::type,
-                        typename boost::range_value<sections2_type>::type,
-                        IntersectionPoints
-                    >::apply(
-                            source_id1, geometry1, *it1,
-                            source_id2, geometry2, *it2,
-                            false,
-                            intersection_points, trivial);
-                }
-            }
-        }
-        return trivial;
-    }
-};
-
-
-
-template<typename Range, typename Box, typename IntersectionPoints>
-struct get_ips_cs
-{
-    static inline void apply(std::size_t source_id1, Range const& range,
-            int multi_index, int ring_index,
-            std::size_t source_id2, Box const& box,
-            IntersectionPoints& intersection_points,
-            bool& trivial)
-    {
-        if (boost::size(range) <= 1)
-        {
-            return;
-        }
-
-
-        typedef typename ggl::point_type<Box>::type box_point_type;
-        typedef typename ggl::point_type<Range>::type point_type;
-
-        typedef segment<const box_point_type> box_segment_type;
-        typedef segment<const point_type> segment_type;
-
-        point_type lower_left, upper_left, lower_right, upper_right;
-        assign_box_corners(box, lower_left, lower_right, upper_left, upper_right);
-
-        box_segment_type left(lower_left, upper_left);
-        box_segment_type top(upper_left, upper_right);
-        box_segment_type right(upper_right, lower_right);
-        box_segment_type bottom(lower_right, lower_left);
-
-
-        typedef typename boost::range_const_iterator<Range>::type iterator_type;
-        iterator_type it = boost::begin(range);
-
-        bool first = true;
-
-        char previous_side[2] = {0, 0};
-
-        int index = 0;
-
-        for (iterator_type prev = it++;
-            it != boost::end(range);
-            prev = it++, index++)
-        {
-            segment_type segment(*prev, *it);
-
-            if (first)
-            {
-                previous_side[0] = get_side<0>(box, *prev);
-                previous_side[1] = get_side<1>(box, *prev);
-            }
-
-            char current_side[2];
-            current_side[0] = get_side<0>(box, *it);
-            current_side[1] = get_side<1>(box, *it);
-
-            // There can NOT be intersections if
-            // 1) EITHER the two points are lying on one side of the box (! 0 && the same)
-            // 2) OR same in Y-direction
-            // 3) OR all points are inside the box (0)
-            if (! (
-                (current_side[0] != 0 && current_side[0] == previous_side[0])
-                || (current_side[1] != 0 && current_side[1] == previous_side[1])
-                || (current_side[0] == 0
-                        && current_side[1] == 0
-                        && previous_side[0] == 0
-                        && previous_side[1] == 0)
-                  )
-                )
-            {
-                segment_identifier seg_id(source_id1,
-                            multi_index, ring_index, index);
-
-                typedef relate
-                    <
-                        segment_type, box_segment_type, IntersectionPoints
-                    > relater;
-
-                // Todo: depending on code some relations can be left out
-                relater::apply(segment, left, seg_id,
-                        segment_identifier(source_id2, -1, -1, 0),
-                        intersection_points, trivial);
-                relater::apply(segment, top, seg_id,
-                        segment_identifier(source_id2, -1, -1, 1),
-                        intersection_points, trivial);
-                relater::apply(segment, right, seg_id,
-                        segment_identifier(source_id2, -1, -1, 2),
-                        intersection_points, trivial);
-                relater::apply(segment, bottom, seg_id,
-                        segment_identifier(source_id2, -1, -1, 3),
-                        intersection_points, trivial);
-
-            }
-        }
-    }
-
-
-    template<std::size_t Index, typename Point>
-    static inline int get_side(Box const& box, Point const& point)
-    {
-        // Note: border has to be included because of boundary cases
-
-        if (get<Index>(point) <= get<min_corner, Index>(box)) return -1;
-        else if (get<Index>(point) >= get<max_corner, Index>(box)) return 1;
-        else return 0;
-    }
-
-
-};
-
-
-}} // namespace detail::get_intersection_points
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
-    typename GeometryTag1, typename GeometryTag2,
-    bool IsMulti1, bool IsMulti2,
-    typename Geometry1, typename Geometry2,
-    typename IntersectionPoints
-
->
-struct get_intersection_points
-{
-};
-
-
-template<typename Polygon, typename Box, typename IntersectionPoints>
-struct get_intersection_points
-    <
-        polygon_tag, box_tag, false, false,
-        Polygon, Box,
-        IntersectionPoints
-    >
-{
-
-    static inline bool apply(
-            std::size_t source_id1, Polygon const& polygon,
-            std::size_t source_id2, Box const& box,
-            IntersectionPoints& intersection_points)
-    {
-        typedef typename ggl::ring_type<Polygon>::type ring_type;
-
-        typedef typename boost::range_const_iterator
-            <
-                typename interior_type<Polygon>::type
-            >::type iterator_type;
-
-
-        typedef detail::get_intersection_points::get_ips_cs
-            <ring_type, Box, IntersectionPoints> intersector_type;
-
-        bool trivial = true;
-        intersector_type::apply(
-                source_id1, ggl::exterior_ring(polygon), -1, -1,
-                source_id2, box,
-                intersection_points, trivial);
-
-        int i = 0;
-        for (iterator_type it = boost::begin(interior_rings(polygon));
-             it != boost::end(interior_rings(polygon));
-             ++it, ++i)
-        {
-            intersector_type::apply(
-                    source_id1, *it, -1, i,
-                    source_id2, box, intersection_points, trivial);
-        }
-
-        return trivial;
-    }
-};
-
-template<typename Ring1, typename Ring2, typename IntersectionPoints>
-struct get_intersection_points
-    <
-        ring_tag, ring_tag, false, false,
-        Ring1, Ring2,
-        IntersectionPoints
-    >
-    : detail::get_intersection_points::get_ips_generic
-        <
-            Ring1,
-            Ring2,
-            IntersectionPoints
-        >
-{};
-
-
-template<typename Polygon1, typename Polygon2, typename IntersectionPoints>
-struct get_intersection_points
-    <
-        polygon_tag, polygon_tag, false, false,
-        Polygon1, Polygon2,
-        IntersectionPoints
-    >
-    : detail::get_intersection_points::get_ips_generic
-        <
-            Polygon1,
-            Polygon2,
-            IntersectionPoints
-        >
-{};
-
-template
-<
-    typename LineString1,
-    typename LineString2,
-    typename IntersectionPoints
->
-struct get_intersection_points
-    <
-        linestring_tag, linestring_tag, false, false,
-        LineString1, LineString2,
-        IntersectionPoints
-    >
-    : detail::get_intersection_points::get_ips_generic
-        <
-            LineString1,
-            LineString2,
-            IntersectionPoints
-        >
-{};
-
-template
-<
-    typename GeometryTag1, typename GeometryTag2,
-    bool IsMulti1, bool IsMulti2,
-    typename Geometry1, typename Geometry2,
-    typename IntersectionPoints
->
-struct get_intersection_points_reversed
-{
-    static inline bool apply(
-            std::size_t source_id1, Geometry1 const& g1,
-            std::size_t source_id2, Geometry2 const& g2,
-            IntersectionPoints& intersection_points)
-    {
-        return get_intersection_points
-            <
-                GeometryTag2, GeometryTag1,
-                IsMulti2, IsMulti1,
-                Geometry2, Geometry1,
-                IntersectionPoints
-            >::apply(source_id2, g2, source_id1, g1, intersection_points);
-    }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-/*!
-    \brief Calculate intersection points of two geometries
-    \ingroup overlay
-    \tparam Geometry1 first geometry type
-    \tparam Geometry2 second geometry type
-    \tparam IntersectionPoints type of intersection container (e.g. vector of "intersection_point"'s)
-    \param geometry1 first geometry
-    \param geometry2 second geometry
-    \param intersection_points container which will contain intersection points
-    \return TRUE if it is trivial, else FALSE
- */
-template <typename Geometry1, typename Geometry2, typename IntersectionPoints>
-inline bool get_intersection_points(Geometry1 const& geometry1,
-            Geometry2 const& geometry2, IntersectionPoints& intersection_points)
-{
-    assert_dimension_equal<Geometry1, Geometry2>();
-
-    typedef typename boost::remove_const<Geometry1>::type ncg1_type;
-    typedef typename boost::remove_const<Geometry2>::type ncg2_type;
-
-    return boost::mpl::if_c
-        <
-            reverse_dispatch<Geometry1, Geometry2>::type::value,
-            dispatch::get_intersection_points_reversed
-            <
-                typename tag<ncg1_type>::type,
-                typename tag<ncg2_type>::type,
-                is_multi<ncg1_type>::type::value,
-                is_multi<ncg2_type>::type::value,
-                ncg1_type,
-                ncg2_type,
-                IntersectionPoints
-            >,
-            dispatch::get_intersection_points
-            <
-                typename tag<ncg1_type>::type,
-                typename tag<ncg2_type>::type,
-                is_multi<ncg1_type>::type::value,
-                is_multi<ncg2_type>::type::value,
-                ncg1_type,
-                ncg2_type,
-               IntersectionPoints
-            >
-        >::type::apply(
-            0, geometry1,
-            1, geometry2,
-            intersection_points);
-}
-
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_GET_INTERSECTION_POINTS_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/overlay/intersection_point.hpp b/include/builtin-ggl/ggl/algorithms/overlay/intersection_point.hpp
deleted file mode 100644
index da4be2f..0000000
--- a/include/builtin-ggl/ggl/algorithms/overlay/intersection_point.hpp
+++ /dev/null
@@ -1,255 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_INTERSECTION_POINT_HPP
-#define GGL_ALGORITHMS_INTERSECTION_POINT_HPP
-
-#include <vector>
-
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/coordinate_dimension.hpp>
-
-#include <ggl/strategies/distance_result.hpp>
-#include <ggl/strategies/strategy_traits.hpp>
-
-#include <ggl/algorithms/overlay/segment_identifier.hpp>
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersection {
-
-
-template<typename P>
-struct intersection_info
-{
-    typedef P point_type;
-    typedef typename distance_result<P, P>::type distance_type;
-
-    inline intersection_info()
-        : travels_to_vertex_index(-1)
-        , travels_to_ip_index(-1)
-        , next_ip_index(-1)
-        , distance(ggl::make_distance_result<distance_type>(0))
-        , direction(0)
-        , how('?')
-        , arrival(0)
-        , opposite(false)
-        , visit_code(0)
-        , flagged(false)
-    {}
-
-    // Point to which the segment from IP is directing (TO-point)
-    // If they intersect on their "arrival" points, it is the FROM-point.
-    P other_point;
-
-    // Identifier of this segment (source,segment,ring,multi)
-    segment_identifier seg_id;
-
-    // Identify the segment where it was intersected with to form this IP
-    segment_identifier other_id;
-
-
-    // vertex to which is free travel after this IP,
-    // so from "segment_index+1" to "travels_to_vertex_index", without IP-s,
-    // can be -1
-    int travels_to_vertex_index;
-
-    // same but now IP index, so "next IP index" but not on THIS segment
-    int travels_to_ip_index;
-
-    // index of next IP on this segment, -1 if there is no one
-    int next_ip_index;
-
-    distance_type distance; // distance-measurement from segment.first to IP
-
-    // 1: left, -1: right, 0: collinear
-    int direction;
-
-    // Information about how intersection is done
-    char how;
-
-    // 1: arrived at IP, -1: departs from IP, 0: crosses IP
-    int arrival;
-
-    bool opposite;
-
-    int visit_code;
-
-    bool flagged; // flagged for deletion
-
-#ifdef GGL_DEBUG_INTERSECTION
-        static inline std::string dir(int d)
-        {
-            return d == 0 ? "-" : (d == 1 ? "L" : d == -1 ? "R" : "#");
-        }
-        static inline std::string how_str(int h)
-        {
-            return h == 0 ? "-" : (h == 1 ? "A" : "D");
-        }
-
-        friend std::ostream& operator<<(std::ostream &os, intersection_info<P> const& info)
-        {
-            os  << "\t"
-                << " src " << info.seg_id.source_index
-                << " seg " << info.seg_id.segment_index
-                << " (// " << info.other_id.source_index
-                    << "." << info.other_id.segment_index << ")"
-                << " how " << info.how
-                    << "[" << how_str(info.arrival)
-                    << " " << dir(info.direction)
-                    << (info.opposite ? " o" : "")
-                    << "]"
-                << " nxt seg " << info.travels_to_vertex_index
-                << " , ip " << info.travels_to_ip_index
-                << " , or " << info.next_ip_index
-                << " dst " << std::setprecision(12) << double(info.distance);
-            if (info.visit_code != 0)
-            {
-                os << " VIS: " << int(info.visit_code);
-            }
-            return os;
-        }
-#endif
-};
-
-
-template<typename P>
-struct intersection_point
-{
-    public :
-        inline intersection_point()
-            : visit_code(0) // VISIT_NONE
-            , trivial(true)
-            , shared(false)
-            , flagged(false)
-        {
-        }
-
-
-#ifdef GGL_DEBUG_INTERSECTION
-        friend std::ostream& operator<<(std::ostream &os, intersection_point<P> const& p)
-        {
-            os << "IP (" << ggl::get<0>(p.point) << "," << ggl::get<1>(p.point) << ")"
-                << " visited: " << int(p.visit_code)
-                << (p.shared ? " SHARED" : "")
-                << (p.flagged ? " FLAGGED" : "")
-                << std::endl;
-
-            for (unsigned int i = 0; i < p.info.size(); i++)
-            {
-                os << p.info[i] << std::endl;
-            }
-            return os;
-        }
-#endif
-        typedef intersection_info<P> traversal_type;
-        typedef std::vector<traversal_type> traversal_vector;
-
-        P point;
-
-        int visit_code;
-        bool trivial; // FALSE if there is an collinearity, touch or so.
-        bool shared; // shared with more IP's
-        bool flagged; // flagged for deletion afterwards
-
-        // info about the two intersecting segments
-        // usually two, but often more if IP's are merged
-        traversal_vector info;
-
-        inline void clone_except_info(intersection_point& other) const
-        {
-            other.point = point;
-            other.visit_code = visit_code;
-            other.trivial = trivial;
-            other.shared = shared;
-            other.flagged = flagged;
-        }
-};
-
-
-
-
-}} // namespace detail::intersection
-#endif //DOXYGEN_NO_DETAIL
-
-
-// Register the intersection point as being a point fulfilling the ggl Point Concept
-namespace traits
-{
-
-    template <typename P>
-    struct coordinate_type<ggl::detail::intersection::intersection_point<P> >
-    {
-        typedef typename ggl::coordinate_type<P>::type type;
-    };
-
-    template <typename P>
-    struct coordinate_system<ggl::detail::intersection::intersection_point<P> >
-    {
-        typedef typename ggl::coordinate_system<P>::type type;
-    };
-
-    template <typename P>
-    struct dimension<ggl::detail::intersection::intersection_point<P> >
-        : ggl::dimension<P>
-    {};
-
-    template <typename P>
-    struct tag<ggl::detail::intersection::intersection_point<P> >
-    {
-        typedef point_tag type;
-    };
-
-    template <typename P>
-    struct access<ggl::detail::intersection::intersection_point<P> >
-    {
-        template <int Index>
-        static inline typename coordinate_type<P>::type get(
-                ggl::detail::intersection::intersection_point<P> const& p)
-        {
-            return ggl::get<Index>(p.point);
-        }
-
-        template <int Index>
-        static inline void set(ggl::detail::intersection::intersection_point<P>& p,
-                typename coordinate_type<P>::type const& value)
-        {
-            ggl::set<Index>(p.point, value);
-        }
-    };
-
-}
-
-
-#ifdef GGL_DEBUG_INTERSECTION
-
-template <typename V>
-inline void report_ip(V const& intersection_points)
-{
-    typedef typename V::const_iterator iterator_type;
-
-    for (iterator_type it = intersection_points.begin();
-         it != intersection_points.end();
-         ++it)
-    {
-        if (! it->flagged)
-        {
-            std::cout << *it;
-        }
-    }
-}
-#endif // GGL_DEBUG_INTERSECTION
-
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_INTERSECTION_POINT_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/overlay/merge_intersection_points.hpp b/include/builtin-ggl/ggl/algorithms/overlay/merge_intersection_points.hpp
deleted file mode 100644
index fbf8d42..0000000
--- a/include/builtin-ggl/ggl/algorithms/overlay/merge_intersection_points.hpp
+++ /dev/null
@@ -1,254 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_MERGE_INTERSECTION_POINTS_HPP
-#define GGL_ALGORITHMS_MERGE_INTERSECTION_POINTS_HPP
-
-#include <algorithm>
-
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-
-#include <ggl/core/coordinate_type.hpp>
-
-#include <ggl/algorithms/equals.hpp>
-
-
-namespace ggl
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersection {
-
-template <typename PointType>
-struct on_increasing_dimension
-{
-    typedef typename ggl::coordinate_type<PointType>::type coordinate_type;
-
-    inline bool operator()(PointType const& lhs, PointType const& rhs) const
-    {
-        coordinate_type const& left0 = ggl::get<0>(lhs);
-        coordinate_type const& right0 = ggl::get<0>(rhs);
-
-        return math::equals(left0, right0)
-            ? ggl::get<1>(lhs) < ggl::get<1>(rhs)
-            : left0 < right0;
-    }
-};
-
-
-
-// T can be an intersection_point or intersection_info record
-template <typename T>
-struct is_flagged
-{
-    inline bool operator()(T const& object) const
-    {
-        return object.flagged;
-    }
-};
-
-
-
-template <typename V>
-inline void remove_collinearities(V& intersection_points)
-{
-    typedef typename boost::range_iterator<V>::type iterator_type;
-    typedef typename boost::range_value<V>::type ip_type;
-    typedef typename ip_type::traversal_type info_type;
-
-
-    for (iterator_type it = boost::begin(intersection_points);
-         it != boost::end(intersection_points);
-         ++it)
-    {
-        if (! it->trivial && ! it->flagged)
-        {
-            // Remove anything having to do with collinearity
-            typedef typename boost::range_value<V>::type::traversal_vector vector_type;
-            typedef typename boost::range_iterator<vector_type>::type tvit_type;
-
-            bool has_flag = false;
-
-            // Note, this is done n*m, in case of collinearity, but it is only done if not trivial
-            // or if there
-            bool middle = false;
-            for (tvit_type tvit = boost::begin(it->info);
-                ! middle && tvit != boost::end(it->info);
-                ++tvit)
-            {
-                if (tvit->how == 'e' || tvit->how == 'c')
-                {
-                    tvit->flagged = true;
-                    has_flag = true;
-
-                    for (tvit_type tvit2 = boost::begin(it->info);
-                        tvit2 != boost::end(it->info); ++tvit2)
-                    {
-                        // Do NOT remove anything starting from collinear, or ending on, in the middle.
-                        if (tvit2->how != 'm' && tvit2->how != 's')
-                        {
-                            if (tvit->seg_id == tvit2->seg_id
-                                || tvit->seg_id == tvit2->other_id
-                                || tvit->other_id == tvit2->seg_id
-                                || tvit->other_id == tvit2->other_id
-                                )
-                            {
-                                tvit2->flagged = true;
-                            }
-                        }
-                        else
-                        {
-                            tvit->flagged = false;
-                            has_flag = false;
-                            middle = true;
-                        }
-                    }
-                }
-            }
-
-            if (has_flag)
-            {
-                it->info.erase(
-                    std::remove_if(
-                            boost::begin(it->info),
-                            boost::end(it->info),
-                            is_flagged<info_type>()),
-                    boost::end(it->info));
-
-                // Mark for deletion afterwards if there are no info-records left
-                if (boost::size(it->info) == 0)
-                {
-                    it->flagged = true;
-                }
-
-                // Cases, previously forming an 'angle' (test #19)
-                // will be normal (neutral) case now,
-                // so to continue traversal:
-                if (it->info.size() == 2
-                    && it->info.front().how == 'a'
-                    && it->info.back().how == 'a')
-                {
-                    it->info.front().direction = 1;
-                    it->info.back().direction = 1;
-                }
-            }
-        }
-    }
-
-#ifdef GGL_DEBUG_INTERSECTION
-    std::cout << "Removed collinearities: " << std::endl;
-    report_ip(intersection_points);
-#endif
-}
-
-
-
-
-
-}} // namespace detail::intersection
-#endif //DOXYGEN_NO_DETAIL
-
-
-
-/*!
-    \brief Merges intersection points such that points at the same location will be merged, having one point
-        and their info-records appended
-    \ingroup overlay
-    \tparam IntersectionPoints type of intersection container (e.g. vector of "intersection_point"'s)
-    \param intersection_points container containing intersectionpoints
- */
-template <typename IntersectionPoints>
-inline void merge_intersection_points(IntersectionPoints& intersection_points)
-{
-    typedef typename boost::range_value<IntersectionPoints>::type trav_type;
-
-    if (boost::size(intersection_points) <= 1)
-    {
-        return;
-    }
-
-
-    // Sort all IP's from left->right, ymin->ymax such that
-    // all same IP's are consecutive
-    // (and we need this order lateron again)
-    // This order is NOT changed here and should not be after
-    // (otherwise indexes are wrong)
-    std::sort(boost::begin(intersection_points),
-        boost::end(intersection_points),
-        detail::intersection::on_increasing_dimension<trav_type>());
-
-    typedef typename boost::range_iterator<IntersectionPoints>::type iterator;
-
-#ifdef GGL_DEBUG_INTERSECTION
-    std::cout << "Sorted (x then y): " << std::endl;
-    for (iterator it = boost::begin(intersection_points);
-        it != boost::end(intersection_points); ++it)
-    {
-        std::cout << *it;
-    }
-#endif
-    bool has_merge = false;
-
-    // Merge all same IP's, combining there IP/segment-info entries
-    iterator it = boost::begin(intersection_points);
-    for (iterator prev = it++; it != boost::end(intersection_points); ++it)
-    {
-        // IP can be merged if the point is equal
-        if (ggl::equals(prev->point, it->point))
-        {
-            has_merge = true;
-            prev->shared = true;
-            prev->trivial = false;
-            it->flagged = true;
-            std::copy(it->info.begin(), it->info.end(),
-                        std::back_inserter(prev->info));
-        }
-        else
-        {
-            prev = it;
-        }
-    }
-
-
-    if (has_merge)
-    {
-#ifdef GGL_DEBUG_INTERSECTION
-        std::cout << "Merged (1): " << std::endl;
-        report_ip(intersection_points);
-#endif
-
-        // If there merges, there might be  collinearities
-        detail::intersection::remove_collinearities(intersection_points);
-
-        // Remove all IP's which are flagged for deletion
-        intersection_points.erase(
-            std::remove_if(
-                    boost::begin(intersection_points),
-                    boost::end(intersection_points),
-                    detail::intersection::is_flagged<trav_type>()),
-            boost::end(intersection_points));
-
-
-#ifdef GGL_DEBUG_INTERSECTION
-        std::cout << "Merged (2): " << std::endl;
-        report_ip(intersection_points);
-#endif
-
-
-    }
-
-}
-
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_MERGE_INTERSECTION_POINTS_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/overlay/segment_identifier.hpp b/include/builtin-ggl/ggl/algorithms/overlay/segment_identifier.hpp
deleted file mode 100644
index b059d10..0000000
--- a/include/builtin-ggl/ggl/algorithms/overlay/segment_identifier.hpp
+++ /dev/null
@@ -1,86 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_OVERLAY_SEGMENT_IDENTIFIER_HPP
-#define GGL_ALGORITHMS_OVERLAY_SEGMENT_IDENTIFIER_HPP
-
-#include <vector>
-
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/coordinate_dimension.hpp>
-
-#include <ggl/strategies/distance_result.hpp>
-#include <ggl/strategies/strategy_traits.hpp>
-
-namespace ggl
-{
-
-
-// Internal struct to uniquely identify a segment
-// on a linestring,ring
-// or polygon (needs ring_index)
-// or multi-geometry (needs multi_index)
-struct segment_identifier
-{
-    inline segment_identifier()
-        : source_index(-1)
-        , multi_index(-1)
-        , ring_index(-1)
-        , segment_index(-1)
-    {}
-
-    inline segment_identifier(int src, int mul, int rin, int seg)
-        : source_index(src)
-        , multi_index(mul)
-        , ring_index(rin)
-        , segment_index(seg)
-    {}
-
-    inline bool operator<(segment_identifier const& other) const
-    {
-        return source_index != other.source_index ? source_index < other.source_index
-            : multi_index !=other.multi_index ? multi_index < other.multi_index
-            : ring_index != other.ring_index ? ring_index < other.ring_index
-            : segment_index < other.segment_index
-            ;
-    }
-
-    inline bool operator==(segment_identifier const& other) const
-    {
-        return source_index == other.source_index
-            && segment_index == other.segment_index
-            && ring_index == other.ring_index
-            && multi_index == other.multi_index
-            ;
-    }
-
-#ifdef GGL_DEBUG_INTERSECTION
-    friend std::ostream& operator<<(std::ostream &os, segment_identifier const& seg_id)
-    {
-        std::cout
-            << "s:" << seg_id.source_index
-            << ", v:" << seg_id.segment_index // vertex
-            ;
-        if (seg_id.ring_index >= 0) std::cout << ", r:" << seg_id.ring_index;
-        if (seg_id.multi_index >= 0) std::cout << ", m:" << seg_id.multi_index;
-        return os;
-    }
-#endif
-
-    int source_index;
-    int multi_index;
-    int ring_index;
-    int segment_index;
-};
-
-
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_OVERLAY_SEGMENT_IDENTIFIER_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/overlay/self_intersection_points.hpp b/include/builtin-ggl/ggl/algorithms/overlay/self_intersection_points.hpp
deleted file mode 100644
index 1eba946..0000000
--- a/include/builtin-ggl/ggl/algorithms/overlay/self_intersection_points.hpp
+++ /dev/null
@@ -1,167 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_SELF_INTERSECTION_POINTS_HPP
-#define GGL_ALGORITHMS_SELF_INTERSECTION_POINTS_HPP
-
-#include <cstddef>
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/coordinate_dimension.hpp>
-#include <ggl/core/is_multi.hpp>
-
-#include <ggl/algorithms/overlay/get_intersection_points.hpp>
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace self_intersection_points {
-
-template
-<
-    typename Geometry,
-    typename IntersectionPoints
->
-struct check_ips
-{
-    static inline bool apply(
-            Geometry const& geometry,
-            bool return_if_found,
-            IntersectionPoints& intersection_points)
-    {
-        typedef typename ggl::sections
-            <
-                ggl::box < typename ggl::point_type<Geometry>::type >, 1
-            > sections_type;
-
-        sections_type sec;
-        ggl::sectionalize(geometry, sec);
-
-        bool trivial = true;
-        for (typename boost::range_const_iterator<sections_type>::type
-                    it1 = sec.begin();
-            it1 != sec.end();
-            ++it1)
-        {
-            for (typename boost::range_const_iterator<sections_type>::type
-                        it2 = sec.begin();
-                it2 != sec.end();
-                ++it2)
-            {
-                if (! ggl::disjoint(it1->bounding_box, it2->bounding_box)
-                    && ! it1->duplicate
-                    && ! it2->duplicate
-                    )
-                {
-                    ggl::detail::get_intersection_points::get_ips_in_sections
-                    <
-                        Geometry, Geometry,
-                        typename boost::range_value<sections_type>::type,
-                        typename boost::range_value<sections_type>::type,
-                        IntersectionPoints
-                    >::apply(
-                            0, geometry, *it1,
-                            0, geometry, *it2,
-                            return_if_found,
-                            intersection_points, trivial);
-                }
-            }
-        }
-        return trivial;
-    }
-};
-
-
-}} // namespace detail::self_intersection_points
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
-    typename GeometryTag,
-    bool IsMulti,
-    typename Geometry,
-    typename IntersectionPoints
-
->
-struct self_intersection_points
-{
-};
-
-
-template<typename Ring, typename IntersectionPoints>
-struct self_intersection_points
-    <
-        ring_tag, false, Ring,
-        IntersectionPoints
-    >
-    : detail::self_intersection_points::check_ips
-        <
-            Ring,
-            IntersectionPoints
-        >
-{};
-
-
-template<typename Polygon, typename IntersectionPoints>
-struct self_intersection_points
-    <
-        polygon_tag, false, Polygon,
-        IntersectionPoints
-    >
-    : detail::self_intersection_points::check_ips
-        <
-            Polygon,
-            IntersectionPoints
-        >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief Calculate self intersections of a geometry
-    \ingroup overlay
-    \tparam Geometry geometry type
-    \tparam IntersectionPoints type of intersection container (e.g. vector of "intersection_point"'s)
-    \param geometry geometry
-    \param intersection_points container which will contain intersection points
-    \return TRUE if it is trivial, else FALSE
- */
-template <typename Geometry, typename IntersectionPoints>
-inline bool get_intersection_points(Geometry const& geometry,
-            IntersectionPoints& intersection_points)
-{
-    typedef typename boost::remove_const<Geometry>::type ncg_type;
-
-    return dispatch::self_intersection_points
-            <
-                typename tag<ncg_type>::type,
-                is_multi<ncg_type>::type::value,
-                ncg_type,
-               IntersectionPoints
-            >::apply(geometry, false, intersection_points);
-}
-
-
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_SELF_INTERSECTION_POINTS_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/overlay/traverse.hpp b/include/builtin-ggl/ggl/algorithms/overlay/traverse.hpp
deleted file mode 100644
index 39cadfb..0000000
--- a/include/builtin-ggl/ggl/algorithms/overlay/traverse.hpp
+++ /dev/null
@@ -1,437 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_OVERLAY_TRAVERSE_HPP
-#define GGL_ALGORITHMS_OVERLAY_TRAVERSE_HPP
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/coordinate_dimension.hpp>
-
-#include <ggl/algorithms/overlay/copy_segments.hpp>
-
-#ifdef GGL_DEBUG_INTERSECTION
-#include <ggl/extensions/gis/io/wkt/write_wkt.hpp>
-#endif
-
-
-namespace ggl
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersection {
-
-
-const int VISIT_NONE = 0;
-const int VISIT_START = 1;
-const int VISIT_VISITED = 2;
-const int VISIT_FINISH = 3;
-const int VISIT_WITHIN = 4;
-
-
-template
-<
-    typename IntersectionPoint,
-    typename IntersectionInfo
->
-struct on_direction
-{
-    on_direction(IntersectionPoint const& ip, int direction)
-        : m_ip(ip)
-        , m_direction(direction)
-    {}
-
-    // TEMP: convenient COPY of side
-    template <typename P1, typename P2, typename P>
-    static inline int side(P1 const& p1, P2 const& p2, P const& p)
-    {
-        typedef typename select_coordinate_type<P, P1>::type T;
-
-        T dx = get<0>(p2) - get<0>(p1);
-        T dy = get<1>(p2) - get<1>(p1);
-        T dpx = get<0>(p) - get<0>(p1);
-        T dpy = get<1>(p) - get<1>(p1);
-        T product =  dx * dpy - dy * dpx;
-        return product > 0 ? 1 : product < 0 ? -1 : 0;
-    }
-
-    inline bool operator()(IntersectionInfo const& first, IntersectionInfo const& second) const
-    {
-        int dir = side(m_ip, first->other_point, second->other_point);
-        return m_direction == dir;
-    }
-
-private :
-    IntersectionPoint const& m_ip;
-    int m_direction;
-};
-
-
-template
-<
-    typename GeometryOut,
-    typename G1,
-    typename G2,
-    typename IntersectionPoints,
-    typename IntersectionInfo
->
-inline bool assign_next_ip(G1 const& g1, G2 const& g2, int direction,
-            IntersectionPoints& intersection_points,
-            typename boost::range_iterator<IntersectionPoints>::type & ip,
-            GeometryOut& current_output,
-            IntersectionInfo & info)
-{
-    info.visit_code = VISIT_VISITED;
-
-#ifdef GGL_DEBUG_INTERSECTION
-    std::cout << " take: " << info << std::endl;
-#endif
-
-    // If there is no next IP on this segment
-    if (info.next_ip_index < 0)
-    {
-        if (info.seg_id.source_index == 0)
-        {
-            ggl::copy_segments(g1, info.seg_id,
-                    info.travels_to_vertex_index,
-                    current_output);
-        }
-        else
-        {
-            ggl::copy_segments(g2, info.seg_id,
-                    info.travels_to_vertex_index,
-                    current_output);
-        }
-        ip = boost::begin(intersection_points) + info.travels_to_ip_index;
-    }
-    else
-    {
-        ip = boost::begin(intersection_points) + info.next_ip_index;
-    }
-    current_output.push_back(ip->point);
-
-    return true;
-}
-
-template <typename Info>
-inline bool turning(Info const& info, int direction)
-{
-    // If it is turning in specified direction (RIGHT for intersection,
-    // LEFT for union, and NOT arriving at that point
-    return info.direction == direction
-        && info.arrival != 1
-        //&& (! (info.how == 'a' && info.direction != 0))
-        ;
-}
-
-template
-<
-    typename GeometryOut,
-    typename G1,
-    typename G2,
-    typename IntersectionPoints
->
-inline bool select_next_ip_trivial(G1 const& g1, G2 const& g2, int direction,
-            IntersectionPoints& intersection_points,
-            typename boost::range_iterator<IntersectionPoints>::type & ip,
-            GeometryOut& current_output)
-{
-    // Check all intersecting segments on this IP:
-    typedef typename boost::range_value<IntersectionPoints>::type ip_type;
-    typedef typename ip_type::traversal_vector tv;
-    typedef typename boost::range_iterator<tv>::type tit_type;
-
-    for (tit_type it = boost::begin(ip->info); it != boost::end(ip->info); ++it)
-    {
-        if (turning(*it, direction))
-        {
-            return assign_next_ip(g1, g2, direction,
-                        intersection_points, ip, current_output, *it);
-        }
-    }
-
-    return false;
-}
-
-
-template
-<
-    typename GeometryOut,
-    typename G1,
-    typename G2,
-    typename IntersectionPoints
->
-inline bool select_next_ip_with_sorting(G1 const& g1, G2 const& g2,
-            int direction,
-            IntersectionPoints& intersection_points,
-            typename boost::range_iterator<IntersectionPoints>::type & ip,
-            GeometryOut& current_output)
-{
-
-    typedef typename boost::range_value<IntersectionPoints>::type ip_type;
-    typedef typename ip_type::traversal_vector tv;
-    typedef typename boost::range_iterator<tv>::type tit_type;
-    typedef typename ip_type::traversal_type info_type;
-
-    std::vector<info_type*> info;
-    for (tit_type it = boost::begin(ip->info); it != boost::end(ip->info); ++it)
-    {
-        if (turning(*it, direction))
-        {
-            info.push_back(&(*it));
-        }
-    }
-
-    // If there are no intersection points, fall-back to collinear cases or
-    // if already in that case, return false.
-    if (boost::size(info) == 0)
-    {
-        return direction == 0
-            ? false
-            : select_next_ip_with_sorting(g1, g2, 0,
-                            intersection_points, ip, current_output);
-    }
-
-    // For one IP, it is easy: take that one.
-    if (boost::size(info) == 1)
-    {
-        return assign_next_ip(g1, g2, direction,
-                    intersection_points, ip, current_output, *info.front());
-    }
-
-    // In case of direction 0, also take first one
-    // TODO: sort this vector somehow, there are more rows, it is too
-    // arbitrary to take first one (though working well)
-    if (direction == 0)
-    {
-        return assign_next_ip(g1, g2, direction,
-                    intersection_points, ip, current_output, *info.front());
-    }
-
-
-    // For more, sort the information on direction, take the most left / right one
-    //std::cout << " " << boost::size(info);
-    std::sort(info.begin(), info.end(), on_direction<ip_type, info_type*>(*ip, direction));
-    return assign_next_ip(g1, g2, direction, intersection_points, ip, current_output, *info.back());
-}
-
-template
-<
-    typename GeometryOut,
-    typename G1,
-    typename G2,
-    typename IntersectionPoints
->
-inline bool select_next_ip(G1 const& g1, G2 const& g2, int direction,
-            IntersectionPoints& intersection_points,
-            typename boost::range_iterator<IntersectionPoints>::type & ip,
-            GeometryOut& current_output)
-{
-    if (ip->trivial)
-    {
-        return select_next_ip_trivial(g1, g2, direction, intersection_points,
-                ip, current_output);
-    }
-    else
-    {
-        return select_next_ip_with_sorting(g1, g2, direction, intersection_points,
-                ip, current_output);
-    }
-}
-
-
-template<typename IntersectionPoint>
-inline bool is_starting_point(IntersectionPoint const& ip, int direction)
-{
-    for (typename IntersectionPoint::traversal_vector::const_iterator it
-        = boost::begin(ip.info); it != boost::end(ip.info); ++it)
-    {
-        if (it->direction == direction
-            && it->arrival != 1)
-        {
-            return true;
-        }
-    }
-    return false;
-}
-
-
-template <typename Container>
-inline void stop_gracefully(Container& container, bool& stop,
-            std::string const& reason)
-{
-#ifdef GGL_DEBUG_INTERSECTION
-    std::cout << "STOPPING: " << reason << std::endl;
-#endif
-
-    stop = true;
-    if (container.size() > 0)
-    {
-        container.push_back(container.front());
-    }
-}
-
-}} // namespace detail::intersection
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-
-
-/*!
-    \brief Traverses through intersection points / geometries
-    \ingroup overlay
- */
-template
-<
-    typename GeometryOut,
-    typename Geometry1,
-    typename Geometry2,
-    typename IntersectionPoints,
-    typename OutputIterator
->
-inline void traverse(Geometry1 const& geometry1,
-            Geometry2 const& geometry2, int direction,
-            IntersectionPoints& intersection_points,
-            bool /* trivial */,
-            OutputIterator out)
-{
-    typedef typename boost::range_iterator
-                <IntersectionPoints>::type ip_iterator;
-
-    typedef typename boost::range_value<IntersectionPoints>::type ip_type;
-    typedef typename ip_type::traversal_vector tv;
-    typedef typename boost::range_iterator<tv>::type tit_type;
-    typedef typename ip_type::traversal_type info_type;
-
-
-
-    GeometryOut current_output;
-
-
-    // Iterate through all unvisited points
-    for (ip_iterator it = boost::begin(intersection_points);
-        it != boost::end(intersection_points);
-        ++it)
-    {
-#ifdef GGL_DEBUG_INTERSECTION
-        std::cout << "TRY traversal: " << *it;
-#endif
-
-        if (it->visit_code == detail::intersection::VISIT_NONE
-            // UNION may operate on non-starting points, but INTERSECTION may not.
-            // TODO: re-evaluate that
-            && (direction == 1
-            || detail::intersection::is_starting_point(*it, direction)
-                )
-            )
-        {
-            for (tit_type iit = boost::begin(it->info);
-                iit != boost::end(it->info);
-                ++iit)
-            {
-                if (iit->arrival == -1
-                    && iit->visit_code == detail::intersection::VISIT_NONE
-                    && iit->direction == direction)
-                {
-                    it->visit_code = detail::intersection::VISIT_START;
-                    iit->visit_code = detail::intersection::VISIT_START;
-
-                    current_output.push_back(it->point);
-
-                    ip_iterator current = it;
-
-#ifdef GGL_DEBUG_INTERSECTION
-                    std::cout << "START traversal: " << *current;
-#endif
-
-                    detail::intersection::assign_next_ip(geometry1, geometry2,
-                                direction,
-                                intersection_points,
-                                current, current_output, *iit);
-
-                    std::vector<segment_identifier> segments;
-                    segments.push_back(iit->seg_id);
-
-                    unsigned int i = 0;
-                    bool stop = false;
-
-                    while (current != it && ! stop)
-                    {
-#ifdef GGL_DEBUG_INTERSECTION
-                        std::cout << "traverse: " << *current;
-#endif
-
-                        // We assume clockwise polygons only, non self-intersecting, closed.
-                        // However, the input might be different, and checking validity
-                        // is up to the library user.
-
-                        // Therefore we make here some sanity checks. If the input
-                        // violates the assumptions, the output polygon will not be correct
-                        // but the routine will stop and output the current polygon, and
-                        // will continue with the next one.
-
-                        // Below three reasons to stop.
-                        if (! detail::intersection::select_next_ip(geometry1,
-                                    geometry2, direction,
-                                    intersection_points,
-                                    current, current_output))
-                        {
-                            // Should not occur in valid (non-self-intersecting) polygons
-                            // Should not occur in self-intersecting polygons without spikes
-                            // Might occur in polygons with spikes
-                            detail::intersection::stop_gracefully(
-                                current_output, stop, "Dead end");
-                        }
-
-                        if (current->visit_code == detail::intersection::VISIT_VISITED)
-                        {
-                            // It visits a visited node again, without passing the start node.
-                            // This makes it suspicious for endless loops
-                            // Check if it is really same node
-                            detail::intersection::stop_gracefully(
-                                current_output, stop, "Visit again");
-                        }
-
-
-                        if (i++ > intersection_points.size())
-                        {
-                            // Sanity check: there may be never more loops
-                            // than intersection points.
-                            detail::intersection::stop_gracefully(
-                                current_output, stop, "Endless loop");
-                        }
-
-                        current->visit_code = detail::intersection::VISIT_VISITED;
-                    }
-
-                    iit->visit_code = detail::intersection::VISIT_FINISH;
-
-#ifdef GGL_DEBUG_INTERSECTION
-                    std::cout << "finish: " << *current;
-                    std::cout << ggl::wkt(current_output) << std::endl;
-#endif
-
-                    *out = current_output;
-                    ++out;
-                    current_output.clear();
-                }
-            }
-            it->visit_code = detail::intersection::VISIT_FINISH;
-        }
-    }
-}
-
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_OVERLAY_TRAVERSE_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/parse.hpp b/include/builtin-ggl/ggl/algorithms/parse.hpp
deleted file mode 100644
index b060b04..0000000
--- a/include/builtin-ggl/ggl/algorithms/parse.hpp
+++ /dev/null
@@ -1,117 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_PARSE_HPP
-#define GGL_ALGORITHMS_PARSE_HPP
-
-#include <string>
-
-#include <boost/concept/requires.hpp>
-
-#include <ggl/core/tags.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/strategies/strategies.hpp>
-
-// TODO: remove used EXTENSION here (result should be part of parsing strategy)
-#include <ggl/extensions/gis/latlong/strategies/dms_parser.hpp>
-
-/*!
-\defgroup parse parse and assign string values
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-template <typename Tag, typename G>
-struct parsing
-{
-};
-
-template <typename P>
-struct parsing<point_tag, P>
-{
-    template <typename S>
-    static inline void parse(P& point, std::string const& c1, std::string const& c2, S const& strategy)
-    {
-        assert_dimension<P, 2>();
-        dms_result r1 = strategy(c1.c_str());
-        dms_result r2 = strategy(c2.c_str());
-
-        if (0 == r1.axis())
-            set<0>(point, r1);
-        else
-            set<1>(point, r1);
-
-        if (0 == r2.axis())
-            set<0>(point, r2);
-        else
-            set<1>(point, r2);
-    }
-
-    static inline void parse(P& point, std::string const& c1, std::string const& c2)
-    {
-        // strategy-parser corresponding to degree/radian
-        typename strategy_parse
-            <
-            typename cs_tag<P>::type,
-            typename coordinate_system<P>::type
-            >::type strategy;
-
-        parse(point, c1, c2, strategy);
-    }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief parse two strings to a spherical/geographic point, using W/E/N/S
-    \ingroup parse
- */
-template <typename G>
-inline void parse(G& geometry, const std::string& c1, const std::string& c2)
-{
-    dispatch::parsing<typename tag<G>::type, G>::parse(geometry, c1, c2);
-}
-
-/*!
-    \brief parse two strings to a spherical/geographic point, using a specified strategy
-    \details user can use N/E/S/O or N/O/Z/W or other formats
-    \ingroup parse
- */
-template <typename G, typename S>
-inline void parse(G& geometry, const std::string& c1, const std::string& c2, S const& strategy)
-{
-    dispatch::parsing<typename tag<G>::type, G>::parse(geometry, c1, c2, strategy);
-}
-
-// There will be a parsing function with three arguments (ANGLE,ANGLE,RADIUS)
-
-template <typename G>
-inline G parse(const std::string& c1, const std::string& c2)
-{
-    G geometry;
-    dispatch::parsing<typename tag<G>::type, G>::parse(geometry, c1, c2);
-    return geometry;
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_PARSE_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/perimeter.hpp b/include/builtin-ggl/ggl/algorithms/perimeter.hpp
deleted file mode 100644
index ee5c7cb..0000000
--- a/include/builtin-ggl/ggl/algorithms/perimeter.hpp
+++ /dev/null
@@ -1,141 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_PERIMETER_HPP
-#define GGL_ALGORITHMS_PERIMETER_HPP
-
-#include <cmath>
-#include <iterator>
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/length.hpp>
-#include <ggl/core/cs.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/strategies/strategies.hpp>
-
-/*!
-\defgroup perimeter perimeter calculation
-The perimeter algorithm is implemented for polygon,box,linear_ring,multi_polygon
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace perimeter {
-
-template<typename R, typename S>
-struct range_perimeter : detail::length::range_length<R, S>
-{
-};
-
-// might be merged with "range_area" with policy to sum/subtract interior rings
-template<typename Polygon, typename S>
-struct polygon_perimeter
-{
-    static inline double apply(Polygon const& poly, S const& strategy)
-    {
-        typedef typename ring_type<Polygon>::type ring_type;
-        typedef typename boost::range_const_iterator
-            <
-            typename interior_type<Polygon>::type
-            >::type iterator_type;
-
-        double sum = std::abs(range_perimeter<ring_type, S>::apply(exterior_ring(poly), strategy));
-
-        for (iterator_type it = boost::begin(interior_rings(poly));
-             it != boost::end(interior_rings(poly)); it++)
-        {
-            sum += std::abs(range_perimeter<ring_type, S>::apply(*it, strategy));
-        }
-        return sum;
-    }
-};
-
-}} // namespace detail:;perimeter
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-// Default perimeter is 0.0, specializations implement calculated values
-template <typename Tag, typename Geometry, typename Strategy>
-struct perimeter : detail::calculate_null<double, Geometry, Strategy>
-{};
-
-template <typename Geometry, typename Strategy>
-struct perimeter<ring_tag, Geometry, Strategy>
-    : detail::perimeter::range_perimeter<Geometry, Strategy>
-{};
-
-template <typename Geometry, typename Strategy>
-struct perimeter<polygon_tag, Geometry, Strategy>
-    : detail::perimeter::polygon_perimeter<Geometry, Strategy>
-{};
-
-
-// box,n-sphere: to be implemented
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief Calculate perimeter of a geometry
-    \ingroup perimeter
-    \details The function perimeter returns the perimeter of a geometry, using the default distance-calculation-strategy
-    \param geometry the geometry, be it a ggl::ring, vector, iterator pair, or any other boost compatible range
-    \return the perimeter
- */
-template<typename Geometry>
-inline double perimeter(Geometry const& geometry)
-{
-    typedef typename point_type<Geometry>::type point_type;
-    typedef typename cs_tag<point_type>::type cs_tag;
-    typedef typename strategy_distance
-        <
-            cs_tag,
-            cs_tag,
-            point_type,
-            point_type
-        >::type strategy_type;
-
-    return dispatch::perimeter
-        <
-            typename tag<Geometry>::type,
-            Geometry,
-            strategy_type
-        >::apply(geometry, strategy_type());
-}
-
-/*!
-    \brief Calculate perimeter of a geometry
-    \ingroup perimeter
-    \details The function perimeter returns the perimeter of a geometry, using specified strategy
-    \param geometry the geometry, be it a ggl::ring, vector, iterator pair, or any other boost compatible range
-    \param strategy strategy to be used for distance calculations.
-    \return the perimeter
- */
-template<typename Geometry, typename Strategy>
-inline double perimeter(Geometry const& geometry, Strategy const& strategy)
-{
-    return dispatch::perimeter
-        <
-            typename tag<Geometry>::type,
-            Geometry,
-            Strategy
-        >::apply(geometry, strategy);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_PERIMETER_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/point_on_line.hpp b/include/builtin-ggl/ggl/algorithms/point_on_line.hpp
deleted file mode 100644
index c3b5efc..0000000
--- a/include/builtin-ggl/ggl/algorithms/point_on_line.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_POINT_ON_LINE_HPP
-#define GGL_ALGORITHMS_POINT_ON_LINE_HPP
-
-#include <boost/concept/requires.hpp>
-
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/algorithms/distance.hpp>
-
-namespace ggl
-{
-
-//----------------------------------------------------------------------
-// Function     : point_on_linestring -> rename to alongLine NO, different
-//----------------------------------------------------------------------
-// Purpose      : Calculates coordinates of a point along a given line
-//                on a specified distance
-// Parameters   : const L& : line,
-//                float position: position to calculate point
-//                P& point: point to calculate
-// Return       : true if point lies on line
-//----------------------------------------------------------------------
-// Author       : Barend, Geodan BV Amsterdam
-// Date         : spring 1996
-//----------------------------------------------------------------------
-template <typename P, typename L>
-bool point_on_linestring(const L& line, const double& position, P& point)
-{
-    double current_distance = 0.0;
-    if (line.size() < 2)
-    {
-        return false;
-    }
-
-    typename L::const_iterator vertex = line.begin();
-    typename L::const_iterator previous = vertex++;
-
-    while (vertex != line.end())
-    {
-        double const dist = distance(*previous, *vertex);
-        current_distance += dist;
-
-        if (current_distance > position)
-        {
-            // It is not possible that dist == 0 here because otherwise
-            // the current_distance > position would not become true (current_distance is increased by dist)
-            double const fraction = 1.0 - ((current_distance - position) / dist);
-
-            // point i is too far, point i-1 to near, add fraction of
-            // distance in each direction
-            point.x ( previous->x() + (vertex->x() - previous->x()) * fraction);
-            point.y ( previous->y() + (vertex->y() - previous->y()) * fraction);
-
-            return true;
-        }
-        previous = vertex++;
-    }
-
-    // point at specified position does not lie on line
-    return false;
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_POINT_ON_LINE_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/remove_holes_if.hpp b/include/builtin-ggl/ggl/algorithms/remove_holes_if.hpp
deleted file mode 100644
index 3f11c39..0000000
--- a/include/builtin-ggl/ggl/algorithms/remove_holes_if.hpp
+++ /dev/null
@@ -1,132 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHM_REMOVE_HOLES_IF_HPP
-#define GGL_ALGORITHM_REMOVE_HOLES_IF_HPP
-
-#include <algorithm>
-
-#include <ggl/algorithms/area.hpp>
-#include <ggl/algorithms/perimeter.hpp>
-
-#include <ggl/core/interior_rings.hpp>
-
-
-
-namespace ggl
-{
-
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace remove_holes_if {
-
-
-template<typename Polygon, typename Predicate>
-struct polygon_remove_holes_if
-{
-    static inline void apply(Polygon& poly, Predicate const& predicate)
-    {
-        typename interior_type<Polygon>::type& rings = interior_rings(poly);
-
-        // Remove rings using erase-remove-idiom
-        // http://en.wikipedia.org/wiki/Erase-remove_idiom
-        rings.erase(
-            std::remove_if(boost::begin(rings), boost::end(rings), predicate),
-            boost::end(rings));
-    }
-};
-
-}} // namespace detail::remove_holes_if
-
-
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-// Default implementation does nothing
-template <typename Tag, typename Geometry, typename Predicate>
-struct remove_holes_if
-{
-    static inline void apply(Geometry&, Predicate const& )
-    {}
-};
-
-
-
-template <typename Geometry, typename Predicate>
-struct remove_holes_if<polygon_tag, Geometry, Predicate>
-    : detail::remove_holes_if::polygon_remove_holes_if<Geometry, Predicate>
-{
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-/*!
-    \brief Remove holes from a geometry (polygon, multi-polygon) using a specified condition
- */
-template <typename Geometry, typename Predicate>
-inline void remove_holes_if(Geometry& geometry, Predicate const& predicate)
-{
-    dispatch::remove_holes_if
-        <
-            typename tag<Geometry>::type,
-            Geometry,
-            Predicate
-        >::apply(geometry, predicate);
-}
-
-
-
-
-
-
-
-// CONVENIENT PREDICATES might be moved elsewhere
-template <typename Ring>
-struct elongated_hole
-{
-    inline elongated_hole(double ratio)
-        : m_ratio(ratio)
-    {}
-
-    inline bool operator()(Ring const& ring) const
-    {
-        if (ring.size() >= 4)
-        {
-            double a = area(ring);
-            double p = perimeter(ring);
-            return std::abs(a/p) < m_ratio;
-        }
-        // Rings with less then 4 points (including closing)
-        // are also considered as small and thus removed
-        return true;
-    }
-private :
-    double m_ratio;
-};
-
-
-template <typename Ring>
-struct invalid_hole
-{
-    inline bool operator()(Ring const& ring) const
-    {
-        return ring.size() < 4;
-    }
-};
-
-
-} // namespace ggl
-
-
-#endif // GGL_ALGORITHM_REMOVE_HOLES_IF_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/sectionalize.hpp b/include/builtin-ggl/ggl/algorithms/sectionalize.hpp
deleted file mode 100644
index 1236c23..0000000
--- a/include/builtin-ggl/ggl/algorithms/sectionalize.hpp
+++ /dev/null
@@ -1,579 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_SECTIONALIZE_HPP
-#define GGL_ALGORITHMS_SECTIONALIZE_HPP
-
-#include <cstddef>
-#include <vector>
-
-#include <boost/concept_check.hpp>
-#include <boost/concept/requires.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/assign.hpp>
-#include <ggl/algorithms/combine.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/exterior_ring.hpp>
-
-#include <ggl/iterators/point_const_iterator.hpp>
-
-#include <ggl/util/assign_box_corner.hpp>
-#include <ggl/util/math.hpp>
-#include <ggl/geometries/segment.hpp>
-
-
-/*!
-\defgroup sectionalize sectionalize: split a geometry (polygon, linestring, etc)
-    into monotonic sections
-
-\par Geometries:
-- LINESTRING:
-- RING:
-- POLYGON:
-- BOX
-*/
-
-namespace ggl
-{
-
-
-/*!
-    \brief Structure containing section information
-    \details Section information consists of a bounding box, direction
-        information (if it is increasing or decreasing, per dimension),
-        index information (begin-end, ring, multi) and the number of
-        segments in this section
-
-    \tparam Box box-type
-    \tparam DimensionCount number of dimensions for this section
-    \ingroup sectionalize
- */
-template <typename Box, std::size_t DimensionCount>
-struct section
-{
-    typedef Box box_type;
-
-    int directions[DimensionCount];
-    int ring_index;
-    int multi_index;
-    Box bounding_box;
-
-    int begin_index;
-    int end_index;
-    std::size_t count;
-    std::size_t range_count;
-    bool duplicate;
-    int non_duplicate_index;
-
-
-    inline section()
-        : ring_index(-99)
-        , multi_index(-99)
-        , begin_index(-1)
-        , end_index(-1)
-        , count(0)
-        , range_count(0)
-        , duplicate(false)
-        , non_duplicate_index(-1)
-    {
-        assign_inverse(bounding_box);
-        for (register std::size_t i = 0; i < DimensionCount; i++)
-        {
-            directions[i] = 0;
-        }
-    }
-};
-
-
-/*!
-    \brief Structure containing a collection of sections
-    \note Derived from a vector, proves to be faster than of deque
-    \note vector might be templated in the future
-    \ingroup sectionalize
- */
-template <typename Box, std::size_t DimensionCount>
-struct sections : std::vector<section<Box, DimensionCount> >
-{
-    typedef Box box_type;
-    static const std::size_t value = DimensionCount;
-};
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace sectionalize {
-
-template <typename Segment, std::size_t Dimension, std::size_t DimensionCount>
-struct get_direction_loop
-{
-    typedef typename coordinate_type<Segment>::type coordinate_type;
-
-    static inline void apply(Segment const& seg,
-                int directions[DimensionCount])
-    {
-        coordinate_type const diff =
-            ggl::get<1, Dimension>(seg) - ggl::get<0, Dimension>(seg);
-
-        directions[Dimension] = diff > 0 ? 1 : (diff < 0 ? -1 : 0);
-
-        get_direction_loop
-            <
-                Segment, Dimension + 1, DimensionCount
-            >::apply(seg, directions);
-    }
-};
-
-template <typename Segment, std::size_t DimensionCount>
-struct get_direction_loop<Segment, DimensionCount, DimensionCount>
-{
-    static inline void apply(Segment const& seg,
-                int directions[DimensionCount])
-    {
-        boost::ignore_unused_variable_warning(seg);
-        boost::ignore_unused_variable_warning(directions);
-    }
-};
-
-template <typename T, std::size_t Dimension, std::size_t DimensionCount>
-struct copy_loop
-{
-    static inline void apply(const T source[DimensionCount],
-                T target[DimensionCount])
-    {
-        target[Dimension] = source[Dimension];
-        copy_loop<T, Dimension + 1, DimensionCount>::apply(source, target);
-    }
-};
-
-template <typename T, std::size_t DimensionCount>
-struct copy_loop<T, DimensionCount, DimensionCount>
-{
-    static inline void apply(const T source[DimensionCount],
-                T target[DimensionCount])
-    {
-        boost::ignore_unused_variable_warning(source);
-        boost::ignore_unused_variable_warning(target);
-    }
-};
-
-template <typename T, std::size_t Dimension, std::size_t DimensionCount>
-struct compare_loop
-{
-    static inline bool apply(const T source[DimensionCount],
-                const T target[DimensionCount])
-    {
-        bool const not_equal = target[Dimension] != source[Dimension];
-
-        return not_equal
-            ? false
-            : compare_loop
-                <
-                    T, Dimension + 1, DimensionCount
-                >::apply(source, target);
-    }
-};
-
-template <typename T, std::size_t DimensionCount>
-struct compare_loop<T, DimensionCount, DimensionCount>
-{
-    static inline bool apply(const T source[DimensionCount],
-                const T target[DimensionCount])
-    {
-        boost::ignore_unused_variable_warning(source);
-        boost::ignore_unused_variable_warning(target);
-
-        return true;
-    }
-};
-
-
-template <typename Segment, std::size_t Dimension, std::size_t DimensionCount>
-struct check_duplicate_loop
-{
-    typedef typename coordinate_type<Segment>::type coordinate_type;
-
-    static inline bool apply(Segment const& seg)
-    {
-        coordinate_type const diff =
-            ggl::get<1, Dimension>(seg) - ggl::get<0, Dimension>(seg);
-
-        if (! ggl::math::equals(diff, 0))
-        {
-            return false;
-        }
-
-        return check_duplicate_loop
-            <
-                Segment, Dimension + 1, DimensionCount
-            >::apply(seg);
-    }
-};
-
-template <typename Segment, std::size_t DimensionCount>
-struct check_duplicate_loop<Segment, DimensionCount, DimensionCount>
-{
-    static inline bool apply(Segment const&)
-    {
-        return true;
-    }
-};
-
-template <typename T, std::size_t Dimension, std::size_t DimensionCount>
-struct assign_loop
-{
-    static inline void apply(T dims[DimensionCount], int const value)
-    {
-        dims[Dimension] = value;
-        assign_loop<T, Dimension + 1, DimensionCount>::apply(dims, value);
-    }
-};
-
-template <typename T, std::size_t DimensionCount>
-struct assign_loop<T, DimensionCount, DimensionCount>
-{
-    static inline void apply(T dims[DimensionCount], int const)
-    {
-        boost::ignore_unused_variable_warning(dims);
-    }
-};
-
-
-template
-<
-    typename Range,
-    typename Point,
-    typename Sections,
-    std::size_t DimensionCount,
-    std::size_t MaxCount
->
-struct sectionalize_range
-{
-    static inline void apply(Range const& range, Sections& sections,
-                int ring_index = -1, int multi_index = -1)
-    {
-        typedef segment<const Point> segment_type;
-
-        std::size_t const n = boost::size(range);
-        if (n == 0)
-        {
-            // Zero points, no section
-            return;
-        }
-
-        if (n == 1)
-        {
-            // Line with one point ==> no sections
-            return;
-        }
-
-        int i = 0;
-        int ndi = 0; // non duplicate index
-
-        typedef typename boost::range_value<Sections>::type sections_range_type;
-        sections_range_type section;
-
-        typedef typename boost::range_const_iterator<Range>::type iterator_type;
-        iterator_type it = boost::begin(range);
-
-        for(iterator_type previous = it++;
-            it != boost::end(range);
-            previous = it++, i++)
-        {
-            segment_type s(*previous, *it);
-
-            int direction_classes[DimensionCount] = {0};
-            get_direction_loop
-                <
-                    segment_type, 0, DimensionCount
-                >::apply(s, direction_classes);
-
-            // if "dir" == 0 for all point-dimensions, it is duplicate.
-            // Those sections might be omitted, if wished, lateron
-            bool check_duplicate = true; //?
-            bool duplicate = false;
-
-            if (check_duplicate && direction_classes[0] == 0)
-            {
-                // Recheck because all dimensions should be checked,
-                // not only first one,
-                // Note that DimensionCount might be < dimension<P>::value
-                if (check_duplicate_loop
-                    <
-                        segment_type, 0, ggl::dimension<Point>::type::value
-                    >::apply(s)
-                    )
-                {
-                    duplicate = true;
-
-                    // Change direction-info to force new section
-                    // Note that wo consecutive duplicate segments will generate
-                    // only one duplicate-section.
-                    // Actual value is not important as long as it is not -1,0,1
-                    assign_loop
-                    <
-                        int, 0, DimensionCount
-                    >::apply(direction_classes, -99);
-                }
-            }
-
-            if (section.count > 0
-                && (!compare_loop
-                        <
-                            int, 0, DimensionCount
-                        >::apply(direction_classes, section.directions)
-                    || section.count > MaxCount
-                    )
-                )
-            {
-                sections.push_back(section);
-                section = sections_range_type();
-            }
-
-            if (section.count == 0)
-            {
-                section.begin_index = i;
-                section.ring_index = ring_index;
-                section.multi_index = multi_index;
-                section.duplicate = duplicate;
-                section.non_duplicate_index = ndi;
-                section.range_count = boost::size(range);
-
-                copy_loop
-                    <
-                        int, 0, DimensionCount
-                    >::apply(direction_classes, section.directions);
-                ggl::combine(section.bounding_box, *previous);
-            }
-
-            ggl::combine(section.bounding_box, *it);
-            section.end_index = i + 1;
-            section.count++;
-            if (! duplicate)
-            {
-                ndi++;
-            }
-        }
-
-        if (section.count > 0)
-        {
-            sections.push_back(section);
-        }
-    }
-};
-
-template
-<
-    typename Polygon,
-    typename Sections,
-    std::size_t DimensionCount,
-    std::size_t MaxCount
->
-struct sectionalize_polygon
-{
-    static inline void apply(Polygon const& poly, Sections& sections,
-                int multi_index = -1)
-    {
-        typedef typename point_type<Polygon>::type point_type;
-        typedef typename ring_type<Polygon>::type ring_type;
-        typedef sectionalize_range
-            <
-                ring_type, point_type, Sections, DimensionCount, MaxCount
-            > sectionalizer_type;
-
-        typedef typename boost::range_const_iterator
-            <
-            typename interior_type<Polygon>::type
-            >::type iterator_type;
-
-        sectionalizer_type::apply(exterior_ring(poly), sections, -1, multi_index);
-
-        int i = 0;
-        for (iterator_type it = boost::begin(interior_rings(poly));
-             it != boost::end(interior_rings(poly));
-             ++it, ++i)
-        {
-            sectionalizer_type::apply(*it, sections, i, multi_index);
-        }
-    }
-};
-
-template
-<
-    typename Box,
-    typename Sections,
-    std::size_t DimensionCount,
-    std::size_t MaxCount
->
-struct sectionalize_box
-{
-    static inline void apply(Box const& box, Sections& sections)
-    {
-        typedef typename point_type<Box>::type point_type;
-
-        assert_dimension<Box, 2>();
-
-        // Add all four sides of the 2D-box as separate section.
-        // Easiest is to convert it to a polygon.
-        // However, we don't have the polygon type
-        // (or polygon would be a helper-type).
-        // Therefore we mimic a linestring/std::vector of 5 points
-
-        point_type ll, lr, ul, ur;
-        assign_box_corners(box, ll, lr, ul, ur);
-
-        std::vector<point_type> points;
-        points.push_back(ll);
-        points.push_back(ul);
-        points.push_back(ur);
-        points.push_back(lr);
-        points.push_back(ll);
-
-        sectionalize_range
-            <
-                std::vector<point_type>,
-                point_type,
-                Sections,
-                DimensionCount,
-                MaxCount
-            >::apply(points, sections);
-    }
-};
-
-}} // namespace detail::sectionalize
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
-    typename Tag,
-    typename Geometry,
-    typename Sections,
-    std::size_t DimensionCount,
-    std::size_t MaxCount
->
-struct sectionalize
-{};
-
-template
-<
-    typename Box,
-    typename Sections,
-    std::size_t DimensionCount,
-    std::size_t MaxCount
->
-struct sectionalize<box_tag, Box, Sections, DimensionCount, MaxCount>
-    : detail::sectionalize::sectionalize_box
-        <
-            Box,
-            Sections,
-            DimensionCount,
-            MaxCount
-        >
-{};
-
-template
-<
-    typename LineString, typename
-    Sections,
-    std::size_t DimensionCount,
-    std::size_t MaxCount
->
-struct sectionalize
-    <
-        linestring_tag,
-        LineString,
-        Sections,
-        DimensionCount,
-        MaxCount
-    >
-    : detail::sectionalize::sectionalize_range
-        <
-            LineString,
-            typename point_type<LineString>::type,
-            Sections,
-            DimensionCount,
-            MaxCount
-        >
-{};
-
-template
-<
-    typename Range,
-    typename Sections,
-    std::size_t DimensionCount,
-    std::size_t MaxCount
->
-struct sectionalize<ring_tag, Range, Sections, DimensionCount, MaxCount>
-    : detail::sectionalize::sectionalize_range
-        <
-            Range,
-            typename point_type<Range>::type,
-            Sections,
-            DimensionCount,
-            MaxCount
-        >
-{};
-
-template
-<
-    typename Polygon,
-    typename Sections,
-    std::size_t DimensionCount,
-    std::size_t MaxCount
->
-struct sectionalize<polygon_tag, Polygon, Sections, DimensionCount, MaxCount>
-    : detail::sectionalize::sectionalize_polygon
-        <
-            Polygon, Sections, DimensionCount, MaxCount
-        >
-{};
-
-} // namespace dispatch
-#endif
-
-
-/*!
-    \brief Split a geometry into monotonic sections
-    \ingroup sectionalize
-    \tparam Geometry type of geometry to check
-    \tparam Sections type of sections to create
-    \param geometry geometry to create sections from
-    \param sections structure with sections
-
- */
-template<typename Geometry, typename Sections>
-inline void sectionalize(Geometry const& geometry, Sections& sections)
-{
-    // A maximum of 10 segments per section seems to give the fastest results
-    static const std::size_t max_segments_per_section = 10;
-    typedef dispatch::sectionalize
-        <
-            typename tag<Geometry>::type,
-            Geometry,
-            Sections,
-            Sections::value,
-            max_segments_per_section
-        > sectionalizer_type;
-
-    sections.clear();
-    sectionalizer_type::apply(geometry, sections);
-}
-
-
-
-
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_SECTIONALIZE_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/selected.hpp b/include/builtin-ggl/ggl/algorithms/selected.hpp
deleted file mode 100644
index 8d8189e..0000000
--- a/include/builtin-ggl/ggl/algorithms/selected.hpp
+++ /dev/null
@@ -1,278 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_SELECTED_HPP
-#define GGL_ALGORITHMS_SELECTED_HPP
-
-#include <cmath>
-#include <cstddef>
-
-#include <boost/concept/requires.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/within.hpp>
-#include <ggl/core/access.hpp>
-#include <ggl/core/topological_dimension.hpp>
-#include <ggl/core/concepts/nsphere_concept.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-
-/*!
-\defgroup selected selection: check if a geometry is "selected" by a point
-
-Checks if one geometry is selected by a point lying within or in the neighborhood of that geometry
-
-\par Geometries:
-- POINT: checks if points are CLOSE TO each other (< search_radius)
-- LINESTRING: checks if selection point is CLOSE TO linestring (< search_radius)
-- RING: checks if selection point is INSIDE the ring, search radius is ignored
-- POLYGON: checks if selection point is INSIDE the polygon, but not inside any of its holes
-
-*/
-
-namespace ggl
-{
-
-/*!
-    \ingroup impl
- */
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace selected {
-
-/*!
-\details Checks, per dimension, if d[I] not larger than search distance. If true for all
-dimensions then returns true. If larger stops immediately and returns false.
-Calculate during this process the sum, which is only valid if returning true
-*/
-template <typename P1, typename P2, typename T, std::size_t D, std::size_t N>
-struct differences_loop
-{
-    static inline bool apply(P1 const& p1, P2 const& p2, T const& distance, T& sum)
-    {
-        typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
-
-        coordinate_type const c1 = boost::numeric_cast<coordinate_type>(get<D>(p1));
-        coordinate_type const c2 = boost::numeric_cast<coordinate_type>(get<D>(p2));
-
-        T const d = std::abs(c1 - c2);
-        if (d > distance)
-        {
-            return false;
-        }
-        sum += d * d;
-        return differences_loop<P1, P2, T, D + 1, N>::apply(p1, p2, distance, sum);
-    }
-};
-
-template <typename P1, typename P2, typename T, std::size_t N>
-struct differences_loop<P1, P2, T, N, N>
-{
-    static inline bool apply(P1 const&, P2 const&, T const&, T&)
-    {
-        return true;
-    }
-};
-
-
-
-template <typename S, typename P, typename T, std::size_t D, std::size_t N>
-struct outside_loop
-{
-    static inline bool apply(S const& seg, P const& point, T const& distance)
-    {
-        typedef typename select_coordinate_type<S, P>::type coordinate_type;
-
-        coordinate_type const v = boost::numeric_cast<coordinate_type>(get<D>(point));
-        coordinate_type const s1 = get<0, D>(seg);
-        coordinate_type const s2 = get<1, D>(seg);
-
-        // Out of reach if left/bottom or right/top of both points making up the segment
-        // I know and currently accept that these comparisons/calculations are done twice per point
-
-        if ((v < s1 - distance && v < s2 - distance) || (v > s1 + distance && v > s2 + distance))
-        {
-            return true;
-        }
-        return outside_loop<S, P, T, D + 1, N>::apply(seg, point, distance);
-    }
-};
-
-template <typename S, typename P, typename T, std::size_t N>
-struct outside_loop<S, P, T, N, N>
-{
-    static inline bool apply(S const&, P const&, T const&)
-    {
-        return false;
-    }
-};
-
-
-template <typename P1, typename P2, typename T>
-struct close_to_point
-{
-    static inline bool apply(P1 const& point, P1 const& selection_point, T const& search_radius)
-    {
-        assert_dimension_equal<P1, P2>();
-
-        T sum = 0;
-        if (differences_loop
-                <
-                    P1, P2, T, 0, dimension<P1>::type::value
-                >::apply(point, selection_point, search_radius, sum))
-        {
-            return sum <= search_radius * search_radius;
-        }
-
-        return false;
-    }
-};
-
-template <typename S, typename P, typename T>
-struct close_to_segment
-{
-    static inline bool apply(S const& seg, P const& selection_point, T const& search_radius)
-    {
-        assert_dimension_equal<S, P>();
-
-        if (! outside_loop
-                <
-                    S, P, T, 0, dimension<P>::type::value
-                >::apply(seg, selection_point, search_radius))
-        {
-            // Not outside, calculate dot product/square distance to segment.
-            // Call corresponding strategy
-            typedef typename strategy_distance_segment
-                <
-                    typename cs_tag<P>::type,
-                    typename cs_tag<S>::type,
-                    P,
-                    S
-                >::type strategy_type;
-            typedef typename strategy_type::return_type return_type;
-
-            strategy_type strategy;
-            return_type result = strategy(selection_point, seg);
-            return result < search_radius;
-        }
-
-        return false;
-    }
-};
-
-template <typename R, typename P, typename T>
-struct close_to_range
-{
-    static inline bool apply(R const& range, P const& selection_point, T const& search_radius)
-    {
-        assert_dimension_equal<R, P>();
-
-        std::size_t const n = boost::size(range);
-        if (n == 0)
-        {
-            // Line with zero points, never close
-            return false;
-        }
-
-        typedef typename point_type<R>::type point_type;
-        typedef typename boost::range_const_iterator<R>::type iterator_type;
-
-        iterator_type it = boost::begin(range);
-        if (n == 1)
-        {
-            // Line with one point ==> close to point
-            return close_to_point<P, point_type, T>::apply(*it, selection_point, search_radius);
-        }
-
-        iterator_type previous = it++;
-        while(it != boost::end(range))
-        {
-            typedef segment<const point_type> segment_type;
-            segment_type s(*previous, *it);
-            if (close_to_segment<segment_type, P, T>::apply(s, selection_point, search_radius))
-            {
-                return true;
-            }
-            previous = it++;
-        }
-
-        return false;
-    }
-};
-
-template <typename Tag, typename G, typename P, typename T>
-struct use_within
-{
-    static inline bool apply(G const& geometry, P const& selection_point, T const& search_radius)
-    {
-        // Note the reversion, point-in-poly -> first point, then poly
-        // Selected-at-point -> first geometry, then point
-        return dispatch::within<point_tag, Tag, P, G>::apply(selection_point, geometry);
-    }
-};
-
-}} // namespace detail::selected
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-/*!
-    \tparam TD topological dimension
- */
-template <typename Tag, typename G, std::size_t D, typename P, typename T>
-struct selected
-{
-};
-
-template <typename P1, typename P2, typename T>
-struct selected<point_tag, P1, 0, P2, T> : detail::selected::close_to_point<P1, P2, T> { };
-
-// SEGMENT, TODO HERE (close_to_segment)
-
-template <typename L, typename P, typename T>
-struct selected<linestring_tag, L, 1, P, T> : detail::selected::close_to_range<L, P, T> { };
-
-template <typename Tag, typename G, typename P, typename T>
-struct selected<Tag, G, 2, P, T> : detail::selected::use_within<Tag, G, P, T> { };
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief Checks if one geometry is selected by a point lying within or in the neighborhood of that geometry
-    \ingroup selected
-    \tparam G type of geometry to check
-    \tparam P type of point to check
-    \tparam T type of search radius
-    \param geometry geometry which might be located in the neighborhood
-    \param selection_point point to select the geometry
-    \param search_radius for points/linestrings: defines radius of "neighborhood" to find things in
-    \return true if point is within or close to the other geometry
-
- */
-template<typename G, typename P, typename T>
-inline bool selected(G const& geometry, P const& selection_point, T const& search_radius)
-{
-    typedef dispatch::selected
-        <
-        typename tag<G>::type,
-        G,
-        topological_dimension<G>::value,
-        P,
-        T
-        > selector_type;
-
-    return selector_type::apply(geometry, selection_point, search_radius);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_SELECTED_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/simplify.hpp b/include/builtin-ggl/ggl/algorithms/simplify.hpp
deleted file mode 100644
index 2611100..0000000
--- a/include/builtin-ggl/ggl/algorithms/simplify.hpp
+++ /dev/null
@@ -1,342 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_SIMPLIFY_HPP
-#define GGL_ALGORITHMS_SIMPLIFY_HPP
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/distance.hpp>
-#include <ggl/core/cs.hpp>
-#include <ggl/core/ring_type.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/strategies/agnostic/agn_simplify.hpp>
-
-
-/*!
-\defgroup simplify simplification (generalization)
-\par Source description:
-- Wikipedia: given a 'curve' composed of line segments to find a curve not too dissimilar but that has fewer points
-
-\see http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm
-
-\par Performance
-Performance is measured on simplification of a collection of rings, such that 10% of the points is kept.
-- 2776 counties of US are simplified in 0.8 seconds (2.5 seconds or 11.5 seconds in 2 other libraries)
-- 3918 zipcode areas of the Netherlands are simplified in 0.03 seconds (0.1 seconds or 0.45 seconds in 2 other libraries)
-
-
-\par Geometries
-- LINESTRING:
-\image html simplify_linestring.png
-- POLYGON: simplifying a valid simple polygon (which never intersects itself) might result in an invalid polygon,
-where the simplified rings intersect themselves or one of the other outer or inner rings.
-Efficient simplification of a ring/polygon is still an "Open Problem"
-(http://maven.smith.edu/~orourke/TOPP/P24.html#Problem.24)
-
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace simplify {
-
-template<typename R, typename OutputIterator, typename S>
-inline void simplify_range_strategy(R const& range, OutputIterator out, double max_distance, S const& strategy)
-{
-    if (boost::begin(range) == boost::end(range) || max_distance < 0)
-    {
-        std::copy(boost::begin(range), boost::end(range), out);
-    }
-    else
-    {
-        typename boost::range_const_iterator<R>::type it = boost::begin(range) + 1;
-        if (it == boost::end(range) || it + 1 == boost::end(range))
-        {
-            std::copy(boost::begin(range), boost::end(range), out);
-        }
-        else
-        {
-            strategy.simplify(range, out, max_distance);
-        }
-    }
-}
-
-template<typename R, typename OutputIterator>
-inline void simplify_range(R const& range, OutputIterator out, double max_distance)
-{
-    // Define default strategy
-    typedef typename point_type<R>::type point_type;
-    typedef typename cs_tag<point_type>::type cs_tag;
-    typedef typename strategy_distance_segment
-        <
-            cs_tag,
-            cs_tag,
-            point_type,
-            segment<const point_type>
-        >::type strategy_type;
-
-    strategy::simplify::douglas_peucker<R, OutputIterator, strategy_type> douglas;
-
-    simplify_range_strategy(range, out, max_distance, douglas);
-}
-
-template<typename R, typename OutputIterator, typename S>
-inline void simplify_ring(R const& r_in, OutputIterator out, double max_distance, S const& strategy)
-{
-    // Call do_container for a ring
-
-    // The first/last point (the closing point of the ring) should maybe be excluded because it
-    // lies on a line with second/one but last. Here it is never excluded.
-
-    // Note also that, especially if max_distance is too large, the output ring might be self intersecting
-    // while the input ring is not, although chances are low in normal polygons
-
-    // Finally the inputring might have 4 points (=correct), the output < 4(=wrong)
-    if (boost::size(r_in) <= 4 || max_distance < 0)
-    {
-        std::copy(boost::begin(r_in), boost::end(r_in), out);
-    }
-    else
-    {
-        simplify_range_strategy(r_in, out, max_distance, strategy);
-    }
-}
-
-template<typename Y, typename S>
-inline void simplify_polygon(Y const& poly_in, Y& poly_out, double max_distance, S const& strategy)
-{
-    typedef typename boost::range_iterator
-        <typename interior_type<Y>::type>::type iterator_type;
-    typedef typename boost::range_const_iterator
-        <typename interior_type<Y>::type>::type const_iterator_type;
-
-    poly_out.clear();
-
-    // Note that if there are inner rings, and distance is too large, they might intersect with the
-    // outer ring in the output, while it didn't in the input.
-    simplify_ring(exterior_ring(poly_in), std::back_inserter(exterior_ring(poly_out)),
-                  max_distance, strategy);
-
-    interior_rings(poly_out).resize(boost::size(interior_rings(poly_in)));
-
-    const_iterator_type it_in = boost::begin(interior_rings(poly_in));
-    iterator_type it_out = boost::begin(interior_rings(poly_out));
-
-    for (; it_in != boost::end(interior_rings(poly_in)); it_in++, it_out++)
-    {
-        simplify_ring(*it_in, std::back_inserter(*it_out), max_distance, strategy);
-    }
-}
-
-template<typename Y>
-inline void simplify_polygon(Y const& poly_in, Y& poly_out, double max_distance)
-{
-    // Define default strategy
-    typedef typename ring_type<Y>::type ring_type;
-    typedef std::back_insert_iterator<ring_type> iterator_type;
-
-    typedef typename point_type<Y>::type point_type;
-    typedef typename cs_tag<point_type>::type cs_tag;
-    typedef typename strategy_distance_segment
-        <
-            cs_tag,
-            cs_tag,
-            point_type,
-            segment<const point_type>
-        >::type strategy_type;
-
-    strategy::simplify::douglas_peucker<ring_type, iterator_type, strategy_type> douglas;
-
-    simplify_polygon(poly_in, poly_out, max_distance, douglas);
-}
-
-}} // namespace detail::simplify
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Tag, typename G>
-struct simplify
-{
-};
-
-// Partial specializations
-template <typename R>
-struct simplify<linestring_tag, R>
-{
-    template<typename OutputIterator, typename S>
-    static inline void apply(R const& range, OutputIterator out, double max_distance, S const& strategy)
-    {
-        strategy.simplify(range, out, max_distance);
-    }
-
-    template<typename OutputIterator>
-    static inline void apply(R const& range, OutputIterator out, double max_distance)
-    {
-        // Define default strategy
-        typedef typename point_type<R>::type point_type;
-        typedef typename cs_tag<point_type>::type cs_tag;
-        typedef typename strategy_distance_segment
-            <
-                cs_tag,
-                cs_tag,
-                point_type,
-                segment<const point_type>
-           >::type strategy_type;
-
-        strategy::simplify::douglas_peucker<R, OutputIterator, strategy_type> douglas;
-
-        detail::simplify::simplify_range_strategy(range, out, max_distance, douglas);
-    }
-};
-
-template <typename R>
-struct simplify<ring_tag, R>
-{
-    /// Simplify a ring, using a strategy
-    template<typename S>
-    static inline void apply(R const& ring_in, R& ring_out, double max_distance, S const& strategy)
-    {
-        using detail::simplify::simplify_ring;
-        simplify_ring(ring_in, std::back_inserter(ring_out), max_distance, strategy);
-    }
-
-    /// Simplify a ring
-    static inline void apply(R const& ring_in, R& ring_out, double max_distance)
-    {
-        // Define default strategy
-        typedef typename point_type<R>::type point_type;
-        typedef typename cs_tag<point_type>::type cs_tag;
-        typedef typename strategy_distance_segment
-            <
-                cs_tag,
-                cs_tag,
-                point_type,
-                segment<const point_type>
-            >::type strategy_type;
-        typedef std::back_insert_iterator<R> iterator_type;
-
-        strategy::simplify::douglas_peucker<R, iterator_type, strategy_type> douglas;
-
-        detail::simplify::simplify_ring(ring_in, std::back_inserter(ring_out), max_distance, douglas);
-    }
-};
-
-template <typename P>
-struct simplify<polygon_tag, P>
-{
-    /// Simplify a polygon, using a strategy
-    template<typename S>
-    static inline void apply(P const& poly_in, P& poly_out, double max_distance, S const& strategy)
-    {
-        detail::simplify::simplify_polygon(poly_in, poly_out, max_distance, strategy);
-    }
-
-    /// Simplify a polygon
-    static inline void apply(P const& poly_in, P& poly_out, double max_distance)
-    {
-        detail::simplify::simplify_polygon(poly_in, poly_out, max_distance);
-    }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-// Model 1, using output iterator
-
-/*!
-    \brief Simplify a geometry
-    \ingroup simplify
-    \details The simplify algorithm removes points, keeping the shape as much as possible.
-    This version of simplify uses an output iterator
-    \param geometry the geometry to be simplified, being a ggl::linestring, vector, iterator pair, or any other boost compatible range
-    \param out output iterator, outputs all simplified points
-    \param max_distance distance (in units of input coordinates) of a vertex to other segments to be removed
-    \par Example:
-    The simplify algorithm can be used as following:
-    \dontinclude doxygen_examples.cpp
-    \skip example_simplify_linestring1
-    \line {
-    \until }
- */
-template<typename G, typename O>
-inline void simplify(const G& geometry, O out, double max_distance)
-{
-    typedef dispatch::simplify<typename tag<G>::type, G> simplify_type;
-    simplify_type::apply(geometry, out, max_distance);
-}
-
-/*!
-    \brief Simplify a geometry
-    \ingroup simplify
-    \details The simplify algorithm removes points, keeping the shape as much as possible.
-    This version of simplify uses an output iterator and a simplify strategy
-    \param geometry the geometry to be simplified, being a ggl::linestring, vector, iterator pair, or any other boost compatible range
-    \param out output iterator, outputs all simplified points
-    \param max_distance distance (in units of input coordinates) of a vertex to other segments to be removed
-    \param strategy simplify strategy to be used for simplification, might include point-distance strategy
-    \par Example:
-    The simplify algorithm with strategy can be used as following:
-    \dontinclude doxygen_examples.cpp
-    \skip example_simplify_linestring2
-    \line {
-    \until }
- */
-template<typename G, typename O, typename S>
-inline void simplify(const G& geometry, O out, double max_distance, S const& strategy)
-{
-    typedef dispatch::simplify<typename tag<G>::type, G> simplify_type;
-    simplify_type::apply(geometry, out, max_distance, strategy);
-}
-
-// Model 2, where output is same type as input
-
-/*!
-    \brief Simplify a geometry
-    \ingroup simplify
-    \details This version of simplify simplifies a geometry using the default strategy (Douglas Peucker),
-    where the output is of the same geometry type as the input.
-    \param geometry input geometry, to be simplified
-    \param out output geometry, simplified version of the input geometry
-    \param max_distance distance (in units of input coordinates) of a vertex to other segments to be removed
- */
-template<typename G>
-inline void simplify(const G& geometry, G& out, double max_distance)
-{
-    typedef dispatch::simplify<typename tag<G>::type, G> simplify_type;
-    simplify_type::apply(geometry, out, max_distance);
-}
-
-/*!
-    \brief Simplify a geometry
-    \ingroup simplify
-    \details This version of simplify simplifies a geometry using a specified strategy
-    where the output is of the same geometry type as the input.
-    \param geometry input geometry, to be simplified
-    \param out output geometry, simplified version of the input geometry
-    \param max_distance distance (in units of input coordinates) of a vertex to other segments to be removed
-    \param strategy simplify strategy to be used for simplification, might include point-distance strategy
- */
-template<typename G, typename S>
-inline void simplify(const G& geometry, G& out, double max_distance, S const& strategy)
-{
-    typedef dispatch::simplify<typename tag<G>::type, G> simplify_type;
-    simplify_type::apply(geometry, out, max_distance, strategy);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_SIMPLIFY_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/transform.hpp b/include/builtin-ggl/ggl/algorithms/transform.hpp
deleted file mode 100644
index 5dbaabe..0000000
--- a/include/builtin-ggl/ggl/algorithms/transform.hpp
+++ /dev/null
@@ -1,289 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_TRANSFORM_HPP
-#define GGL_ALGORITHMS_TRANSFORM_HPP
-
-#include <cmath>
-#include <iterator>
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/clear.hpp>
-#include <ggl/core/cs.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/core/ring_type.hpp>
-#include <ggl/geometries/segment.hpp>
-#include <ggl/strategies/strategies.hpp>
-
-
-/*!
-\defgroup transform transformations
-\brief Transforms from one geometry to another geometry, optionally using a strategy
-\details The transform algorithm automatically transforms from one coordinate system to another coordinate system.
-If the coordinate system of both geometries are the same, the geometry is copied. All point(s of the geometry)
-are transformed.
-
-There is a version without a strategy, transforming automatically, and there is a version with a strategy.
-
-This function has a lot of appliances, for example
-- transform from spherical coordinates to cartesian coordinates, and back
-- transform from geographic coordinates to cartesian coordinates (projections) and back
-- transform from degree to radian, and back
-- transform from and to cartesian coordinates (mapping, translations, etc)
-
-The automatic transformations look to the coordinate system family, and dimensions, of the point type and by this
-apply the strategy (internally bounded by traits classes).
-
-\par Examples:
-The example below shows automatic transformations to go from one coordinate system to another one:
-\dontinclude doxygen_2.cpp
-\skip example_for_transform()
-\skipline XYZ
-\until endl;
-
-The next example takes another approach and transforms from Cartesian to Cartesian:
-\skipline XY
-\until endl;
-
-\note Not every possibility is yet worked out, e.g. polar coordinate system is ignored until now
-\note This "transform" is broader then geodetic datum transformations, those are currently not worked out
-
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace transform {
-
-template <typename P1, typename P2>
-struct transform_point
-{
-    template <typename S>
-    static inline bool apply(P1 const& p1, P2& p2, S const& strategy)
-    {
-        return strategy(p1, p2);
-    }
-};
-
-template <typename B1, typename B2>
-struct transform_box
-{
-    template <typename S>
-    static inline bool apply(B1 const& b1, B2& b2, S const& strategy)
-    {
-        typedef typename point_type<B1>::type point_type1;
-        typedef typename point_type<B2>::type point_type2;
-
-        point_type1 lower_left, upper_right;
-        assign_box_corner<min_corner, min_corner>(b1, lower_left);
-        assign_box_corner<max_corner, max_corner>(b1, upper_right);
-
-        point_type2 p1, p2;
-        if (strategy(lower_left, p1) && strategy(upper_right, p2))
-        {
-            // Create a valid box and therefore swap if necessary
-            typedef typename coordinate_type<point_type2>::type coordinate_type;
-            coordinate_type x1 = ggl::get<0>(p1)
-                    , y1  = ggl::get<1>(p1)
-                    , x2  = ggl::get<0>(p2)
-                    , y2  = ggl::get<1>(p2);
-
-            if (x1 > x2) { std::swap(x1, x2); }
-            if (y1 > y2) { std::swap(y1, y2); }
-
-            set<min_corner, 0>(b2, x1);
-            set<min_corner, 1>(b2, y1);
-            set<max_corner, 0>(b2, x2);
-            set<max_corner, 1>(b2, y2);
-
-            return true;
-        }
-        return false;
-    }
-};
-
-template <typename P, typename OutputIterator, typename R, typename S>
-inline bool transform_range_out(R const& range, OutputIterator out, S const& strategy)
-{
-    P point_out;
-    for(typename boost::range_const_iterator<R>::type it = boost::begin(range);
-        it != boost::end(range); ++it)
-    {
-        if (! transform_point<typename point_type<R>::type, P>::apply(*it, point_out, strategy))
-        {
-            return false;
-        }
-        *out = point_out;
-        ++out;
-    }
-    return true;
-}
-
-template <typename P1, typename P2>
-struct transform_polygon
-{
-    template <typename S>
-    static inline bool apply(const P1& poly1, P2& poly2, S const& strategy)
-    {
-        typedef typename interior_type<P1>::type interior1_type;
-        typedef typename interior_type<P2>::type interior2_type;
-        typedef typename ring_type<P1>::type ring1_type;
-        typedef typename ring_type<P2>::type ring2_type;
-        typedef typename point_type<P2>::type point2_type;
-
-        ggl::clear(poly2);
-
-        if (!transform_range_out<point2_type>(exterior_ring(poly1),
-                    std::back_inserter(exterior_ring(poly2)), strategy))
-        {
-            return false;
-        }
-
-        interior_rings(poly2).resize(boost::size(interior_rings(poly1)));
-
-        typedef typename boost::range_const_iterator<interior1_type>::type iterator1_type;
-        typedef typename boost::range_iterator<interior2_type>::type iterator2_type;
-
-        iterator1_type it1 = boost::begin(interior_rings(poly1));
-        iterator2_type it2 = boost::begin(interior_rings(poly2));
-        for ( ; it1 != boost::end(interior_rings(poly1)); ++it1, ++it2)
-        {
-            if (!transform_range_out<point2_type>(*it1, std::back_inserter(*it2), strategy))
-            {
-                return false;
-            }
-        }
-
-        return true;
-    }
-};
-
-
-template <typename P1, typename P2>
-struct select_strategy
-{
-    typedef typename strategy_transform
-        <
-        typename cs_tag<P1>::type,
-        typename cs_tag<P2>::type,
-        typename coordinate_system<P1>::type,
-        typename coordinate_system<P2>::type,
-        dimension<P1>::type::value,
-        dimension<P2>::type::value,
-        typename point_type<P1>::type,
-        typename point_type<P2>::type
-        >::type type;
-};
-
-template <typename R1, typename R2>
-struct transform_range
-{
-    template <typename S>
-    static inline bool apply(R1 const& range1, R2& range2, S const& strategy)
-    {
-        typedef typename point_type<R2>::type point_type;
-
-        ggl::clear(range2);
-        return transform_range_out<point_type>(range1, std::back_inserter(range2), strategy);
-    }
-};
-
-}} // namespace detail::transform
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Tag1, typename Tag2, typename G1, typename G2>
-struct transform {};
-
-template <typename P1, typename P2>
-struct transform<point_tag, point_tag, P1, P2>
-    : detail::transform::transform_point<P1, P2>
-{
-};
-
-
-template <typename L1, typename L2>
-struct transform<linestring_tag, linestring_tag, L1, L2>
-    : detail::transform::transform_range<L1, L2>
-{
-};
-
-template <typename R1, typename R2>
-struct transform<ring_tag, ring_tag, R1, R2>
-    : detail::transform::transform_range<R1, R2>
-{
-};
-
-template <typename P1, typename P2>
-struct transform<polygon_tag, polygon_tag, P1, P2>
-    : detail::transform::transform_polygon<P1, P2>
-{
-};
-
-template <typename B1, typename B2>
-struct transform<box_tag, box_tag, B1, B2>
-    : detail::transform::transform_box<B1, B2>
-{
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief Transforms from one geometry to another geometry using a strategy
-    \ingroup transform
-    \tparam G1 first geometry type
-    \tparam G2 second geometry type
-    \tparam S strategy
-    \param geometry1 first geometry
-    \param geometry2 second geometry
-    \param strategy the strategy to be used for transformation
- */
-template <typename G1, typename G2, typename S>
-inline bool transform(G1 const& geometry1, G2& geometry2, S const& strategy)
-{
-    typedef dispatch::transform
-        <
-        typename tag<G1>::type,
-        typename tag<G2>::type,
-        G1,
-        G2
-        > transform_type;
-
-    return transform_type::apply(geometry1, geometry2, strategy);
-}
-
-/*!
-    \brief Transforms from one geometry to another geometry using a strategy
-    \ingroup transform
-    \tparam G1 first geometry type
-    \tparam G2 second geometry type
-    \param geometry1 first geometry
-    \param geometry2 second geometry
-    \return true if the transformation could be done
- */
-template <typename G1, typename G2>
-inline bool transform(G1 const& geometry1, G2& geometry2)
-{
-    typename detail::transform::select_strategy<G1, G2>::type strategy;
-    return transform(geometry1, geometry2, strategy);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_TRANSFORM_HPP
diff --git a/include/builtin-ggl/ggl/algorithms/within.hpp b/include/builtin-ggl/ggl/algorithms/within.hpp
deleted file mode 100644
index 471fe7b..0000000
--- a/include/builtin-ggl/ggl/algorithms/within.hpp
+++ /dev/null
@@ -1,414 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ALGORITHMS_WITHIN_HPP
-#define GGL_ALGORITHMS_WITHIN_HPP
-
-#include <boost/concept/requires.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/distance.hpp>
-#include <ggl/algorithms/make.hpp>
-#include <ggl/core/access.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/core/concepts/nsphere_concept.hpp>
-#include <ggl/core/cs.hpp>
-#include <ggl/strategies/strategies.hpp>
-#include <ggl/util/loop.hpp>
-
-
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace within {
-
-
-//-------------------------------------------------------------------------------------------------------
-// Implementation for boxes. Supports boxes in 2 or 3 dimensions, in Euclidian system
-// Todo: implement as strategy
-//-------------------------------------------------------------------------------------------------------
-template <typename P, typename B, size_t D, size_t N>
-struct point_in_box
-{
-    static bool inside(P const& p, B const& b)
-    {
-        if (get<D>(p) <= get<min_corner, D>(b)
-            || get<D>(p) >= get<max_corner, D>(b))
-        {
-            return false;
-        }
-
-        return point_in_box<P, B, D + 1, N>::inside(p, b);
-    }
-};
-
-template <typename P, typename B, size_t N>
-struct point_in_box<P, B, N, N>
-{
-    static bool inside(P const& p, B const& b)
-    {
-        return true;
-    }
-};
-
-//-------------------------------------------------------------------------------------------------------
-// Box-in-box, for 2/3 dimensions
-//-------------------------------------------------------------------------------------------------------
-template <typename B1, typename B2, size_t D, size_t N>
-struct box_in_box
-{
-    static inline bool inside(B1 const& b1, B2 const& b2)
-    {
-        if (get<min_corner, D>(b1) <= get<min_corner, D>(b2)
-            || get<max_corner, D>(b1) >= get<max_corner, D>(b2))
-        {
-            return false;
-        }
-
-        return box_in_box<B1, B2, D + 1, N>::inside(b1, b2);
-    }
-};
-
-template <typename B1, typename B2, size_t N>
-struct box_in_box<B1, B2, N, N>
-{
-    static inline bool inside(B1 const&, B2 const& b2)
-    {
-        return true;
-    }
-};
-
-
-//-------------------------------------------------------------------------------------------------------
-// Implementation for n-spheres. Supports circles or spheres, in 2 or 3 dimensions, in Euclidian system
-// Circle center might be of other point-type as geometry
-// Todo: implement as strategy
-//-------------------------------------------------------------------------------------------------------
-template<typename P, typename C>
-inline bool point_in_circle(P const& p, C const& c)
-{
-    assert_dimension<C, 2>();
-
-    typedef typename point_type<C>::type point_type;
-    typedef typename strategy_distance
-        <
-            typename cs_tag<P>::type,
-            typename cs_tag<point_type>::type,
-            P,
-            point_type
-        >::type strategy_type;
-    typedef typename strategy_type::return_type return_type;
-
-    P const center = ggl::make<P>(get<0>(c), get<1>(c));
-    strategy_type distance;
-    return_type const r = distance(p, center);
-    return_type const rad = make_distance_result<return_type>(get_radius<0>(c));
-
-    return r < rad;
-}
-/// 2D version
-template<typename T, typename C>
-inline bool point_in_circle(const T& c1, const T& c2, C const& c)
-{
-    typedef typename point_type<C>::type point_type;
-
-    point_type p = ggl::make<point_type>(c1, c2);
-    return point_in_circle(p, c);
-}
-
-template<typename B, typename C>
-inline bool box_in_circle(B const& b, C const& c)
-{
-    typedef typename point_type<B>::type point_type;
-
-    // Currently only implemented for 2d geometries
-    assert_dimension<point_type, 2>();
-    assert_dimension<C, 2>();
-
-    // Box: all four points must lie within circle
-
-    // Check points lower-left and upper-right, then lower-right and upper-left
-    return point_in_circle(get<min_corner, 0>(b), get<min_corner, 1>(b), c)
-        && point_in_circle(get<max_corner, 0>(b), get<max_corner, 1>(b), c)
-        && point_in_circle(get<min_corner, 0>(b), get<max_corner, 1>(b), c)
-        && point_in_circle(get<max_corner, 0>(b), get<min_corner, 1>(b), c);
-}
-
-// Generic "range-in-circle", true if all points within circle
-template<typename R, typename C>
-inline bool range_in_circle(R const& range, C const& c)
-{
-    assert_dimension<R, 2>();
-    assert_dimension<C, 2>();
-
-    for (typename boost::range_const_iterator<R>::type it = boost::begin(range);
-         it != boost::end(range); ++it)
-    {
-        if (! point_in_circle(*it, c))
-        {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-template<typename Y, typename C>
-inline bool polygon_in_circle(Y const& poly, C const& c)
-{
-    return range_in_circle(exterior_ring(poly), c);
-}
-
-template<typename P, typename R, typename S>
-inline bool point_in_ring(P const& p, R const& r, S const& strategy)
-{
-    if (boost::size(r) < 4)
-    {
-        return false;
-    }
-
-    typename S::state_type state(p);
-    if (loop(r, strategy, state))
-    {
-        return state.within();
-    }
-
-    return false;
-}
-
-// Polygon: in exterior ring, and if so, not within interior ring(s)
-template<typename P, typename Y, typename S>
-inline bool point_in_polygon(P const& p, Y const& poly, S const& strategy)
-{
-    if (point_in_ring(p, exterior_ring(poly), strategy))
-    {
-        typedef typename boost::range_const_iterator
-            <typename interior_type<Y>::type>::type iterator_type;
-
-        for (iterator_type it = boost::begin(interior_rings(poly));
-             it != boost::end(interior_rings(poly)); ++it)
-        {
-            if (point_in_ring(p, *it, strategy))
-            {
-                return false;
-            }
-        }
-        return true;
-    }
-    return false;
-}
-
-}} // namespace detail::within
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Tag1, typename Tag2, typename G1, typename G2>
-struct within {};
-
-template <typename P, typename B>
-struct within<point_tag, box_tag, P, B>
-{
-    static inline bool apply(P const& p, B const& b)
-    {
-        assert_dimension_equal<P, B>();
-
-        return detail::within::point_in_box
-            <
-                P,
-                B,
-                0,
-                dimension<P>::type::value
-            >::inside(p, b);
-    }
-};
-
-template <typename B1, typename B2>
-struct within<box_tag, box_tag, B1, B2>
-{
-    static inline bool apply(B1 const& b1, B2 const& b2)
-    {
-        assert_dimension_equal<B1, B2>();
-
-        return detail::within::box_in_box
-            <
-                B1,
-                B2,
-                0,
-                dimension<B1>::type::value
-            >::inside(b1, b2);
-    }
-};
-
-
-template <typename P, typename C>
-struct within<point_tag, nsphere_tag, P, C>
-{
-    static inline bool apply(P const& p, C const& c)
-    {
-        return detail::within::point_in_circle(p, c);
-    }
-};
-
-template <typename B, typename C>
-struct within<box_tag, nsphere_tag, B, C>
-{
-    static inline bool apply(B const& b, C const& c)
-    {
-        return detail::within::box_in_circle(b, c);
-    }
-};
-
-template <typename R, typename C>
-struct within<linestring_tag, nsphere_tag, R, C>
-{
-    static inline bool apply(R const& ln, C const& c)
-    {
-        return detail::within::range_in_circle(ln, c);
-    }
-};
-
-template <typename R, typename C>
-struct within<ring_tag, nsphere_tag, R, C>
-{
-    static inline bool apply(R const& r, C const& c)
-    {
-        return detail::within::range_in_circle(r, c);
-    }
-};
-
-template <typename Y, typename C>
-struct within<polygon_tag, nsphere_tag, Y, C>
-{
-    static inline bool apply(Y const& poly, C const& c)
-    {
-        return detail::within::polygon_in_circle(poly, c);
-    }
-};
-
-template <typename P, typename R>
-struct within<point_tag, ring_tag, P, R>
-{
-    static inline bool apply(P const& p, R const& r)
-    {
-        typedef typename boost::range_value<R>::type point_type;
-        typedef typename strategy_within
-            <
-                typename cs_tag<P>::type,
-                typename cs_tag<point_type>::type,
-                P,
-                point_type
-            >::type strategy_type;
-
-        return detail::within::point_in_ring(p, r, strategy_type());
-    }
-};
-
-template <typename P, typename Y>
-struct within<point_tag, polygon_tag, P, Y>
-{
-    static inline bool apply(P const& point, Y const& poly)
-    {
-        typedef typename point_type<Y>::type point_type;
-        typedef typename strategy_within
-            <
-                typename cs_tag<P>::type,
-                typename cs_tag<point_type>::type,
-                P,
-                point_type
-            >::type strategy_type;
-
-        return detail::within::point_in_polygon(point, poly, strategy_type());
-    }
-
-    template<typename S>
-    static inline bool apply(P const& point, Y const& poly, S const& strategy)
-    {
-        return detail::within::point_in_polygon(point, poly, strategy);
-    }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief Within check
-    \details Examine if one geometry is within another geometry (a.o. point in polygon)
-    \ingroup boolean_relations
-    \param geometry1 geometry which might be within the second geometry
-    \param geometry2 geometry which might contain the first geometry
-    \return true if geometry1 is completely contained within geometry2, else false
-    \note The default strategy is used for within detection
-
-\par Source descriptions:
-- OGC: Returns 1 (TRUE) if this geometric object is "spatially within" another Geometry.
-
-\par Performance
-2776 within determinations using bounding box and polygon are done in 0.09 seconds (other libraries: 0.14 seconds, 3.0 seconds, 3.8)
-
-\par Example:
-The within algorithm is used as following:
-\dontinclude doxygen_examples.cpp
-\skip example_within
-\line {
-\until }
-\par Geometries:
-- POINT + POLYGON: The well-known point-in-polygon, returning true if a point falls within a polygon (and not
-within one of its holes) \image html within_polygon.png
-- POINT + RING: returns true if point is completely within a ring \image html within_ring.png
-
- */
-template<typename G1, typename G2>
-inline bool within(G1 const& geometry1, G2 const& geometry2)
-{
-    typedef dispatch::within
-        <
-            typename tag<G1>::type,
-            typename tag<G2>::type,
-            G1,
-            G2
-        > within_type;
-
-    return within_type::apply(geometry1, geometry2);
-}
-
-/*!
-    \brief Within check using a strategy
-    \ingroup boolean_relations
-    \param geometry1 geometry which might be within the second geometry
-    \param geometry2 geometry which might contain the first geometry
-    \param strategy strategy to be used
-    \return true if geometry1 is completely contained within geometry2, else false
- */
-template<typename G1, typename G2, typename S>
-inline bool within(G1 const& geometry1, G2 const& geometry2, S const& strategy)
-{
-    typedef dispatch::within
-        <
-            typename tag<G1>::type,
-            typename tag<G2>::type,
-            G1,
-            G2
-        > within_type;
-
-    return within_type::apply(geometry1, geometry2, strategy);
-}
-
-} // namespace ggl
-
-#endif // GGL_ALGORITHMS_WITHIN_HPP
diff --git a/include/builtin-ggl/ggl/arithmetic/arithmetic.hpp b/include/builtin-ggl/ggl/arithmetic/arithmetic.hpp
deleted file mode 100644
index f1b8d6c..0000000
--- a/include/builtin-ggl/ggl/arithmetic/arithmetic.hpp
+++ /dev/null
@@ -1,209 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ARITHMETIC_ARITHMETIC_HPP
-#define GGL_ARITHMETIC_ARITHMETIC_HPP
-
-#include <functional>
-
-#include <boost/call_traits.hpp>
-#include <boost/concept/requires.hpp>
-
-#include <ggl/core/coordinate_type.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/util/for_each_coordinate.hpp>
-
-/*!
-\defgroup arithmetic arithmetic: arithmetic operations on points
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename P>
-struct param
-{
-    typedef typename boost::call_traits
-        <
-            typename coordinate_type<P>::type
-        >::param_type type;
-};
-
-template <typename C, template <typename> class Function>
-struct value_operation
-{
-    C m_value;
-
-    inline value_operation(const C& value)
-        : m_value(value)
-    {}
-
-    template <typename P, int I>
-    inline void apply(P& point) const
-    {
-        set<I>(point, Function<C>()(get<I>(point), m_value));
-    }
-};
-
-template <typename PointSrc, template <typename> class Function>
-struct point_operation
-{
-    typedef typename coordinate_type<PointSrc>::type coordinate_type;
-    PointSrc const& m_source_point;
-
-    inline point_operation(const PointSrc& point)
-        : m_source_point(point)
-    {}
-
-    template <typename PointDst, int I>
-    inline void apply(PointDst& dest_point) const
-    {
-        set<I>(dest_point,
-            Function<coordinate_type>()(get<I>(dest_point), get<I>(m_source_point)));
-    }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-/*!
-    \brief Adds a value to each coordinate of a point
-    \ingroup arithmetic
-    \details
-    \param p point
-    \param value value to add
- */
-template <typename Point>
-inline void add_value(Point& p, typename detail::param<Point>::type value)
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<Point>) );
-
-    for_each_coordinate(p, detail::value_operation<typename coordinate_type<Point>::type, std::plus>(value));
-}
-
-/*!
-    \brief Adds a point to another
-    \ingroup arithmetic
-    \details The coordinates of the second point will be added to those of the first point.
-             The second point is not modified.
-    \param p1 first point
-    \param p2 second point
- */
-template <typename Point1, typename Point2>
-inline void add_point(Point1& p1, Point2 const& p2)
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<Point2>) );
-    BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point2>) );
-
-    for_each_coordinate(p1, detail::point_operation<Point2, std::plus>(p2));
-}
-
-/*!
-    \brief Subtracts a value to each coordinate of a point
-    \ingroup arithmetic
-    \details
-    \param p point
-    \param value value to subtract
- */
-template <typename Point>
-inline void subtract_value(Point& p, typename detail::param<Point>::type value)
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<Point>) );
-
-    for_each_coordinate(p, detail::value_operation<typename coordinate_type<Point>::type, std::minus>(value));
-}
-
-/*!
-    \brief Subtracts a point to another
-    \ingroup arithmetic
-    \details The coordinates of the second point will be subtracted to those of the first point.
-             The second point is not modified.
-    \param p1 first point
-    \param p2 second point
- */
-template <typename Point1, typename Point2>
-inline void subtract_point(Point1& p1, Point2 const& p2)
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<Point2>) );
-    BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point2>) );
-
-    for_each_coordinate(p1, detail::point_operation<Point2, std::minus>(p2));
-}
-
-/*!
-    \brief Multiplies each coordinate of a point by a value
-    \ingroup arithmetic
-    \details
-    \param p point
-    \param value value to multiply by
- */
-template <typename Point>
-inline void multiply_value(Point& p, typename detail::param<Point>::type value)
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<Point>) );
-
-    for_each_coordinate(p, detail::value_operation<typename coordinate_type<Point>::type, std::multiplies>(value));
-}
-
-/*!
-    \brief Multiplies a point by another
-    \ingroup arithmetic
-    \details The coordinates of the second point will be multiplied by those of the first point.
-             The second point is not modified.
-    \param p1 first point
-    \param p2 second point
-    \note This is *not* a dot, cross or wedge product. It is a mere field-by-field multiplication.
- */
-template <typename Point1, typename Point2>
-inline void multiply_point(Point1& p1, Point2 const& p2)
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<Point2>) );
-    BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point2>) );
-
-    for_each_coordinate(p1, detail::point_operation<Point2, std::multiplies>(p2));
-}
-
-/*!
-    \brief Divides each coordinate of a point by a value
-    \ingroup arithmetic
-    \details
-    \param p point
-    \param value value to divide by
- */
-template <typename Point>
-inline void divide_value(Point& p, typename detail::param<Point>::type value)
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<Point>) );
-
-    for_each_coordinate(p, detail::value_operation<typename coordinate_type<Point>::type, std::divides>(value));
-}
-
-/*!
-    \brief Divides a point by another
-    \ingroup arithmetic
-    \details The coordinates of the second point will be divided by those of the first point.
-             The second point is not modified.
-    \param p1 first point
-    \param p2 second point
- */
-template <typename Point1, typename Point2>
-inline void divide_point(Point1& p1, Point2 const& p2)
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<Point2>) );
-    BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point2>) );
-
-    for_each_coordinate(p1, detail::point_operation<Point2, std::divides>(p2));
-}
-
-} // namespace ggl
-
-#endif // GGL_ARITHMETIC_ARITHMETIC_HPP
diff --git a/include/builtin-ggl/ggl/arithmetic/dot_product.hpp b/include/builtin-ggl/ggl/arithmetic/dot_product.hpp
deleted file mode 100644
index a31f1e8..0000000
--- a/include/builtin-ggl/ggl/arithmetic/dot_product.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ARITHMETIC_DOT_PRODUCT_HPP
-#define GGL_ARITHMETIC_DOT_PRODUCT_HPP
-
-#include <boost/concept/requires.hpp>
-
-#include <ggl/core/concepts/point_concept.hpp>
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename P1, typename P2, std::size_t Dimension, std::size_t DimensionCount>
-struct dot_product_maker
-{
-    static inline typename coordinate_type<P1>::type
-        apply(P1 const& p1, P2 const& p2)
-    {
-        return get<Dimension>(p1) * get<Dimension>(p2)
-            + dot_product_maker<P1, P2, Dimension+1, DimensionCount>::apply(p1, p2);
-    }
-};
-
-template <typename P1, typename P2, std::size_t DimensionCount>
-struct dot_product_maker<P1, P2, DimensionCount, DimensionCount>
-{
-    static inline typename coordinate_type<P1>::type
-        apply(P1 const& p1, P2 const& p2)
-    {
-        return get<DimensionCount>(p1) * get<DimensionCount>(p2);
-    }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-    \brief Computes the dot product of 2 points
-    \ingroup arithmetic
-    \param p1 first point
-    \param p2 second point
-    \return the dot product
- */
-template <typename P1, typename P2>
-inline typename coordinate_type<P1>::type dot_product(P1 const& p1, P2 const& p2)
-{
-    BOOST_CONCEPT_ASSERT( (concept::ConstPoint<P1>) );
-    BOOST_CONCEPT_ASSERT( (concept::ConstPoint<P2>) );
-
-    return detail::dot_product_maker
-        <
-            P1, P2,
-            0, dimension<P1>::type::value - 1
-        >::apply(p1, p2);
-}
-
-} // namespace ggl
-
-#endif // GGL_ARITHMETIC_DOT_PRODUCT_HPP
diff --git a/include/builtin-ggl/ggl/core/access.hpp b/include/builtin-ggl/ggl/core/access.hpp
deleted file mode 100644
index e7283c3..0000000
--- a/include/builtin-ggl/ggl/core/access.hpp
+++ /dev/null
@@ -1,292 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_CORE_ACCESS_HPP
-#define GGL_CORE_ACCESS_HPP
-
-#include <cstddef>
-
-#include <boost/type_traits/remove_const.hpp>
-#include <boost/concept_check.hpp>
-
-#include <ggl/core/coordinate_type.hpp>
-#include <ggl/core/point_type.hpp>
-#include <ggl/core/tag.hpp>
-
-namespace ggl
-{
-
-const int min_corner = 0;
-const int max_corner = 1;
-
-namespace traits
-{
-
-/*!
-    \brief Traits class which gives access (get,set) to points
-    \ingroup traits
-    \par Geometries:
-        - point
-        - n-sphere (circle,sphere) for their center
-    \par Specializations should provide:
-        - static inline T get<I>(const G&)
-        - static inline void set<I>(G&, const T&)
-    \tparam G geometry
-*/
-template <typename G>
-struct access {};
-
-
-/*!
-    \brief Traits class defining "get" and "set" to get and set point coordinate values
-    \tparam G geometry (box, segment)
-    \tparam I index (min_corner/max_corner for box, 0/1 for segment)
-    \tparam D dimension
-    \par Geometries:
-        - box
-        - segment
-    \par Specializations should provide:
-        - static inline T get(const G&)
-        - static inline void set(G&, const T&)
-    \ingroup traits
-*/
-template <typename G, std::size_t I, std::size_t D>
-struct indexed_access {};
-
-
-/*!
-    \brief Traits class, optional, indicating that the std-library should be used
-    \details The default geometry (linestring, ring, multi*) follow std:: for
-        its modifying operations (push_back, clear, size, resize, reserve, etc)
-        If they NOT follow the std:: library they should specialize this traits
-        class
-    \ingroup traits
-    \par Geometries:
-        - linestring
-        - linear_ring
-    \par Specializations should provide:
-        - value (defaults to true)
- */
-template <typename G>
-struct use_std
-{
-    static const bool value = true;
-};
-
-} // namespace traits
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-template <typename Tag, typename G, typename T, std::size_t D>
-struct access
-{
-    //static inline T get(const G& ) {}
-    //static inline void set(G& g, const T& value) {}
-};
-
-template <typename Tag, typename G, typename T, std::size_t I, std::size_t D>
-struct indexed_access
-{
-    //static inline T get(const G& ) {}
-    //static inline void set(G& g, const T& value) {}
-};
-
-template <typename P, typename T, std::size_t D>
-struct access<point_tag, P, T, D>
-{
-    static inline T get(const P& p)
-    {
-        return traits::access<P>::template get<D>(p);
-    }
-    static inline void set(P& p, const T& value)
-    {
-        traits::access<P>::template set<D>(p, value);
-    }
-};
-
-template <typename S, typename T, std::size_t D>
-struct access<nsphere_tag, S, T, D>
-{
-    static inline T get(const S& s)
-    {
-        return traits::access<S>::template get<D>(s);
-    }
-    static inline void set(S& s, const T& value)
-    {
-        traits::access<S>::template set<D>(s, value);
-    }
-};
-
-template <typename B, typename T, std::size_t I, std::size_t D>
-struct indexed_access<box_tag, B, T, I, D>
-{
-    static inline T get(const B& b)
-    {
-        return traits::indexed_access<B, I, D>::get(b);
-    }
-    static inline void set(B& b, const T& value)
-    {
-        traits::indexed_access<B, I, D>::set(b, value);
-    }
-};
-
-template <typename S, typename T, std::size_t I, std::size_t D>
-struct indexed_access<segment_tag, S, T, I, D>
-{
-    static inline T get(const S& segment)
-    {
-        return traits::indexed_access<S, I, D>::get(segment);
-    }
-    static inline void set(S& segment, const T& value)
-    {
-        traits::indexed_access<S, I, D>::set(segment, value);
-    }
-};
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-// Two dummy tags to distinguish get/set variants below.
-// They don't have to be specified by the user. The functions are distinguished
-// by template signature also, but for e.g. GCC this is not enough. So give them
-// a different signature.
-struct signature_getset_dimension {};
-struct signature_getset_index_dimension {};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-    \brief get a coordinate value of a point / nsphere
-    \return coordinate value
-    \ingroup access
-    \tparam D dimension
-    \tparam G geometry
-    \param geometry geometry to get coordinate value from
-    \param dummy does not have to be specified
-*/
-template <std::size_t D, typename G>
-inline typename coordinate_type<G>::type get(const G& geometry,
-    detail::signature_getset_dimension* dummy = 0)
-{
-    boost::ignore_unused_variable_warning(dummy);
-
-    typedef typename boost::remove_const<G>::type ncg_type;
-
-    typedef core_dispatch::access
-        <
-        typename tag<G>::type,
-        ncg_type,
-        typename coordinate_type<ncg_type>::type,
-        D
-        > coord_access_type;
-
-    return coord_access_type::get(geometry);
-}
-
-
-/*!
-    \brief assign coordinate value to a point / sphere
-    \ingroup access
-    \tparam D dimension
-    \tparam G geometry
-    \param geometry geometry to assign coordinate to
-    \param value coordinate value to assign
-    \param dummy does not have to be specified
-*/
-template <std::size_t D, typename G>
-inline void set(G& geometry, const typename coordinate_type<G>::type& value,
-    detail::signature_getset_dimension* dummy = 0)
-{
-    boost::ignore_unused_variable_warning(dummy);
-
-    typedef typename boost::remove_const<G>::type ncg_type;
-
-    typedef core_dispatch::access
-        <
-        typename tag<G>::type,
-        ncg_type,
-        typename coordinate_type<ncg_type>::type,
-        D
-        > coord_access_type;
-
-    coord_access_type::set(geometry, value);
-}
-
-// Note: doxygen needs a construct to distinguish get/set (like the gcc compiler)
-
-/*!
-    \brief get a coordinate value of a box / segment
-    \return coordinate value
-    \ingroup access
-    \tparam I index, for boxes: min_corner or max_corner. For segment: 0 / 1
-    \tparam D dimension
-    \tparam G geometry
-    \param geometry geometry to get coordinate value from
-    \param dummy does not have to be specified
-*/
-template <std::size_t I, std::size_t D, typename G>
-inline typename coordinate_type<G>::type get(const G& geometry,
-    detail::signature_getset_index_dimension* dummy = 0)
-{
-    boost::ignore_unused_variable_warning(dummy);
-
-    typedef typename boost::remove_const<G>::type ncg_type;
-
-    typedef core_dispatch::indexed_access
-        <
-        typename tag<G>::type,
-        ncg_type,
-        typename coordinate_type<ncg_type>::type,
-        I,
-        D
-        > coord_access_type;
-
-    return coord_access_type::get(geometry);
-}
-
-/*!
-    \brief assign a coordinate value of a box / segment
-    \ingroup access
-    \tparam I index, for boxes: min_corner or max_corner. For segment: 0 / 1
-    \tparam D dimension
-    \tparam G geometry
-    \param geometry geometry to assign coordinate to
-    \param value coordinate value to assign
-    \param dummy does not have to be specified
-*/
-template <std::size_t I, std::size_t D, typename G>
-inline void set(G& geometry, const typename coordinate_type<G>::type& value,
-    detail::signature_getset_index_dimension* dummy = 0)
-{
-    boost::ignore_unused_variable_warning(dummy);
-
-    typedef typename boost::remove_const<G>::type ncg_type;
-
-    typedef core_dispatch::indexed_access
-        <
-        typename tag<G>::type, ncg_type,
-        typename coordinate_type<ncg_type>::type,
-        I,
-        D
-        > coord_access_type;
-
-    coord_access_type::set(geometry, value);
-}
-
-} // namespace ggl
-
-#endif // GGL_CORE_ACCESS_HPP
diff --git a/include/builtin-ggl/ggl/core/concepts/box_concept.hpp b/include/builtin-ggl/ggl/core/concepts/box_concept.hpp
deleted file mode 100644
index 424a716..0000000
--- a/include/builtin-ggl/ggl/core/concepts/box_concept.hpp
+++ /dev/null
@@ -1,109 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_CONCEPTS_BOX_CONCEPT_HPP
-#define GGL_CORE_CONCEPTS_BOX_CONCEPT_HPP
-
-
-#include <boost/concept_check.hpp>
-
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/point_type.hpp>
-
-
-
-namespace ggl { namespace concept {
-
-
-/*!
-    \brief Checks box concept, using Boost Concept Check Library and metafunctions
-    \ingroup concepts
-*/
-template <typename B>
-struct Box
-{
-    private :
-        typedef typename point_type<B>::type P;
-
-        /// Internal structure to check if access is OK for all dimensions
-        template <size_t C, size_t D, size_t N>
-        struct dimension_checker
-        {
-            static void check()
-            {
-                B* b;
-                ggl::set<C, D>(*b, ggl::get<C, D>(*b));
-                dimension_checker<C, D + 1, N>::check();
-            }
-        };
-
-        template <size_t C, size_t N>
-        struct dimension_checker<C, N, N>
-        {
-            static void check() {}
-        };
-
-    public :
-        /// BCCL macro to check the Box concept
-        BOOST_CONCEPT_USAGE(Box)
-        {
-            static const size_t N = dimension<B>::value;
-            dimension_checker<min_corner, 0, N>::check();
-            dimension_checker<max_corner, 0, N>::check();
-        }
-};
-
-
-/*!
-    \brief Checks Box concept (const version)
-    \ingroup concepts
-    \details The ConstBox concept check the same as the Box concept,
-    but does not check write access.
-*/
-template <typename B>
-struct ConstBox
-{
-    private :
-        typedef typename point_type<B>::type P;
-        typedef typename coordinate_type<B>::type T;
-
-        /// Internal structure to check if access is OK for all dimensions
-        template <size_t C, size_t D, size_t N>
-        struct dimension_checker
-        {
-            static void check()
-            {
-                const B* b = 0;
-                T coord(ggl::get<C, D>(*b));
-                boost::ignore_unused_variable_warning(coord);
-                dimension_checker<C, D + 1, N>::check();
-            }
-        };
-
-        template <size_t C, size_t N>
-        struct dimension_checker<C, N, N>
-        {
-            static void check() {}
-        };
-
-    public :
-        /// BCCL macro to check the ConstBox concept
-        BOOST_CONCEPT_USAGE(ConstBox)
-        {
-            static const size_t N = dimension<B>::value;
-            dimension_checker<min_corner, 0, N>::check();
-            dimension_checker<max_corner, 0, N>::check();
-        }
-};
-
-}} // namespace ggl::concept
-
-
-#endif // GGL_CORE_CONCEPTS_BOX_CONCEPT_HPP
diff --git a/include/builtin-ggl/ggl/core/concepts/linestring_concept.hpp b/include/builtin-ggl/ggl/core/concepts/linestring_concept.hpp
deleted file mode 100644
index 1347c6b..0000000
--- a/include/builtin-ggl/ggl/core/concepts/linestring_concept.hpp
+++ /dev/null
@@ -1,84 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_CONCEPTS_LINESTRING_CONCEPT_HPP
-#define GGL_CORE_CONCEPTS_LINESTRING_CONCEPT_HPP
-
-
-#include <boost/concept_check.hpp>
-#include <boost/range/concepts.hpp>
-
-#include <ggl/core/concepts/point_concept.hpp>
-
-
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/point_type.hpp>
-
-#include <ggl/algorithms/clear.hpp>
-#include <ggl/algorithms/append.hpp>
-
-
-
-namespace ggl { namespace concept {
-
-
-/*!
-    \brief Checks linestring concept, using Boost Concept Check Library and metafunctions
-    \ingroup concepts
-*/
-template <typename L>
-struct Linestring
-{
-    private :
-        typedef typename point_type<L>::type P;
-
-        BOOST_CONCEPT_ASSERT( (concept::Point<P>) );
-        BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<L>) );
-
-    public :
-        /// BCCL macro to check the Linestring concept
-        BOOST_CONCEPT_USAGE(Linestring)
-        {
-
-            // Check if it can be modified
-            L* ls;
-            clear(*ls);
-            append(*ls, P());
-        }
-};
-
-
-/*!
-    \brief Checks Linestring concept (const version)
-    \ingroup concepts
-    \details The ConstLinestring concept check the same as the Linestring concept,
-    but does not check write access.
-*/
-template <typename L>
-struct ConstLinestring
-{
-    private :
-        typedef typename point_type<L>::type P;
-
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<P>) );
-        BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<L>) );
-
-
-    public :
-        /// BCCL macro to check the ConstLinestring concept
-        BOOST_CONCEPT_USAGE(ConstLinestring)
-        {
-        }
-};
-
-}} // namespace ggl::concept
-
-
-#endif // GGL_CORE_CONCEPTS_LINESTRING_CONCEPT_HPP
diff --git a/include/builtin-ggl/ggl/core/concepts/nsphere_concept.hpp b/include/builtin-ggl/ggl/core/concepts/nsphere_concept.hpp
deleted file mode 100644
index 3e7a73f..0000000
--- a/include/builtin-ggl/ggl/core/concepts/nsphere_concept.hpp
+++ /dev/null
@@ -1,119 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_CORE_CONCEPTS_NSPHERE_CONCEPT_HPP
-#define GGL_CORE_CONCEPTS_NSPHERE_CONCEPT_HPP
-
-#include <boost/concept_check.hpp>
-
-#include <ggl/core/coordinate_dimension.hpp>
-#include <ggl/core/access.hpp>
-#include <ggl/core/radius.hpp>
-
-namespace ggl { namespace concept {
-
-/*!
-    \brief Checks Nsphere concept (const version)
-    \ingroup concepts
-    \details The ConstNsphere concept check the same as the Nsphere concept,
-    but does not check write access.
-*/
-template <typename S>
-struct ConstNsphere
-{
-    private :
-        typedef typename point_type<S>::type P;
-        typedef typename radius_type<S>::type R;
-
-        /// Internal structure to check if access is OK for all dimensions
-        template <size_t D, size_t N>
-        struct dimension_checker
-        {
-            static void check()
-            {
-                typedef typename coordinate_type<S>::type T;
-                const S* s = 0;
-                T coord(ggl::get<D>(*s));
-                (void)sizeof(coord); // To avoid "unused variable" warnings
-                dimension_checker<D + 1, N>::check();
-            }
-        };
-
-        template <size_t N>
-        struct dimension_checker<N, N>
-        {
-            static void check() {}
-        };
-
-    public :
-        /// BCCL macro to check the ConstNsphere concept
-        BOOST_CONCEPT_USAGE(ConstNsphere)
-        {
-            static const size_t N = dimension<S>::value;
-            dimension_checker<0, N>::check();
-            dimension_checker<0, N>::check();
-
-            // Check radius access
-            const S* s = 0;
-            R coord(ggl::get_radius<0>(*s));
-            (void)sizeof(coord); // To avoid "unused variable" warnings
-        }
-};
-
-
-/*!
-    \brief Checks nsphere concept, using Boost Concept Check Library and metafunctions
-    \ingroup concepts
-*/
-template <typename S>
-struct Nsphere
-{
-    private :
-        BOOST_CONCEPT_ASSERT( (concept::ConstNsphere<S>) );
-
-        typedef typename point_type<S>::type P;
-        typedef typename radius_type<S>::type R;
-
-        /// Internal structure to check if access is OK for all dimensions
-        template <size_t D, size_t N>
-        struct dimension_checker
-        {
-            static void check()
-            {
-                S* s;
-                ggl::set<D>(*s, ggl::get<D>(*s));
-                dimension_checker<D + 1, N>::check();
-            }
-        };
-
-        template <size_t N>
-        struct dimension_checker<N, N>
-        {
-            static void check() {}
-        };
-
-    public :
-        /// BCCL macro to check the Nsphere concept
-        BOOST_CONCEPT_USAGE(Nsphere)
-        {
-            static const size_t N = dimension<S>::value;
-            dimension_checker<0, N>::check();
-            dimension_checker<0, N>::check();
-
-            // Check radius access
-            S* s = 0;
-            set_radius<0>(*s, get_radius<0>(*s));
-
-        }
-};
-
-
-
-}} // namespace ggl::concept
-
-#endif // GGL_CORE_CONCEPTS_NSPHERE_CONCEPT_HPP
diff --git a/include/builtin-ggl/ggl/core/concepts/point_concept.hpp b/include/builtin-ggl/ggl/core/concepts/point_concept.hpp
deleted file mode 100644
index b3bdf26..0000000
--- a/include/builtin-ggl/ggl/core/concepts/point_concept.hpp
+++ /dev/null
@@ -1,146 +0,0 @@
-// Generic Geometry Library Point concept
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_CORE_CONCEPTS_POINT_CONCEPT_HPP
-#define GGL_CORE_CONCEPTS_POINT_CONCEPT_HPP
-
-#include <cstddef>
-
-#include <boost/concept_check.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/coordinate_dimension.hpp>
-#include <ggl/core/coordinate_system.hpp>
-
-
-/*!
-\defgroup concepts concept checking
-Concepts are used to check if pointtypes provide required implementation. Concept checking
-is done using BCCL (Boost Concept Check Library) and MPL (Meta Programming Library)
-*/
-
-namespace ggl { namespace concept {
-
-/*!
-    \brief Checks point concept, using Boost Concept Check Library and metafunctions
-    \ingroup concepts
-    \details The concept is separated into 4 metafunctions:
-    - \ref ggl::traits::coordinate_type "coordinate_type": provides the type of the coordinates of a point
-    - \ref ggl::traits::coordinate_system "coordinate system": provides the coordinate system in which the point is placed
-    - \ref ggl::traits::dimension "dimension": provides the number of coordinates of a point
-    - \ref ggl::traits::access "access": provides access to the coordinates of a point
-
-    In MPL, a metafunction that provides a type must expose is as "type"
-    and a metafunction that provides a value must expose it as "value", so
-    here the same convention are used: coordinate_type<P>::type and
-    dimension<P>::value provide the type and number of coordinates. This
-    makes them compatible with any MPL and Fusion algorithm and
-    metafunction.
-
-    \par Example:
-    First example, using an own pointtype, for example a legacy point, defining the necessary
-    properties outside the pointtype in a traits class
-    \dontinclude doxygen_examples.cpp
-    \skip example_point_1
-    \until //:\\
-    \par Example:
-    Second example, deriving a pointtype from boost::tuple. It defines the necessary properties
-    itself, so a separate traits class is not necessary.
-    \dontinclude doxygen_examples.cpp
-    \skip example_own_point2
-    \line {
-    \until //:\\
-*/
-
-template <typename X>
-struct Point
-{
-private:
-
-    typedef typename coordinate_type<X>::type ctype;
-    typedef typename coordinate_system<X>::type csystem;
-
-    enum { ccount = dimension<X>::value };
-
-    /// Internal structure to check if access is OK for all dimensions
-    template <typename P, std::size_t I, std::size_t Count>
-    struct dimension_checker
-    {
-        static void check()
-        {
-            P* p;
-            ggl::set<I>(*p, ggl::get<I>(*p));
-            dimension_checker<P, I+1, Count>::check();
-        }
-    };
-
-    /// Internal structure to check if access is OK for all dimensions
-    template <typename P, std::size_t Count>
-    struct dimension_checker<P, Count, Count>
-    {
-        static void check() {}
-    };
-
-public:
-
-    /// BCCL macro to check the Point concept
-    BOOST_CONCEPT_USAGE(Point)
-    {
-        dimension_checker<X, 0, ccount>::check();
-    }
-};
-
-
-/*!
-    \brief Checks point concept (const version)
-    \ingroup concepts
-    \details The ConstPoint concept check the same as the Point concept,
-    but does not check write access.
-*/
-template <typename X>
-struct ConstPoint
-{
-private:
-
-    typedef typename coordinate_type<X>::type ctype;
-    typedef typename coordinate_system<X>::type csystem;
-
-    enum { ccount = dimension<X>::value };
-
-    /// Internal structure to check if access is OK for all dimensions
-    template <typename P, std::size_t I, std::size_t Count>
-    struct dimension_checker
-    {
-        static void check()
-        {
-            const P* p = 0;
-            ctype coord(ggl::get<I>(*p));
-            boost::ignore_unused_variable_warning(coord);
-            dimension_checker<P, I+1, Count>::check();
-        }
-    };
-
-    /// Internal structure to check if access is OK for all dimensions
-    template <typename P, std::size_t Count>
-    struct dimension_checker<P, Count, Count>
-    {
-        static void check() {}
-    };
-
-public:
-
-    /// BCCL macro to check the ConstPoint concept
-    BOOST_CONCEPT_USAGE(ConstPoint)
-    {
-        dimension_checker<X, 0, ccount>::check();
-    }
-};
-
-}} // namespace ggl::concept
-
-#endif // GGL_CORE_CONCEPTS_POINT_CONCEPT_HPP
diff --git a/include/builtin-ggl/ggl/core/concepts/polygon_concept.hpp b/include/builtin-ggl/ggl/core/concepts/polygon_concept.hpp
deleted file mode 100644
index a9852dc..0000000
--- a/include/builtin-ggl/ggl/core/concepts/polygon_concept.hpp
+++ /dev/null
@@ -1,120 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_CORE_CONCEPTS_POLYGON_CONCEPT_HPP
-#define GGL_CORE_CONCEPTS_POLYGON_CONCEPT_HPP
-
-#include <boost/concept_check.hpp>
-#include <boost/range/concepts.hpp>
-
-#include <ggl/algorithms/append.hpp>
-#include <ggl/algorithms/clear.hpp>
-#include <ggl/core/access.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/core/point_type.hpp>
-#include <ggl/core/ring_type.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/core/concepts/ring_concept.hpp>
-
-namespace ggl { namespace concept {
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename P>
-struct PolygonChecker
-{
-    typedef typename point_type<P>::type PNT;
-    typedef typename ring_type<P>::type R;
-    typedef typename interior_type<P>::type I;
-
-    BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<I>) );
-
-    void constraints()
-    {
-        P* poly;
-        R& e = exterior_ring(*poly);
-        const R& ce = exterior_ring(*poly);
-
-        I& i = interior_rings(*poly);
-        const I& ci = interior_rings(*poly);
-
-        boost::ignore_unused_variable_warning(e);
-        boost::ignore_unused_variable_warning(ce);
-        boost::ignore_unused_variable_warning(i);
-        boost::ignore_unused_variable_warning(ci);
-    }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-/*!
-    \brief Checks polygon concept, using Boost Concept Check Library and metafunctions
-    \ingroup concepts
-*/
-template <typename P>
-struct Polygon : detail::PolygonChecker<P>
-{
-private:
-
-    typedef typename point_type<P>::type PNT;
-    typedef typename ring_type<P>::type R;
-    typedef typename interior_type<P>::type I;
-
-    BOOST_CONCEPT_ASSERT( (concept::Point<PNT>) );
-    BOOST_CONCEPT_ASSERT( (concept::Ring<R>) );
-
-public:
-
-    /// BCCL macro to check the Polygon concept
-    BOOST_CONCEPT_USAGE(Polygon)
-    {
-        // Check if it can be modified
-        P* poly;
-        clear(*poly);
-        append(*poly, PNT());
-
-        this->constraints();
-    }
-};
-
-
-/*!
-    \brief Checks Polygon concept (const version)
-    \ingroup concepts
-    \details The ConstPolygon concept check the same as the Polygon concept,
-    but does not check write access.
-*/
-template <typename P>
-struct ConstPolygon : detail::PolygonChecker<P>
-{
-private:
-
-    typedef typename point_type<P>::type PNT;
-    typedef typename ring_type<P>::type R;
-    typedef typename interior_type<P>::type I;
-
-    BOOST_CONCEPT_ASSERT( (concept::ConstPoint<PNT>) );
-    BOOST_CONCEPT_ASSERT( (concept::ConstRing<R>) );
-
-public:
-
-    /// BCCL macro to check the ConstPolygon concept
-    BOOST_CONCEPT_USAGE(ConstPolygon)
-    {
-        this->constraints();
-    }
-};
-
-}} // namespace ggl::concept
-
-#endif // GGL_CORE_CONCEPTS_POLYGON_CONCEPT_HPP
diff --git a/include/builtin-ggl/ggl/core/concepts/ring_concept.hpp b/include/builtin-ggl/ggl/core/concepts/ring_concept.hpp
deleted file mode 100644
index 756b6f6..0000000
--- a/include/builtin-ggl/ggl/core/concepts/ring_concept.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_CONCEPTS_RING_CONCEPT_HPP
-#define GGL_CORE_CONCEPTS_RING_CONCEPT_HPP
-
-
-#include <boost/concept_check.hpp>
-#include <boost/range/concepts.hpp>
-
-#include <ggl/core/concepts/point_concept.hpp>
-
-
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/point_type.hpp>
-
-#include <ggl/algorithms/clear.hpp>
-#include <ggl/algorithms/append.hpp>
-
-
-
-namespace ggl { namespace concept {
-
-
-/*!
-    \brief Checks (linear) Ring concept, using Boost Concept Check Library and metafunctions
-    \ingroup concepts
-*/
-template <typename R>
-struct Ring
-{
-    private :
-        typedef typename point_type<R>::type P;
-
-        BOOST_CONCEPT_ASSERT( (concept::Point<P>) );
-        BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<R>) );
-
-
-    public :
-        /// BCCL macro to check the Ring concept
-        BOOST_CONCEPT_USAGE(Ring)
-        {
-            // Check if it can be modified
-            R* ls;
-            clear(*ls);
-            append(*ls, P());
-        }
-};
-
-
-/*!
-    \brief Checks (linear) ring concept (const version)
-    \ingroup concepts
-    \details The ConstLinearRing concept check the same as the Ring concept,
-    but does not check write access.
-*/
-template <typename R>
-struct ConstRing
-{
-    private :
-        typedef typename point_type<R>::type P;
-
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<P>) );
-        BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<R>) );
-
-    public :
-        /// BCCL macro to check the ConstLinearRing concept
-        BOOST_CONCEPT_USAGE(ConstRing)
-        {
-        }
-};
-
-}} // namespace ggl::concept
-
-
-#endif // GGL_CORE_CONCEPTS_RING_CONCEPT_HPP
diff --git a/include/builtin-ggl/ggl/core/concepts/segment_concept.hpp b/include/builtin-ggl/ggl/core/concepts/segment_concept.hpp
deleted file mode 100644
index f4c989b..0000000
--- a/include/builtin-ggl/ggl/core/concepts/segment_concept.hpp
+++ /dev/null
@@ -1,119 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_CONCEPTS_SEGMENT_CONCEPT_HPP
-#define GGL_CORE_CONCEPTS_SEGMENT_CONCEPT_HPP
-
-
-#include <boost/concept_check.hpp>
-
-#include <ggl/core/concepts/point_concept.hpp>
-
-
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/point_type.hpp>
-
-
-
-namespace ggl { namespace concept {
-
-
-/*!
-    \brief Checks segment concept, using Boost Concept Check Library and metafunctions
-    \ingroup concepts
-*/
-template <typename S>
-struct Segment
-{
-    private :
-        typedef typename point_type<S>::type P;
-
-        BOOST_CONCEPT_ASSERT( (concept::Point<P>) );
-
-
-        /// Internal structure to check if access is OK for all dimensions
-        template <size_t C, size_t D, size_t N>
-        struct dimension_checker
-        {
-            static void check()
-            {
-                S* s;
-                ggl::set<C, D>(*s, ggl::get<C, D>(*s));
-                dimension_checker<C, D + 1, N>::check();
-            }
-        };
-
-        template <size_t C, size_t N>
-        struct dimension_checker<C, N, N>
-        {
-            static void check() {}
-        };
-
-    public :
-        /// BCCL macro to check the Segment concept
-        BOOST_CONCEPT_USAGE(Segment)
-        {
-            static const size_t N = dimension<P>::value;
-            dimension_checker<0, 0, N>::check();
-            dimension_checker<1, 0, N>::check();
-        }
-};
-
-
-/*!
-    \brief Checks Segment concept (const version)
-    \ingroup concepts
-    \details The ConstSegment concept check the same as the Segment concept,
-    but does not check write access.
-*/
-template <typename S>
-struct ConstSegment
-{
-    private :
-        typedef typename point_type<S>::type P;
-        typedef typename coordinate_type<S>::type T;
-
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<P>) );
-
-
-        /// Internal structure to check if access is OK for all dimensions
-        template <size_t C, size_t D, size_t N>
-        struct dimension_checker
-        {
-            static void check()
-            {
-                const S* s = 0;
-                T coord(ggl::get<C, D>(*s));
-                boost::ignore_unused_variable_warning(coord);
-                dimension_checker<C, D + 1, N>::check();
-            }
-        };
-
-        template <size_t C, size_t N>
-        struct dimension_checker<C, N, N>
-        {
-            static void check() {}
-        };
-
-    public :
-        /// BCCL macro to check the ConstSegment concept
-        BOOST_CONCEPT_USAGE(ConstSegment)
-        {
-            static const size_t N = dimension<P>::value;
-            dimension_checker<0, 0, N>::check();
-            dimension_checker<1, 0, N>::check();
-        }
-};
-
-
-}} // namespace ggl::concept
-
-
-#endif // GGL_CORE_CONCEPTS_SEGMENT_CONCEPT_HPP
diff --git a/include/builtin-ggl/ggl/core/coordinate_dimension.hpp b/include/builtin-ggl/ggl/core/coordinate_dimension.hpp
deleted file mode 100644
index 71f2015..0000000
--- a/include/builtin-ggl/ggl/core/coordinate_dimension.hpp
+++ /dev/null
@@ -1,111 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_CORE_COORDINATE_DIMENSION_HPP
-#define GGL_CORE_COORDINATE_DIMENSION_HPP
-
-#include <cstddef>
-
-#include <boost/mpl/equal_to.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-#include <ggl/core/coordinate_dimension.hpp>
-#include <ggl/core/point_type.hpp>
-
-namespace ggl
-{
-
-namespace traits
-{
-
-/*!
-    \brief Traits class indicating the number of dimensions of a point
-    \par Geometries:
-        - point
-    \par Specializations should provide:
-        - value (should be derived from boost::mpl::int_<D>
-    \ingroup traits
-*/
-template <typename P>
-struct dimension {};
-
-} // namespace traits
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-// Base class derive from its own specialization of point-tag
-template <typename T, typename G>
-struct dimension : dimension<point_tag, typename point_type<T, G>::type> {};
-
-template <typename P>
-struct dimension<point_tag, P> : traits::dimension<P> {};
-
-} // namespace core_dispatch
-#endif
-
-/*!
-    \brief Meta-function which defines coordinate dimensions, i.e. the number of axes of any geometry
-    \ingroup core
-*/
-template <typename G>
-struct dimension
-    : core_dispatch::dimension
-        <
-        typename tag<G>::type,
-        typename boost::remove_const<G>::type
-        >
-{};
-
-/*!
-    \brief assert_dimension, enables compile-time checking if coordinate dimensions are as expected
-    \ingroup utility
-*/
-template <typename G, int D>
-inline void assert_dimension()
-{
-    BOOST_STATIC_ASSERT((
-        boost::mpl::equal_to
-        <
-        ggl::dimension<G>,
-        boost::mpl::int_<D>
-        >::type::value
-        ));
-}
-
-/*!
-    \brief assert_dimension, enables compile-time checking if coordinate dimensions are as expected
-    \ingroup utility
-*/
-template <typename G, int D>
-inline void assert_dimension_less_equal()
-{
-    BOOST_STATIC_ASSERT(( dimension<G>::type::value <= D ));
-}
-
-template <typename G, int D>
-inline void assert_dimension_greater_equal()
-{
-    BOOST_STATIC_ASSERT(( dimension<G>::type::value >= D ));
-}
-
-/*!
-    \brief assert_dimension_equal, enables compile-time checking if coordinate dimensions of two geometries are equal
-    \ingroup utility
-*/
-template <typename G1, typename G2>
-inline void assert_dimension_equal()
-{
-    BOOST_STATIC_ASSERT(( dimension<G1>::type::value == dimension<G2>::type::value ));
-}
-
-} // namespace ggl
-
-#endif // GGL_CORE_COORDINATE_DIMENSION_HPP
diff --git a/include/builtin-ggl/ggl/core/coordinate_system.hpp b/include/builtin-ggl/ggl/core/coordinate_system.hpp
deleted file mode 100644
index fbbe71d..0000000
--- a/include/builtin-ggl/ggl/core/coordinate_system.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_COORDINATE_SYSTEM_HPP
-#define GGL_CORE_COORDINATE_SYSTEM_HPP
-
-
-#include <boost/type_traits/remove_const.hpp>
-#include <ggl/core/point_type.hpp>
-
-
-namespace ggl
-{
-
-namespace traits
-{
-
-    /*!
-        \brief Traits class defining the coordinate system of a point, important for strategy selection
-        \ingroup traits
-        \par Geometries:
-            - point
-        \par Specializations should provide:
-            - typedef CS type; (cs::cartesian, cs::spherical, etc)
-    */
-    template <typename P>
-    struct coordinate_system {};
-
-} // namespace traits
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-    template <typename GeometryTag, typename G>
-    struct coordinate_system
-    {
-        typedef typename point_type<GeometryTag, G>::type P;
-
-        // Call its own specialization on point-tag
-        typedef typename coordinate_system<point_tag, P>::type type;
-    };
-
-
-    template <typename P>
-    struct coordinate_system<point_tag, P>
-    {
-        typedef typename traits::coordinate_system<P>::type type;
-    };
-
-
-} // namespace core_dispatch
-#endif
-
-
-/*!
-    \brief Meta-function which defines coordinate system for any geometry
-    \ingroup core
-*/
-template <typename G>
-struct coordinate_system
-{
-    typedef typename boost::remove_const<G>::type ncg;
-    typedef typename core_dispatch::coordinate_system<
-        typename tag<G>::type, ncg>::type type;
-};
-
-}
-
-
-#endif // GGL_CORE_COORDINATE_SYSTEM_HPP
diff --git a/include/builtin-ggl/ggl/core/coordinate_type.hpp b/include/builtin-ggl/ggl/core/coordinate_type.hpp
deleted file mode 100644
index ca08cde..0000000
--- a/include/builtin-ggl/ggl/core/coordinate_type.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_CORE_COORDINATE_TYPE_HPP
-#define GGL_CORE_COORDINATE_TYPE_HPP
-
-#include <boost/type_traits/remove_const.hpp>
-
-#include <ggl/core/point_type.hpp>
-
-namespace ggl {
-
-namespace traits {
-
-/*!
-    \brief Traits class which indicate the coordinate type (double,float,...) of a point
-    \ingroup traits
-    \par Geometries:
-        - point
-    \par Specializations should provide:
-        - typedef T type; (double,float,int,etc)
-*/
-template <typename P>
-struct coordinate_type {};
-
-} // namespace traits
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename GeometryTag, typename G>
-struct coordinate_type
-{
-    typedef typename point_type<GeometryTag, G>::type point_type;
-
-    // Call its own specialization on point-tag
-    typedef typename coordinate_type<point_tag, point_type>::type type;
-};
-
-template <typename P>
-struct coordinate_type<point_tag, P>
-{
-    typedef typename traits::coordinate_type<P>::type type;
-};
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-/*!
-    \brief Meta-function which defines coordinate type (int, float, double, etc) of any geometry
-    \ingroup core
-*/
-template <typename G>
-struct coordinate_type
-{
-    typedef typename boost::remove_const<G>::type ncg;
-    typedef typename core_dispatch::coordinate_type
-        <
-            typename tag<G>::type,
-            ncg
-        >::type type;
-};
-
-} // namespace ggl
-
-#endif // GGL_CORE_COORDINATE_TYPE_HPP
diff --git a/include/builtin-ggl/ggl/core/cs.hpp b/include/builtin-ggl/ggl/core/cs.hpp
deleted file mode 100644
index 25a9cc2..0000000
--- a/include/builtin-ggl/ggl/core/cs.hpp
+++ /dev/null
@@ -1,180 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_CORE_CS_HPP
-#define GGL_CORE_CS_HPP
-
-#include <cstddef>
-
-#include <boost/type_traits.hpp>
-
-#include <ggl/core/coordinate_system.hpp>
-#include <ggl/core/tags.hpp>
-
-/*!
-\defgroup cs coordinate systems
-\brief Defines coordinate systems
-\details Coordinate systems are essential for any point in the Generic Geometry Library. Many
-algorithms such as distance or transform use coordinate systems to select the strategy to use.
-*/
-
-namespace ggl
-{
-
-/*!
-    \brief Unit of plan angles: degrees
-    \ingroup cs
-*/
-class degree {};
-
-
-/*!
-    \brief Unit of plan angles: radians
-    \ingroup cs
-*/
-class radian {};
-
-
-namespace cs
-{
-
-/*!
-    \brief Cartesian coordinate system
-    \details Defines the Cartesian or rectangular coordinate system where points are defined in 2 or 3 (or more)
-    dimensions and usually (but not always) known as x,y,z
-    \see http://en.wikipedia.org/wiki/Cartesian_coordinate_system
-    \ingroup cs
-*/
-struct cartesian {};
-
-
-
-
-/*!
-    \brief Geographic coordinate system, in degree or in radian
-    \details Defines the geographic coordinate system where points are defined in two angles and usually
-    known as lat,long or lo,la or phi,lambda
-    \see http://en.wikipedia.org/wiki/Geographic_coordinate_system
-    \ingroup cs
-    \note might be moved to extensions/gis/geographic
-*/
-template<typename DegreeOrRadian>
-struct geographic
-{
-    typedef DegreeOrRadian units;
-};
-
-
-
-/*!
-    \brief Spherical coordinate system, in degree or in radian
-    \details Defines the spherical coordinate system where points are defined in two angles
-        and an optional radius usually known as r, theta, phi
-    \par Coordinates:
-    - coordinate 0:
-        0 <= phi < 2pi is the angle between the positive x-axis and the line from the origin to the P projected onto the xy-plane.
-    - coordinate 1:
-        0 <= theta <= pi is the angle between the positive z-axis and the line formed between the origin and P.
-    - coordinate 2 (if specified):
-        r >= 0 is the distance from the origin to a given point P.
-
-    \see http://en.wikipedia.org/wiki/Spherical_coordinates
-    \ingroup cs
-*/
-template<typename DegreeOrRadian>
-struct spherical
-{
-    typedef DegreeOrRadian units;
-};
-
-/*!
-    \brief Polar coordinate system
-    \details Defines the polar coordinate system "in which each point on a plane is determined by an angle and a distance"
-    \see http://en.wikipedia.org/wiki/Polar_coordinates
-    \ingroup cs
-*/
-template<typename DegreeOrRadian>
-struct polar
-{
-    typedef DegreeOrRadian units;
-};
-
-
-} // namespace cs
-
-namespace traits
-{
-/*!
-    \brief Traits class defining coordinate system tag, bound to coordinate system
-    \ingroup traits
-    \tparam CoordinateSystem coordinate system
-*/
-template <typename CoordinateSystem>
-struct cs_tag
-{
-};
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-template<typename DegreeOrRadian>
-struct cs_tag<cs::geographic<DegreeOrRadian> >
-{
-    typedef geographic_tag type;
-};
-
-template<typename DegreeOrRadian>
-struct cs_tag<cs::spherical<DegreeOrRadian> >
-{
-    typedef spherical_tag type;
-};
-
-template<>
-struct cs_tag<cs::cartesian>
-{
-    typedef cartesian_tag type;
-};
-
-
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-} // namespace traits
-
-/*!
-    \brief Meta-function returning coordinate system tag (cs family) of any geometry
-    \ingroup core
-*/
-template <typename G>
-struct cs_tag
-{
-    typedef typename traits::cs_tag
-        <
-        typename ggl::coordinate_system<G>::type
-        >::type type;
-};
-
-
-/*!
-    \brief Meta-function to verify if a coordinate system is radian
-    \ingroup core
-*/
-template <typename CoordinateSystem>
-struct is_radian : boost::true_type {};
-
-
-#ifndef DOXYGEN_NO_SPECIALIZATIONS
-
-// Specialization for any degree coordinate systems
-template <template<typename> class CoordinateSystem>
-struct is_radian< CoordinateSystem<degree> > : boost::false_type
-{
-};
-
-#endif // DOXYGEN_NO_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_CORE_CS_HPP
diff --git a/include/builtin-ggl/ggl/core/exception.hpp b/include/builtin-ggl/ggl/core/exception.hpp
deleted file mode 100644
index 215180d..0000000
--- a/include/builtin-ggl/ggl/core/exception.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_CORE_EXCEPTION_HPP
-#define GGL_CORE_EXCEPTION_HPP
-
-#include <exception>
-
-namespace ggl {
-
-/*!
-\brief Base exception class for GGL
-\ingroup core
-*/
-struct exception : public std::exception
-{
-};
-
-} // namespace ggl
-
-#endif // GGL_CORE_EXCEPTION_HPP
diff --git a/include/builtin-ggl/ggl/core/exterior_ring.hpp b/include/builtin-ggl/ggl/core/exterior_ring.hpp
deleted file mode 100644
index f5c479d..0000000
--- a/include/builtin-ggl/ggl/core/exterior_ring.hpp
+++ /dev/null
@@ -1,100 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_EXTERIOR_RING_HPP
-#define GGL_CORE_EXTERIOR_RING_HPP
-
-
-#include <boost/type_traits/remove_const.hpp>
-
-
-#include <ggl/core/ring_type.hpp>
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-
-namespace ggl {
-
-namespace traits {
-
-/*!
-    \brief Traits class defining access to exterior_ring of a polygon
-    \details Should define const and non const access
-    \ingroup traits
-    \tparam G geometry
-    \par Geometries:
-        - polygon
-    \par Specializations should provide:
-        - static inline RING& get(POLY& )
-        - static inline const RING& get(const POLY& )
-*/
-template <typename P>
-struct exterior_ring {};
-
-} // namespace traits
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename T, typename G>
-struct exterior_ring {};
-
-template <typename P>
-struct exterior_ring<polygon_tag, P>
-{
-    static inline typename ring_type<polygon_tag, P>::type& get(P& polygon)
-    {
-        return traits::exterior_ring<P>::get(polygon);
-    }
-
-    static inline const typename ring_type<polygon_tag, P>::type& get(const P& polygon)
-    {
-        return traits::exterior_ring<P>::get(polygon);
-    }
-};
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief Function to get the exterior_ring ring of a polygon
-    \ingroup access
-    \note OGC compliance: instead of ExteriorRing
-    \tparam P polygon type
-    \param polygon the polygon to get the exterior ring from
-    \return a reference to the exterior ring
-*/
-template <typename P>
-inline typename ring_type<P>::type& exterior_ring(P& polygon)
-{
-    return core_dispatch::exterior_ring<typename tag<P>::type, P>::get(polygon);
-}
-
-/*!
-    \brief Function to get the exterior ring of a polygon (const version)
-    \ingroup access
-    \note OGC compliance: instead of ExteriorRing
-    \tparam P polygon type
-    \param polygon the polygon to get the exterior ring from
-    \return a const reference to the exterior ring
-*/
-template <typename P>
-inline const typename ring_type<P>::type& exterior_ring(const P& polygon)
-{
-    return core_dispatch::exterior_ring<typename tag<P>::type, P>::get(polygon);
-}
-
-
-} // namespace ggl
-
-
-#endif // GGL_CORE_EXTERIOR_RING_HPP
diff --git a/include/builtin-ggl/ggl/core/geometry_id.hpp b/include/builtin-ggl/ggl/core/geometry_id.hpp
deleted file mode 100644
index b5a1c9f..0000000
--- a/include/builtin-ggl/ggl/core/geometry_id.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_GEOMETRY_ID_HPP
-#define GGL_CORE_GEOMETRY_ID_HPP
-
-
-#include <boost/mpl/int.hpp>
-#include <boost/type_traits.hpp>
-
-
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-
-namespace ggl {
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename GeometryTag>
-struct geometry_id {};
-
-
-template <>
-struct geometry_id<point_tag>      : boost::mpl::int_<1> {};
-
-
-template <>
-struct geometry_id<linestring_tag> : boost::mpl::int_<2> {};
-
-
-template <>
-struct geometry_id<polygon_tag>    : boost::mpl::int_<3> {};
-
-
-template <>
-struct geometry_id<nsphere_tag>    : boost::mpl::int_<91> {};
-
-
-template <>
-struct geometry_id<segment_tag>    : boost::mpl::int_<92> {};
-
-
-template <>
-struct geometry_id<ring_tag>       : boost::mpl::int_<93> {};
-
-
-template <>
-struct geometry_id<box_tag>        : boost::mpl::int_<94> {};
-
-
-
-} // namespace core_dispatch
-#endif
-
-
-
-/*!
-    \brief Meta-function the id for a geometry type
-    \note Used for e.g. reverse meta-function
-    \ingroup core
-*/
-template <typename Geometry>
-struct geometry_id : core_dispatch::geometry_id<typename tag<Geometry>::type>
-{};
-
-
-} // namespace ggl
-
-
-#endif // GGL_CORE_GEOMETRY_ID_HPP
diff --git a/include/builtin-ggl/ggl/core/interior_rings.hpp b/include/builtin-ggl/ggl/core/interior_rings.hpp
deleted file mode 100644
index 3bb79d5..0000000
--- a/include/builtin-ggl/ggl/core/interior_rings.hpp
+++ /dev/null
@@ -1,165 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_INTERIOR_RINGS_HPP
-#define GGL_CORE_INTERIOR_RINGS_HPP
-
-#include <boost/range/functions.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-namespace ggl
-{
-
-namespace traits
-{
-
-    /*!
-        \brief Traits class indicating interior container type of a polygon
-        \details defines inner container type, so the container containing the interior rings
-        \ingroup traits
-        \par Geometries:
-            - polygon
-        \par Specializations should provide:
-            - typedef CONTAINER<RING<P> > type (e.g. std::vector<linear_ring<P> >)
-        \tparam G geometry
-    */
-    template <typename G>
-    struct interior_type { };
-
-
-    /*!
-        \brief Traits class defining access to interior_rings of a polygon
-        \details defines access (const and non const) to interior ring
-        \ingroup traits
-        \par Geometries:
-            - polygon
-        \par Specializations should provide:
-            - static inline INTERIOR& get(POLY&)
-            - static inline const INTERIOR& get(const POLY&)
-        \tparam G geometry
-    */
-    template <typename G>
-    struct interior_rings
-    {
-    };
-
-
-} // namespace traits
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-    template <typename GeometryTag, typename G> struct interior_type {};
-
-    template <typename P>
-    struct interior_type<polygon_tag, P>
-    {
-        typedef typename traits::interior_type<P>::type type;
-    };
-
-
-
-    template <typename GeometryTag, typename G>
-    struct interior_rings {};
-
-
-    template <typename P>
-    struct interior_rings<polygon_tag, P>
-    {
-        static inline typename interior_type<polygon_tag, P>::type& get(P& polygon)
-        {
-            return traits::interior_rings<P>::get(polygon);
-        }
-
-        static inline const typename interior_type<polygon_tag, P>::type& get(const P& polygon)
-        {
-            return traits::interior_rings<P>::get(polygon);
-        }
-    };
-
-
-
-} // namespace core_dispatch
-#endif
-
-
-
-
-/*!
-    \brief Meta-function defining container type of inner rings of (multi)polygon geometriy
-    \details the interior rings should be organized as a container (std::vector, std::deque, boost::array) with
-        boost range support. This meta function defines the type of that container.
-    \ingroup core
-*/
-template <typename G>
-struct interior_type
-{
-    typedef typename boost::remove_const<G>::type ncg;
-    typedef typename core_dispatch::interior_type<
-        typename tag<G>::type, ncg>::type type;
-};
-
-
-
-/*!
-    \brief Function to get the interior rings of a polygon (non const version)
-    \ingroup access
-    \note OGC compliance: instead of InteriorRingN
-    \tparam P polygon type
-    \param polygon the polygon to get the interior rings from
-    \return a reference to the interior rings
-*/
-template <typename P>
-inline typename interior_type<P>::type& interior_rings(P& polygon)
-{
-    return core_dispatch::interior_rings<typename tag<P>::type, P>::get(polygon);
-}
-
-
-/*!
-    \brief Function to get the interior rings of a polygon (const version)
-    \ingroup access
-    \note OGC compliance: instead of InteriorRingN
-    \tparam P polygon type
-    \param polygon the polygon to get the interior rings from
-    \return a const reference to the interior rings
-*/
-template <typename P>
-inline const typename interior_type<P>::type& interior_rings(const P& polygon)
-{
-    return core_dispatch::interior_rings<typename tag<P>::type, P>::get(polygon);
-}
-
-
-
-/*!
-    \brief Function to get the number of interior rings of a polygon
-    \ingroup access
-    \note Defined by OGC as "numInteriorRing". To be consistent with "numPoints"
-        letter "s" is appended
-    \tparam P polygon type
-    \param polygon the polygon
-    \return the nubmer of interior rings
-*/
-template <typename P>
-inline size_t num_interior_rings(const P& polygon)
-{
-    return boost::size(interior_rings(polygon));
-}
-
-}
-
-
-#endif // GGL_CORE_INTERIOR_RINGS_HPP
diff --git a/include/builtin-ggl/ggl/core/is_linear.hpp b/include/builtin-ggl/ggl/core/is_linear.hpp
deleted file mode 100644
index 22dc766..0000000
--- a/include/builtin-ggl/ggl/core/is_linear.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_IS_LINEAR_HPP
-#define GGL_CORE_IS_LINEAR_HPP
-
-
-#include <boost/type_traits.hpp>
-
-
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-
-namespace ggl {
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename GeometryTag>
-struct is_linear : boost::false_type {};
-
-
-template <>
-struct is_linear<linestring_tag> : boost::true_type {};
-
-
-template <>
-struct is_linear<ring_tag>       : boost::true_type {};
-
-
-} // namespace core_dispatch
-#endif
-
-
-
-/*!
-    \brief Meta-function defining "true" for linear types (linestring,ring),
-        "false" for non-linear typse
-    \note Used for tag dispatching and meta-function finetuning
-    \ingroup core
-*/
-template <typename Geometry>
-struct is_linear : core_dispatch::is_linear<typename tag<Geometry>::type>
-{};
-
-
-} // namespace ggl
-
-
-#endif // GGL_CORE_IS_LINEAR_HPP
diff --git a/include/builtin-ggl/ggl/core/is_multi.hpp b/include/builtin-ggl/ggl/core/is_multi.hpp
deleted file mode 100644
index 00eef47..0000000
--- a/include/builtin-ggl/ggl/core/is_multi.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_IS_MULTI_HPP
-#define GGL_CORE_IS_MULTI_HPP
-
-
-#include <boost/type_traits.hpp>
-
-
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-
-namespace ggl {
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename GeometryTag>
-struct is_multi : boost::false_type {};
-
-
-} // namespace core_dispatch
-#endif
-
-
-
-
-/*!
-    \brief Meta-function defining "true" for multi geometries (multi_point, etc)
-    \ingroup core
-*/
-template <typename Geometry>
-struct is_multi : core_dispatch::is_multi<typename tag<Geometry>::type>
-{};
-
-
-} // namespace ggl
-
-#endif // GGL_CORE_IS_MULTI_HPP
diff --git a/include/builtin-ggl/ggl/core/point_type.hpp b/include/builtin-ggl/ggl/core/point_type.hpp
deleted file mode 100644
index 158b1a7..0000000
--- a/include/builtin-ggl/ggl/core/point_type.hpp
+++ /dev/null
@@ -1,109 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_CORE_POINT_TYPE_HPP
-#define GGL_CORE_POINT_TYPE_HPP
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-#include <ggl/core/ring_type.hpp>
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-namespace ggl {
-
-namespace traits {
-
-/*!
-    \brief Traits class indicating the type of contained points
-    \ingroup traits
-    \par Geometries:
-        - all geometries except point
-    \par Specializations should provide:
-        - typedef P type (where P should fulfil the Point concept)
-    \tparam G geometry
-*/
-template <typename G>
-struct point_type
-{};
-
-
-} // namespace traits
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename Tag, typename Geometry>
-struct point_type
-{
-    // Default: call traits to get point type
-    typedef typename boost::remove_const
-        <
-            typename traits::point_type<Geometry>::type
-        >::type type;
-};
-
-
-// Specialization for point: the point itself
-template <typename Point>
-struct point_type<point_tag, Point>
-{
-    typedef Point type;
-};
-
-// Specializations for linestring/linear ring, via boost::range
-template <typename Linestring>
-struct point_type<linestring_tag, Linestring>
-{
-    typedef typename boost::range_value<Linestring>::type type;
-};
-
-template <typename Ring>
-struct point_type<ring_tag, Ring>
-{
-    typedef typename boost::range_value<Ring>::type type;
-};
-
-// Specialization for polygon: the point-type is the point-type of its rinsg
-template <typename Polygon>
-struct point_type<polygon_tag, Polygon>
-{
-    typedef typename point_type
-        <
-            ring_tag,
-            typename ring_type<polygon_tag, Polygon>::type
-        >::type type;
-};
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-    \brief Meta-function which defines point type of any geometry
-    \ingroup core
-*/
-template <typename Geometry>
-struct point_type
-{
-    typedef typename boost::remove_const<Geometry>::type ncg;
-    typedef typename core_dispatch::point_type<
-        typename tag<Geometry>::type, ncg>::type type;
-
-
-
-
-};
-
-} // namespace ggl
-
-#endif // GGL_CORE_POINT_TYPE_HPP
diff --git a/include/builtin-ggl/ggl/core/radian_access.hpp b/include/builtin-ggl/ggl/core/radian_access.hpp
deleted file mode 100644
index 070fb63..0000000
--- a/include/builtin-ggl/ggl/core/radian_access.hpp
+++ /dev/null
@@ -1,118 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_RADIAN_ACCESS_HPP
-#define GGL_CORE_RADIAN_ACCESS_HPP
-
-
-#include <cstddef>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/cs.hpp>
-
-
-#include <ggl/util/math.hpp>
-
-
-namespace ggl {
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail {
-
-template <std::size_t D, typename G, typename DR>
-struct radian_access
-{
-};
-
-template <std::size_t D, typename G, template<typename> class CS>
-struct radian_access<D, G, CS<radian> >
-{
-    typedef typename coordinate_type<G>::type coordinate_type;
-
-    static inline coordinate_type get(G const& geometry)
-    {
-        return ggl::get<D>(geometry);
-    }
-
-    static inline void set(G& geometry, coordinate_type const& radians)
-    {
-        ggl::set<D>(geometry, radians);
-    }
-};
-
-template <std::size_t D, typename G, template<typename> class CS>
-struct radian_access<D, G, CS<degree> >
-{
-    typedef typename coordinate_type<G>::type coordinate_type;
-
-    static inline coordinate_type get(G const& geometry)
-    {
-        return boost::numeric_cast
-            <
-                coordinate_type
-            >(ggl::get<D>(geometry) * math::d2r);
-    }
-
-    static inline void set(G& geometry, coordinate_type const& radians)
-    {
-        ggl::set<D>(geometry, boost::numeric_cast
-            <
-                coordinate_type
-            >(radians * math::r2d));
-    }
-
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-    \brief get a coordinate value of a point, result is in RADIAN
-    \details also if coordinate system was in degree, result is in radian
-    \return coordinate value
-    \ingroup access
-    \tparam D dimension
-    \tparam G geometry
-    \param geometry geometry to get coordinate value from
-*/
-template <std::size_t D, typename G>
-inline typename coordinate_type<G>::type get_as_radian(const G& geometry)
-{
-    return detail::radian_access<D, G,
-            typename coordinate_system<G>::type>::get(geometry);
-}
-
-
-/*!
-    \brief assign coordinate value (which is in radian) to a point
-    \details if coordinate system of point is in degree, will be converted
-        to degree
-    \ingroup access
-    \tparam D dimension
-    \tparam G geometry
-    \param geometry geometry to assign coordinate to
-    \param radians coordinate value to assign
-*/
-template <std::size_t D, typename G>
-inline void set_from_radian(G& geometry,
-            const typename coordinate_type<G>::type& radians)
-{
-    detail::radian_access<D, G,
-            typename coordinate_system<G>::type>::set(geometry, radians);
-}
-
-
-} // namespace ggl
-
-
-#endif // GGL_CORE_RADIAN_ACCESS_HPP
diff --git a/include/builtin-ggl/ggl/core/radius.hpp b/include/builtin-ggl/ggl/core/radius.hpp
deleted file mode 100644
index fa4b99f..0000000
--- a/include/builtin-ggl/ggl/core/radius.hpp
+++ /dev/null
@@ -1,152 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_RADIUS_HPP
-#define GGL_CORE_RADIUS_HPP
-
-
-#include <cstddef>
-
-
-#include <boost/type_traits/remove_const.hpp>
-
-
-#include <ggl/core/tag.hpp>
-
-
-namespace ggl {
-
-namespace traits {
-
-/*!
-    \brief Traits class to get/set radius of a circle/sphere/(ellipse)
-    \details the radius access meta-functions give read/write access to the radius of a circle or a sphere,
-    or to the major/minor axis or an ellipse, or to one of the 3 equatorial radii of an ellipsoid.
-
-    It should be specialized per geometry, in namespace core_dispatch. Those specializations should
-    forward the call via traits to the geometry class, which could be specified by the user.
-
-    There is a corresponding generic radius_get and radius_set function
-    \par Geometries:
-        - n-sphere (circle,sphere)
-        - upcoming ellipse
-    \par Specializations should provide:
-        - inline static T get(const G& geometry)
-        - inline static void set(G& geometry, const T& radius)
-    \ingroup traits
-*/
-template <typename G, typename T, std::size_t D>
-struct radius_access {};
-
-
-/*!
-    \brief Traits class indicating the type (double,float,...) of the radius of a circle or a sphere
-    \par Geometries:
-        - n-sphere (circle,sphere)
-        - upcoming ellipse
-    \par Specializations should provide:
-        - typedef T type (double,float,int,etc)
-    \ingroup traits
-*/
-template <typename G>
-struct radius_type {};
-
-} // namespace traits
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename Tag, typename G>
-struct radius_type
-{
-    //typedef core_dispatch_specialization_required type;
-};
-
-/*!
-    \brief radius access meta-functions, used by concept n-sphere and upcoming ellipse.
-*/
-template <typename Tag, typename G, typename T, std::size_t D>
-struct radius_access
-{
-    //static inline T get(const G& ) {}
-    //static inline void set(G& g, const T& value) {}
-};
-
-template <typename S>
-struct radius_type<nsphere_tag, S>
-{
-    typedef typename traits::radius_type<S>::type type;
-};
-
-template <typename S, typename T, std::size_t D>
-struct radius_access<nsphere_tag, S, T, D>
-{
-    BOOST_STATIC_ASSERT((D == 0));
-    static inline T get(const S& s)
-    {
-        return traits::radius_access<S, T, D>::get(s);
-    }
-    static inline void set(S& s, const T& radius)
-    {
-        traits::radius_access<S, T, D>::set(s, radius);
-    }
-};
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-template <typename G>
-struct radius_type
-{
-    typedef typename boost::remove_const<G>::type rconst;
-    typedef typename core_dispatch::radius_type<typename tag<G>::type, rconst>::type type;
-};
-
-/*!
-    \brief Function to get radius
-    \return radius of a circle / sphere / ellipse
-    \ingroup access
-    \param geometry the geometry to get the radius from
-    \tparam I index, for circle/sphere always zero, for ellipse major/minor axis,
-        for ellipsoid one of the 3 equatorial radii
-*/
-template <std::size_t I, typename G>
-inline typename radius_type<G>::type get_radius(const G& geometry)
-{
-    typedef typename boost::remove_const<G>::type rconst;
-
-    return core_dispatch::radius_access<typename tag<G>::type, rconst,
-           typename radius_type<G>::type, I>::get(geometry);
-}
-
-/*!
-    \brief Function to set the radius of a circle / sphere / (ellipse)
-    \ingroup access
-    \tparam I index, for circle/sphere always zero, for ellipse major/minor axis,
-        for ellipsoid one of the 3 equatorial radii
-    \param geometry the geometry to change
-    \param radius the radius to set
-*/
-template <std::size_t I, typename G>
-inline void set_radius(G& geometry, const typename radius_type<G>::type& radius)
-{
-    typedef typename boost::remove_const<G>::type rconst;
-
-    core_dispatch::radius_access<typename tag<G>::type, G,
-        typename radius_type<G>::type, I>::set(geometry, radius);
-}
-
-
-} // namespace ggl
-
-
-#endif // GGL_RADIUS_HPP
diff --git a/include/builtin-ggl/ggl/core/replace_point_type.hpp b/include/builtin-ggl/ggl/core/replace_point_type.hpp
deleted file mode 100644
index 195cb40..0000000
--- a/include/builtin-ggl/ggl/core/replace_point_type.hpp
+++ /dev/null
@@ -1,99 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_REPLACE_POINT_TYPE_HPP
-#define GGL_CORE_REPLACE_POINT_TYPE_HPP
-
-
-#include <boost/type_traits/remove_const.hpp>
-
-
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-#include <ggl/core/coordinate_type.hpp>
-
-// For now: use ggl-provided geometries
-// TODO: figure out how to get the class and replace the type
-// TODO: take "const" into account
-#include <ggl/geometries/point.hpp>
-#include <ggl/geometries/linestring.hpp>
-#include <ggl/geometries/linear_ring.hpp>
-#include <ggl/geometries/polygon.hpp>
-#include <ggl/geometries/segment.hpp>
-#include <ggl/geometries/box.hpp>
-#include <ggl/geometries/nsphere.hpp>
-
-
-namespace ggl {
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-template <typename GeometryTag, typename Geometry, typename NewPointType>
-struct replace_point_type {};
-
-template <typename Geometry, typename NewPointType>
-struct replace_point_type<point_tag, Geometry, NewPointType>
-{
-    typedef NewPointType type;
-};
-
-template <typename Geometry, typename NewPointType>
-struct replace_point_type<linestring_tag, Geometry, NewPointType>
-{
-    typedef linestring<NewPointType> type;
-};
-
-template <typename Geometry, typename NewPointType>
-struct replace_point_type<segment_tag, Geometry, NewPointType>
-{
-    typedef segment<NewPointType> type;
-};
-
-template <typename Geometry, typename NewPointType>
-struct replace_point_type<ring_tag, Geometry, NewPointType>
-{
-    typedef linear_ring<NewPointType> type;
-};
-
-template <typename Geometry, typename NewPointType>
-struct replace_point_type<box_tag, Geometry, NewPointType>
-{
-    typedef box<NewPointType> type;
-};
-
-template <typename Geometry, typename NewPointType>
-struct replace_point_type<polygon_tag, Geometry, NewPointType>
-{
-    typedef polygon<NewPointType> type;
-};
-
-template <typename Geometry, typename NewPointType>
-struct replace_point_type<nsphere_tag, Geometry, NewPointType>
-{
-    typedef typename ggl::coordinate_type<Geometry>::type coortype;
-    typedef nsphere<NewPointType, coortype> type;
-};
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-template <typename Geometry, typename NewPointType>
-struct replace_point_type : core_dispatch::replace_point_type
-        <
-        typename tag<Geometry>::type,
-        typename boost::remove_const<Geometry>::type,
-        NewPointType
-        >
-{};
-
-} // namespace ggl
-
-#endif // GGL_CORE_REPLACE_POINT_TYPE_HPP
diff --git a/include/builtin-ggl/ggl/core/reverse_dispatch.hpp b/include/builtin-ggl/ggl/core/reverse_dispatch.hpp
deleted file mode 100644
index b02fb6b..0000000
--- a/include/builtin-ggl/ggl/core/reverse_dispatch.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_REVERSE_DISPATCH_HPP
-#define GGL_CORE_REVERSE_DISPATCH_HPP
-
-
-#include <boost/type_traits.hpp>
-
-#include <boost/mpl/greater.hpp>
-
-#include <ggl/core/geometry_id.hpp>
-
-
-namespace ggl {
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-// Different geometries: reverse_dispatch if second ID < first ID
-// Note: if "boost::mpl::greater is used, with geometry_id instead of geometry_id::type::value,
-// it is not working correctly!!!! TODO: find out why not.
-template <std::size_t GeometryId1, std::size_t GeometryId2>
-struct reverse_dispatch : boost::mpl::if_c
-<
-    (GeometryId1 > GeometryId2),
-    boost::true_type,
-    boost::false_type
->
-{};
-
-
-// Same geometry: never reverse_dispatch
-template <std::size_t GeometryId>
-struct reverse_dispatch<GeometryId, GeometryId> : boost::false_type {};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-template <typename Geometry1, typename Geometry2>
-struct reverse_dispatch : detail::reverse_dispatch
-    <
-    geometry_id<Geometry1>::type::value,
-    geometry_id<Geometry2>::type::value
-    >
-{};
-
-
-} // namespace ggl
-
-#endif // GGL_CORE_REVERSE_DISPATCH_HPP
diff --git a/include/builtin-ggl/ggl/core/ring_type.hpp b/include/builtin-ggl/ggl/core/ring_type.hpp
deleted file mode 100644
index f57d8a8..0000000
--- a/include/builtin-ggl/ggl/core/ring_type.hpp
+++ /dev/null
@@ -1,97 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_RING_TYPE_HPP
-#define GGL_CORE_RING_TYPE_HPP
-
-
-#include <boost/type_traits/remove_const.hpp>
-
-
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-
-namespace ggl
-{
-
-namespace traits
-{
-
-
-/*!
-    \brief Traits class to indicate ring-type  of a polygon's exterior ring/interior rings
-    \ingroup traits
-    \par Geometries:
-        - polygon
-    \par Specializations should provide:
-        - typedef XXX type (e.g. linear_ring<P>)
-    \tparam G geometry
-*/
-template <typename G>
-struct ring_type
-{
-    // should define type
-};
-
-
-
-
-} // namespace traits
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-
-template <typename GeometryTag, typename Geometry> struct ring_type
-{};
-
-
-
-template <typename Polygon>
-struct ring_type<polygon_tag, Polygon>
-{
-    typedef typename traits::ring_type<Polygon>::type type;
-};
-
-
-
-
-} // namespace core_dispatch
-#endif
-
-
-/*!
-    \brief Meta-function which defines ring type of (multi)polygon geometry
-    \details a polygon contains one exterior ring and zero or more interior rings (holes).
-        The type of those rings is assumed to be equal. This meta function retrieves the type
-        of such rings.
-    \ingroup core
-*/
-template <typename Geometry>
-struct ring_type
-{
-    typedef typename boost::remove_const<Geometry>::type ncg;
-    typedef typename core_dispatch::ring_type
-        <
-            typename tag<Geometry>::type, ncg
-        >::type type;
-};
-
-
-
-
-}
-
-
-#endif // GGL_CORE_RING_TYPE_HPP
diff --git a/include/builtin-ggl/ggl/core/tag.hpp b/include/builtin-ggl/ggl/core/tag.hpp
deleted file mode 100644
index c7eced2..0000000
--- a/include/builtin-ggl/ggl/core/tag.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_CORE_TAG_HPP
-#define GGL_CORE_TAG_HPP
-
-#include <boost/type_traits/remove_const.hpp>
-
-#include <ggl/core/tags.hpp>
-
-/*!
-\defgroup core core: meta-functions for geometry types
-*/
-
-namespace ggl
-{
-
-namespace traits
-{
-
-/*!
-    \brief Traits class to attach a tag to a geometry
-    \details All geometries should implement a traits::tag<G>::type metafunction to indicate their
-        own geometry type.
-    \ingroup traits
-    \par Geometries:
-        - all geometries
-    \par Specializations should provide:
-        - typedef XXX_tag type; (point_tag, box_tag, ...)
-    \tparam Geometry geometry
-*/
-template <typename Geometry>
-struct tag
-{
-    typedef geometry_not_recognized_tag type;
-};
-
-} // namespace traits
-
-
-/*!
-    \brief Meta-function to get the tag of any geometry type
-    \details All geometries tell their geometry type (point, linestring, polygon, etc) by implementing
-      a tag traits class. This meta-function uses that traits class to retrieve the tag.
-      If the input type is not a geometry at all, a geometry_not_recognized_tag will be returned.
-    \tparam Geometry geometry
-    \ingroup core
-*/
-template <typename Geometry>
-struct tag
-{
-    typedef typename traits::tag
-        <
-        typename boost::remove_const<Geometry>::type
-        >::type type;
-};
-
-} // namespace ggl
-
-#endif // GGL_CORE_TAG_HPP
diff --git a/include/builtin-ggl/ggl/core/tags.hpp b/include/builtin-ggl/ggl/core/tags.hpp
deleted file mode 100644
index c44fd1f..0000000
--- a/include/builtin-ggl/ggl/core/tags.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_CORE_TAGS_HPP
-#define GGL_CORE_TAGS_HPP
-
-
-/*!
-\defgroup traits traits: adapt geometries
-\brief Traits classes are small classes or structs to adapt geometries
-such that they are recognized by the Generic Geometry Library
-*/
-
-namespace ggl
-{
-
-// Tags defining strategies linked to coordinate systems
-
-
-/// Tag indicating Cartesian coordinate system family (cartesian,epsg)
-struct cartesian_tag {};
-
-/// Tag indicating Geographic coordinate system family (geographic)
-struct geographic_tag {};
-
-/// Tag indicating Spherical coordinate system family (spherical,celestial,...)
-struct spherical_tag {};
-
-
-// Tags defining geometry types
-
-
-/// "default" tag
-struct geometry_not_recognized_tag {};
-
-/// OGC Point identifying tag
-struct point_tag {};
-
-/// OGC Linestring identifying tag
-struct linestring_tag {};
-
-/// OGC Polygon identifying tag
-struct polygon_tag {};
-
-/// Convenience (linear) ring identifying tag
-struct ring_tag {};
-
-/// Convenience 2D or 3D box (mbr) identifying tag
-struct box_tag {};
-
-/// Convenience 2D (circle) or 3D (sphere) n-sphere identifying tag
-struct nsphere_tag {};
-
-/// Convenience segment (2-points) identifying tag
-struct segment_tag {};
-
-} // namespace ggl
-
-#endif // GGL_CORE_TAGS_HPP
diff --git a/include/builtin-ggl/ggl/core/topological_dimension.hpp b/include/builtin-ggl/ggl/core/topological_dimension.hpp
deleted file mode 100644
index 0a1e7cb..0000000
--- a/include/builtin-ggl/ggl/core/topological_dimension.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_CORE_TOPOLOGICAL_DIMENSION_HPP
-#define GGL_CORE_TOPOLOGICAL_DIMENSION_HPP
-
-
-#include <boost/mpl/int.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-
-namespace ggl {
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch {
-
-
-template <typename GeometryTag>
-struct top_dim {};
-
-
-template <>
-struct top_dim<point_tag>      : boost::mpl::int_<0> {};
-
-
-template <>
-struct top_dim<linestring_tag> : boost::mpl::int_<1> {};
-
-
-template <>
-struct top_dim<segment_tag>    : boost::mpl::int_<1> {};
-
-
-// ring: topological dimension of two, but some people say: 1 !!
-template <>
-struct top_dim<ring_tag>       : boost::mpl::int_<2> {};
-
-
-template <>
-struct top_dim<box_tag>        : boost::mpl::int_<2> {};
-
-
-template <>
-struct top_dim<polygon_tag>    : boost::mpl::int_<2> {};
-
-
-// nsphere: 2, but there is discussion. Is it CLOSED? Then 2, but
-// then it should be called "disk"...
-template <>
-struct top_dim<nsphere_tag>    : boost::mpl::int_<2> {};
-
-
-
-
-} // namespace core_dispatch
-#endif
-
-
-
-
-
-/*!
-    \brief Meta-function returning the topological dimension of a geometry
-    \details The topological dimension defines a point as 0-dimensional,
-        a linestring as 1-dimensional,
-        and a ring or polygon as 2-dimensional.
-    \see http://www.math.okstate.edu/mathdept/dynamics/lecnotes/node36.html
-    \ingroup core
-*/
-template <typename Geometry>
-struct topological_dimension
-    : core_dispatch::top_dim<typename tag<Geometry>::type> {};
-
-
-} // namespace ggl
-
-
-#endif // GGL_CORE_TOPOLOGICAL_DIMENSION_HPP
diff --git a/include/builtin-ggl/ggl/extensions/astronomy/core/cs.hpp b/include/builtin-ggl/ggl/extensions/astronomy/core/cs.hpp
deleted file mode 100644
index 729ee13..0000000
--- a/include/builtin-ggl/ggl/extensions/astronomy/core/cs.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSION_ASTRONOMY_CORE_CS_HPP
-#define GGL_EXTENSION_ASTRONOMY_CORE_CS_HPP
-
-#include <ggl/core/coordinate_system.hpp>
-#include <ggl/core/tags.hpp>
-
-
-namespace ggl
-{
-
-
-namespace cs
-{
-
-
-namespace celestial
-{
-
-/*!
-    \brief Ecliptic (celestial) coordinate system
-    \details Defines the astronomical ecliptic coordinate system "that uses the ecliptic for its fundamental plane"
-    It uses Beta and Lambda as its latitude and longitude.
-    \see http://en.wikipedia.org/wiki/Ecliptic_coordinate_system
-    \ingroup cs
-*/
-template<typename DegreeOrRadian>
-struct ecliptic
-{
-    typedef DegreeOrRadian units;
-};
-
-
-} // namespace celestial
-
-} // namespace cs
-
-
-} // namespace ggl
-
-#endif // GGL_EXTENSION_ASTRONOMY_CORE_CS_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/geographic/core/cs.hpp b/include/builtin-ggl/ggl/extensions/gis/geographic/core/cs.hpp
deleted file mode 100644
index b2efd2b..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/geographic/core/cs.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_GIS_GEOGRAPHIC_CORE_CS_HPP
-#define GGL_EXTENSIONS_GIS_GEOGRAPHIC_CORE_CS_HPP
-
-
-/*!
-\defgroup cs coordinate systems
-\brief Defines coordinate systems
-\details Coordinate systems are essential for any point in the Generic Geometry Library. Many
-algorithms such as distance or transform use coordinate systems to select the strategy to use.
-*/
-
-namespace ggl
-{
-
-namespace cs
-{
-
-/*!
-    \brief EPSG Cartesian coordinate system
-    \details EPSG (European Petrol Survey Group) has a standard list of projections,
-        each having a code
-    \see
-    \ingroup cs
-    \tparam Code the EPSG code
-    \todo Maybe derive from boost::mpl::int_<EpsgCode>
-*/
-template<std::size_t Code>
-struct epsg
-{
-    static const std::size_t epsg_code = Code;
-};
-
-
-
-/*!
-    \brief Earth Centered, Earth Fixed
-    \details Defines a Cartesian coordinate system x,y,z with the center of the earth as its origin,
-        going through the Greenwich
-    \see http://en.wikipedia.org/wiki/ECEF
-    \see http://en.wikipedia.org/wiki/Geodetic_system
-    \note Also known as "Geocentric", but geocentric is also an astronomic coordinate system
-    \ingroup cs
-*/
-struct ecef
-{
-};
-
-
-} // namespace cs
-
-namespace traits
-{
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-template<>
-struct cs_tag<cs::ecef>
-{
-    typedef cartesian_tag type;
-};
-
-template <std::size_t C>
-struct cs_tag<cs::epsg<C> >
-{
-    typedef cartesian_tag type;
-};
-
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-} // namespace traits
-
-
-} // namespace ggl
-
-#endif // GGL_EXTENSIONS_GIS_GEOGRAPHIC_CORE_CS_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/geographic/detail/ellipsoid.hpp b/include/builtin-ggl/ggl/extensions/gis/geographic/detail/ellipsoid.hpp
deleted file mode 100644
index b4a14dc..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/geographic/detail/ellipsoid.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_GIS_GEOGRAPHIC_DETAIL_ELLIPSOID_HPP
-#define GGL_EXTENSIONS_GIS_GEOGRAPHIC_DETAIL_ELLIPSOID_HPP
-
-
-namespace ggl { namespace detail {
-
-
-/*!
-    \brief Defines ellipsoid values for use in distance calculations
-    \details They have a constructor with the earth radius
-    \note Will be moved / merged with projections
-    \todo Optionally specify earth model, defaulting to WGS84
-    - See http://en.wikipedia.org/wiki/Figure_of_the_Earth
-    - and http://en.wikipedia.org/wiki/World_Geodetic_System#A_new_World_Geodetic_System:_WGS84
-    \note
-*/
-class ellipsoid
-{
-    public :
-        ellipsoid(double a, double b)
-            : m_a(a)
-            , m_b(b)
-            , m_f((a - b) / a)
-        {}
-        ellipsoid()
-            : m_a(6378137.0)
-            , m_b(6356752.314245)
-            , m_f((m_a - m_b) / m_a)
-        {}
-        // Unit sphere
-        ellipsoid(double f)
-            : m_a(1.0)
-            , m_f(f)
-        {}
-
-        double a() const { return m_a; }
-        double b() const { return m_b; }
-        double f() const { return m_f; }
-
-    private :
-        double m_a, m_b, m_f; // equatorial radius, polar radius, flattening
-};
-
-
-
-
-}} // namespace ggl::detail
-
-
-#endif // GGL_EXTENSIONS_GIS_GEOGRAPHIC_DETAIL_ELLIPSOID_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/geographic/strategies/andoyer.hpp b/include/builtin-ggl/ggl/extensions/gis/geographic/strategies/andoyer.hpp
deleted file mode 100644
index eb6d1f3..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/geographic/strategies/andoyer.hpp
+++ /dev/null
@@ -1,140 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_GIS_GEOGRAPHIC_STRATEGIES_ANDOYER_HPP
-#define GGL_EXTENSIONS_GIS_GEOGRAPHIC_STRATEGIES_ANDOYER_HPP
-
-
-#include <ggl/strategies/strategy_traits.hpp>
-#include <ggl/core/radian_access.hpp>
-#include <ggl/core/coordinate_type.hpp>
-
-#include <ggl/extensions/gis/geographic/detail/ellipsoid.hpp>
-
-
-namespace ggl
-{
-namespace strategy
-{
-
-    namespace distance
-    {
-
-
-        /*!
-            \brief Point-point distance approximation taking flattening into account
-            \ingroup distance
-            \tparam P1 first point type
-            \tparam P2 optional second point type
-            \author After Andoyer, 19xx, republished 1950, republished by Meeus, 1999
-            \note Although not so well-known, the approximation is very good: in all cases the results
-            are about the same as Vincenty. In my (Barend's) testcases the results didn't differ more than 6 m
-            \see http://nacc.upc.es/tierra/node16.html
-            \see http://sci.tech-archive.net/Archive/sci.geo.satellite-nav/2004-12/2724.html
-            \see http://home.att.net/~srschmitt/great_circle_route.html (implementation)
-            \see http://www.codeguru.com/Cpp/Cpp/algorithms/article.php/c5115 (implementation)
-            \see http://futureboy.homeip.net/frinksamp/navigation.frink (implementation)
-            \see http://www.voidware.com/earthdist.htm (implementation)
-        */
-        template <typename P1, typename P2 = P1>
-        class andoyer
-        {
-            public :
-                //typedef spherical_distance return_type;
-                typedef double return_type;
-
-                andoyer()
-                    : m_ellipsoid()
-                {}
-                andoyer(double f)
-                    : m_ellipsoid(f)
-                {}
-
-                inline return_type operator()(const P1& p1, const P2& p2) const
-                {
-                    return calc(get_as_radian<0>(p1), get_as_radian<1>(p1),
-                                    get_as_radian<0>(p2), get_as_radian<1>(p2));
-                }
-
-
-            private :
-                typedef typename coordinate_type<P1>::type T1;
-                typedef typename coordinate_type<P2>::type T2;
-                ggl::detail::ellipsoid m_ellipsoid;
-
-                inline return_type calc(const T1& lon1, const T1& lat1, const T2& lon2, const T2& lat2) const
-                {
-                    typedef double calculation_type;
-                    calculation_type G = (lat1 - lat2) / 2.0;
-                    calculation_type lambda = (lon1 - lon2) / 2.0;
-
-                    if (ggl::math::equals(lambda, 0.0)
-                        && ggl::math::equals(G, 0.0))
-                    {
-                        return 0.0;
-                    }
-
-                    calculation_type F = (lat1 + lat2) / 2.0;
-
-                    calculation_type sinG2 = math::sqr(sin(G));
-                    calculation_type cosG2 = math::sqr(cos(G));
-                    calculation_type sinF2 = math::sqr(sin(F));
-                    calculation_type cosF2 = math::sqr(cos(F));
-                    calculation_type sinL2 = math::sqr(sin(lambda));
-                    calculation_type cosL2 = math::sqr(cos(lambda));
-
-                    calculation_type S = sinG2 * cosL2 + cosF2 * sinL2;
-                    calculation_type C = cosG2 * cosL2 + sinF2 * sinL2;
-
-                    if (ggl::math::equals(S, 0.0) || ggl::math::equals(C, 0.0))
-                    {
-                        return 0.0;
-                    }
-
-                    calculation_type omega = atan(sqrt(S / C));
-                    calculation_type r = sqrt(S * C) / omega; // not sure if this is r or greek nu
-
-                    calculation_type D = 2.0 * omega * m_ellipsoid.a();
-                    calculation_type H1 = (3 * r - 1.0) / (2.0 * C);
-                    calculation_type H2 = (3 * r + 1.0) / (2.0 * S);
-
-                    return return_type(D
-                        * (1.0 + m_ellipsoid.f() * H1 * sinF2 * cosG2
-                                    - m_ellipsoid.f() * H2 * cosF2 * sinG2));
-                }
-        };
-
-
-
-    } // namespace distance
-
-
-} // namespace strategy
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-template <typename P1, typename P2>
-struct strategy_distance<geographic_tag, geographic_tag, P1, P2>
-{
-    typedef strategy::distance::andoyer<P1, P2> type;
-};
-
-
-template <typename P1, typename P2>
-struct strategy_tag<strategy::distance::andoyer<P1, P2> >
-{
-    typedef strategy_tag_distance_point_point type;
-};
-
-#endif
-
-
-} // namespace ggl
-
-
-#endif // GGL_EXTENSIONS_GIS_GEOGRAPHIC_STRATEGIES_ANDOYER_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/geographic/strategies/dms_parser.hpp b/include/builtin-ggl/ggl/extensions/gis/geographic/strategies/dms_parser.hpp
deleted file mode 100644
index 35aace2..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/geographic/strategies/dms_parser.hpp
+++ /dev/null
@@ -1,266 +0,0 @@
-// Generic Geometry Library
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_GIS_GEOGRAPHIC_STRATEGIES_DMS_PARSER_HPP
-#define GGL_EXTENSIONS_GIS_GEOGRAPHIC_STRATEGIES_DMS_PARSER_HPP
-
-// This file is totally revised from PROJ4 dmstor.c
-
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <string>
-
-#include <boost/static_assert.hpp>
-#include <boost/lexical_cast.hpp>
-#include <boost/algorithm/string.hpp>
-
-#include <ggl/strategies/strategy_traits.hpp>
-
-#include <ggl/util/math.hpp>
-
-namespace ggl
-{
-
-
-struct dms_result
-{
-    enum axis_selector {axis_lat = 1, axis_lon = 0};
-
-    private :
-        typedef double T;
-        T m_angle;
-        axis_selector m_axis;
-
-    public :
-
-        explicit dms_result(const T& v, axis_selector ax)
-            : m_angle(v)
-            , m_axis(ax)
-        {}
-
-        inline axis_selector axis() const { return m_axis; }
-
-        inline operator double() const { return m_angle; }
-
-        template <typename CH, typename TR>
-        inline friend std::basic_ostream<CH, TR>& operator<<(std::basic_ostream<CH, TR>& os,
-                        const dms_result& d)
-        {
-            os << d.m_angle;
-            return os;
-        }
-
-};
-
-
-namespace strategy
-{
-
-    template <bool as_radian = true
-            , char N = 'N', char E = 'E', char S = 'S', char W = 'W' // translatable
-            , char MIN = '\'', char SEC = '"' // other char's possible
-            , char D = 'D', char R = 'R' // degree sign might be small o
-            >
-    struct dms_parser
-    {
-
-
-        // Question from Barend: can we compile-time select that it is case-sensitive/case-insensitive?
-        // We have to change the switch then -> specializations
-
-        // For now: make it (compile-time) case sensitive
-        static const int diff = 'a' - 'A';
-#ifndef __GNUC__
-        BOOST_STATIC_ASSERT((diff > 0)); // make sure we've the right assumption. GCC does not accept this here.
-#endif
-        static const char n_alter = N <= 'Z' ? N + diff : N - diff;
-        static const char e_alter = E <= 'Z' ? E + diff : E - diff;
-        static const char s_alter = S <= 'Z' ? S + diff : S - diff;
-        static const char w_alter = W <= 'Z' ? W + diff : W - diff;
-
-        static const char r_alter = R <= 'Z' ? R + diff : R - diff;
-
-        // degree is normally D (proj4) but might be superscript o
-        // Note d_alter is not correct then, so map it to NULL now, guarded by the while
-        static const char d_alter =
-            ((D >= 'A' && D <= 'Z') || (D >= 'a' && D <= 'z')) ? (D <= 'Z' ? D + diff : D - diff) : '\0';
-
-
-        struct dms_value
-        {
-            double dms[3];
-            bool has_dms[3];
-
-            dms_value()
-            {
-                memset(this, 0, sizeof(dms_value));
-            }
-        };
-
-
-        template <size_t I>
-        static inline void assign_dms(dms_value& dms, std::string& value, bool& has_value)
-        {
-            dms.dms[I] = boost::lexical_cast<double>(value.c_str());
-            dms.has_dms[I] = true;
-            has_value = false;
-            value.clear();
-        }
-
-        static inline void process(dms_value& dms, std::string& value, bool& has_value)
-        {
-            if (has_value)
-            {
-                // Assign last one, sequentially
-                if (! dms.has_dms[0]) assign_dms<0>(dms, value, has_value);
-                else if (! dms.has_dms[1]) assign_dms<1>(dms, value, has_value);
-                else if (! dms.has_dms[2]) assign_dms<2>(dms, value, has_value);
-            }
-        }
-
-
-        dms_result operator()(const char* is) const
-        {
-            dms_value dms;
-            bool has_value = false;
-            std::string value;
-
-            double factor = 1.0; // + denotes N/E values, -1 denotes S/W values
-            dms_result::axis_selector axis = dms_result::axis_lon; // true denotes N/S values
-            bool in_radian = false; // true denotes values as "0.1R"
-
-            while(*is)
-            {
-                switch(*is)
-                {
-                    case '-' :
-                        if (! has_value && ! dms.has_dms[0])
-                        {
-                            factor = -factor;
-                        }
-                        break;
-                    case N :
-                    case n_alter :
-                        axis = dms_result::axis_lat;
-                        break;
-                    case S :
-                    case s_alter :
-                        axis = dms_result::axis_lat;
-                        factor = -factor;
-                        break;
-                    case E :
-                    case e_alter :
-                        axis = dms_result::axis_lon;
-                        break;
-                    case W :
-                    case w_alter :
-                        axis = dms_result::axis_lon;
-                        factor = -factor;
-                        break;
-                    case D :
-                    case d_alter :
-                        if (! dms.has_dms[0] && has_value)
-                        {
-                            assign_dms<0>(dms, value, has_value);
-                        }
-                        break;
-                    case R :
-                    case r_alter :
-                        if (! dms.has_dms[0] && has_value)
-                        {
-                            // specified value is in radian!
-                            in_radian = true;
-                            assign_dms<0>(dms, value, has_value);
-                        }
-                        break;
-                    case MIN:
-                        if (! dms.has_dms[1] && has_value)
-                        {
-                            assign_dms<1>(dms, value, has_value);
-                        }
-                        break;
-                    case SEC :
-                        if (! dms.has_dms[2] && has_value)
-                        {
-                            assign_dms<2>(dms, value, has_value);
-                        }
-                        break;
-                    case ' ' :
-                    case '\t' :
-                    case '\n' :
-                        process(dms, value, has_value);
-                        break;
-                    default :
-                        value += *is;
-                        has_value = true;
-                        break;
-                }
-                is++;
-            }
-
-            // Assign last one, if any
-            process(dms, value, has_value);
-
-            return dms_result(factor *
-                (in_radian && as_radian
-                        ? dms.dms[0]
-                : in_radian && ! as_radian
-                        ? dms.dms[0] * math::r2d
-                : ! in_radian && as_radian
-                        ? dms.dms[0] * math::d2r + dms.dms[1] * math::d2r / 60.0 + dms.dms[2] * math::d2r / 3600.0
-                        : dms.dms[0] + dms.dms[1] / 60.0 + dms.dms[2] / 3600.0)
-                , axis);
-        }
-    };
-
-}
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-template <template<typename> class CS>
-struct strategy_parse<geographic_tag, CS<degree> >
-{
-    typedef strategy::dms_parser<false> type;
-};
-
-
-template <template<typename> class CS>
-struct strategy_parse<geographic_tag, CS<radian> >
-{
-    typedef strategy::dms_parser<true> type;
-};
-
-#endif
-
-
-} // namespace ggl
-
-#endif // GGL_EXTENSIONS_GIS_GEOGRAPHIC_STRATEGIES_DMS_PARSER_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/geographic/strategies/vincenty.hpp b/include/builtin-ggl/ggl/extensions/gis/geographic/strategies/vincenty.hpp
deleted file mode 100644
index 4b2b735..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/geographic/strategies/vincenty.hpp
+++ /dev/null
@@ -1,149 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_GIS_GEOGRAPHIC_STRATEGIES_VINCENTY_HPP
-#define GGL_EXTENSIONS_GIS_GEOGRAPHIC_STRATEGIES_VINCENTY_HPP
-
-
-#include <ggl/strategies/strategy_traits.hpp>
-#include <ggl/core/radian_access.hpp>
-#include <ggl/core/coordinate_type.hpp>
-
-#include <ggl/extensions/gis/geographic/detail/ellipsoid.hpp>
-
-
-namespace ggl
-{
-namespace strategy
-{
-
-    namespace distance
-    {
-
-        /*!
-            \brief Distance calculation formulae on latlong coordinates, after Vincenty, 1975
-            \ingroup distance
-            \tparam P1 first point type
-            \tparam P2 optional second point type
-            \author See http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf
-            \author Adapted from various implementations to get it close to the original document
-                - http://www.movable-type.co.uk/scripts/LatLongVincenty.html
-                - http://exogen.case.edu/projects/geopy/source/geopy.distance.html
-                - http://futureboy.homeip.net/fsp/colorize.fsp?fileName=navigation.frink
-
-        */
-        template <typename P1, typename P2 = P1>
-        class vincenty
-        {
-            public :
-                //typedef spherical_distance return_type;
-                typedef double return_type;
-
-                inline return_type operator()(const P1& p1, const P2& p2) const
-                {
-                    return calc(get_as_radian<0>(p1), get_as_radian<1>(p1),
-                                    get_as_radian<0>(p2), get_as_radian<1>(p2));
-                }
-
-            private :
-                typedef typename coordinate_type<P1>::type T1;
-                typedef typename coordinate_type<P2>::type T2;
-                ggl::detail::ellipsoid m_ellipsoid;
-
-                inline return_type calc(const T1& lon1, const T1& lat1, const T2& lon2, const T2& lat2) const
-                {
-                    // lambda: difference in longitude on an auxiliary sphere
-                    double L = lon2 - lon1;
-                    double lambda = L;
-
-                    if (L < -math::pi) L += math::two_pi;
-                    if (L > math::pi) L -= math::two_pi;
-
-                    if (lat1 == lat2 && lon1 == lon2)
-                    {
-                      return return_type(0);
-                    }
-
-                    // U: reduced latitude, defined by tan U = (1-f) tan phi
-                    double U1 = atan((1-m_ellipsoid.f()) * tan(lat1)); // above (1)
-                    double U2 = atan((1-m_ellipsoid.f()) * tan(lat2)); // above (1)
-
-                    double cos_U1 = cos(U1);
-                    double cos_U2 = cos(U2);
-                    double sin_U1 = sin(U1);
-                    double sin_U2 = sin(U2);
-
-                    // alpha: azimuth of the geodesic at the equator
-                    double cos2_alpha;
-                    double sin_alpha;
-
-                    // sigma: angular distance p1,p2 on the sphere
-                    // sigma1: angular distance on the sphere from the equator to p1
-                    // sigma_m: angular distance on the sphere from the equator to the midpoint of the line
-                    double sigma;
-                    double sin_sigma;
-                    double cos2_sigma_m;
-
-                    double previous_lambda;
-
-                    do
-                    {
-                        previous_lambda = lambda; // (13)
-                        double sin_lambda = sin(lambda);
-                        double cos_lambda = cos(lambda);
-                        sin_sigma = sqrt(math::sqr(cos_U2 * sin_lambda) + math::sqr(cos_U1 * sin_U2 - sin_U1 * cos_U2 * cos_lambda)); // (14)
-                        double cos_sigma = sin_U1 * sin_U2 + cos_U1 * cos_U2 * cos_lambda; // (15)
-                        sin_alpha = cos_U1 * cos_U2 * sin_lambda / sin_sigma; // (17)
-                        cos2_alpha = 1.0 - math::sqr(sin_alpha);
-                        cos2_sigma_m = cos2_alpha == 0 ? 0 : cos_sigma - 2.0 * sin_U1 * sin_U2 / cos2_alpha; // (18)
-
-                        double C = m_ellipsoid.f()/16.0 * cos2_alpha * (4.0 + m_ellipsoid.f() * (4.0 - 3.0 * cos2_alpha)); // (10)
-                        sigma = atan2(sin_sigma, cos_sigma); // (16)
-                        lambda = L + (1.0 - C) * m_ellipsoid.f() * sin_alpha *
-                            (sigma + C * sin_sigma * ( cos2_sigma_m + C * cos_sigma * (-1.0 + 2.0 * math::sqr(cos2_sigma_m)))); // (11)
-
-                    } while (fabs(previous_lambda - lambda) > 1e-12 && fabs(lambda) < math::pi);
-
-                    double sqr_u = cos2_alpha * (math::sqr(m_ellipsoid.a()) - math::sqr(m_ellipsoid.b())) / math::sqr(m_ellipsoid.b()); // above (1)
-
-                    double A = 1.0 + sqr_u/16384.0 * (4096 + sqr_u * (-768.0 + sqr_u * (320.0 - 175.0 * sqr_u))); // (3)
-                    double B = sqr_u/1024.0 * (256.0 + sqr_u * ( -128.0 + sqr_u * (74.0 - 47.0 * sqr_u))); // (4)
-                    double delta_sigma = B * sin_sigma * ( cos2_sigma_m + (B/4.0) * (cos(sigma)* (-1.0 + 2.0 * cos2_sigma_m)
-                            - (B/6.0) * cos2_sigma_m * (-3.0 + 4.0 * math::sqr(sin_sigma)) * (-3.0 + 4.0 * cos2_sigma_m))); // (6)
-
-                    double dist = m_ellipsoid.b() * A * (sigma - delta_sigma); // (19)
-
-                    return return_type(dist);
-                }
-        };
-
-
-        // We might add a vincenty-like strategy also for point-segment distance, but to calculate the projected point is not trivial
-
-    } // namespace distance
-
-
-} // namespace strategy
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-template <typename P1, typename P2>
-struct strategy_tag<strategy::distance::vincenty<P1, P2> >
-{
-    typedef strategy_tag_distance_point_point type;
-};
-
-
-#endif
-
-
-} // namespace ggl
-
-
-#endif // GGL_EXTENSIONS_GIS_GEOGRAPHIC_STRATEGIES_VINCENTY_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/io/veshape/write_veshape.hpp b/include/builtin-ggl/ggl/extensions/gis/io/veshape/write_veshape.hpp
deleted file mode 100644
index 1670ad4..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/io/veshape/write_veshape.hpp
+++ /dev/null
@@ -1,281 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 2009, Geodan, Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_IO_VESHAPE_WRITE_VESHAPE_HPP
-#define GGL_IO_VESHAPE_WRITE_VESHAPE_HPP
-
-#include <iostream>
-#include <string>
-
-#include <boost/concept/assert.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/convert.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/core/ring_type.hpp>
-
-/*!
-\defgroup veshape veshape: stream VEShape (Virtual Earth shapes for in VE Ajax Control)
-\note VE assumes points in LatLong, Lat first
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace veshape {
-
-
-// Define the coordinate streamer, specialized for either 2 or 3 dimensions.
-// Any other number of dimensions make no sense for VE, and we have to take care about
-// the order lat,long (--> y,x)
-template <typename P, std::size_t D>
-struct stream_coordinate {};
-
-
-template <typename P>
-struct stream_coordinate<P, 2>
-{
-    template <typename Char, typename Traits>
-    static inline void stream(std::basic_ostream<Char, Traits>& os, P const& p)
-    {
-        os << ggl::get<1>(p) << "," << ggl::get<0>(p);
-    }
-};
-
-template <typename P>
-struct stream_coordinate<P, 3>
-{
-    template <typename Char, typename Traits>
-    static inline void stream(std::basic_ostream<Char, Traits>& os, P const& p)
-    {
-        stream_coordinate<P, 2>::stream(os, p);
-        os << "," << ggl::get<2>(p);
-    }
-};
-
-
-template <typename P>
-struct stream_point
-{
-    template <typename Char, typename Traits>
-    static inline void stream(std::basic_ostream<Char, Traits>& os, P const& p)
-    {
-        os << "new VELatLong(";
-        stream_coordinate<P, dimension<P>::value>::stream(os, p);
-        os << ")";
-    }
-};
-
-
-
-struct prefix_point
-{
-    static inline const char* prefix()
-    { return "new VEShape(VEShapeType.Pushpin, "; }
-
-    static inline const char* postfix()
-    { return ")"; }
-};
-
-struct prefix_linestring
-{
-    static inline const char* prefix()
-    { return "new VEShape(VEShapeType.Polyline, "; }
-
-    static inline const char* postfix()
-    { return ")"; }
-};
-
-
-struct prefix_polygon
-{
-    static inline const char* prefix()
-    { return "new VEShape(VEShapeType.Polygon, "; }
-
-    static inline const char* postfix()
-    { return ")"; }
-};
-
-/*!
-\brief Stream points as \ref VEShape
-*/
-template <typename P, typename Policy>
-struct veshape_point
-{
-    template <typename Char, typename Traits>
-    static inline void stream(std::basic_ostream<Char, Traits>& os, P const& p)
-    {
-        os << Policy::prefix();
-        stream_point<P>::stream(os, p);
-        os << Policy::postfix();
-    }
-
-    private:
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<P>) );
-};
-
-/*!
-\brief Stream ranges as VEShape
-\note policy is used to stream prefix/postfix, enabling derived classes to override this
-*/
-template <typename R, typename Policy>
-struct veshape_range
-{
-    template <typename Char, typename Traits>
-    static inline void stream(std::basic_ostream<Char, Traits>& os, R const& range)
-    {
-        typedef typename boost::range_const_iterator<R>::type iterator;
-
-        bool first = true;
-
-        os << Policy::prefix() << "new Array(";
-
-        for (iterator it = boost::begin(range); it != boost::end(range); ++it)
-        {
-            os << (first ? "" : ", ");
-            stream_point<point>::stream(os, *it);
-            first = false;
-        }
-
-        os << ")" << Policy::postfix();
-    }
-
-    private:
-        typedef typename boost::range_value<R>::type point;
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<point>) );
-};
-
-
-
-template <typename P, typename Policy>
-struct veshape_poly
-{
-    template <typename Char, typename Traits>
-    static inline void stream(std::basic_ostream<Char, Traits>& os, P const& poly)
-    {
-        typedef typename ring_type<P>::type ring;
-        typedef typename boost::range_const_iterator<
-                    typename interior_type<P>::type>::type iterator;
-
-        veshape_range<ring, Policy>::stream(os, exterior_ring(poly));
-
-        // For VE shapes: inner rings are not supported or undocumented
-        /***
-        for (iterator it = boost::begin(interior_rings(poly));
-            it != boost::end(interior_rings(poly)); it++)
-        {
-            os << ",";
-            veshape_range<ring, null>::stream(os, *it);
-        }
-        os << ")";
-        ***/
-    }
-
-    private:
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<typename point_type<P>::type>) );
-};
-
-
-
-}} // namespace detail::veshape
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-/*!
-\brief Dispatching base struct for VEShape streaming, specialized below per geometry type
-\details Specializations should implement a static method "stream" to stream a geometry
-The static method should have the signature:
-
-template <typename Char, typename Traits>
-static inline void stream(std::basic_ostream<Char, Traits>& os, G const& geometry)
-*/
-template <typename T, typename G>
-struct veshape
-{};
-
-
-template <typename P>
-struct veshape<point_tag, P>
-    : detail::veshape::veshape_point<P, detail::veshape::prefix_point>
-{};
-
-
-template <typename R>
-struct veshape<linestring_tag, R>
-    : detail::veshape::veshape_range<R, detail::veshape::prefix_linestring>
-{};
-
-
-template <typename R>
-struct veshape<ring_tag, R>
-    : detail::veshape::veshape_range<R, detail::veshape::prefix_polygon>
-{};
-
-
-template <typename P>
-struct veshape<polygon_tag, P>
-    : detail::veshape::veshape_poly<P, detail::veshape::prefix_polygon>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief Generic geometry template manipulator class, takes corresponding output class from traits class
-\ingroup veshape
-\details Stream manipulator, streams geometry classes as Virtual Earth shape
-*/
-template <typename G>
-class veshape_manip
-{
-public:
-
-    inline veshape_manip(G const& g)
-        : m_geometry(g)
-    {}
-
-    template <typename Char, typename Traits>
-    inline friend std::basic_ostream<Char, Traits>& operator<<(
-                    std::basic_ostream<Char, Traits>& os, veshape_manip const& m)
-    {
-        dispatch::veshape<typename tag<G>::type, G>::stream(os, m.m_geometry);
-        os.flush();
-        return os;
-    }
-
-private:
-    G const& m_geometry;
-};
-
-/*!
-\brief Object generator to conveniently stream objects without including streamveshape
-\ingroup veshape
-\par Example:
-Small example showing how to use the make_veshape helper function
-\dontinclude doxygen_examples.cpp
-\skip example_as_veshape_vector
-\line {
-\until }
-*/
-template <typename T>
-inline veshape_manip<T> veshape(T const& t)
-{
-    return veshape_manip<T>(t);
-}
-
-} // namespace ggl
-
-#endif // GGL_IO_VESHAPE_WRITE_VESHAPE_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/io/wkb/detail/endian.hpp b/include/builtin-ggl/ggl/extensions/gis/io/wkb/detail/endian.hpp
deleted file mode 100644
index 9294aa5..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/io/wkb/detail/endian.hpp
+++ /dev/null
@@ -1,256 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Mateusz Loskot <mateusz at loskot.net> 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-//
-// Load/Store values from/to stream of bytes across different endianness.
-//
-// Original design of unrolled_byte_loops templates based on
-// endian utility library from Boost C++ Libraries,
-// source: boost/spirit/home/support/detail/integer/endian.hpp
-// Copyright Darin Adler 2000
-// Copyright Beman Dawes 2006, 2009
-// Distributed under the Boost Software License, Version 1.0.
-
-#ifndef GGL_DETAIL_ENDIAN_HPP
-#define GGL_DETAIL_ENDIAN_HPP
-
-#include <cassert>
-#include <climits>
-#include <cstring>
-#include <cstddef>
-
-#include <boost/config.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/detail/endian.hpp>
-#include <boost/type_traits/is_signed.hpp>
-
-#if CHAR_BIT != 8
-#error Platforms with CHAR_BIT != 8 are not supported
-#endif
-
-// TODO: mloskot - add static asserts to validate compile-time pre-conditions
-
-namespace ggl { namespace detail { namespace endian {
-
-// Endianness tag used to indicate load/store directoin
-
-struct big_endian_tag {};
-struct little_endian_tag {};
-
-#ifdef BOOST_BIG_ENDIAN
-typedef big_endian_tag native_endian_tag;
-#else
-typedef little_endian_tag native_endian_tag;
-#endif
-
-// Unrolled loops for loading and storing streams of bytes.
-
-template <typename T, std::size_t N, bool Sign = boost::is_signed<T>::value>
-struct unrolled_byte_loops
-{
-    typedef unrolled_byte_loops<T, N - 1, Sign> next;
-
-    template <typename Iterator>
-    static T load_forward(Iterator& bytes)
-    {
-        T const value = *bytes;
-        ++bytes;
-        return value | (next::load_forward(bytes) << 8);
-    }
-
-    template <typename Iterator>
-    static T load_backward(Iterator& bytes)
-    {
-        T const value = *(bytes - 1);
-        --bytes;
-        return value | (next::load_backward(bytes) << 8);
-    }
-
-    template <typename Iterator>
-    static void store_forward(Iterator& bytes, T value)
-    {
-        *bytes = static_cast<char>(value);
-        next::store_forward(++bytes, value >> 8);
-    }
-
-    template <typename Iterator>
-    static void store_backward(Iterator& bytes, T value)
-    {
-        *(bytes - 1) = static_cast<char>(value);
-        next::store_backward(--bytes, value >> 8);
-    }
-};
-
-template <typename T>
-struct unrolled_byte_loops<T, 1, false>
-{
-    template <typename Iterator>
-    static T load_forward(Iterator& bytes)
-    {
-        return *bytes;
-    }
-
-    template <typename Iterator>
-    static T load_backward(Iterator& bytes)
-    {
-        return *(bytes - 1);
-    }
-
-    template <typename Iterator>
-    static void store_forward(Iterator& bytes, T value)
-    {
-        // typename Iterator::value_type
-        *bytes = static_cast<char>(value);
-    }
-
-    template <typename Iterator>
-    static void store_backward(Iterator& bytes, T value)
-    {
-        *(bytes - 1) = static_cast<char>(value);
-    }
-};
-
-template <typename T>
-struct unrolled_byte_loops<T, 1, true>
-{    
-    template <typename Iterator>
-    static T load_forward(Iterator& bytes)
-    {
-        return *reinterpret_cast<const signed char*>(&*bytes);
-    }
-
-    template <typename Iterator>
-    static T load_backward(Iterator& bytes)
-    {
-        return *reinterpret_cast<const signed char*>(&*(bytes - 1));
-    }
-    
-    template <typename Iterator>
-    static void store_forward(Iterator& bytes, T value)
-    {
-        BOOST_STATIC_ASSERT((boost::is_signed<typename Iterator::value_type>::value));
-
-        *bytes = static_cast<typename Iterator::value_type>(value);
-    }
-
-    template <typename Iterator>
-    static void store_backward(Iterator& bytes, T value)
-    {
-        BOOST_STATIC_ASSERT((boost::is_signed<typename Iterator::value_type>::value));
-
-        *(bytes - 1) = static_cast<typename Iterator::value_type>(value);
-    }
-};
-
-// load/store operation dispatch
-// E, E - source and target endianness is the same
-// E1, E2 - source and target endianness is different (big-endian <-> little-endian)
-
-template <typename T, std::size_t N, typename Iterator, typename E>
-T load_dispatch(Iterator& bytes, E, E)
-{
-    return unrolled_byte_loops<T, N>::load_forward(bytes);
-}
-
-template <typename T, std::size_t N, typename Iterator, typename E1, typename E2>
-T load_dispatch(Iterator& bytes, E1, E2)
-{
-    std::advance(bytes, N);
-    return unrolled_byte_loops<T, N>::load_backward(bytes);
-}
-
-template <typename T, std::size_t N, typename Iterator, typename E>
-void store_dispatch(Iterator& bytes, T value, E, E)
-{
-    return unrolled_byte_loops<T, N>::store_forward(bytes, value);
-}
-
-template <typename T, std::size_t N, typename Iterator, typename E1, typename E2>
-void store_dispatch(Iterator& bytes, T value, E1, E2)
-{
-    std::advance(bytes, N);
-    return unrolled_byte_loops<T, N>::store_backward(bytes, value);
-}
-
-// numeric value holder for load/store operation
-
-template <typename T>
-struct endian_value_base
-{
-    typedef T value_type;
-    typedef native_endian_tag endian_type;
-
-    endian_value_base() : value(T()) {}
-    explicit endian_value_base(T value) : value(value) {}
-
-    operator T() const
-    {
-        return value;
-    }
-
-protected:
-    T value;
-};
-
-template <typename T, std::size_t N = sizeof(T)>
-struct endian_value : public endian_value_base<T>
-{
-    typedef endian_value_base<T> base;
-
-    endian_value() {}
-    explicit endian_value(T value) : base(value) {}
-
-    template <typename E, typename Iterator>
-    void load(Iterator bytes)
-    {
-        base::value = load_dispatch<T, N>(bytes, typename base::endian_type(), E());
-    }
-
-    template <typename E, typename Iterator>
-    void store(Iterator bytes)
-    {
-        store_dispatch<T, N>(bytes, base::value, typename base::endian_type(), E());
-    }
-};
-
-template <>
-struct endian_value<double, 8> : public endian_value_base<double>
-{
-    typedef endian_value_base<double> base;
-
-    endian_value() {}
-    explicit endian_value(double value) : base(value) {}
-
-    template <typename E, typename Iterator>
-    void load(Iterator bytes)
-    {
-        endian_value<boost::uint64_t, 8> raw;
-        raw.load<E>(bytes);
-
-        double& target_value = base::value;
-        std::memcpy(&target_value, &raw, sizeof(double));
-    }
-
-    template <typename E, typename Iterator>
-    void store(Iterator bytes)
-    {
-        boost::uint64_t raw;
-        double const& source_value = base::value;
-        std::memcpy(&raw, &source_value, sizeof(boost::uint64_t));
-
-        store_dispatch
-            <
-            boost::uint64_t,
-            sizeof(boost::uint64_t)
-            >(bytes, raw, typename base::endian_type(), E());
-    }
-};
-
-}}} // namespace ggl::detail::endian
-
-#endif // GGL_DETAIL_ENDIAN_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/io/wkb/detail/ogc.hpp b/include/builtin-ggl/ggl/extensions/gis/io/wkb/detail/ogc.hpp
deleted file mode 100644
index 169a2ac..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/io/wkb/detail/ogc.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Mateusz Loskot <mateusz at loskot.net> 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_IO_WKB_DETAIL_OGC_HPP
-#define GGL_IO_WKB_DETAIL_OGC_HPP
-
-#include <boost/cstdint.hpp>
-
-namespace ggl
-{
-
-// The well-known binary representation for OGC geometry (WKBGeometry),
-// provides a portable representation of a geometry value as a contiguous
-// stream of bytes. It permits geometry values to be exchanged between
-// a client application and an SQL database in binary form.
-//
-// Basic Type definitions
-// byte : 1 byte
-// uint32 : 32 bit unsigned integer (4 bytes)
-// double : double precision number (8 bytes)
-//
-// enum wkbByteOrder
-// {
-//   wkbXDR = 0, // Big Endian
-//   wkbNDR = 1  // Little Endian
-// };
-//
-// enum wkbGeometryType
-// {
-//   wkbPoint = 1,
-//   wkbLineString = 2,
-//   wkbPolygon = 3,
-//   wkbMultiPoint = 4,
-//   wkbMultiLineString = 5,
-//   wkbMultiPolygon = 6,
-//   wkbGeometryCollection = 7
-// };
-
-#ifndef DOXYGEN_NO_IMPL
-namespace detail { namespace wkb {
-
-// TODO: Replace 'struct' with scoped enum from <boost/detail/scoped_enum_emulation.hpp>
-// For older Boost, copy
-// <boost/spirit/home/support/detail/scoped_enum_emulation.hpp>
-// to
-// <boost/ggl/detail/scoped_enum_emulation.hpp>
-// and use it.
-
-struct byte_order_type
-{
-    enum enum_t
-    {
-        xdr     = 0, // wkbXDR, bit-endian
-        ndr     = 1, // wkbNDR, little-endian
-        unknown = 2  // not defined by OGC
-    };
-};
-
-struct geometry_type
-{
-    enum enum_t
-    {
-        point      = 1,
-        linestring = 2,
-        polygon    = 3
-
-        // TODO: Not implemented
-        //multipoint = 4,
-        //multilinestring = 5,
-        //multipolygon = 6,
-        //collection = 7
-    };
-};
-
-}}} // namespace ggl::detail::wkb
-#endif // DOXYGEN_NO_IMPL
-
-#endif // GGL_IO_WKB_DETAIL_OGC_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/io/wkb/detail/parser.hpp b/include/builtin-ggl/ggl/extensions/gis/io/wkb/detail/parser.hpp
deleted file mode 100644
index 16717a2..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/io/wkb/detail/parser.hpp
+++ /dev/null
@@ -1,310 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Mateusz Loskot <mateusz at loskot.net> 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_IO_WKB_DETAIL_PARSER_HPP
-#define GGL_IO_WKB_DETAIL_PARSER_HPP
-
-#include <cassert>
-#include <cstddef>
-#include <algorithm>
-#include <iterator>
-#include <limits>
-
-#include <boost/cstdint.hpp>
-#include <boost/type_traits/is_integral.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/concept/requires.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/coordinate_dimension.hpp>
-#include <ggl/core/coordinate_type.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/extensions/gis/io/wkb/detail/endian.hpp>
-#include <ggl/extensions/gis/io/wkb/detail/ogc.hpp>
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_IMPL
-namespace detail { namespace wkb {
-
-template <typename T>
-struct value_parser
-{
-    typedef T value_type;
-
-    template <typename Iterator>
-    static bool parse(Iterator& it, Iterator end, T& value, byte_order_type::enum_t order)
-    {
-        // Very basic pre-conditions check on stream of bytes passed in
-        BOOST_STATIC_ASSERT((
-            boost::is_integral<typename std::iterator_traits<Iterator>::value_type>::value
-        ));
-        BOOST_STATIC_ASSERT((sizeof(boost::uint8_t) ==
-            sizeof(typename std::iterator_traits<Iterator>::value_type)
-        ));
-
-        typedef typename std::iterator_traits<Iterator>::difference_type diff_type;
-        diff_type const required_size = sizeof(T);
-        if (it != end && std::distance(it, end) >= required_size)
-        {
-            typedef endian::endian_value<T> parsed_value_type;
-            parsed_value_type parsed_value;
-
-            // Decide on direcion of endianness translation, detault to native
-            if (byte_order_type::xdr == order)
-            {
-                parsed_value.template load<endian::big_endian_tag>(it);
-            }
-            else if (byte_order_type::ndr == order)
-            {
-                parsed_value.template load<endian::little_endian_tag>(it);
-            }
-            else
-            {
-                parsed_value.template load<endian::native_endian_tag>(it);
-            }
-
-            value = parsed_value;
-            std::advance(it, required_size);
-            return true;
-        }
-
-        return false;
-    }
-};
-
-struct byte_order_parser
-{
-    template <typename Iterator>
-    static bool parse(Iterator& it, Iterator end, byte_order_type::enum_t& order)
-    {
-        boost::uint8_t value;
-        if (value_parser<boost::uint8_t>::parse(it, end, value, byte_order_type::unknown))
-        {
-            if (byte_order_type::unknown > value)
-            {
-                order = byte_order_type::enum_t(value);
-            }
-            return true;
-        }
-        return false;
-    }
-};
-
-struct geometry_type_parser
-{
-    template <typename Iterator>
-    static bool parse(Iterator& it, Iterator end, geometry_type::enum_t& type,
-        byte_order_type::enum_t order)
-    {
-        boost::uint32_t value;
-        if (value_parser<boost::uint32_t>::parse(it, end, value, order))
-        {
-            // TODO: Refine the test when multi* geometries are supported
-
-            boost::uint32_t id = value & 0xff;
-            if (geometry_type::polygon >= id)
-            {
-                type = geometry_type::enum_t(id);
-                return true;
-            }
-        }
-        return false;
-    }
-};
-
-template <typename P, int I, int N>
-struct parsing_assigner
-{
-    template <typename Iterator>
-    static void run(Iterator& it, Iterator end, P& point, byte_order_type::enum_t order)
-    {
-        typedef typename coordinate_type<P>::type coordinate_type;
-
-        // coordinate type in WKB is always double
-        double value(0);
-        if (value_parser<double>::parse(it, end, value, order))
-        {
-            // actual coordinate type of point may be different
-            set<I>(point, static_cast<coordinate_type>(value));
-        }
-        else
-        {
-            // TODO: mloskot - Report premature termination at coordinate level
-            //throw failed to read coordinate value
-
-            // default initialized value as fallback
-            set<I>(point, coordinate_type());
-        }
-        parsing_assigner<P, I+1, N>::run(it, end, point, order);
-    }
-};
-
-template <typename P, int N>
-struct parsing_assigner<P, N, N>
-{
-    template <typename Iterator>
-    static void run(Iterator& it, Iterator end, P& point, byte_order_type::enum_t order)
-    {
-        // terminate
-    }
-};
-
-template <typename P>
-struct point_parser
-{
-    template <typename Iterator>
-    static bool parse(Iterator& it, Iterator end, P& point, byte_order_type::enum_t order)
-    {
-        // TODO: mloskot - Add assert on point dimension, 2d only
-
-        geometry_type::enum_t type;
-        if (geometry_type_parser::parse(it, end, type, order))
-        {
-            if (geometry_type::point == type && it != end)
-            {
-                parsing_assigner<P, 0, dimension<P>::value>::run(it, end, point, order);
-            }
-            return true;
-        }
-        return false;
-    }
-
-private:
-    BOOST_CONCEPT_ASSERT((concept::Point<P>));
-};
-
-template <typename C>
-struct point_container_parser
-{
-    template <typename Iterator>
-    static bool parse(Iterator& it, Iterator end, C& container, byte_order_type::enum_t order)
-    {
-        typedef typename point_type<C>::type point_type;
-
-        boost::uint32_t num_points(0);
-        if (!value_parser<boost::uint32_t>::parse(it, end, num_points, order))
-        {
-            return false;
-        }
-
-        typedef typename std::iterator_traits<Iterator>::difference_type size_type;
-        assert(num_points <= boost::uint32_t( (std::numeric_limits<size_type>::max)() ) );
-
-        size_type const container_size = static_cast<size_type>(num_points);
-        size_type const point_size = dimension<point_type>::value * sizeof(double);
-
-        if (std::distance(it, end) >= (container_size * point_size))
-        {
-            point_type point_buffer;
-            std::back_insert_iterator<C> output(std::back_inserter(container));
-
-            // Read coordinates into point and append point to line (ring)
-            size_type points_parsed = 0;
-            while (points_parsed < container_size && it != end)
-            {
-                parsing_assigner<point_type, 0, dimension<point_type>::value>::run(it, end, point_buffer, order);
-                output = point_buffer;
-                ++output;
-                ++points_parsed;
-            }
-
-            if (container_size != points_parsed)
-            {
-                return false;
-            }
-        }
-
-        return true;
-    }
-};
-
-template <typename L>
-struct linestring_parser
-{
-    template <typename Iterator>
-    static bool parse(Iterator& it, Iterator end, L& linestring, byte_order_type::enum_t order)
-    {
-        typedef typename point_type<L>::type point_type;
-
-        geometry_type::enum_t type;
-        if (!geometry_type_parser::parse(it, end, type, order))
-        {
-            return false;
-        }
-
-        if (geometry_type::linestring != type)
-        {
-            return false;
-        }
-
-        assert(it != end);
-        return point_container_parser<L>::parse(it, end, linestring, order);
-    }
-};
-
-template <typename Polygon>
-struct polygon_parser
-{
-    template <typename Iterator>
-    static bool parse(Iterator& it, Iterator end, Polygon& polygon, byte_order_type::enum_t order)
-    {
-        geometry_type::enum_t type;
-        if (!geometry_type_parser::parse(it, end, type, order))
-        {
-            return false;
-        }
-
-        boost::uint32_t num_rings(0);
-        if (geometry_type::polygon != type ||
-            !value_parser<boost::uint32_t>::parse(it, end, num_rings, order))
-        {
-            return false;
-        }
-
-        typedef typename ring_type<Polygon>::type ring_type;
-
-        std::size_t rings_parsed = 0;
-        while (rings_parsed < num_rings && it != end) //while (rings_parsed < num_rings && it != end)
-        {
-            if (0 == rings_parsed)
-            {
-                ring_type& ring0 = exterior_ring(polygon);
-                if (!point_container_parser<ring_type>::parse(it, end, ring0, order))
-                {
-                    return false;
-                }
-            }
-            else
-            {
-                interior_rings(polygon).resize(rings_parsed);
-                ring_type& ringN = interior_rings(polygon).back();
-                if (!point_container_parser<ring_type>::parse(it, end, ringN, order))
-                {
-                    return false;
-                }
-            }
-            ++rings_parsed;
-        }
-
-        if (num_rings != rings_parsed)
-        {
-            return false;
-        }
-
-        return true;
-    }
-};
-
-}}} // namespace ggl::detail::wkb
-#endif // DOXYGEN_NO_IMPL
-
-#endif // GGL_IO_WKB_DETAIL_PARSER_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/io/wkb/read_wkb.hpp b/include/builtin-ggl/ggl/extensions/gis/io/wkb/read_wkb.hpp
deleted file mode 100644
index a38d76d..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/io/wkb/read_wkb.hpp
+++ /dev/null
@@ -1,107 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Mateusz Loskot <mateusz at loskot.net> 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_IO_WKB_READ_WKB_HPP
-#define GGL_IO_WKB_READ_WKB_HPP
-
-#include <iterator>
-
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/static_assert.hpp>
-
-#include <ggl/core/tags.hpp>
-#include <ggl/extensions/gis/io/wkb/detail/parser.hpp>
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Tag, typename G>
-struct read_wkb {};
-
-template <typename G>
-struct read_wkb<point_tag, G>
-{
-    template <typename Iterator>
-    static inline bool parse(Iterator& it, Iterator end, G& geometry,
-        detail::wkb::byte_order_type::enum_t order)
-    {
-        return detail::wkb::point_parser<G>::parse(it, end, geometry, order);
-    }
-};
-
-template <typename G>
-struct read_wkb<linestring_tag, G>
-{
-    template <typename Iterator>
-    static inline bool parse(Iterator& it, Iterator end, G& geometry,
-        detail::wkb::byte_order_type::enum_t order)
-    {
-        ggl::clear(geometry);
-        return detail::wkb::linestring_parser<G>::parse(it, end, geometry, order);
-    }
-};
-
-template <typename G>
-struct read_wkb<polygon_tag, G>
-{
-    template <typename Iterator>
-    static inline bool parse(Iterator& it, Iterator end, G& geometry,
-        detail::wkb::byte_order_type::enum_t order)
-    {
-        ggl::clear(geometry);
-        return detail::wkb::polygon_parser<G>::parse(it, end, geometry, order);
-    }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-template <typename Iterator, typename G>
-inline bool read_wkb(Iterator begin, Iterator end, G& geometry)
-{
-    // Stream of bytes can only be parsed using random access iterator.
-    BOOST_STATIC_ASSERT((
-        boost::is_convertible
-        <
-            typename std::iterator_traits<Iterator>::iterator_category,
-            const std::random_access_iterator_tag&
-        >::value));
-
-    detail::wkb::byte_order_type::enum_t byte_order;
-    if (detail::wkb::byte_order_parser::parse(begin, end, byte_order))
-    {
-        return dispatch::read_wkb
-            <
-            typename tag<G>::type,
-            G
-            >::parse(begin, end, geometry, byte_order);
-    }
-
-    return false;
-}
-
-template <typename ByteType, typename G>
-inline bool read_wkb(ByteType const* bytes, std::size_t length, G& geometry)
-{
-    BOOST_STATIC_ASSERT((boost::is_integral<ByteType>::value));
-    BOOST_STATIC_ASSERT((sizeof(boost::uint8_t) == sizeof(ByteType)));
-
-    ByteType const* begin = bytes;
-    ByteType const* const end = bytes + length;
-
-    return read_wkb(begin, end, geometry);
-}
-
-
-} // namespace ggl
-
-#endif // GGL_IO_WKB_READ_WKB_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/io/wkb/utility.hpp b/include/builtin-ggl/ggl/extensions/gis/io/wkb/utility.hpp
deleted file mode 100644
index c97ea91..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/io/wkb/utility.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Mateusz Loskot <mateusz at loskot.net> 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_IO_WKB_UTILITY_HPP
-#define GGL_IO_WKB_UTILITY_HPP
-
-#include <iomanip>
-#include <iterator>
-#include <sstream>
-#include <string>
-
-#include <boost/cstdint.hpp>
-
-namespace ggl {
-
-// TODO: Waiting for errors handling design, eventually return bool
-// may be replaced to throw exception.
-
-template <typename OutputIterator>
-bool hex2wkb(std::string const& hex, OutputIterator bytes)
-{
-    // Bytes can be only written to output iterator.
-    BOOST_STATIC_ASSERT((boost::is_convertible<
-        typename std::iterator_traits<OutputIterator>::iterator_category,
-        const std::output_iterator_tag&>::value));
-
-    std::string::size_type const byte_size = 2;
-    if (0 != hex.size() % byte_size)
-    {
-        return false;
-    }
-
-    std::string::size_type const size = hex.size() / byte_size;
-    for (std::string::size_type i = 0; i < size; ++i)
-    {
-        // TODO: This is confirmed performance killer - to be replaced with static char-to-byte map --mloskot
-        std::istringstream iss(hex.substr(i * byte_size, byte_size));
-        unsigned int byte(0);
-        if (!(iss >> std::hex >> byte))
-        {
-            return false;
-        }
-        *bytes = static_cast<boost::uint8_t>(byte);
-        ++bytes;
-    }
-
-    return true;
-}
-
-template <typename Iterator>
-bool wkb2hex(Iterator begin, Iterator end, std::string& hex)
-{
-    // Stream of bytes can only be passed using random access iterator.
-    BOOST_STATIC_ASSERT((boost::is_convertible<
-        typename std::iterator_traits<Iterator>::iterator_category,
-        const std::random_access_iterator_tag&>::value));
-
-    const char hexalpha[] = "0123456789ABCDEF";
-    char hexbyte[3] = { 0 };
-    std::ostringstream oss;
-
-    Iterator it = begin;
-    while (it != end)
-    {
-        boost::uint8_t byte = static_cast<boost::uint8_t>(*it);
-        hexbyte[0] = hexalpha[(byte >> 4) & 0xf];
-        hexbyte[1] = hexalpha[byte & 0xf];
-        hexbyte[2] = '\0';
-        oss << std::setw(2) << hexbyte;
-        ++it;
-    }
-
-    // TODO: Binary streams can be big.
-    // Does it make sense to request stream buffer of proper (large) size or
-    // use incremental appends within while-loop?
-    hex = oss.str();
-
-    // Poor-man validation, no performance penalty expected
-    // because begin/end always are random access iterators.
-    return hex.size() == (2 * std::distance(begin, end));
-}
-
-} // namespace ggl
-
-#endif // GGL_IO_WKB_UTILITY_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/io/wkt/detail/wkt.hpp b/include/builtin-ggl/ggl/extensions/gis/io/wkt/detail/wkt.hpp
deleted file mode 100644
index 7c74db4..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/io/wkt/detail/wkt.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 2008-2009, Geodan, Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_IO_WKT_DETAIL_WKT_HPP
-#define GGL_IO_WKT_DETAIL_WKT_HPP
-
-
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace wkt {
-
-
-struct prefix_point
-{
-    static inline const char* apply() { return "POINT"; }
-};
-
-struct prefix_polygon
-{
-    static inline const char* apply() { return "POLYGON"; }
-};
-
-struct prefix_linestring
-{
-    static inline const char* apply() { return "LINESTRING"; }
-};
-
-
-
-}} // namespace wkt::impl
-#endif
-
-
-
-} // namescpae ggl
-
-#endif // GGL_IO_WKT_DETAIL_WKT_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/io/wkt/detail/wkt_multi.hpp b/include/builtin-ggl/ggl/extensions/gis/io/wkt/detail/wkt_multi.hpp
deleted file mode 100644
index 9b1ac50..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/io/wkt/detail/wkt_multi.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 2008-2009, Geodan, Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_IO_WKT_DETAIL_WKT_HPP
-#define GGL_MULTI_IO_WKT_DETAIL_WKT_HPP
-
-
-#include <ggl/extensions/gis/io/wkt/write_wkt.hpp>
-#include <ggl/multi/core/tags.hpp>
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace wkt {
-
-struct prefix_null
-{
-    static inline const char* apply() { return ""; }
-};
-
-struct prefix_multipoint
-{
-    static inline const char* apply() { return "MULTIPOINT"; }
-};
-
-struct prefix_multilinestring
-{
-    static inline const char* apply() { return "MULTILINESTRING"; }
-};
-
-struct prefix_multipolygon
-{
-    static inline const char* apply() { return "MULTIPOLYGON"; }
-};
-
-
-
-}} // namespace wkt::impl
-#endif
-
-
-
-} // namescpae ggl
-
-#endif // GGL_MULTI_IO_WKT_DETAIL_WKT_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/io/wkt/read_wkt.hpp b/include/builtin-ggl/ggl/extensions/gis/io/wkt/read_wkt.hpp
deleted file mode 100644
index 5cc45b3..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/io/wkt/read_wkt.hpp
+++ /dev/null
@@ -1,624 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 2008-2009, Geodan, Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_GIS_IO_WKT_READ_WKT_HPP
-#define GGL_EXTENSIONS_GIS_IO_WKT_READ_WKT_HPP
-
-#include <string>
-
-#include <boost/lexical_cast.hpp>
-#include <boost/tokenizer.hpp>
-
-#include <boost/algorithm/string.hpp>
-#include <boost/concept/requires.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <boost/type_traits.hpp>
-
-
-#include <ggl/algorithms/clear.hpp>
-#include <ggl/core/access.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/core/exception.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-
-#include <ggl/extensions/gis/io/wkt/detail/wkt.hpp>
-
-namespace ggl
-{
-
-
-
-/*!
-\brief Exception showing things wrong with WKT parsing
-\ingroup wkt
-*/
-struct read_wkt_exception : public ggl::exception
-{
-    template <typename Iterator>
-    read_wkt_exception(std::string const& msg,
-            Iterator const& it, Iterator const& end, std::string const& wkt)
-        : message(msg)
-        , wkt(wkt)
-    {
-        if (it != end)
-        {
-            source = " at '";
-            source += it->c_str();
-            source += "'";
-        }
-        complete = message + source + " in '" + wkt.substr(0, 100) + "'";
-    }
-
-    read_wkt_exception(std::string const& msg, std::string const& wkt)
-        : message(msg)
-        , wkt(wkt)
-    {
-        complete = message + "' in (" + wkt.substr(0, 100) + ")";
-    }
-
-    virtual ~read_wkt_exception() throw() {}
-
-    virtual const char* what() const throw()
-    {
-        return complete.c_str();
-    }
-private :
-    std::string source;
-    std::string message;
-    std::string wkt;
-    std::string complete;
-};
-
-
-
-#ifndef DOXYGEN_NO_DETAIL
-// (wkt: Well Known Text, defined by OGC for all geometries and implemented by e.g. databases (MySQL, PostGIS))
-namespace detail { namespace wkt {
-
-typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
-
-template <typename Point, std::size_t Dimension, std::size_t DimensionCount>
-struct parsing_assigner
-{
-    static inline void apply(tokenizer::iterator& it, tokenizer::iterator end,
-            Point& point, std::string const& wkt)
-    {
-        typedef typename coordinate_type<Point>::type coordinate_type;
-        typedef typename boost::mpl::if_c
-            <
-                boost::is_fundamental<coordinate_type>::type::value,
-                coordinate_type,
-                double
-            >::type type;
-
-
-
-        // Stop at end of tokens, or at "," ot ")"
-        bool finished = (it == end || *it == "," || *it == ")");
-
-        try
-        {
-            // Initialize missing coordinates to default constructor (zero)
-            // OR
-            // Use lexical_cast for conversion to double/int
-            // Note that it is much slower than atof. However, it is more standard
-            // and in parsing the change in performance falls probably away against
-            // the tokenizing
-            set<Dimension>(point, (finished ? type() : boost::lexical_cast<type>(it->c_str())));
-        }
-        catch(boost::bad_lexical_cast const& blc)
-        {
-            throw read_wkt_exception(blc.what(), it, end, wkt);
-        }
-        catch(std::exception const& e)
-        {
-            throw read_wkt_exception(e.what(), it, end, wkt);
-        }
-        catch(...)
-        {
-            throw read_wkt_exception("", it, end, wkt);
-        }
-
-        parsing_assigner<Point, Dimension + 1, DimensionCount>::apply(
-                        (finished ? it : ++it), end, point, wkt);
-    }
-};
-
-template <typename Point, std::size_t DimensionCount>
-struct parsing_assigner<Point, DimensionCount, DimensionCount>
-{
-    static inline void apply(tokenizer::iterator&, tokenizer::iterator, Point&,
-                std::string const&)
-    {
-    }
-};
-
-
-
-template <typename Iterator>
-inline void handle_open_parenthesis(Iterator& it,
-            Iterator const& end, std::string const& wkt)
-{
-    if (it == end || *it != "(")
-    {
-        throw read_wkt_exception("Expected '('", it, end, wkt);
-    }
-    ++it;
-}
-
-
-template <typename Iterator>
-inline void handle_close_parenthesis(Iterator& it,
-            Iterator const& end, std::string const& wkt)
-{
-    if (it != end && *it == ")")
-    {
-        ++it;
-    }
-    else
-    {
-        throw read_wkt_exception("Expected ')'", it, end, wkt);
-    }
-}
-
-template <typename Iterator>
-inline void check_end(Iterator& it,
-            Iterator const& end, std::string const& wkt)
-{
-    if (it != end)
-    {
-        throw read_wkt_exception("Too much tokens", it, end, wkt);
-    }
-}
-
-/*!
-\brief Internal, parses coordinate sequences, strings are formated like "(1 2,3 4,...)"
-\param it token-iterator, should be pre-positioned at "(", is post-positions after last ")"
-\param end end-token-iterator
-\param out Output itererator receiving coordinates
-*/
-template <typename Point>
-struct container_inserter
-{
-    // Version with output iterator
-    template <typename OutputIterator>
-    static inline void apply(tokenizer::iterator& it, tokenizer::iterator end,
-        std::string const& wkt, OutputIterator out)
-    {
-        handle_open_parenthesis(it, end, wkt);
-
-        Point point;
-
-        // Parse points until closing parenthesis
-
-        while (it != end && *it != ")")
-        {
-            parsing_assigner
-                <
-                    Point,
-                    0,
-                    dimension<Point>::value
-                >::apply(it, end, point, wkt);
-            out = point;
-            ++out;
-            if (it != end && *it == ",")
-            {
-                ++it;
-            }
-        }
-
-        handle_close_parenthesis(it, end, wkt);
-    }
-};
-
-/*!
-\brief Internal, parses a point from a string like this "(x y)"
-\note used for parsing points and multi-points
-*/
-template <typename P>
-struct point_parser
-{
-    static inline void apply(tokenizer::iterator& it, tokenizer::iterator end,
-        std::string const& wkt, P& point)
-    {
-        handle_open_parenthesis(it, end, wkt);
-        parsing_assigner<P, 0, dimension<P>::value>::apply(it, end, point, wkt);
-        handle_close_parenthesis(it, end, wkt);
-    }
-};
-
-
-template <typename Geometry>
-struct linestring_parser
-{
-    static inline void apply(tokenizer::iterator& it, tokenizer::iterator end,
-                std::string const& wkt, Geometry& geometry)
-    {
-        container_inserter
-            <
-                typename point_type<Geometry>::type
-            >::apply(it, end, wkt, std::back_inserter(geometry));
-    }
-};
-
-
-template <typename Ring>
-struct ring_parser
-{
-    static inline void apply(tokenizer::iterator& it, tokenizer::iterator end,
-                std::string const& wkt, Ring& ring)
-    {
-        // A ring should look like polygon((x y,x y,x y...))
-        // So handle the extra opening/closing parentheses
-        // and in between parse using the container-inserter
-        handle_open_parenthesis(it, end, wkt);
-        container_inserter
-            <
-                typename point_type<Ring>::type
-            >::apply(it, end, wkt, std::back_inserter(ring));
-        handle_close_parenthesis(it, end, wkt);
-    }
-};
-
-
-
-
-/*!
-\brief Internal, parses a polygon from a string like this "((x y,x y),(x y,x y))"
-\note used for parsing polygons and multi-polygons
-*/
-template <typename Polygon>
-struct polygon_parser
-{
-    static inline void apply(tokenizer::iterator& it, tokenizer::iterator end,
-                std::string const& wkt, Polygon& poly)
-    {
-        typedef container_inserter
-            <
-                typename point_type<Polygon>::type
-            > container_inserter;
-
-        handle_open_parenthesis(it, end, wkt);
-
-        int n = -1;
-
-        // Stop at ")"
-        while (it != end && *it != ")")
-        {
-            // Parse ring
-            if (++n == 0)
-            {
-                container_inserter::apply(it, end, wkt,
-                        std::back_inserter(exterior_ring(poly)));
-            }
-            else
-            {
-                interior_rings(poly).resize(n);
-                container_inserter::apply(it, end, wkt,
-                        std::back_inserter(interior_rings(poly).back()));
-            }
-
-            if (it != end && *it == ",")
-            {
-                // Skip "," after ring is parsed
-                ++it;
-            }
-        }
-
-        handle_close_parenthesis(it, end, wkt);
-    }
-};
-
-inline bool one_of(tokenizer::iterator const& it, std::string const& value,
-            bool& is_present)
-{
-    if (boost::iequals(*it, value))
-    {
-        is_present = true;
-        return true;
-    }
-    return false;
-}
-
-inline bool one_of(tokenizer::iterator const& it, std::string const& value,
-            bool& present1, bool& present2)
-{
-    if (boost::iequals(*it, value))
-    {
-        present1 = true;
-        present2 = true;
-        return true;
-    }
-    return false;
-}
-
-
-inline void handle_empty_z_m(tokenizer::iterator& it, tokenizer::iterator end,
-            bool& has_empty, bool& has_z, bool& has_m)
-{
-    has_empty = false;
-    has_z = false;
-    has_m = false;
-
-    // WKT can optionally have Z and M (measured) values as in
-    // POINT ZM (1 1 5 60), POINT M (1 1 80), POINT Z (1 1 5)
-    // GGL supports any of them as coordinate values, but is not aware
-    // of any Measured value.
-    while (it != end
-           && (one_of(it, "M", has_m)
-               || one_of(it, "Z", has_z)
-               || one_of(it, "EMPTY", has_empty)
-               || one_of(it, "MZ", has_m, has_z)
-               || one_of(it, "ZM", has_z, has_m)
-               )
-           )
-    {
-        ++it;
-    }
-}
-
-/*!
-\brief Internal, starts parsing
-\param tokens boost tokens, parsed with separator " " and keeping separator "()"
-\param geometry string to compare with first token
-*/
-template <typename Geometry>
-inline bool initialize(tokenizer const& tokens,
-            std::string const& geometry_name, std::string const& wkt,
-            tokenizer::iterator& it)
-{
-    it = tokens.begin();
-    if (it != tokens.end() && boost::iequals(*it++, geometry_name))
-    {
-        bool has_empty, has_z, has_m;
-
-        handle_empty_z_m(it, tokens.end(), has_empty, has_z, has_m);
-
-        if (has_z && dimension<Geometry>::type::value < 3)
-        {
-            throw read_wkt_exception("Z only allowed for 3 or more dimensions", wkt);
-        }
-        if (has_empty)
-        {
-            check_end(it, tokens.end(), wkt);
-            return false;
-        }
-        // M is ignored at all.
-
-        return true;
-    }
-    throw read_wkt_exception(std::string("Should start with '") + geometry_name + "'", wkt);
-}
-
-
-template <typename Geometry, template<typename> class Parser, typename PrefixPolicy>
-struct geometry_parser
-{
-    static inline void apply(std::string const& wkt, Geometry& geometry)
-    {
-        ggl::clear(geometry);
-
-        tokenizer tokens(wkt, boost::char_separator<char>(" ", ",()"));
-        tokenizer::iterator it;
-        if (initialize<Geometry>(tokens, PrefixPolicy::apply(), wkt, it))
-        {
-            Parser<Geometry>::apply(it, tokens.end(), wkt, geometry);
-            check_end(it, tokens.end(), wkt);
-        }
-    }
-};
-
-
-
-/*!
-\brief Supports box parsing
-\note OGC does not define the box geometry, and WKT does not support boxes.
-    However, to be generic GGL supports reading and writing from and to boxes.
-    Boxes are outputted as a standard POLYGON. GGL can read boxes from
-    a standard POLYGON, from a POLYGON with 2 points of from a BOX
-\tparam Box the box
-*/
-template <typename Box>
-struct box_parser
-{
-    static inline void apply(std::string const& wkt, Box& box)
-    {
-        bool should_close = false;
-        tokenizer tokens(wkt, boost::char_separator<char>(" ", ",()"));
-        tokenizer::iterator it = tokens.begin();
-        tokenizer::iterator end = tokens.end();
-        if (it != end && boost::iequals(*it, "POLYGON"))
-        {
-            ++it;
-            bool has_empty, has_z, has_m;
-            handle_empty_z_m(it, end, has_empty, has_z, has_m);
-            if (has_empty)
-            {
-                assign_zero(box);
-                return;
-            }
-            handle_open_parenthesis(it, end, wkt);
-            should_close = true;
-        }
-        else if (it != end && boost::iequals(*it, "BOX"))
-        {
-            ++it;
-        }
-        else
-        {
-            throw read_wkt_exception("Should start with 'POLYGON' or 'BOX'", wkt);
-        }
-
-        typedef typename point_type<Box>::type point_type;
-        std::vector<point_type> points;
-        container_inserter<point_type>::apply(it, end, wkt, std::back_inserter(points));
-
-        if (should_close)
-        {
-            handle_close_parenthesis(it, end, wkt);
-        }
-        check_end(it, end, wkt);
-
-        int index = 0;
-        int n = boost::size(points);
-        if (n == 2)
-        {
-            index = 1;
-        }
-        else if (n == 4 || n == 5)
-        {
-            // In case of 4 or 5 points, we do not check the other ones, just
-            // take the opposite corner which is always 2
-            index = 2;
-        }
-        else
-        {
-            throw read_wkt_exception("Box should have 2,4 or 5 points", wkt);
-        }
-        set<min_corner, 0>(box, get<0>(points[0]));
-        set<min_corner, 1>(box, get<1>(points[0]));
-        set<max_corner, 0>(box, get<0>(points[index]));
-        set<max_corner, 1>(box, get<1>(points[index]));
-    }
-};
-
-
-
-}} // namespace detail::wkt
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Tag, typename Geometry>
-struct read_wkt {};
-
-
-template <typename Point>
-struct read_wkt<point_tag, Point>
-    : detail::wkt::geometry_parser
-        <
-            Point,
-            detail::wkt::point_parser,
-            detail::wkt::prefix_point
-        >
-{
-private :
-    BOOST_CONCEPT_ASSERT( (concept::Point<Point>) );
-};
-
-
-template <typename L>
-struct read_wkt<linestring_tag, L>
-    : detail::wkt::geometry_parser
-        <
-            L,
-            detail::wkt::linestring_parser,
-            detail::wkt::prefix_linestring
-        >
-{};
-
-template <typename Ring>
-struct read_wkt<ring_tag, Ring>
-    : detail::wkt::geometry_parser
-        <
-            Ring,
-            detail::wkt::ring_parser,
-            detail::wkt::prefix_polygon
-        >
-{};
-
-template <typename Geometry>
-struct read_wkt<polygon_tag, Geometry>
-    : detail::wkt::geometry_parser
-        <
-            Geometry,
-            detail::wkt::polygon_parser,
-            detail::wkt::prefix_polygon
-        >
-{};
-
-
-// Box (Non-OGC)
-template <typename Box>
-struct read_wkt<box_tag, Box>
-    : detail::wkt::box_parser<Box>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief Parses OGC Well-Known Text (\ref WKT) into a geometry (any geometry)
-\ingroup wkt
-\param wkt string containing \ref WKT
-\param geometry output geometry
-\par Example:
-\note It is case insensitive and can have the WKT forms "point", "point m", "point z", "point zm", "point mz"
-\note Empty sequences can have forms as "LINESTRING ()" or "POLYGON(())"
-Small example showing how to use read_wkt to build a point
-\dontinclude doxygen_examples.cpp
-\skip example_from_wkt_point
-\line {
-\until }
-\par Example:
-Small example showing how to use read_wkt to build a linestring
-\dontinclude doxygen_examples.cpp
-\skip example_from_wkt_linestring
-\line {
-\until }
-\par Example:
-Small example showing how to use read_wkt to build a polygon
-\dontinclude doxygen_examples.cpp
-\skip example_from_wkt_polygon
-\line {
-\until }
-*/
-template <typename Geometry>
-inline void read_wkt(std::string const& wkt, Geometry& geometry)
-{
-    dispatch::read_wkt<typename tag<Geometry>::type, Geometry>::apply(wkt, geometry);
-}
-
-/*!
-\brief Parses OGC Well-Known Text (\ref WKT) and outputs using an output iterator
-\ingroup wkt
-\param wkt string containing \ref WKT
-\param out output iterator
-\note Because the output iterator doesn't always have the type value_type, it should be
-specified in the function call.
-\par Example:
-Small example showing how to use read_wkt with an output iterator
-\dontinclude doxygen_examples.cpp
-\skip example_from_wkt_output_iterator
-\line {
-\until }
-*/
-template <typename P, typename Out>
-inline void read_wkt(std::string const& wkt, Out out)
-{
-    // Todo: maybe take this from the string, or do not call initialize, such that
-    // any coordinate string is parsed and outputted
-    std::string const& tag = "linestring";
-
-    detail::wkt::tokenizer tokens(wkt, boost::char_separator<char>(" ", ",()"));
-    detail::wkt::tokenizer::iterator it;
-    if (detail::wkt::initialize<P>(tokens, tag, wkt, it))
-    {
-        detail::wkt::container_inserter<P>::apply(it, tokens.end(), wkt, out);
-    }
-}
-
-} // namespace ggl
-
-#endif // GGL_EXTENSIONS_GIS_IO_WKT_READ_WKT_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/io/wkt/read_wkt_multi.hpp b/include/builtin-ggl/ggl/extensions/gis/io/wkt/read_wkt_multi.hpp
deleted file mode 100644
index bcca18b..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/io/wkt/read_wkt_multi.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 2008-2009, Geodan, Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_GIS_IO_WKT_READ_WKT_MULTI_HPP
-#define GGL_EXTENSIONS_GIS_IO_WKT_READ_WKT_MULTI_HPP
-
-#include <string>
-
-#include <ggl/multi/core/tags.hpp>
-#include <ggl/multi/core/point_type.hpp>
-
-#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
-#include <ggl/extensions/gis/io/wkt/detail/wkt_multi.hpp>
-
-
-namespace ggl
-{
-
-namespace detail { namespace wkt {
-
-template <typename MultiGeometry, template<typename> class Parser, typename PrefixPolicy>
-struct multi_parser
-{
-    static inline void apply(std::string const& wkt, MultiGeometry& geometry)
-    {
-        geometry.clear();
-
-        tokenizer tokens(wkt, boost::char_separator<char>(" ", ",()"));
-        tokenizer::iterator it;
-        if (initialize<MultiGeometry>(tokens, PrefixPolicy::apply(), wkt, it))
-        {
-            handle_open_parenthesis(it, tokens.end(), wkt);
-
-            // Parse sub-geometries
-            while(it != tokens.end() && *it != ")")
-            {
-                geometry.resize(geometry.size() + 1);
-                Parser
-                    <
-                        typename boost::range_value<MultiGeometry>::type
-                    >::apply(it, tokens.end(), wkt, geometry.back());
-                if (it != tokens.end() && *it == ",")
-                {
-                    // Skip "," after multi-element is parsed
-                    ++it;
-                }
-            }
-
-            handle_close_parenthesis(it, tokens.end(), wkt);
-        }
-    }
-};
-
-
-
-
-}} // namespace detail::wkt
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename MultiGeometry>
-struct read_wkt<multi_point_tag, MultiGeometry>
-    : detail::wkt::multi_parser
-            <
-                MultiGeometry,
-                detail::wkt::point_parser,
-                detail::wkt::prefix_multipoint
-            >
-{};
-
-
-template <typename MultiGeometry>
-struct read_wkt<multi_linestring_tag, MultiGeometry>
-    : detail::wkt::multi_parser
-            <
-                MultiGeometry,
-                detail::wkt::linestring_parser,
-                detail::wkt::prefix_multilinestring
-            >
-{};
-
-
-template <typename MultiGeometry>
-struct read_wkt<multi_polygon_tag, MultiGeometry>
-    : detail::wkt::multi_parser
-            <
-                MultiGeometry,
-                detail::wkt::polygon_parser,
-                detail::wkt::prefix_multipolygon
-            >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-} // namespace ggl
-
-#endif // GGL_EXTENSIONS_GIS_IO_WKT_READ_WKT_MULTI_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/io/wkt/stream_wkt.hpp b/include/builtin-ggl/ggl/extensions/gis/io/wkt/stream_wkt.hpp
deleted file mode 100644
index 195bac4..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/io/wkt/stream_wkt.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 2008-2009, Geodan, Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_GIS_IO_WKT_STREAM_WKT_HPP
-#define GGL_EXTENSIONS_GIS_IO_WKT_STREAM_WKT_HPP
-
-#include <ggl/extensions/gis/io/wkt/write_wkt.hpp>
-
-// This short file contains only one manipulator, streaming as WKT
-// Don't move contents to as_wkt, developers must be able to choose how to stream
-
-// Don't use namespace ggl, to enable the library to stream custom geometries which
-// are living outside the namespace ggl
-
-//namespace ggl
-//{
-
-
-/*!
-\brief Streams a geometry as Well-Known Text
-\ingroup wkt
-*/
-template<typename CH, typename TR, typename G>
-inline std::basic_ostream<CH,TR>& operator<<(std::basic_ostream<CH,TR> &os, const G& geometry)
-{
-    os << ggl::wkt(geometry);
-    return os;
-}
-
-//} // namespace ggl
-
-#endif // GGL_EXTENSIONS_GIS_IO_WKT_STREAM_WKT_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/io/wkt/wkt.hpp b/include/builtin-ggl/ggl/extensions/gis/io/wkt/wkt.hpp
deleted file mode 100644
index 675fe61..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/io/wkt/wkt.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 2008-2009, Geodan, Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_GIS_IO_WKT_WKT_HPP
-#define GGL_EXTENSIONS_GIS_IO_WKT_WKT_HPP
-
-
-#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
-#include <ggl/extensions/gis/io/wkt/write_wkt.hpp>
-
-#include <ggl/extensions/gis/io/wkt/read_wkt_multi.hpp>
-#include <ggl/extensions/gis/io/wkt/write_wkt_multi.hpp>
-
-
-#endif // GGL_EXTENSIONS_GIS_IO_WKT_WKT_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/io/wkt/write_wkt.hpp b/include/builtin-ggl/ggl/extensions/gis/io/wkt/write_wkt.hpp
deleted file mode 100644
index a7cf074..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/io/wkt/write_wkt.hpp
+++ /dev/null
@@ -1,360 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 2008-2009, Geodan, Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_GIS_IO_WKT_WRITE_WKT_HPP
-#define GGL_EXTENSIONS_GIS_IO_WKT_WRITE_WKT_HPP
-
-#include <iostream>
-#include <string>
-
-#include <boost/concept/assert.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/convert.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/core/ring_type.hpp>
-#include <ggl/geometries/linear_ring.hpp>
-
-#include <ggl/extensions/gis/io/wkt/detail/wkt.hpp>
-
-/*!
-\defgroup wkt wkt: parse and stream WKT (Well-Known Text)
-The wkt classes stream the specified geometry as \ref OGC Well Known Text (\ref WKT). It is defined for OGC geometries.
-It is therefore not defined for all geometries (e.g. not for circle)
-\note The implementation is independant from point type, point_xy and point_ll are supported,
-as well as points with more than two coordinates.
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace wkt {
-
-template <typename P, int I, int Count>
-struct stream_coordinate
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os, P const& p)
-    {
-        os << (I > 0 ? " " : "") << get<I>(p);
-        stream_coordinate<P, I + 1, Count>::apply(os, p);
-    }
-};
-
-template <typename P, int Count>
-struct stream_coordinate<P, Count, Count>
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>&, P const&)
-    {}
-};
-
-struct prefix_linestring_par
-{
-    static inline const char* apply() { return "LINESTRING("; }
-};
-
-struct prefix_ring_par_par
-{
-    // Note, double parentheses are intentional, indicating WKT ring begin/end
-    static inline const char* apply() { return "POLYGON(("; }
-};
-
-struct opening_parenthesis
-{
-    static inline const char* apply() { return "("; }
-};
-
-struct closing_parenthesis
-{
-    static inline const char* apply() { return ")"; }
-};
-
-struct double_closing_parenthesis
-{
-    static inline const char* apply() { return "))"; }
-};
-
-
-
-
-/*!
-\brief Stream points as \ref WKT
-*/
-template <typename Point, typename Policy>
-struct wkt_point
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os, Point const& p)
-    {
-        os << Policy::apply() << "(";
-        stream_coordinate<Point, 0, dimension<Point>::type::value>::apply(os, p);
-        os << ")";
-    }
-
-    private:
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point>) );
-};
-
-/*!
-\brief Stream ranges as WKT
-\note policy is used to stream prefix/postfix, enabling derived classes to override this
-*/
-template <typename Range, typename PrefixPolicy, typename SuffixPolicy>
-struct wkt_range
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os,
-                Range const& range)
-    {
-        typedef typename boost::range_const_iterator<Range>::type iterator_type;
-
-        bool first = true;
-
-        os << PrefixPolicy::apply();
-
-        // TODO: check EMPTY here
-
-        for (iterator_type it = boost::begin(range);
-            it != boost::end(range);
-            ++it)
-        {
-            os << (first ? "" : ",");
-            stream_coordinate<point, 0, dimension<point>::type::value>::apply(os, *it);
-            first = false;
-        }
-
-        os << SuffixPolicy::apply();
-    }
-
-    private:
-        typedef typename boost::range_value<Range>::type point;
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<point>) );
-};
-
-/*!
-\brief Stream sequence of points as WKT-part, e.g. (1 2),(3 4)
-\note Used in polygon, all multi-geometries
-*/
-
-
-
-template <typename Range>
-struct wkt_sequence
-    : wkt_range
-        <
-            Range,
-            opening_parenthesis,
-            closing_parenthesis
-        >
-{};
-
-
-template <typename Polygon, typename PrefixPolicy>
-struct wkt_poly
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os,
-                Polygon const& poly)
-    {
-        typedef typename ring_type<Polygon>::type ring;
-        typedef typename boost::range_const_iterator<
-                    typename interior_type<Polygon>::type>::type iterator;
-
-        os << PrefixPolicy::apply();
-        // TODO: check EMPTY here
-        os << "(";
-        wkt_sequence<ring>::apply(os, exterior_ring(poly));
-        for (iterator it = boost::begin(interior_rings(poly));
-            it != boost::end(interior_rings(poly));
-            ++it)
-        {
-            os << ",";
-            wkt_sequence<ring>::apply(os, *it);
-        }
-        os << ")";
-    }
-
-    private:
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<typename point_type<Polygon>::type>) );
-};
-
-
-template <typename Box>
-struct wkt_box
-{
-    typedef typename point_type<Box>::type point_type;
-
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os,
-                Box const& box)
-    {
-        // Convert to linear ring, then stream
-        typedef linear_ring<point_type> ring_type;
-        ring_type ring;
-        ggl::convert(box, ring);
-        os << "POLYGON(";
-        wkt_sequence<ring_type>::apply(os, ring);
-        os << ")";
-    }
-
-    private:
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<point_type>) );
-
-        inline wkt_box()
-        {
-            // Only streaming of boxes with two dimensions is support, otherwise it is a polyhedron!
-            //assert_dimension<B, 2>();
-        }
-};
-
-}} // namespace detail::wkt
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-template <typename Tag, typename Geometry>
-struct wkt {};
-
-
-template <typename Point>
-struct wkt<point_tag, Point>
-    : detail::wkt::wkt_point
-        <
-            Point,
-            detail::wkt::prefix_point
-        >
-{};
-
-
-template <typename Linestring>
-struct wkt<linestring_tag, Linestring>
-    : detail::wkt::wkt_range
-        <
-            Linestring,
-            detail::wkt::prefix_linestring_par,
-            detail::wkt::closing_parenthesis
-        >
-{};
-
-
-/*!
-\brief Specialization to stream a box as WKT
-\details A "box" does not exist in WKT.
-It is therefore streamed as a polygon
-*/
-template <typename Box>
-struct wkt<box_tag, Box>
-    : detail::wkt::wkt_box<Box>
-{};
-
-
-/*!
-\brief Specialization to stream a ring as WKT
-\details A "linear_ring" does not exist in WKT.
-A linear ring is equivalent to a polygon without inner rings
-It is therefore streamed as a polygon
-*/
-template <typename Ring>
-struct wkt<ring_tag, Ring>
-    : detail::wkt::wkt_range
-        <
-            Ring,
-            detail::wkt::prefix_ring_par_par,
-            detail::wkt::double_closing_parenthesis
-        >
-{};
-
-
-/*!
-\brief Specialization to stream polygon as WKT
-*/
-template <typename Polygon>
-struct wkt<polygon_tag, Polygon>
-    : detail::wkt::wkt_poly
-        <
-            Polygon,
-            detail::wkt::prefix_polygon
-        >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief Generic geometry template manipulator class, takes corresponding output class from traits class
-\ingroup wkt
-\details Stream manipulator, streams geometry classes as \ref WKT streams
-\par Example:
-Small example showing how to use the wkt class
-\dontinclude doxygen_examples.cpp
-\skip example_as_wkt_point
-\line {
-\until }
-*/
-template <typename Geometry>
-class wkt_manipulator
-{
-public:
-
-    inline wkt_manipulator(Geometry const& g)
-        : m_geometry(g)
-    {}
-
-    template <typename Char, typename Traits>
-    inline friend std::basic_ostream<Char, Traits>& operator<<(
-            std::basic_ostream<Char, Traits>& os,
-            wkt_manipulator const& m)
-    {
-        dispatch::wkt
-            <
-                typename tag<Geometry>::type,
-                Geometry
-            >::apply(os, m.m_geometry);
-        os.flush();
-        return os;
-    }
-
-private:
-    Geometry const& m_geometry;
-};
-
-/*!
-\brief Main WKT-streaming function
-\ingroup wkt
-\par Example:
-Small example showing how to use the wkt helper function
-\dontinclude doxygen_examples.cpp
-\skip example_as_wkt_vector
-\line {
-\until }
-*/
-template <typename Geometry>
-inline wkt_manipulator<Geometry> wkt(Geometry const& geometry)
-{
-    return wkt_manipulator<Geometry>(geometry);
-}
-
-
-// Backward compatibility
-template <typename Geometry>
-inline wkt_manipulator<Geometry> make_wkt(Geometry const& geometry)
-{
-    return wkt_manipulator<Geometry>(geometry);
-}
-
-} // namespace ggl
-
-#endif // GGL_EXTENSIONS_GIS_IO_WKT_WRITE_WKT_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/io/wkt/write_wkt_multi.hpp b/include/builtin-ggl/ggl/extensions/gis/io/wkt/write_wkt_multi.hpp
deleted file mode 100644
index bddc96c..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/io/wkt/write_wkt_multi.hpp
+++ /dev/null
@@ -1,109 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 2008-2009, Geodan, Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_GIS_IO_WKT_WRITE_WKT_MULTI_HPP
-#define GGL_EXTENSIONS_GIS_IO_WKT_WRITE_WKT_MULTI_HPP
-
-
-
-#include <ggl/multi/core/tags.hpp>
-
-#include <ggl/extensions/gis/io/wkt/write_wkt.hpp>
-#include <ggl/extensions/gis/io/wkt/detail/wkt_multi.hpp>
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace wkt {
-
-
-template <typename Multi, typename StreamPolicy, typename PrefixPolicy>
-struct wkt_multi
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os,
-                Multi const& geometry)
-    {
-        os << PrefixPolicy::apply();
-        // TODO: check EMPTY here
-        os << "(";
-
-        for (typename boost::range_const_iterator<Multi>::type
-                    it = boost::begin(geometry);
-            it != boost::end(geometry);
-            ++it)
-        {
-            if (it != boost::begin(geometry))
-            {
-                os << ",";
-            }
-            StreamPolicy::apply(os, *it);
-        }
-
-        os << ")";
-    }
-};
-
-}} // namespace wkt::impl
-#endif
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-
-template <typename Multi>
-struct wkt<multi_point_tag, Multi>
-    : detail::wkt::wkt_multi
-        <
-            Multi,
-            detail::wkt::wkt_point
-                <
-                    typename boost::range_value<Multi>::type,
-                    detail::wkt::prefix_null
-                >,
-            detail::wkt::prefix_multipoint
-        >
-{};
-
-
-template <typename Multi>
-struct wkt<multi_linestring_tag, Multi>
-    : detail::wkt::wkt_multi
-        <
-            Multi,
-            detail::wkt::wkt_sequence
-                <
-                    typename boost::range_value<Multi>::type
-                >,
-            detail::wkt::prefix_multilinestring
-        >
-{};
-
-
-template <typename Multi>
-struct wkt<multi_polygon_tag, Multi>
-    : detail::wkt::wkt_multi
-        <
-            Multi,
-            detail::wkt::wkt_poly
-                <
-                    typename boost::range_value<Multi>::type,
-                    detail::wkt::prefix_null
-                >,
-            detail::wkt::prefix_multipolygon
-        >
-{};
-
-} // namespace dispatch
-#endif
-
-}
-
-#endif // GGL_EXTENSIONS_GIS_IO_WKT_WRITE_WKT_MULTI_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/latlong/detail/graticule.hpp b/include/builtin-ggl/ggl/extensions/gis/latlong/detail/graticule.hpp
deleted file mode 100644
index eaf1519..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/latlong/detail/graticule.hpp
+++ /dev/null
@@ -1,231 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_GIS_LATLONG_DETAIL_GRATICULE_HPP
-#define GGL_EXTENSIONS_GIS_LATLONG_DETAIL_GRATICULE_HPP
-
-#include <cmath>
-#include <sstream>
-#include <string>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-namespace ggl
-{
-
-/*!
-    \brief Cardinal directions.
-    \ingroup cs
-    \details They are used in the dms-class. When specified by the library user,
-    north/east/south/west is, in general, enough. When parsed or received by an algorithm,
-    the user knows it it is lat/long but not more
-*/
-enum cd_selector
-{
-    /*cd_none, */
-    north,
-    east,
-    south,
-    west,
-    cd_lat,
-    cd_lon
-};
-
-/*!
-    \brief Utility class to assign poinst with degree,minute,second
-    \ingroup cs
-    \note Normally combined with latitude and longitude classes
-    \tparam CardinalDir selects if it is north/south/west/east
-    \tparam coordinate value, double/float
-    \par Example:
-    Example showing how to use the dms class
-    \dontinclude doxygen_examples.cpp
-    \skip example_dms
-    \line {
-    \until }
-*/
-template <cd_selector CardinalDir, typename T = double>
-class dms
-{
-public:
-
-    /// Constructs with a value
-    inline explicit dms(T v)
-        : m_value(v)
-    {}
-
-    /// Constructs with a degree, minute, optional second
-    inline explicit dms(int d, int m, T s = 0.0)
-    {
-        double v = ((CardinalDir == west || CardinalDir == south) ? -1.0 : 1.0)
-                    * (double(d) + (m / 60.0) + (s / 3600.0));
-
-        m_value = boost::numeric_cast<T>(v);
-    }
-
-    // Prohibit automatic conversion to T
-    // because this would enable lon(dms<south>)
-    // inline operator T() const { return m_value; }
-
-    /// Explicit conversion to T (double/float)
-    inline const T& as_value() const
-    {
-        return m_value;
-    }
-
-    /// Get degrees as integer, minutes as integer, seconds as double.
-    inline void get_dms(int& d, int& m, double& s,
-                        bool& positive, char& cardinal) const
-    {
-        double value = m_value;
-
-        // Set to normal earth latlong coordinates
-        while (value < -180)
-        {
-            value += 360;
-        }
-        while (value > 180)
-        {
-            value -= 360;
-        }
-        // Make positive and indicate this
-        positive = value > 0;
-
-        // Todo: we might implement template/specializations here
-        // Todo: if it is "west" and "positive", make east? or keep minus sign then?
-
-        cardinal = ((CardinalDir == cd_lat && positive) ? 'N'
-            :  (CardinalDir == cd_lat && !positive) ? 'S'
-            :  (CardinalDir == cd_lon && positive) ? 'E'
-            :  (CardinalDir == cd_lon && !positive) ? 'W'
-            :  (CardinalDir == east) ? 'E'
-            :  (CardinalDir == west) ? 'W'
-            :  (CardinalDir == north) ? 'N'
-            :  (CardinalDir == south) ? 'S'
-            : ' ');
-
-        value = std::fabs(value);
-
-        // Calculate the values
-        double fraction = 0;
-        double integer = 0;
-        fraction = std::modf(value, &integer);
-        d = int(integer);
-        s = 60.0 * std::modf(fraction * 60.0, &integer);
-        m = int(integer);
-    }
-
-    /// Get degrees, minutes, seconds as a string, separators can be specified optionally
-    inline std::string get_dms(const std::string& ds = " ",
-        const std::string& ms = "'",
-        const std::string& ss = "\"") const
-    {
-        double s = 0;
-        int d = 0;
-        int m = 0;
-        bool positive = false;
-        char cardinal = 0;
-        get_dms(d, m, s, positive, cardinal);
-        std::ostringstream out;
-        out << d << ds << m << ms << s << ss << " " << cardinal;
-
-        return out.str();
-    }
-
-private:
-
-    T m_value;
-};
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-/*!
-    \brief internal base class for latitude and longitude classes
-    \details The latitude longitude classes define different types for lat and lon. This is convenient
-    to construct latlong class without ambiguity.
-    \note It is called graticule, after <em>"This latitude/longitude "webbing" is known as the common
-    graticule" (http://en.wikipedia.org/wiki/Geographic_coordinate_system)</em>
-    \tparam S latitude/longitude
-    \tparam T coordinate type, double float or int
-*/
-template <typename T>
-class graticule
-{
-public:
-
-    // TODO: Pass 'v' by const-ref
-    inline explicit graticule(T v) : m_v(v) {}
-    inline operator T() const { return m_v; }
-
-private:
-
-    T m_v;
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-/*!
-    \brief Utility class to assign points with latitude value (north/south)
-    \ingroup cs
-    \tparam T coordinate type, double / float
-    \note Often combined with dms class
-*/
-template <typename T = double>
-class latitude : public detail::graticule<T>
-{
-public:
-
-    /// Can be constructed with a value
-    inline explicit latitude(T v)
-        : detail::graticule<T>(v)
-    {}
-
-    /// Can be constructed with a NORTH dms-class
-    inline explicit latitude(const dms<north,T>& v)
-        : detail::graticule<T>(v.as_value())
-    {}
-
-    /// Can be constructed with a SOUTH dms-class
-    inline explicit latitude(const dms<south,T>& v)
-       : detail::graticule<T>(v.as_value())
-   {}
-};
-
-/*!
-\brief Utility class to assign points with longitude value (west/east)
-\ingroup cs
-\tparam T coordinate type, double / float
-\note Often combined with dms class
-*/
-template <typename T = double>
-class longitude : public detail::graticule<T>
-{
-public:
-
-    /// Can be constructed with a value
-    inline explicit longitude(T v)
-        : detail::graticule<T>(v)
-    {}
-
-    /// Can be constructed with a WEST dms-class
-    inline explicit longitude(const dms<west, T>& v)
-        : detail::graticule<T>(v.as_value())
-    {}
-
-    /// Can be constructed with an EAST dms-class
-    inline explicit longitude(const dms<east, T>& v)
-        : detail::graticule<T>(v.as_value())
-    {}
-};
-
-} // namespace ggl
-
-#endif // GGL_EXTENSIONS_GIS_LATLONG_DETAIL_GRATICULE_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/latlong/latlong.hpp b/include/builtin-ggl/ggl/extensions/gis/latlong/latlong.hpp
deleted file mode 100644
index 611dde6..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/latlong/latlong.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_LATLONG_HPP
-#define GGL_LATLONG_HPP
-
-// Predeclare common Cartesian 3D points for convenience
-
-#include <ggl/geometries/geometries.hpp>
-#include <ggl/extensions/gis/latlong/point_ll.hpp>
-

-
-#include <ggl/extensions/gis/geographic/strategies/andoyer.hpp>
-#include <ggl/extensions/gis/geographic/strategies/vincenty.hpp>
-
-namespace ggl
-{
-typedef point_ll<double, cs::geographic<degree> > point_ll_deg;
-typedef linestring<point_ll_deg> linestring_ll_deg;
-typedef linear_ring<point_ll_deg> ring_ll_deg;
-typedef polygon<point_ll_deg> polygon_ll_deg;
-typedef box<point_ll_deg> box_ll_deg;
-typedef segment<point_ll_deg> segment_ll_deg;
-
-typedef point_ll<double, cs::geographic<radian> > point_ll_rad;
-typedef linestring<point_ll_rad> linestring_ll_rad;
-typedef linear_ring<point_ll_rad> ring_ll_rad;
-typedef polygon<point_ll_rad> polygon_ll_rad;
-typedef box<point_ll_rad> box_ll_rad;
-typedef segment<point_ll_rad> segment_ll_rad;
-}
-
-
-#endif // GGL_LATLONG_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/latlong/point_ll.hpp b/include/builtin-ggl/ggl/extensions/gis/latlong/point_ll.hpp
deleted file mode 100644
index 981b6ec..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/latlong/point_ll.hpp
+++ /dev/null
@@ -1,151 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRIES_POINT_LL_HPP
-#define GGL_GEOMETRIES_POINT_LL_HPP
-
-#include <cstddef>
-#include <sstream>
-#include <string>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <ggl/core/cs.hpp>
-#include <ggl/arithmetic/arithmetic.hpp>
-#include <ggl/geometries/point.hpp>
-#include <ggl/util/copy.hpp>
-
-#include <ggl/extensions/gis/latlong/detail/graticule.hpp>
-
-namespace ggl
-{
-
-/*!
-    \brief Point using spherical coordinates \a lat and \a lon, on Earth
-    \ingroup Geometry
-    \details The point_ll class implements a point with lat and lon functions.
-    It can be constructed using latitude and longitude classes. The latlong
-    class can be defined in degrees or in radians. There is a conversion method
-    from degree to radian, and from radian to degree.
-    \tparam T coordinate type, double (the default) or float
-        (it might be int as well)
-    \tparam C coordinate system, optional, should includes degree/radian
-        indication, defaults to geographic<degree>
-    \tparam D dimensions, optional, defaults to 2
-    \note There is NO constructor with two values to avoid
-        exchanging lat and long
-    \note Construction with latitude and longitude can be done in both orders,
-        so lat/long and long/lat
-    \par Example:
-    Example showing how the point_ll class can be constructed. Note that it
-        can also be constructed using
-    decimal degrees (43.123).
-    \dontinclude doxygen_examples.cpp
-    \skip example_point_ll_construct
-    \line {
-    \until }
-*/
-template
-<
-    typename T = double,
-    typename C = cs::geographic<degree>,
-    std::size_t D = 2
->
-class point_ll : public point<T, D, C>
-{
-public:
-
-    /// Default constructor, does not initialize anything
-    inline point_ll() : point<T, D, C>() {}
-
-    /// Constructor with longitude/latitude
-    inline point_ll(longitude<T> const& lo, latitude<T> const& la)
-        : point<T, D, C>(lo, la) {}
-
-    /// Constructor with latitude/longitude
-    inline point_ll(latitude<T> const& la, longitude<T> const& lo)
-        : point<T, D, C>(lo, la) {}
-
-    /// Get longitude
-    inline T const& lon() const { return this->template get<0>(); }
-    /// Get latitude
-    inline T const& lat() const { return this->template get<1>(); }
-
-    /// Set longitude
-    inline void lon(T const& v) { this->template set<0>(v); }
-    /// Set latitude
-    inline void lat(T const& v) { this->template set<1>(v); }
-
-    /// Set longitude using dms class
-    inline void lon(dms<east, T> const& v)
-    {
-        this->template set<0>(v.as_value());
-    }
-    inline void lon(dms<west, T> const& v)
-    {
-        this->template set<0>(v.as_value());
-    }
-
-    inline void lat(dms<north, T> const& v)
-    {
-        this->template set<1>(v.as_value());
-    }
-    inline void lat(dms<south, T> const& v)
-    {
-        this->template set<1>(v.as_value());
-    }
-};
-
-// Adapt the point_ll to the concept
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename T, typename C, std::size_t D>
-struct tag<point_ll<T, C, D> >
-{
-    typedef point_tag type;
-};
-
-template<typename T, typename C, std::size_t D>
-struct coordinate_type<point_ll<T, C, D> >
-{
-    typedef T type;
-};
-
-template<typename T, typename C, std::size_t D>
-struct coordinate_system<point_ll<T, C, D> >
-{
-    typedef C type;
-};
-
-template<typename T, typename C, std::size_t D>
-struct dimension<point_ll<T, C, D> > : boost::mpl::int_<D> {};
-
-template<typename T, typename C, std::size_t D>
-struct access<point_ll<T, C, D> >
-{
-    template <size_t I>
-    static inline T get(point_ll<T, C, D> const& p)
-    {
-        return p.template get<I>();
-    }
-
-    template <size_t I>
-    static inline void set(point_ll<T, C, D>& p, T const& value)
-    {
-        p.template set<I>(value);
-    }
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRIES_POINT_LL_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/epsg.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/epsg.hpp
deleted file mode 100644
index 322a082..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/epsg.hpp
+++ /dev/null
@@ -1,3566 +0,0 @@
-#ifndef _PROJECTIONS_EPGS_HPP
-#define _PROJECTIONS_EPGS_HPP
-
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#include <ggl/extensions/gis/projections/parameters.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_init.hpp>
-
-// This file is OPTIONAL
-// Only to be included if EPSG codes are necessary.
-// It is not included automatically
-
-namespace ggl { namespace projection
-{
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-    inline std::string code_to_string(int code)
-    {
-        switch(code)
-        {
-
-            case 2000 : return "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m";
-            case 2001 : return "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m";
-            case 2002 : return "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m";
-            case 2003 : return "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m";
-            case 2004 : return "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m";
-            case 2005 : return "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m";
-            case 2006 : return "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m";
-            case 2007 : return "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +units=m";
-            case 2008 : return "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2009 : return "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2010 : return "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2011 : return "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2012 : return "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2013 : return "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2014 : return "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2015 : return "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2016 : return "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2017 : return "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2018 : return "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2019 : return "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2020 : return "+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2021 : return "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2022 : return "+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2023 : return "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2024 : return "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2025 : return "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2026 : return "+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m";
-            case 2027 : return "+proj=utm +zone=15 +ellps=clrk66 +units=m";
-            case 2028 : return "+proj=utm +zone=16 +ellps=clrk66 +units=m";
-            case 2029 : return "+proj=utm +zone=17 +ellps=clrk66 +units=m";
-            case 2030 : return "+proj=utm +zone=18 +ellps=clrk66 +units=m";
-            case 2031 : return "+proj=utm +zone=17 +ellps=clrk66 +units=m";
-            case 2032 : return "+proj=utm +zone=18 +ellps=clrk66 +units=m";
-            case 2033 : return "+proj=utm +zone=19 +ellps=clrk66 +units=m";
-            case 2034 : return "+proj=utm +zone=20 +ellps=clrk66 +units=m";
-            case 2035 : return "+proj=utm +zone=21 +ellps=clrk66 +units=m";
-            case 2036 : return "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2037 : return "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2038 : return "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2039 : return "+proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m";
-            case 2040 : return "+proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m";
-            case 2041 : return "+proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m";
-            case 2042 : return "+proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m";
-            case 2043 : return "+proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m";
-            case 2044 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m";
-            case 2045 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m";
-            case 2056 : return "+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m";
-            case 2057 : return "+proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m";
-            case 2058 : return "+proj=utm +zone=38 +ellps=intl +units=m";
-            case 2059 : return "+proj=utm +zone=39 +ellps=intl +units=m";
-            case 2060 : return "+proj=utm +zone=40 +ellps=intl +units=m";
-            case 2061 : return "+proj=utm +zone=41 +ellps=intl +units=m";
-            case 2062 : return "+proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m";
-            case 2063 : return "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m";
-            case 2064 : return "+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m";
-            case 2065 : return "+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m";
-            case 2066 : return "+proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164";
-            case 2067 : return "+proj=utm +zone=20 +ellps=intl +units=m";
-            case 2068 : return "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m";
-            case 2069 : return "+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m";
-            case 2070 : return "+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m";
-            case 2071 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m";
-            case 2072 : return "+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m";
-            case 2073 : return "+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m";
-            case 2074 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m";
-            case 2075 : return "+proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m";
-            case 2076 : return "+proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m";
-            case 2077 : return "+proj=utm +zone=32 +ellps=intl +units=m";
-            case 2078 : return "+proj=utm +zone=33 +ellps=intl +units=m";
-            case 2079 : return "+proj=utm +zone=34 +ellps=intl +units=m";
-            case 2080 : return "+proj=utm +zone=35 +ellps=intl +units=m";
-            case 2081 : return "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m";
-            case 2082 : return "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m";
-            case 2083 : return "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m";
-            case 2084 : return "+proj=utm +zone=19 +south +ellps=intl +units=m";
-            case 2085 : return "+proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 2086 : return "+proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 2087 : return "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m";
-            case 2088 : return "+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +units=m";
-            case 2089 : return "+proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2090 : return "+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2091 : return "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m";
-            case 2092 : return "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m";
-            case 2093 : return "+proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m";
-            case 2094 : return "+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 2095 : return "+proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m";
-            case 2096 : return "+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m";
-            case 2097 : return "+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m";
-            case 2098 : return "+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m";
-            case 2099 : return "+proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m";
-            case 2100 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m";
-            case 2101 : return "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m";
-            case 2102 : return "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m";
-            case 2103 : return "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m";
-            case 2104 : return "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m";
-            case 2105 : return "+proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2106 : return "+proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2107 : return "+proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2108 : return "+proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2109 : return "+proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2110 : return "+proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2111 : return "+proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2112 : return "+proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2113 : return "+proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2114 : return "+proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2115 : return "+proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2116 : return "+proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2117 : return "+proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2118 : return "+proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2119 : return "+proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2120 : return "+proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2121 : return "+proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2122 : return "+proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2123 : return "+proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2124 : return "+proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2125 : return "+proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2126 : return "+proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2127 : return "+proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2128 : return "+proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2129 : return "+proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2130 : return "+proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2131 : return "+proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2132 : return "+proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2133 : return "+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2134 : return "+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2135 : return "+proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2136 : return "+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +to_meter=0.3047997101815088";
-            case 2137 : return "+proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m";
-            case 2138 : return "+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m";
-            case 2139 : return "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2140 : return "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2141 : return "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2142 : return "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2143 : return "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2144 : return "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2145 : return "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2146 : return "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2147 : return "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2148 : return "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2149 : return "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2150 : return "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2151 : return "+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2152 : return "+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2153 : return "+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2154 : return "+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2155 : return "+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192";
-            case 2156 : return "+proj=utm +zone=59 +south +ellps=GRS80 +units=m";
-            case 2157 : return "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2158 : return "+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2159 : return "+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088";
-            case 2160 : return "+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088";
-            case 2161 : return "+proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m";
-            case 2162 : return "+proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m";
-            case 2163 : return "+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m";
-            case 2164 : return "+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m";
-            case 2165 : return "+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m";
-            case 2166 : return "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m";
-            case 2167 : return "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m";
-            case 2168 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m";
-            case 2169 : return "+proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m";
-            case 2170 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 2171 : return "+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-            case 2172 : return "+proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-            case 2173 : return "+proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-            case 2174 : return "+proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-            case 2175 : return "+proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-            case 2176 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2177 : return "+proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2178 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2179 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2180 : return "+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m";
-            case 2188 : return "+proj=utm +zone=25 +ellps=intl +units=m";
-            case 2189 : return "+proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m";
-            case 2190 : return "+proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m";
-            case 2191 : return "+proj=utm +zone=28 +ellps=intl +units=m";
-            case 2192 : return "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +units=m";
-            case 2193 : return "+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2194 : return "+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192";
-            case 2195 : return "+proj=utm +zone=2 +south +ellps=GRS80 +units=m";
-            case 2196 : return "+proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2197 : return "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2198 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2199 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m";
-            case 2200 : return "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m";
-            case 2201 : return "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2202 : return "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2203 : return "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2204 : return "+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 2205 : return "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 2206 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +units=m";
-            case 2207 : return "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +units=m";
-            case 2208 : return "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +units=m";
-            case 2209 : return "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +units=m";
-            case 2210 : return "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +units=m";
-            case 2211 : return "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +units=m";
-            case 2212 : return "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +units=m";
-            case 2213 : return "+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2214 : return "+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m";
-            case 2215 : return "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m";
-            case 2216 : return "+proj=utm +zone=22 +ellps=intl +units=m";
-            case 2217 : return "+proj=utm +zone=23 +ellps=intl +units=m";
-            case 2219 : return "+proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m";
-            case 2220 : return "+proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m";
-            case 2222 : return "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2223 : return "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2224 : return "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2225 : return "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2226 : return "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2227 : return "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2228 : return "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2229 : return "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2230 : return "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2231 : return "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2232 : return "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2233 : return "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2234 : return "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2235 : return "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2236 : return "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2237 : return "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2238 : return "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2239 : return "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2240 : return "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2241 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2242 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2243 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2244 : return "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2245 : return "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2246 : return "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2247 : return "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2248 : return "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2249 : return "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2250 : return "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2251 : return "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2252 : return "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2253 : return "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2254 : return "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2255 : return "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2256 : return "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2257 : return "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2258 : return "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2259 : return "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2260 : return "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2261 : return "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2262 : return "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2263 : return "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2264 : return "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2265 : return "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2266 : return "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2267 : return "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2268 : return "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2269 : return "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2270 : return "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2271 : return "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2272 : return "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2273 : return "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2274 : return "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2275 : return "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2276 : return "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2277 : return "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2278 : return "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2279 : return "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2280 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2281 : return "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2282 : return "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2283 : return "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2284 : return "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2285 : return "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2286 : return "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2287 : return "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2288 : return "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2289 : return "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2290 : return "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m";
-            case 2291 : return "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m";
-            case 2292 : return "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2294 : return "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m";
-            case 2295 : return "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m";
-            case 2308 : return "+proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +units=m";
-            case 2309 : return "+proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 2310 : return "+proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 2311 : return "+proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 2312 : return "+proj=utm +zone=33 +ellps=clrk80 +units=m";
-            case 2313 : return "+proj=utm +zone=33 +ellps=clrk80 +units=m";
-            case 2314 : return "+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654";
-            case 2315 : return "+proj=utm +zone=19 +south +ellps=intl +units=m";
-            case 2316 : return "+proj=utm +zone=20 +south +ellps=intl +units=m";
-            case 2317 : return "+proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m";
-            case 2318 : return "+proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +units=m";
-            case 2319 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m";
-            case 2320 : return "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m";
-            case 2321 : return "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m";
-            case 2322 : return "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m";
-            case 2323 : return "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m";
-            case 2324 : return "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m";
-            case 2325 : return "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m";
-            case 2326 : return "+proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m";
-            case 2327 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2328 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2329 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2330 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2331 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2332 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2333 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2334 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2335 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2336 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2337 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2338 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2339 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2340 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2341 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2342 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2343 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2344 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2345 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2346 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2347 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2348 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2349 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2350 : return "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2351 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2352 : return "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2353 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2354 : return "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2355 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2356 : return "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2357 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2358 : return "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2359 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2360 : return "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2361 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2362 : return "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2363 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2364 : return "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2365 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2366 : return "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2367 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2368 : return "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2369 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2370 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2371 : return "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2372 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2373 : return "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2374 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2375 : return "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2376 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2377 : return "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2378 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2379 : return "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2380 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2381 : return "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2382 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2383 : return "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2384 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2385 : return "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2386 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2387 : return "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2388 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2389 : return "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2390 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m";
-            case 2391 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-96.0617,-82.4278,-121.743,4.80107,0.34543,-1.37646,1.4964 +units=m";
-            case 2392 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-96.0617,-82.4278,-121.743,4.80107,0.34543,-1.37646,1.4964 +units=m";
-            case 2393 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-96.0617,-82.4278,-121.743,4.80107,0.34543,-1.37646,1.4964 +units=m";
-            case 2394 : return "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-96.0617,-82.4278,-121.743,4.80107,0.34543,-1.37646,1.4964 +units=m";
-            case 2395 : return "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m";
-            case 2396 : return "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m";
-            case 2397 : return "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m";
-            case 2398 : return "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m";
-            case 2399 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m";
-            case 2400 : return "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m";
-            case 2401 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m";
-            case 2402 : return "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m";
-            case 2403 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m";
-            case 2404 : return "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m";
-            case 2405 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m";
-            case 2406 : return "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m";
-            case 2407 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m";
-            case 2408 : return "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m";
-            case 2409 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m";
-            case 2410 : return "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m";
-            case 2411 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m";
-            case 2412 : return "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m";
-            case 2413 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m";
-            case 2414 : return "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m";
-            case 2415 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m";
-            case 2416 : return "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m";
-            case 2417 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m";
-            case 2418 : return "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m";
-            case 2419 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m";
-            case 2420 : return "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m";
-            case 2421 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m";
-            case 2422 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2423 : return "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2424 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2425 : return "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2426 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2427 : return "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2428 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2429 : return "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2430 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2431 : return "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2432 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2433 : return "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2434 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2435 : return "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2436 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2437 : return "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2438 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2439 : return "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2440 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2441 : return "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2442 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2443 : return "+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2444 : return "+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2445 : return "+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2446 : return "+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2447 : return "+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2448 : return "+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2449 : return "+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2450 : return "+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2451 : return "+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2452 : return "+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2453 : return "+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2454 : return "+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2455 : return "+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2456 : return "+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2457 : return "+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2458 : return "+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2459 : return "+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2460 : return "+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2461 : return "+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2462 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m";
-            case 2463 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2464 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2465 : return "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2466 : return "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2467 : return "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2468 : return "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2469 : return "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2470 : return "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2471 : return "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2472 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2473 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2474 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2475 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2476 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2477 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2478 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2479 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2480 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2481 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2482 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2483 : return "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2484 : return "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2485 : return "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2486 : return "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2487 : return "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2488 : return "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2489 : return "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2490 : return "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2491 : return "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2492 : return "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2493 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2494 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2495 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2496 : return "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2497 : return "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2498 : return "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2499 : return "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2500 : return "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2501 : return "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2502 : return "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2503 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2504 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2505 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2506 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2507 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2508 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2509 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2510 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2511 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2512 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2513 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2514 : return "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2515 : return "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2516 : return "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2517 : return "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2518 : return "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2519 : return "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2520 : return "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2521 : return "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2522 : return "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2523 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m";
-            case 2524 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m";
-            case 2525 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m";
-            case 2526 : return "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m";
-            case 2527 : return "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m";
-            case 2528 : return "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m";
-            case 2529 : return "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m";
-            case 2530 : return "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m";
-            case 2531 : return "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m";
-            case 2532 : return "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m";
-            case 2533 : return "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m";
-            case 2534 : return "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m";
-            case 2535 : return "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m";
-            case 2536 : return "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m";
-            case 2537 : return "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m";
-            case 2538 : return "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m";
-            case 2539 : return "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m";
-            case 2540 : return "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m";
-            case 2541 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m";
-            case 2542 : return "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m";
-            case 2543 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m";
-            case 2544 : return "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m";
-            case 2545 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m";
-            case 2546 : return "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m";
-            case 2547 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m";
-            case 2548 : return "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m";
-            case 2549 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m";
-            case 2550 : return "+proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m";
-            case 2551 : return "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m";
-            case 2552 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m";
-            case 2553 : return "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m";
-            case 2554 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m";
-            case 2555 : return "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m";
-            case 2556 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m";
-            case 2557 : return "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m";
-            case 2558 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m";
-            case 2559 : return "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m";
-            case 2560 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m";
-            case 2561 : return "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m";
-            case 2562 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m";
-            case 2563 : return "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +units=m";
-            case 2564 : return "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +units=m";
-            case 2565 : return "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +units=m";
-            case 2566 : return "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +units=m";
-            case 2567 : return "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +units=m";
-            case 2568 : return "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +units=m";
-            case 2569 : return "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +units=m";
-            case 2570 : return "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +units=m";
-            case 2571 : return "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +units=m";
-            case 2572 : return "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +units=m";
-            case 2573 : return "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +units=m";
-            case 2574 : return "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +units=m";
-            case 2575 : return "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +units=m";
-            case 2576 : return "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +units=m";
-            case 2577 : return "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +units=m";
-            case 2578 : return "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +units=m";
-            case 2579 : return "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +units=m";
-            case 2580 : return "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +units=m";
-            case 2581 : return "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +units=m";
-            case 2582 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2583 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2584 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2585 : return "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2586 : return "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2587 : return "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2588 : return "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2589 : return "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2590 : return "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2591 : return "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2592 : return "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2593 : return "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2594 : return "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2595 : return "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2596 : return "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2597 : return "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2598 : return "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2599 : return "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2600 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2601 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2602 : return "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2603 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2604 : return "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2605 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2606 : return "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2607 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2608 : return "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2609 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2610 : return "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2611 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2612 : return "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2613 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2614 : return "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2615 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2616 : return "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2617 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2618 : return "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2619 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2620 : return "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2621 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2622 : return "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2623 : return "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2624 : return "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2625 : return "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2626 : return "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2627 : return "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2628 : return "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2629 : return "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2630 : return "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2631 : return "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2632 : return "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2633 : return "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2634 : return "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2635 : return "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2636 : return "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2637 : return "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2638 : return "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2639 : return "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2640 : return "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2641 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m";
-            case 2642 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m";
-            case 2643 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m";
-            case 2644 : return "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m";
-            case 2645 : return "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m";
-            case 2646 : return "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m";
-            case 2647 : return "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m";
-            case 2648 : return "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m";
-            case 2649 : return "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m";
-            case 2650 : return "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m";
-            case 2651 : return "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m";
-            case 2652 : return "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m";
-            case 2653 : return "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m";
-            case 2654 : return "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m";
-            case 2655 : return "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m";
-            case 2656 : return "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m";
-            case 2657 : return "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m";
-            case 2658 : return "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m";
-            case 2659 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m";
-            case 2660 : return "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m";
-            case 2661 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m";
-            case 2662 : return "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m";
-            case 2663 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m";
-            case 2664 : return "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m";
-            case 2665 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m";
-            case 2666 : return "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m";
-            case 2667 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m";
-            case 2668 : return "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m";
-            case 2669 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m";
-            case 2670 : return "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m";
-            case 2671 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m";
-            case 2672 : return "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m";
-            case 2673 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m";
-            case 2674 : return "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m";
-            case 2675 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m";
-            case 2676 : return "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m";
-            case 2677 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m";
-            case 2678 : return "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m";
-            case 2679 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m";
-            case 2680 : return "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +units=m";
-            case 2681 : return "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +units=m";
-            case 2682 : return "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +units=m";
-            case 2683 : return "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +units=m";
-            case 2684 : return "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +units=m";
-            case 2685 : return "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +units=m";
-            case 2686 : return "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +units=m";
-            case 2687 : return "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +units=m";
-            case 2688 : return "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +units=m";
-            case 2689 : return "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +units=m";
-            case 2690 : return "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +units=m";
-            case 2691 : return "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +units=m";
-            case 2692 : return "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +units=m";
-            case 2693 : return "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +units=m";
-            case 2694 : return "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +units=m";
-            case 2695 : return "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +units=m";
-            case 2696 : return "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +units=m";
-            case 2697 : return "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +units=m";
-            case 2698 : return "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +units=m";
-            case 2699 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2700 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2701 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2702 : return "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2703 : return "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2704 : return "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2705 : return "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2706 : return "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2707 : return "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2708 : return "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2709 : return "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2710 : return "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2711 : return "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2712 : return "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2713 : return "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2714 : return "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2715 : return "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2716 : return "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2717 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2718 : return "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2719 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2720 : return "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2721 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2722 : return "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2723 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2724 : return "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2725 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2726 : return "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2727 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2728 : return "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2729 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2730 : return "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2731 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2732 : return "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2733 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2734 : return "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2735 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2736 : return "+proj=utm +zone=36 +south +ellps=clrk66 +units=m";
-            case 2737 : return "+proj=utm +zone=37 +south +ellps=clrk66 +units=m";
-            case 2738 : return "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2739 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2740 : return "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2741 : return "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2742 : return "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2743 : return "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2744 : return "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2745 : return "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2746 : return "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2747 : return "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2748 : return "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2749 : return "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2750 : return "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2751 : return "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2752 : return "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2753 : return "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2754 : return "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2755 : return "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2756 : return "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2757 : return "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2758 : return "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 2759 : return "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2760 : return "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2761 : return "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m";
-            case 2762 : return "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m";
-            case 2763 : return "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m";
-            case 2764 : return "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2765 : return "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m";
-            case 2766 : return "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m";
-            case 2767 : return "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m";
-            case 2768 : return "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m";
-            case 2769 : return "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m";
-            case 2770 : return "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m";
-            case 2771 : return "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m";
-            case 2772 : return "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m";
-            case 2773 : return "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m";
-            case 2774 : return "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m";
-            case 2775 : return "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m";
-            case 2776 : return "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2777 : return "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2778 : return "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2779 : return "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2780 : return "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2781 : return "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2782 : return "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2783 : return "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2784 : return "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2785 : return "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2786 : return "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2787 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2788 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2789 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2790 : return "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2791 : return "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2792 : return "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m";
-            case 2793 : return "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m";
-            case 2794 : return "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m";
-            case 2795 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2796 : return "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2797 : return "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m";
-            case 2798 : return "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2799 : return "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m";
-            case 2800 : return "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2801 : return "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2802 : return "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2803 : return "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2804 : return "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2805 : return "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m";
-            case 2806 : return "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2807 : return "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2808 : return "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2809 : return "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2810 : return "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m";
-            case 2811 : return "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m";
-            case 2812 : return "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m";
-            case 2813 : return "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2814 : return "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2815 : return "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2816 : return "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2817 : return "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2818 : return "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2819 : return "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2820 : return "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m";
-            case 2821 : return "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m";
-            case 2822 : return "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m";
-            case 2823 : return "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2824 : return "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2825 : return "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2826 : return "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2827 : return "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2828 : return "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2829 : return "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2830 : return "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2831 : return "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2832 : return "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2833 : return "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2834 : return "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2835 : return "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2836 : return "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2837 : return "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2838 : return "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2839 : return "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2840 : return "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2841 : return "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2842 : return "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2843 : return "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2844 : return "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m";
-            case 2845 : return "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m";
-            case 2846 : return "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m";
-            case 2847 : return "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m";
-            case 2848 : return "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m";
-            case 2849 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m";
-            case 2850 : return "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m";
-            case 2851 : return "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m";
-            case 2852 : return "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2853 : return "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m";
-            case 2854 : return "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m";
-            case 2855 : return "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2856 : return "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2857 : return "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2858 : return "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2859 : return "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2860 : return "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2861 : return "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2862 : return "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2863 : return "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m";
-            case 2864 : return "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2865 : return "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m";
-            case 2866 : return "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m";
-            case 2867 : return "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +to_meter=0.3048";
-            case 2868 : return "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +to_meter=0.3048";
-            case 2869 : return "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +to_meter=0.3048";
-            case 2870 : return "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2871 : return "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2872 : return "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2873 : return "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2874 : return "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2875 : return "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2876 : return "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2877 : return "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2878 : return "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2879 : return "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2880 : return "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2881 : return "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2882 : return "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2883 : return "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2884 : return "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2885 : return "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2886 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2887 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2888 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2889 : return "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2890 : return "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2891 : return "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2892 : return "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2893 : return "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2894 : return "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2895 : return "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2896 : return "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +to_meter=0.3048";
-            case 2897 : return "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +to_meter=0.3048";
-            case 2898 : return "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +to_meter=0.3048";
-            case 2899 : return "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2900 : return "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2901 : return "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +to_meter=0.3048";
-            case 2902 : return "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2903 : return "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2904 : return "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2905 : return "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2906 : return "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2907 : return "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2908 : return "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2909 : return "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +to_meter=0.3048";
-            case 2910 : return "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +to_meter=0.3048";
-            case 2911 : return "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2912 : return "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2913 : return "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +to_meter=0.3048";
-            case 2914 : return "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +to_meter=0.3048";
-            case 2915 : return "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2916 : return "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2917 : return "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2918 : return "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2919 : return "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2920 : return "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2921 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +to_meter=0.3048";
-            case 2922 : return "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +to_meter=0.3048";
-            case 2923 : return "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +to_meter=0.3048";
-            case 2924 : return "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2925 : return "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2926 : return "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2927 : return "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2928 : return "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2929 : return "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2930 : return "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2931 : return "+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +units=m";
-            case 2932 : return "+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m";
-            case 2933 : return "+proj=utm +zone=50 +south +ellps=bessel +units=m";
-            case 2934 : return "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m";
-            case 2935 : return "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +units=m";
-            case 2936 : return "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m";
-            case 2937 : return "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m";
-            case 2938 : return "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m";
-            case 2939 : return "+proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m";
-            case 2940 : return "+proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m";
-            case 2941 : return "+proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m";
-            case 2942 : return "+proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m";
-            case 2943 : return "+proj=utm +zone=28 +ellps=intl +units=m";
-            case 2944 : return "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m";
-            case 2945 : return "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m";
-            case 2946 : return "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m";
-            case 2947 : return "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m";
-            case 2948 : return "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m";
-            case 2949 : return "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m";
-            case 2950 : return "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m";
-            case 2951 : return "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m";
-            case 2952 : return "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m";
-            case 2953 : return "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +units=m";
-            case 2954 : return "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +units=m";
-            case 2955 : return "+proj=utm +zone=11 +ellps=GRS80 +units=m";
-            case 2956 : return "+proj=utm +zone=12 +ellps=GRS80 +units=m";
-            case 2957 : return "+proj=utm +zone=13 +ellps=GRS80 +units=m";
-            case 2958 : return "+proj=utm +zone=17 +ellps=GRS80 +units=m";
-            case 2959 : return "+proj=utm +zone=18 +ellps=GRS80 +units=m";
-            case 2960 : return "+proj=utm +zone=19 +ellps=GRS80 +units=m";
-            case 2961 : return "+proj=utm +zone=20 +ellps=GRS80 +units=m";
-            case 2962 : return "+proj=utm +zone=21 +ellps=GRS80 +units=m";
-            case 2964 : return "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 2965 : return "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2966 : return "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 2967 : return "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2968 : return "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 2969 : return "+proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m";
-            case 2970 : return "+proj=utm +zone=20 +ellps=intl +units=m";
-            case 2971 : return "+proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m";
-            case 2972 : return "+proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m";
-            case 2973 : return "+proj=utm +zone=20 +ellps=intl +units=m";
-            case 2975 : return "+proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2976 : return "+proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m";
-            case 2977 : return "+proj=utm +zone=5 +south +ellps=intl +units=m";
-            case 2978 : return "+proj=utm +zone=7 +south +ellps=intl +units=m";
-            case 2979 : return "+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m";
-            case 2980 : return "+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m";
-            case 2981 : return "+proj=utm +zone=58 +south +ellps=intl +units=m";
-            case 2982 : return "+proj=utm +zone=58 +south +ellps=intl +units=m";
-            case 2983 : return "+proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m";
-            case 2984 : return "+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2987 : return "+proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m";
-            case 2988 : return "+proj=utm +zone=1 +south +ellps=intl +units=m";
-            case 2989 : return "+proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 2990 : return "+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +units=m";
-            case 2991 : return "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 2992 : return "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048";
-            case 2993 : return "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m";
-            case 2994 : return "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +to_meter=0.3048";
-            case 2995 : return "+proj=utm +zone=58 +south +ellps=intl +units=m";
-            case 2996 : return "+proj=utm +zone=58 +south +ellps=intl +units=m";
-            case 2997 : return "+proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m";
-            case 2998 : return "+proj=utm +zone=58 +south +ellps=intl +units=m";
-            case 2999 : return "+proj=utm +zone=38 +south +ellps=intl +units=m";
-            case 3000 : return "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m";
-            case 3001 : return "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m";
-            case 3002 : return "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +units=m";
-            case 3003 : return "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +units=m";
-            case 3004 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +units=m";
-            case 3005 : return "+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3006 : return "+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3007 : return "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3008 : return "+proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3009 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3010 : return "+proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3011 : return "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3012 : return "+proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3013 : return "+proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3014 : return "+proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3015 : return "+proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3016 : return "+proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3017 : return "+proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3018 : return "+proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3019 : return "+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m";
-            case 3020 : return "+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m";
-            case 3021 : return "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m";
-            case 3022 : return "+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m";
-            case 3023 : return "+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m";
-            case 3024 : return "+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m";
-            case 3025 : return "+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m";
-            case 3026 : return "+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m";
-            case 3027 : return "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m";
-            case 3028 : return "+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m";
-            case 3029 : return "+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m";
-            case 3030 : return "+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m";
-            case 3031 : return "+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3032 : return "+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3033 : return "+proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3034 : return "+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +units=m";
-            case 3035 : return "+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m";
-            case 3036 : return "+proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m";
-            case 3037 : return "+proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m";
-            case 3038 : return "+proj=utm +zone=26 +ellps=GRS80 +units=m";
-            case 3039 : return "+proj=utm +zone=27 +ellps=GRS80 +units=m";
-            case 3040 : return "+proj=utm +zone=28 +ellps=GRS80 +units=m";
-            case 3041 : return "+proj=utm +zone=29 +ellps=GRS80 +units=m";
-            case 3042 : return "+proj=utm +zone=30 +ellps=GRS80 +units=m";
-            case 3043 : return "+proj=utm +zone=31 +ellps=GRS80 +units=m";
-            case 3044 : return "+proj=utm +zone=32 +ellps=GRS80 +units=m";
-            case 3045 : return "+proj=utm +zone=33 +ellps=GRS80 +units=m";
-            case 3046 : return "+proj=utm +zone=34 +ellps=GRS80 +units=m";
-            case 3047 : return "+proj=utm +zone=35 +ellps=GRS80 +units=m";
-            case 3048 : return "+proj=utm +zone=36 +ellps=GRS80 +units=m";
-            case 3049 : return "+proj=utm +zone=37 +ellps=GRS80 +units=m";
-            case 3050 : return "+proj=utm +zone=38 +ellps=GRS80 +units=m";
-            case 3051 : return "+proj=utm +zone=39 +ellps=GRS80 +units=m";
-            case 3054 : return "+proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m";
-            case 3055 : return "+proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m";
-            case 3056 : return "+proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m";
-            case 3057 : return "+proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3058 : return "+proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +units=m";
-            case 3059 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3060 : return "+proj=utm +zone=58 +south +ellps=intl +units=m";
-            case 3061 : return "+proj=utm +zone=28 +ellps=intl +units=m";
-            case 3062 : return "+proj=utm +zone=26 +ellps=intl +units=m";
-            case 3063 : return "+proj=utm +zone=26 +ellps=intl +units=m";
-            case 3064 : return "+proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3065 : return "+proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3066 : return "+proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +units=m";
-            case 3067 : return "+proj=utm +zone=35 +ellps=GRS80 +units=m";
-            case 3068 : return "+proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +datum=potsdam +units=m";
-            case 3069 : return "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 3070 : return "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3071 : return "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +units=m";
-            case 3072 : return "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3073 : return "+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3074 : return "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3075 : return "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3076 : return "+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3077 : return "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3078 : return "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3079 : return "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +units=m";
-            case 3080 : return "+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048";
-            case 3081 : return "+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3082 : return "+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3083 : return "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3084 : return "+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +units=m";
-            case 3085 : return "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +units=m";
-            case 3086 : return "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3087 : return "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3088 : return "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3089 : return "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3090 : return "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m";
-            case 3091 : return "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3092 : return "+proj=utm +zone=51 +ellps=bessel +units=m";
-            case 3093 : return "+proj=utm +zone=52 +ellps=bessel +units=m";
-            case 3094 : return "+proj=utm +zone=53 +ellps=bessel +units=m";
-            case 3095 : return "+proj=utm +zone=54 +ellps=bessel +units=m";
-            case 3096 : return "+proj=utm +zone=55 +ellps=bessel +units=m";
-            case 3097 : return "+proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3098 : return "+proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3099 : return "+proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3100 : return "+proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3101 : return "+proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3102 : return "+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=95169.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3103 : return "+proj=utm +zone=28 +ellps=clrk80 +units=m";
-            case 3104 : return "+proj=utm +zone=29 +ellps=clrk80 +units=m";
-            case 3105 : return "+proj=utm +zone=30 +ellps=clrk80 +units=m";
-            case 3106 : return "+proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m";
-            case 3107 : return "+proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3108 : return "+proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +units=m";
-            case 3109 : return "+proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +units=m";
-            case 3110 : return "+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +units=m";
-            case 3111 : return "+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3112 : return "+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3113 : return "+proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3114 : return "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3115 : return "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3116 : return "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3117 : return "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3118 : return "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3119 : return "+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m";
-            case 3120 : return "+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-            case 3121 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m";
-            case 3122 : return "+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m";
-            case 3123 : return "+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m";
-            case 3124 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m";
-            case 3125 : return "+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m";
-            case 3126 : return "+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3127 : return "+proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3128 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3129 : return "+proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3130 : return "+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3131 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3132 : return "+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3133 : return "+proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3134 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3135 : return "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3136 : return "+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3137 : return "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3138 : return "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3140 : return "+proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +to_meter=0.201168";
-            case 3141 : return "+proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m";
-            case 3142 : return "+proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m";
-            case 3143 : return "+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m";
-            case 3146 : return "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m";
-            case 3147 : return "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 3148 : return "+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m";
-            case 3149 : return "+proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +units=m";
-            case 3150 : return "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m";
-            case 3151 : return "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 3152 : return "+proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3153 : return "+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3154 : return "+proj=utm +zone=7 +ellps=GRS80 +units=m";
-            case 3155 : return "+proj=utm +zone=8 +ellps=GRS80 +units=m";
-            case 3156 : return "+proj=utm +zone=9 +ellps=GRS80 +units=m";
-            case 3157 : return "+proj=utm +zone=10 +ellps=GRS80 +units=m";
-            case 3158 : return "+proj=utm +zone=14 +ellps=GRS80 +units=m";
-            case 3159 : return "+proj=utm +zone=15 +ellps=GRS80 +units=m";
-            case 3160 : return "+proj=utm +zone=16 +ellps=GRS80 +units=m";
-            case 3161 : return "+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3162 : return "+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +units=m";
-            case 3163 : return "+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3164 : return "+proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m";
-            case 3165 : return "+proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +units=m";
-            case 3166 : return "+proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +units=m";
-            case 3167 : return "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756";
-            case 3168 : return "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +a=6377295.664 +b=6356094.667915204 +units=m";
-            case 3169 : return "+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3170 : return "+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3171 : return "+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3172 : return "+proj=utm +zone=59 +south +ellps=intl +units=m";
-            case 3174 : return "+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3175 : return "+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3176 : return "+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m";
-            case 3177 : return "+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m";
-            case 3178 : return "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3179 : return "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3180 : return "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3181 : return "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3182 : return "+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3183 : return "+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3184 : return "+proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3185 : return "+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3186 : return "+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3187 : return "+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3188 : return "+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3189 : return "+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3190 : return "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m";
-            case 3191 : return "+proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m";
-            case 3192 : return "+proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m";
-            case 3193 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m";
-            case 3194 : return "+proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m";
-            case 3195 : return "+proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m";
-            case 3196 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m";
-            case 3197 : return "+proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m";
-            case 3198 : return "+proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m";
-            case 3199 : return "+proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m";
-            case 3200 : return "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m";
-            case 3201 : return "+proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m";
-            case 3202 : return "+proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m";
-            case 3203 : return "+proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m";
-            case 3204 : return "+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3205 : return "+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3206 : return "+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3207 : return "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3208 : return "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3209 : return "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3210 : return "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3211 : return "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3212 : return "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3213 : return "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3214 : return "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3215 : return "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3216 : return "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3217 : return "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3218 : return "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3219 : return "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3220 : return "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3221 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3222 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3223 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3224 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3225 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3226 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3227 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3228 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3229 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3230 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3231 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3232 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3233 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3234 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3235 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3236 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3237 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3238 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3239 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3240 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3241 : return "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3242 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3243 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3244 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3245 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3246 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3247 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3248 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3249 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3250 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3251 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3252 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3253 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3254 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3255 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3256 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3257 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3258 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3259 : return "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3260 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3261 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3262 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3263 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3264 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3265 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3266 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3267 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3268 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3269 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3270 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3271 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3272 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3273 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3274 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3275 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3276 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3277 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3278 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3279 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3280 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3281 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3282 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3283 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3284 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3285 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3286 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3287 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3288 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3289 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3290 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3291 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3292 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3293 : return "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3294 : return "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3296 : return "+proj=utm +zone=5 +south +ellps=GRS80 +units=m";
-            case 3297 : return "+proj=utm +zone=6 +south +ellps=GRS80 +units=m";
-            case 3298 : return "+proj=utm +zone=7 +south +ellps=GRS80 +units=m";
-            case 3299 : return "+proj=utm +zone=8 +south +ellps=GRS80 +units=m";
-            case 3300 : return "+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m";
-            case 3301 : return "+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3302 : return "+proj=utm +zone=7 +south +ellps=intl +units=m";
-            case 3303 : return "+proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m";
-            case 3304 : return "+proj=utm +zone=6 +south +ellps=intl +units=m";
-            case 3305 : return "+proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m";
-            case 3306 : return "+proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m";
-            case 3307 : return "+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m";
-            case 3308 : return "+proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3309 : return "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 3310 : return "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3311 : return "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +units=m";
-            case 3312 : return "+proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m";
-            case 3313 : return "+proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m";
-            case 3314 : return "+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x_0=0 +y_0=0 +ellps=clrk66 +units=m";
-            case 3315 : return "+proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 +ellps=clrk66 +units=m";
-            case 3316 : return "+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m";
-            case 3317 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m";
-            case 3318 : return "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m";
-            case 3319 : return "+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m";
-            case 3320 : return "+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m";
-            case 3321 : return "+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m";
-            case 3322 : return "+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m";
-            case 3323 : return "+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m";
-            case 3324 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m";
-            case 3325 : return "+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m";
-            case 3326 : return "+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m";
-            case 3327 : return "+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m";
-            case 3328 : return "+proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-            case 3329 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-            case 3330 : return "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-            case 3331 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-            case 3332 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-            case 3333 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-            case 3334 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-            case 3335 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-            case 3336 : return "+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m";
-            case 3337 : return "+proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.19506944444445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +units=m";
-            case 3338 : return "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3339 : return "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m";
-            case 3340 : return "+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m";
-            case 3341 : return "+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m";
-            case 3342 : return "+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m";
-            case 3343 : return "+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3344 : return "+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3345 : return "+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3346 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3347 : return "+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3348 : return "+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +units=m";
-            case 3349 : return "+proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3350 : return "+proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +units=m";
-            case 3351 : return "+proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +units=m";
-            case 3352 : return "+proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +units=m";
-            case 3353 : return "+proj=utm +zone=32 +south +ellps=intl +units=m";
-            case 3354 : return "+proj=utm +zone=32 +south +ellps=intl +units=m";
-            case 3355 : return "+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +units=m";
-            case 3356 : return "+proj=utm +zone=17 +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +units=m";
-            case 3357 : return "+proj=utm +zone=17 +ellps=clrk66 +units=m";
-            case 3358 : return "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +units=m";
-            case 3359 : return "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +to_meter=0.3048";
-            case 3360 : return "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +units=m";
-            case 3361 : return "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +to_meter=0.3048";
-            case 3362 : return "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3363 : return "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3364 : return "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3365 : return "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3366 : return "+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m";
-            case 3367 : return "+proj=utm +zone=28 +ellps=clrk80 +units=m";
-            case 3368 : return "+proj=utm +zone=29 +ellps=clrk80 +units=m";
-            case 3369 : return "+proj=utm +zone=30 +ellps=clrk80 +units=m";
-            case 3370 : return "+proj=utm +zone=59 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 3371 : return "+proj=utm +zone=60 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 3372 : return "+proj=utm +zone=59 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3373 : return "+proj=utm +zone=60 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3374 : return "+proj=utm +zone=29 +ellps=intl +units=m";
-            case 3375 : return "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +ellps=GRS80 +units=m";
-            case 3376 : return "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +ellps=GRS80 +units=m";
-            case 3377 : return "+proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m";
-            case 3378 : return "+proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m";
-            case 3379 : return "+proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m";
-            case 3380 : return "+proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m";
-            case 3381 : return "+proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m";
-            case 3382 : return "+proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m";
-            case 3383 : return "+proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m";
-            case 3384 : return "+proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m";
-            case 3385 : return "+proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m";
-            case 3386 : return "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-96.0617,-82.4278,-121.743,4.80107,0.34543,-1.37646,1.4964 +units=m";
-            case 3387 : return "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-96.0617,-82.4278,-121.743,4.80107,0.34543,-1.37646,1.4964 +units=m";
-            case 3388 : return "+proj=merc +lon_0=51 +k=1 +x_0=0 +y_0=0 +ellps=krass +units=m";
-            case 3389 : return "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +units=m";
-            case 3390 : return "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +units=m";
-            case 3391 : return "+proj=utm +zone=37 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m";
-            case 3392 : return "+proj=utm +zone=38 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m";
-            case 3393 : return "+proj=utm +zone=39 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m";
-            case 3394 : return "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m";
-            case 3395 : return "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3396 : return "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m";
-            case 3397 : return "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m";
-            case 3398 : return "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m";
-            case 3399 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m";
-            case 3400 : return "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3401 : return "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3402 : return "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3403 : return "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +units=m";
-            case 3404 : return "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3405 : return "+proj=utm +zone=48 +ellps=WGS84 +units=m";
-            case 3406 : return "+proj=utm +zone=49 +ellps=WGS84 +units=m";
-            case 3407 : return "+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654";
-            case 3408 : return "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m";
-            case 3409 : return "+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m";
-            case 3411 : return "+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m";
-            case 3412 : return "+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m";
-            case 3413 : return "+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3414 : return "+proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m";
-            case 3415 : return "+proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 3416 : return "+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m";
-            case 3417 : return "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3418 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3419 : return "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3420 : return "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3421 : return "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3422 : return "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3423 : return "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3424 : return "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3425 : return "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3426 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3427 : return "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3428 : return "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3429 : return "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3430 : return "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3431 : return "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3432 : return "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3433 : return "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3434 : return "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3435 : return "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3436 : return "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3437 : return "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3438 : return "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3439 : return "+proj=utm +zone=39 +ellps=clrk80 +units=m";
-            case 3440 : return "+proj=utm +zone=40 +ellps=clrk80 +units=m";
-            case 3441 : return "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3442 : return "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3443 : return "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3444 : return "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3445 : return "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3446 : return "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3447 : return "+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +units=m";
-            case 3448 : return "+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3449 : return "+proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3450 : return "+proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3451 : return "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3452 : return "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3453 : return "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3454 : return "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3455 : return "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3456 : return "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3457 : return "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3458 : return "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3459 : return "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3460 : return "+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m";
-            case 3461 : return "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m";
-            case 3462 : return "+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m";
-            case 3463 : return "+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3464 : return "+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 3465 : return "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3466 : return "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3467 : return "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3468 : return "+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3469 : return "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3470 : return "+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3471 : return "+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3472 : return "+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3473 : return "+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3474 : return "+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3475 : return "+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3476 : return "+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3477 : return "+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3478 : return "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3479 : return "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3480 : return "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3481 : return "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3482 : return "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3483 : return "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3484 : return "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3485 : return "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3486 : return "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3487 : return "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3488 : return "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3489 : return "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3490 : return "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3491 : return "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3492 : return "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3493 : return "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3494 : return "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3495 : return "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3496 : return "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3497 : return "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3498 : return "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3499 : return "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3500 : return "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3501 : return "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3502 : return "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3503 : return "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3504 : return "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3505 : return "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3506 : return "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3507 : return "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3508 : return "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3509 : return "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3510 : return "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3511 : return "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3512 : return "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3513 : return "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3514 : return "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3515 : return "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3516 : return "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3517 : return "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3518 : return "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3519 : return "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3520 : return "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3521 : return "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3522 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3523 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3524 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3525 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3526 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3527 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3528 : return "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3529 : return "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3530 : return "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3531 : return "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3532 : return "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3533 : return "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3534 : return "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3535 : return "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3536 : return "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3537 : return "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3538 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3539 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3540 : return "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3541 : return "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3542 : return "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3543 : return "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3544 : return "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3545 : return "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3546 : return "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3547 : return "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3548 : return "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3549 : return "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3550 : return "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3551 : return "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3552 : return "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3553 : return "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3554 : return "+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3555 : return "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3556 : return "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3557 : return "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3558 : return "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3559 : return "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3560 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3561 : return "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192";
-            case 3562 : return "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192";
-            case 3563 : return "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192";
-            case 3564 : return "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192";
-            case 3565 : return "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192";
-            case 3566 : return "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3567 : return "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3568 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3569 : return "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3570 : return "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3571 : return "+proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3572 : return "+proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3573 : return "+proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3574 : return "+proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3575 : return "+proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3576 : return "+proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3577 : return "+proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3578 : return "+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3579 : return "+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m";
-            case 3580 : return "+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 3581 : return "+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +units=m";
-            case 3582 : return "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3583 : return "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3584 : return "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3585 : return "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3586 : return "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3587 : return "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3588 : return "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3589 : return "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3590 : return "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3591 : return "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3592 : return "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3593 : return "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3594 : return "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3595 : return "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3596 : return "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3597 : return "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3598 : return "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3599 : return "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3600 : return "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3601 : return "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3602 : return "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3603 : return "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3604 : return "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3605 : return "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3606 : return "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3607 : return "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3608 : return "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3609 : return "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3610 : return "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3611 : return "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3612 : return "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3613 : return "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3614 : return "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3615 : return "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3616 : return "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3617 : return "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3618 : return "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3619 : return "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3620 : return "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3621 : return "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3622 : return "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3623 : return "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3624 : return "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3625 : return "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3626 : return "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3627 : return "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3628 : return "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3629 : return "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3630 : return "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3631 : return "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3632 : return "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3633 : return "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3634 : return "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3635 : return "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3636 : return "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3637 : return "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3638 : return "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3639 : return "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3640 : return "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3641 : return "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3642 : return "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3643 : return "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3644 : return "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3645 : return "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3646 : return "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3647 : return "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3648 : return "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3649 : return "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3650 : return "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3651 : return "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3652 : return "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3653 : return "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3654 : return "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3655 : return "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3656 : return "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3657 : return "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3658 : return "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3659 : return "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3660 : return "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3661 : return "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3662 : return "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3663 : return "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3664 : return "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3665 : return "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3666 : return "+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3667 : return "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3668 : return "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3669 : return "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3670 : return "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3671 : return "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3672 : return "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3673 : return "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3674 : return "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3675 : return "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3676 : return "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3677 : return "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3678 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3679 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3680 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3681 : return "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3682 : return "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048";
-            case 3683 : return "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3684 : return "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3685 : return "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3686 : return "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3687 : return "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3688 : return "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3689 : return "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3690 : return "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3691 : return "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3692 : return "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3693 : return "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3694 : return "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3695 : return "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3696 : return "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3697 : return "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3698 : return "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3699 : return "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3700 : return "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3701 : return "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3702 : return "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3703 : return "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3704 : return "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3705 : return "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3706 : return "+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3707 : return "+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3708 : return "+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3709 : return "+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3710 : return "+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3711 : return "+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3712 : return "+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3713 : return "+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3714 : return "+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3715 : return "+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3716 : return "+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3717 : return "+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3718 : return "+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3719 : return "+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3720 : return "+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3721 : return "+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3722 : return "+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3723 : return "+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3724 : return "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3725 : return "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3726 : return "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 3727 : return "+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +units=m";
-            case 3728 : return "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3729 : return "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3730 : return "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3731 : return "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3732 : return "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3733 : return "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3734 : return "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3735 : return "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3736 : return "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3737 : return "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3738 : return "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3739 : return "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3740 : return "+proj=utm +zone=10 +ellps=GRS80 +units=m";
-            case 3741 : return "+proj=utm +zone=11 +ellps=GRS80 +units=m";
-            case 3742 : return "+proj=utm +zone=12 +ellps=GRS80 +units=m";
-            case 3743 : return "+proj=utm +zone=13 +ellps=GRS80 +units=m";
-            case 3744 : return "+proj=utm +zone=14 +ellps=GRS80 +units=m";
-            case 3745 : return "+proj=utm +zone=15 +ellps=GRS80 +units=m";
-            case 3746 : return "+proj=utm +zone=16 +ellps=GRS80 +units=m";
-            case 3747 : return "+proj=utm +zone=17 +ellps=GRS80 +units=m";
-            case 3748 : return "+proj=utm +zone=18 +ellps=GRS80 +units=m";
-            case 3749 : return "+proj=utm +zone=19 +ellps=GRS80 +units=m";
-            case 3750 : return "+proj=utm +zone=4 +ellps=GRS80 +units=m";
-            case 3751 : return "+proj=utm +zone=5 +ellps=GRS80 +units=m";
-            case 3752 : return "+proj=merc +lon_0=100 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3753 : return "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3754 : return "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3755 : return "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3756 : return "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3757 : return "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3758 : return "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3759 : return "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 3760 : return "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192";
-            case 3761 : return "+proj=utm +zone=22 +ellps=GRS80 +units=m";
-            case 3762 : return "+proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 3920 : return "+proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m";
-            case 3991 : return "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +to_meter=0.3048006096012192";
-            case 3992 : return "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +to_meter=0.3048006096012192";
-            case 4001 : return "+proj=longlat +ellps=airy";
-            case 4002 : return "+proj=longlat +a=6377340.189 +b=6356034.447938534";
-            case 4003 : return "+proj=longlat +ellps=aust_SA";
-            case 4004 : return "+proj=longlat +ellps=bessel";
-            case 4005 : return "+proj=longlat +a=6377492.018 +b=6356173.508712696";
-            case 4006 : return "+proj=longlat +ellps=bess_nam";
-            case 4007 : return "+proj=longlat +a=6378293.645208759 +b=6356617.987679838";
-            case 4008 : return "+proj=longlat +ellps=clrk66";
-            case 4009 : return "+proj=longlat +a=6378450.047548896 +b=6356826.621488444";
-            case 4010 : return "+proj=longlat +a=6378300.789 +b=6356566.435";
-            case 4011 : return "+proj=longlat +a=6378249.2 +b=6356515";
-            case 4012 : return "+proj=longlat +ellps=clrk80";
-            case 4013 : return "+proj=longlat +a=6378249.145 +b=6356514.966398753";
-            case 4014 : return "+proj=longlat +a=6378249.2 +b=6356514.996941779";
-            case 4015 : return "+proj=longlat +a=6377276.345 +b=6356075.41314024";
-            case 4016 : return "+proj=longlat +ellps=evrstSS";
-            case 4018 : return "+proj=longlat +a=6377304.063 +b=6356103.038993155";
-            case 4019 : return "+proj=longlat +ellps=GRS80";
-            case 4020 : return "+proj=longlat +ellps=helmert";
-            case 4021 : return "+proj=longlat +a=6378160 +b=6356774.50408554";
-            case 4022 : return "+proj=longlat +ellps=intl";
-            case 4024 : return "+proj=longlat +ellps=krass";
-            case 4025 : return "+proj=longlat +ellps=WGS66";
-            case 4027 : return "+proj=longlat +a=6376523 +b=6355862.933255573";
-            case 4028 : return "+proj=longlat +a=6378298.3 +b=6356657.142669561";
-            case 4029 : return "+proj=longlat +a=6378300 +b=6356751.689189189";
-            case 4030 : return "+proj=longlat +ellps=WGS84";
-            case 4031 : return "+proj=longlat +ellps=WGS84";
-            case 4032 : return "+proj=longlat +a=6378136.2 +b=6356751.516927429";
-            case 4033 : return "+proj=longlat +a=6378136.3 +b=6356751.616592146";
-            case 4034 : return "+proj=longlat +ellps=clrk80";
-            case 4035 : return "+proj=longlat +a=6371000 +b=6371000";
-            case 4036 : return "+proj=longlat +ellps=GRS67";
-            case 4041 : return "+proj=longlat +a=6378135 +b=6356750.304921594";
-            case 4042 : return "+proj=longlat +a=6377299.36559538 +b=6356098.357204818";
-            case 4043 : return "+proj=longlat +ellps=WGS72";
-            case 4044 : return "+proj=longlat +a=6377301.243 +b=6356100.230165384";
-            case 4045 : return "+proj=longlat +a=6377299.151 +b=6356098.145120132";
-            case 4047 : return "+proj=longlat +a=6371007 +b=6371007";
-            case 4052 : return "+proj=longlat +a=6370997 +b=6370997";
-            case 4053 : return "+proj=longlat +a=6371228 +b=6371228";
-            case 4054 : return "+proj=longlat +a=6378273 +b=6356889.449";
-            case 4120 : return "+proj=longlat +ellps=bessel";
-            case 4121 : return "+proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0";
-            case 4122 : return "+proj=longlat +a=6378135 +b=6356750.304921594";
-            case 4123 : return "+proj=longlat +ellps=intl +towgs84=-96.0617,-82.4278,-121.743,4.80107,0.34543,-1.37646,1.4964";
-            case 4124 : return "+proj=longlat +ellps=bessel";
-            case 4125 : return "+proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0";
-            case 4126 : return "+proj=longlat +ellps=GRS80";
-            case 4127 : return "+proj=longlat +ellps=clrk66";
-            case 4128 : return "+proj=longlat +ellps=clrk66";
-            case 4129 : return "+proj=longlat +ellps=clrk66";
-            case 4130 : return "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0";
-            case 4131 : return "+proj=longlat +a=6377276.345 +b=6356075.41314024";
-            case 4132 : return "+proj=longlat +ellps=clrk80";
-            case 4133 : return "+proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014";
-            case 4134 : return "+proj=longlat +ellps=clrk80";
-            case 4135 : return "+proj=longlat +ellps=clrk66";
-            case 4136 : return "+proj=longlat +ellps=clrk66";
-            case 4137 : return "+proj=longlat +ellps=clrk66";
-            case 4138 : return "+proj=longlat +ellps=clrk66";
-            case 4139 : return "+proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0";
-            case 4140 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4141 : return "+proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0";
-            case 4142 : return "+proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0";
-            case 4143 : return "+proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0";
-            case 4144 : return "+proj=longlat +a=6377276.345 +b=6356075.41314024";
-            case 4145 : return "+proj=longlat +a=6377301.243 +b=6356100.230165384";
-            case 4146 : return "+proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0";
-            case 4147 : return "+proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0";
-            case 4148 : return "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0";
-            case 4149 : return "+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0";
-            case 4150 : return "+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0";
-            case 4151 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4152 : return "+proj=longlat +ellps=GRS80";
-            case 4153 : return "+proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0";
-            case 4154 : return "+proj=longlat +ellps=intl";
-            case 4155 : return "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0";
-            case 4156 : return "+proj=longlat +ellps=bessel";
-            case 4157 : return "+proj=longlat +a=6378293.645208759 +b=6356617.987679838";
-            case 4158 : return "+proj=longlat +ellps=intl";
-            case 4159 : return "+proj=longlat +ellps=intl";
-            case 4160 : return "+proj=longlat +ellps=intl";
-            case 4161 : return "+proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0";
-            case 4162 : return "+proj=longlat +ellps=bessel";
-            case 4163 : return "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0";
-            case 4164 : return "+proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0";
-            case 4165 : return "+proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0";
-            case 4166 : return "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0";
-            case 4167 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4168 : return "+proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0";
-            case 4169 : return "+proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0";
-            case 4170 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4171 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4172 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4173 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4174 : return "+proj=longlat +a=6378300 +b=6356751.689189189";
-            case 4175 : return "+proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0";
-            case 4176 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4178 : return "+proj=longlat +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1";
-            case 4179 : return "+proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84";
-            case 4180 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4181 : return "+proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43";
-            case 4182 : return "+proj=longlat +ellps=intl";
-            case 4183 : return "+proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0";
-            case 4184 : return "+proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0";
-            case 4185 : return "+proj=longlat +ellps=intl";
-            case 4188 : return "+proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15";
-            case 4189 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4190 : return "+proj=longlat +ellps=GRS80";
-            case 4191 : return "+proj=longlat +ellps=krass";
-            case 4192 : return "+proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0";
-            case 4193 : return "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0";
-            case 4194 : return "+proj=longlat +ellps=intl";
-            case 4195 : return "+proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6";
-            case 4196 : return "+proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6";
-            case 4197 : return "+proj=longlat +ellps=clrk80";
-            case 4198 : return "+proj=longlat +ellps=clrk80";
-            case 4199 : return "+proj=longlat +ellps=intl";
-            case 4200 : return "+proj=longlat +ellps=krass";
-            case 4201 : return "+proj=longlat +ellps=clrk80";
-            case 4202 : return "+proj=longlat +ellps=aust_SA";
-            case 4203 : return "+proj=longlat +ellps=aust_SA";
-            case 4204 : return "+proj=longlat +ellps=intl";
-            case 4205 : return "+proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0";
-            case 4206 : return "+proj=longlat +a=6378249.2 +b=6356515";
-            case 4207 : return "+proj=longlat +ellps=intl";
-            case 4208 : return "+proj=longlat +ellps=intl";
-            case 4209 : return "+proj=longlat +a=6378249.145 +b=6356514.966398753";
-            case 4210 : return "+proj=longlat +ellps=clrk80";
-            case 4211 : return "+proj=longlat +ellps=bessel";
-            case 4212 : return "+proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0";
-            case 4213 : return "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0";
-            case 4214 : return "+proj=longlat +ellps=krass";
-            case 4215 : return "+proj=longlat +ellps=intl";
-            case 4216 : return "+proj=longlat +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0";
-            case 4218 : return "+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0";
-            case 4219 : return "+proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0";
-            case 4220 : return "+proj=longlat +ellps=clrk80";
-            case 4221 : return "+proj=longlat +ellps=intl";
-            case 4222 : return "+proj=longlat +a=6378249.145 +b=6356514.966398753";
-            case 4223 : return "+proj=longlat +a=6378249.2 +b=6356515";
-            case 4224 : return "+proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0";
-            case 4225 : return "+proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0";
-            case 4226 : return "+proj=longlat +a=6378249.2 +b=6356515";
-            case 4227 : return "+proj=longlat +a=6378249.2 +b=6356515";
-            case 4228 : return "+proj=longlat +a=6378249.2 +b=6356515";
-            case 4229 : return "+proj=longlat +ellps=helmert";
-            case 4230 : return "+proj=longlat +ellps=intl";
-            case 4231 : return "+proj=longlat +ellps=intl";
-            case 4232 : return "+proj=longlat +ellps=clrk80";
-            case 4233 : return "+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0";
-            case 4234 : return "+proj=longlat +a=6378249.2 +b=6356515";
-            case 4235 : return "+proj=longlat +ellps=intl";
-            case 4236 : return "+proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0";
-            case 4237 : return "+proj=longlat +ellps=GRS67";
-            case 4238 : return "+proj=longlat +a=6378160 +b=6356774.50408554";
-            case 4239 : return "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0";
-            case 4240 : return "+proj=longlat +a=6377276.345 +b=6356075.41314024";
-            case 4241 : return "+proj=longlat +ellps=clrk80";
-            case 4242 : return "+proj=longlat +ellps=clrk66";
-            case 4243 : return "+proj=longlat +a=6377299.36559538 +b=6356098.357204818";
-            case 4244 : return "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0";
-            case 4245 : return "+proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0";
-            case 4246 : return "+proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0";
-            case 4247 : return "+proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0";
-            case 4248 : return "+proj=longlat +ellps=intl";
-            case 4249 : return "+proj=longlat +ellps=intl";
-            case 4250 : return "+proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0";
-            case 4251 : return "+proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0";
-            case 4252 : return "+proj=longlat +a=6378249.2 +b=6356515";
-            case 4253 : return "+proj=longlat +ellps=clrk66";
-            case 4254 : return "+proj=longlat +ellps=intl";
-            case 4255 : return "+proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0";
-            case 4256 : return "+proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0";
-            case 4257 : return "+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0";
-            case 4258 : return "+proj=longlat +ellps=GRS80";
-            case 4259 : return "+proj=longlat +ellps=intl";
-            case 4260 : return "+proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0";
-            case 4261 : return "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0";
-            case 4262 : return "+proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0";
-            case 4263 : return "+proj=longlat +ellps=clrk80";
-            case 4264 : return "+proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0";
-            case 4265 : return "+proj=longlat +ellps=intl";
-            case 4266 : return "+proj=longlat +a=6378249.2 +b=6356515";
-            case 4267 : return "+proj=longlat +ellps=clrk66 +datum=NAD27";
-            case 4268 : return "+proj=longlat +a=6378450.047548896 +b=6356826.621488444";
-            case 4269 : return "+proj=longlat +ellps=GRS80 +datum=NAD83";
-            case 4270 : return "+proj=longlat +ellps=clrk80";
-            case 4271 : return "+proj=longlat +ellps=intl";
-            case 4272 : return "+proj=longlat +ellps=intl +datum=nzgd49";
-            case 4273 : return "+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21";
-            case 4274 : return "+proj=longlat +ellps=intl";
-            case 4275 : return "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0";
-            case 4276 : return "+proj=longlat +ellps=WGS66";
-            case 4277 : return "+proj=longlat +ellps=airy +datum=OSGB36";
-            case 4278 : return "+proj=longlat +ellps=airy";
-            case 4279 : return "+proj=longlat +ellps=airy";
-            case 4280 : return "+proj=longlat +ellps=bessel";
-            case 4281 : return "+proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1";
-            case 4282 : return "+proj=longlat +a=6378249.2 +b=6356515";
-            case 4283 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4284 : return "+proj=longlat +ellps=krass";
-            case 4285 : return "+proj=longlat +ellps=intl";
-            case 4286 : return "+proj=longlat +ellps=helmert";
-            case 4287 : return "+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0";
-            case 4288 : return "+proj=longlat +ellps=intl";
-            case 4289 : return "+proj=longlat +ellps=bessel";
-            case 4291 : return "+proj=longlat +ellps=GRS67";
-            case 4292 : return "+proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0";
-            case 4293 : return "+proj=longlat +ellps=bess_nam";
-            case 4294 : return "+proj=longlat +ellps=bessel";
-            case 4295 : return "+proj=longlat +ellps=bessel";
-            case 4296 : return "+proj=longlat +a=6378249.2 +b=6356515";
-            case 4297 : return "+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0";
-            case 4298 : return "+proj=longlat +ellps=evrstSS";
-            case 4299 : return "+proj=longlat +a=6377340.189 +b=6356034.447938534";
-            case 4300 : return "+proj=longlat +a=6377340.189 +b=6356034.447938534";
-            case 4301 : return "+proj=longlat +ellps=bessel";
-            case 4302 : return "+proj=longlat +a=6378293.645208759 +b=6356617.987679838";
-            case 4303 : return "+proj=longlat +ellps=helmert";
-            case 4304 : return "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0";
-            case 4306 : return "+proj=longlat +ellps=bessel";
-            case 4307 : return "+proj=longlat +ellps=clrk80";
-            case 4308 : return "+proj=longlat +ellps=bessel";
-            case 4309 : return "+proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0";
-            case 4310 : return "+proj=longlat +a=6378249.2 +b=6356515";
-            case 4311 : return "+proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0";
-            case 4312 : return "+proj=longlat +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232";
-            case 4313 : return "+proj=longlat +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1";
-            case 4314 : return "+proj=longlat +ellps=bessel +datum=potsdam";
-            case 4315 : return "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0";
-            case 4316 : return "+proj=longlat +ellps=intl";
-            case 4317 : return "+proj=longlat +ellps=krass";
-            case 4318 : return "+proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0";
-            case 4319 : return "+proj=longlat +ellps=GRS80";
-            case 4322 : return "+proj=longlat +ellps=WGS72";
-            case 4324 : return "+proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38";
-            case 4326 : return "+proj=longlat +ellps=WGS84 +datum=WGS84";
-            case 4600 : return "+proj=longlat +ellps=clrk80";
-            case 4601 : return "+proj=longlat +ellps=clrk80";
-            case 4602 : return "+proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0";
-            case 4603 : return "+proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0";
-            case 4604 : return "+proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0";
-            case 4605 : return "+proj=longlat +ellps=clrk80";
-            case 4606 : return "+proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0";
-            case 4607 : return "+proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0";
-            case 4608 : return "+proj=longlat +ellps=clrk66";
-            case 4609 : return "+proj=longlat +ellps=clrk66";
-            case 4610 : return "+proj=longlat +a=6378140 +b=6356755.288157528";
-            case 4611 : return "+proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425";
-            case 4612 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4613 : return "+proj=longlat +ellps=bessel";
-            case 4614 : return "+proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706";
-            case 4615 : return "+proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0";
-            case 4616 : return "+proj=longlat +ellps=intl";
-            case 4617 : return "+proj=longlat +ellps=GRS80";
-            case 4618 : return "+proj=longlat +ellps=aust_SA";
-            case 4619 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4620 : return "+proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0";
-            case 4621 : return "+proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0";
-            case 4622 : return "+proj=longlat +ellps=intl";
-            case 4623 : return "+proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0";
-            case 4624 : return "+proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0";
-            case 4625 : return "+proj=longlat +ellps=intl";
-            case 4626 : return "+proj=longlat +ellps=intl";
-            case 4627 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4628 : return "+proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0";
-            case 4629 : return "+proj=longlat +ellps=intl";
-            case 4630 : return "+proj=longlat +ellps=intl";
-            case 4631 : return "+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0";
-            case 4632 : return "+proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0";
-            case 4633 : return "+proj=longlat +ellps=intl";
-            case 4634 : return "+proj=longlat +ellps=intl";
-            case 4635 : return "+proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798";
-            case 4636 : return "+proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0";
-            case 4637 : return "+proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0";
-            case 4638 : return "+proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0";
-            case 4639 : return "+proj=longlat +ellps=intl";
-            case 4640 : return "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0";
-            case 4641 : return "+proj=longlat +ellps=intl";
-            case 4642 : return "+proj=longlat +ellps=intl";
-            case 4643 : return "+proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7";
-            case 4644 : return "+proj=longlat +ellps=intl";
-            case 4645 : return "+proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0";
-            case 4646 : return "+proj=longlat +ellps=intl";
-            case 4657 : return "+proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0";
-            case 4658 : return "+proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0";
-            case 4659 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4660 : return "+proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805";
-            case 4661 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4662 : return "+proj=longlat +ellps=intl";
-            case 4663 : return "+proj=longlat +ellps=intl";
-            case 4664 : return "+proj=longlat +ellps=intl";
-            case 4665 : return "+proj=longlat +ellps=intl";
-            case 4666 : return "+proj=longlat +ellps=bessel";
-            case 4667 : return "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0";
-            case 4668 : return "+proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0";
-            case 4669 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4670 : return "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0";
-            case 4671 : return "+proj=longlat +a=6378249.2 +b=6356515";
-            case 4672 : return "+proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0";
-            case 4673 : return "+proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263";
-            case 4674 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4675 : return "+proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0";
-            case 4676 : return "+proj=longlat +ellps=krass";
-            case 4677 : return "+proj=longlat +ellps=krass";
-            case 4678 : return "+proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0";
-            case 4679 : return "+proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0";
-            case 4680 : return "+proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0";
-            case 4681 : return "+proj=longlat +ellps=clrk80";
-            case 4682 : return "+proj=longlat +a=6377276.345 +b=6356075.41314024";
-            case 4683 : return "+proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06";
-            case 4684 : return "+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0";
-            case 4685 : return "+proj=longlat +ellps=intl";
-            case 4686 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4687 : return "+proj=longlat +ellps=GRS80";
-            case 4688 : return "+proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074";
-            case 4689 : return "+proj=longlat +ellps=intl";
-            case 4690 : return "+proj=longlat +ellps=intl";
-            case 4691 : return "+proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773";
-            case 4692 : return "+proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0";
-            case 4693 : return "+proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0";
-            case 4694 : return "+proj=longlat +ellps=GRS80";
-            case 4695 : return "+proj=longlat +ellps=clrk66";
-            case 4696 : return "+proj=longlat +ellps=clrk80";
-            case 4697 : return "+proj=longlat +ellps=clrk80";
-            case 4698 : return "+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0";
-            case 4699 : return "+proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0";
-            case 4700 : return "+proj=longlat +ellps=clrk80";
-            case 4701 : return "+proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0";
-            case 4702 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4703 : return "+proj=longlat +ellps=clrk80";
-            case 4704 : return "+proj=longlat +ellps=intl";
-            case 4705 : return "+proj=longlat +ellps=intl";
-            case 4706 : return "+proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0";
-            case 4707 : return "+proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0";
-            case 4708 : return "+proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0";
-            case 4709 : return "+proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0";
-            case 4710 : return "+proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0";
-            case 4711 : return "+proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0";
-            case 4712 : return "+proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0";
-            case 4713 : return "+proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,0";
-            case 4714 : return "+proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0";
-            case 4715 : return "+proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0";
-            case 4716 : return "+proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0";
-            case 4717 : return "+proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0";
-            case 4718 : return "+proj=longlat +ellps=intl";
-            case 4719 : return "+proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0";
-            case 4720 : return "+proj=longlat +ellps=WGS72";
-            case 4721 : return "+proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0";
-            case 4722 : return "+proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0";
-            case 4723 : return "+proj=longlat +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0";
-            case 4724 : return "+proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0";
-            case 4725 : return "+proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0";
-            case 4726 : return "+proj=longlat +ellps=clrk66";
-            case 4727 : return "+proj=longlat +ellps=intl";
-            case 4728 : return "+proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0";
-            case 4729 : return "+proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0";
-            case 4730 : return "+proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0";
-            case 4731 : return "+proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0";
-            case 4732 : return "+proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0";
-            case 4733 : return "+proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0";
-            case 4734 : return "+proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0";
-            case 4735 : return "+proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0";
-            case 4736 : return "+proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0";
-            case 4737 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4738 : return "+proj=longlat +a=6378293.645208759 +b=6356617.987679838";
-            case 4739 : return "+proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0";
-            case 4740 : return "+proj=longlat +a=6378136 +b=6356751.361745712 +towgs84=0,0,1.5,-0,-0,0.076,0";
-            case 4741 : return "+proj=longlat +ellps=intl";
-            case 4742 : return "+proj=longlat +ellps=GRS80";
-            case 4743 : return "+proj=longlat +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0";
-            case 4744 : return "+proj=longlat +ellps=clrk80";
-            case 4745 : return "+proj=longlat +ellps=bessel";
-            case 4746 : return "+proj=longlat +ellps=bessel";
-            case 4747 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4748 : return "+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0";
-            case 4749 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4750 : return "+proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0";
-            case 4751 : return "+proj=longlat +a=6377295.664 +b=6356094.667915204";
-            case 4752 : return "+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0";
-            case 4753 : return "+proj=longlat +ellps=intl";
-            case 4754 : return "+proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0";
-            case 4755 : return "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0";
-            case 4756 : return "+proj=longlat +ellps=WGS84";
-            case 4757 : return "+proj=longlat +ellps=WGS84";
-            case 4758 : return "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0";
-            case 4759 : return "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0";
-            case 4760 : return "+proj=longlat +ellps=WGS66";
-            case 4801 : return "+proj=longlat +ellps=bessel +pm=bern";
-            case 4802 : return "+proj=longlat +ellps=intl +pm=bogota";
-            case 4803 : return "+proj=longlat +ellps=intl +pm=lisbon";
-            case 4804 : return "+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta";
-            case 4805 : return "+proj=longlat +ellps=bessel +pm=ferro";
-            case 4806 : return "+proj=longlat +ellps=intl +pm=rome";
-            case 4807 : return "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris";
-            case 4808 : return "+proj=longlat +ellps=bessel +pm=jakarta";
-            case 4809 : return "+proj=longlat +ellps=intl +pm=brussels";
-            case 4810 : return "+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris";
-            case 4811 : return "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris";
-            case 4813 : return "+proj=longlat +ellps=bessel +pm=jakarta";
-            case 4814 : return "+proj=longlat +ellps=bessel +pm=stockholm";
-            case 4815 : return "+proj=longlat +ellps=bessel +pm=athens";
-            case 4816 : return "+proj=longlat +a=6378249.2 +b=6356515 +pm=paris";
-            case 4817 : return "+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo";
-            case 4818 : return "+proj=longlat +ellps=bessel +pm=ferro";
-            case 4819 : return "+proj=longlat +ellps=clrk80 +pm=paris";
-            case 4820 : return "+proj=longlat +ellps=bessel +pm=jakarta";
-            case 4821 : return "+proj=longlat +a=6378249.2 +b=6356515 +pm=paris";
-            case 4901 : return "+proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris";
-            case 4902 : return "+proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris";
-            case 4903 : return "+proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid";
-            case 4904 : return "+proj=longlat +ellps=bessel +pm=lisbon";
-            case 20004 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m";
-            case 20005 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m";
-            case 20006 : return "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m";
-            case 20007 : return "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m";
-            case 20008 : return "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m";
-            case 20009 : return "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m";
-            case 20010 : return "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m";
-            case 20011 : return "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m";
-            case 20012 : return "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m";
-            case 20013 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m";
-            case 20014 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m";
-            case 20015 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m";
-            case 20016 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m";
-            case 20017 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m";
-            case 20018 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m";
-            case 20019 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m";
-            case 20020 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m";
-            case 20021 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m";
-            case 20022 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m";
-            case 20023 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m";
-            case 20024 : return "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m";
-            case 20025 : return "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m";
-            case 20026 : return "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m";
-            case 20027 : return "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m";
-            case 20028 : return "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m";
-            case 20029 : return "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m";
-            case 20030 : return "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m";
-            case 20031 : return "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m";
-            case 20032 : return "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m";
-            case 20064 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20065 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20066 : return "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20067 : return "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20068 : return "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20069 : return "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20070 : return "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20071 : return "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20072 : return "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20073 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20074 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20075 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20076 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20077 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20078 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20079 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20080 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20081 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20082 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20083 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20084 : return "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20085 : return "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20086 : return "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20087 : return "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20088 : return "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20089 : return "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20090 : return "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20091 : return "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20092 : return "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 20135 : return "+proj=utm +zone=35 +ellps=clrk80 +units=m";
-            case 20136 : return "+proj=utm +zone=36 +ellps=clrk80 +units=m";
-            case 20137 : return "+proj=utm +zone=37 +ellps=clrk80 +units=m";
-            case 20138 : return "+proj=utm +zone=38 +ellps=clrk80 +units=m";
-            case 20248 : return "+proj=utm +zone=48 +south +ellps=aust_SA +units=m";
-            case 20249 : return "+proj=utm +zone=49 +south +ellps=aust_SA +units=m";
-            case 20250 : return "+proj=utm +zone=50 +south +ellps=aust_SA +units=m";
-            case 20251 : return "+proj=utm +zone=51 +south +ellps=aust_SA +units=m";
-            case 20252 : return "+proj=utm +zone=52 +south +ellps=aust_SA +units=m";
-            case 20253 : return "+proj=utm +zone=53 +south +ellps=aust_SA +units=m";
-            case 20254 : return "+proj=utm +zone=54 +south +ellps=aust_SA +units=m";
-            case 20255 : return "+proj=utm +zone=55 +south +ellps=aust_SA +units=m";
-            case 20256 : return "+proj=utm +zone=56 +south +ellps=aust_SA +units=m";
-            case 20257 : return "+proj=utm +zone=57 +south +ellps=aust_SA +units=m";
-            case 20258 : return "+proj=utm +zone=58 +south +ellps=aust_SA +units=m";
-            case 20348 : return "+proj=utm +zone=48 +south +ellps=aust_SA +units=m";
-            case 20349 : return "+proj=utm +zone=49 +south +ellps=aust_SA +units=m";
-            case 20350 : return "+proj=utm +zone=50 +south +ellps=aust_SA +units=m";
-            case 20351 : return "+proj=utm +zone=51 +south +ellps=aust_SA +units=m";
-            case 20352 : return "+proj=utm +zone=52 +south +ellps=aust_SA +units=m";
-            case 20353 : return "+proj=utm +zone=53 +south +ellps=aust_SA +units=m";
-            case 20354 : return "+proj=utm +zone=54 +south +ellps=aust_SA +units=m";
-            case 20355 : return "+proj=utm +zone=55 +south +ellps=aust_SA +units=m";
-            case 20356 : return "+proj=utm +zone=56 +south +ellps=aust_SA +units=m";
-            case 20357 : return "+proj=utm +zone=57 +south +ellps=aust_SA +units=m";
-            case 20358 : return "+proj=utm +zone=58 +south +ellps=aust_SA +units=m";
-            case 20436 : return "+proj=utm +zone=36 +ellps=intl +units=m";
-            case 20437 : return "+proj=utm +zone=37 +ellps=intl +units=m";
-            case 20438 : return "+proj=utm +zone=38 +ellps=intl +units=m";
-            case 20439 : return "+proj=utm +zone=39 +ellps=intl +units=m";
-            case 20440 : return "+proj=utm +zone=40 +ellps=intl +units=m";
-            case 20499 : return "+proj=utm +zone=39 +ellps=intl +units=m";
-            case 20538 : return "+proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m";
-            case 20539 : return "+proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m";
-            case 20790 : return "+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon +units=m";
-            case 20791 : return "+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +pm=lisbon +units=m";
-            case 20822 : return "+proj=utm +zone=22 +south +ellps=intl +units=m";
-            case 20823 : return "+proj=utm +zone=23 +south +ellps=intl +units=m";
-            case 20824 : return "+proj=utm +zone=24 +south +ellps=intl +units=m";
-            case 20934 : return "+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m";
-            case 20935 : return "+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m";
-            case 20936 : return "+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m";
-            case 21035 : return "+proj=utm +zone=35 +south +ellps=clrk80 +units=m";
-            case 21036 : return "+proj=utm +zone=36 +south +ellps=clrk80 +units=m";
-            case 21037 : return "+proj=utm +zone=37 +south +ellps=clrk80 +units=m";
-            case 21095 : return "+proj=utm +zone=35 +ellps=clrk80 +units=m";
-            case 21096 : return "+proj=utm +zone=36 +ellps=clrk80 +units=m";
-            case 21097 : return "+proj=utm +zone=37 +ellps=clrk80 +units=m";
-            case 21100 : return "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m";
-            case 21148 : return "+proj=utm +zone=48 +south +ellps=bessel +units=m";
-            case 21149 : return "+proj=utm +zone=49 +south +ellps=bessel +units=m";
-            case 21150 : return "+proj=utm +zone=50 +south +ellps=bessel +units=m";
-            case 21291 : return "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m";
-            case 21292 : return "+proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m";
-            case 21413 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m";
-            case 21414 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m";
-            case 21415 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m";
-            case 21416 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m";
-            case 21417 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m";
-            case 21418 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m";
-            case 21419 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m";
-            case 21420 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m";
-            case 21421 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m";
-            case 21422 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m";
-            case 21423 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m";
-            case 21453 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21454 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21455 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21456 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21457 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21458 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21459 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21460 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21461 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21462 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21463 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21473 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21474 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21475 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21476 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21477 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21478 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21479 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21480 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21481 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21482 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21483 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 21500 : return "+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m";
-            case 21780 : return "+proj=somerc +lat_0=46.95240555555556 +lon_0=0 +x_0=0 +y_0=0 +ellps=bessel +pm=bern +units=m";
-            case 21781 : return "+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m";
-            case 21817 : return "+proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m";
-            case 21818 : return "+proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m";
-            case 21891 : return "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m";
-            case 21892 : return "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m";
-            case 21893 : return "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m";
-            case 21894 : return "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m";
-            case 21896 : return "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m";
-            case 21897 : return "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m";
-            case 21898 : return "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m";
-            case 21899 : return "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m";
-            case 22032 : return "+proj=utm +zone=32 +south +ellps=clrk80 +units=m";
-            case 22033 : return "+proj=utm +zone=33 +south +ellps=clrk80 +units=m";
-            case 22091 : return "+proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m";
-            case 22092 : return "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m";
-            case 22171 : return "+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 22172 : return "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 22173 : return "+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 22174 : return "+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 22175 : return "+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 22176 : return "+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 22177 : return "+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 22181 : return "+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 22182 : return "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 22183 : return "+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 22184 : return "+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 22185 : return "+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 22186 : return "+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 22187 : return "+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 22191 : return "+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m";
-            case 22192 : return "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m";
-            case 22193 : return "+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m";
-            case 22194 : return "+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m";
-            case 22195 : return "+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m";
-            case 22196 : return "+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +units=m";
-            case 22197 : return "+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +units=m";
-            case 22234 : return "+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m";
-            case 22235 : return "+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m";
-            case 22236 : return "+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m";
-            case 22332 : return "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m";
-            case 22391 : return "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m";
-            case 22392 : return "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m";
-            case 22521 : return "+proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m";
-            case 22522 : return "+proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m";
-            case 22523 : return "+proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m";
-            case 22524 : return "+proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m";
-            case 22525 : return "+proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m";
-            case 22700 : return "+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m";
-            case 22770 : return "+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m";
-            case 22780 : return "+proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +units=m";
-            case 22832 : return "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m";
-            case 22991 : return "+proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +units=m";
-            case 22992 : return "+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +units=m";
-            case 22993 : return "+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +units=m";
-            case 22994 : return "+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +units=m";
-            case 23028 : return "+proj=utm +zone=28 +ellps=intl +units=m";
-            case 23029 : return "+proj=utm +zone=29 +ellps=intl +units=m";
-            case 23030 : return "+proj=utm +zone=30 +ellps=intl +units=m";
-            case 23031 : return "+proj=utm +zone=31 +ellps=intl +units=m";
-            case 23032 : return "+proj=utm +zone=32 +ellps=intl +units=m";
-            case 23033 : return "+proj=utm +zone=33 +ellps=intl +units=m";
-            case 23034 : return "+proj=utm +zone=34 +ellps=intl +units=m";
-            case 23035 : return "+proj=utm +zone=35 +ellps=intl +units=m";
-            case 23036 : return "+proj=utm +zone=36 +ellps=intl +units=m";
-            case 23037 : return "+proj=utm +zone=37 +ellps=intl +units=m";
-            case 23038 : return "+proj=utm +zone=38 +ellps=intl +units=m";
-            case 23090 : return "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m";
-            case 23095 : return "+proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m";
-            case 23239 : return "+proj=utm +zone=39 +ellps=clrk80 +units=m";
-            case 23240 : return "+proj=utm +zone=40 +ellps=clrk80 +units=m";
-            case 23433 : return "+proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m";
-            case 23700 : return "+proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +x_0=650000 +y_0=200000 +ellps=GRS67 +units=m";
-            case 23830 : return "+proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23831 : return "+proj=tmerc +lat_0=0 +lon_0=97.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23832 : return "+proj=tmerc +lat_0=0 +lon_0=100.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23833 : return "+proj=tmerc +lat_0=0 +lon_0=103.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23834 : return "+proj=tmerc +lat_0=0 +lon_0=106.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23835 : return "+proj=tmerc +lat_0=0 +lon_0=109.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23836 : return "+proj=tmerc +lat_0=0 +lon_0=112.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23837 : return "+proj=tmerc +lat_0=0 +lon_0=115.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23838 : return "+proj=tmerc +lat_0=0 +lon_0=118.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23839 : return "+proj=tmerc +lat_0=0 +lon_0=121.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23840 : return "+proj=tmerc +lat_0=0 +lon_0=124.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23841 : return "+proj=tmerc +lat_0=0 +lon_0=127.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23842 : return "+proj=tmerc +lat_0=0 +lon_0=130.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23843 : return "+proj=tmerc +lat_0=0 +lon_0=133.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23844 : return "+proj=tmerc +lat_0=0 +lon_0=136.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23845 : return "+proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23846 : return "+proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +units=m";
-            case 23847 : return "+proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +units=m";
-            case 23848 : return "+proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +units=m";
-            case 23849 : return "+proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +units=m";
-            case 23850 : return "+proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +units=m";
-            case 23851 : return "+proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +units=m";
-            case 23852 : return "+proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +units=m";
-            case 23853 : return "+proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +units=m";
-            case 23866 : return "+proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23867 : return "+proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23868 : return "+proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23869 : return "+proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23870 : return "+proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23871 : return "+proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23872 : return "+proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23877 : return "+proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23878 : return "+proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23879 : return "+proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23880 : return "+proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23881 : return "+proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23882 : return "+proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23883 : return "+proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23884 : return "+proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 23886 : return "+proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +units=m";
-            case 23887 : return "+proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +units=m";
-            case 23888 : return "+proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +units=m";
-            case 23889 : return "+proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +units=m";
-            case 23890 : return "+proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +units=m";
-            case 23891 : return "+proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +units=m";
-            case 23892 : return "+proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +units=m";
-            case 23893 : return "+proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +units=m";
-            case 23894 : return "+proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +units=m";
-            case 23946 : return "+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m";
-            case 23947 : return "+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m";
-            case 23948 : return "+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m";
-            case 24047 : return "+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +units=m";
-            case 24048 : return "+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m";
-            case 24100 : return "+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49597 +y_0=121918.90616 +ellps=clrk80 +to_meter=0.3047972654";
-            case 24200 : return "+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +units=m";
-            case 24305 : return "+proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +units=m";
-            case 24306 : return "+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +units=m";
-            case 24311 : return "+proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +units=m";
-            case 24312 : return "+proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +units=m";
-            case 24313 : return "+proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +units=m";
-            case 24342 : return "+proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m";
-            case 24343 : return "+proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m";
-            case 24344 : return "+proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m";
-            case 24345 : return "+proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m";
-            case 24346 : return "+proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m";
-            case 24347 : return "+proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m";
-            case 24370 : return "+proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.357204818 +to_meter=0.9143985307444408";
-            case 24371 : return "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204818 +to_meter=0.9143985307444408";
-            case 24372 : return "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204818 +to_meter=0.9143985307444408";
-            case 24373 : return "+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204818 +to_meter=0.9143985307444408";
-            case 24374 : return "+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204818 +to_meter=0.9143985307444408";
-            case 24375 : return "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +units=m";
-            case 24376 : return "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m";
-            case 24377 : return "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m";
-            case 24378 : return "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m";
-            case 24379 : return "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m";
-            case 24380 : return "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m";
-            case 24381 : return "+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m";
-            case 24382 : return "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204818 +to_meter=0.9143985307444408";
-            case 24383 : return "+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m";
-            case 24500 : return "+proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m";
-            case 24547 : return "+proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m";
-            case 24548 : return "+proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m";
-            case 24571 : return "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587";
-            case 24600 : return "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +units=m";
-            case 24718 : return "+proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m";
-            case 24719 : return "+proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m";
-            case 24720 : return "+proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m";
-            case 24817 : return "+proj=utm +zone=17 +ellps=intl +units=m";
-            case 24818 : return "+proj=utm +zone=18 +ellps=intl +units=m";
-            case 24819 : return "+proj=utm +zone=19 +ellps=intl +units=m";
-            case 24820 : return "+proj=utm +zone=20 +ellps=intl +units=m";
-            case 24821 : return "+proj=utm +zone=21 +ellps=intl +units=m";
-            case 24877 : return "+proj=utm +zone=17 +south +ellps=intl +units=m";
-            case 24878 : return "+proj=utm +zone=18 +south +ellps=intl +units=m";
-            case 24879 : return "+proj=utm +zone=19 +south +ellps=intl +units=m";
-            case 24880 : return "+proj=utm +zone=20 +south +ellps=intl +units=m";
-            case 24881 : return "+proj=utm +zone=21 +south +ellps=intl +units=m";
-            case 24882 : return "+proj=utm +zone=22 +south +ellps=intl +units=m";
-            case 24891 : return "+proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +units=m";
-            case 24892 : return "+proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +units=m";
-            case 24893 : return "+proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +units=m";
-            case 25000 : return "+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m";
-            case 25231 : return "+proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m";
-            case 25391 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m";
-            case 25392 : return "+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m";
-            case 25393 : return "+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m";
-            case 25394 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m";
-            case 25395 : return "+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m";
-            case 25700 : return "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m";
-            case 25828 : return "+proj=utm +zone=28 +ellps=GRS80 +units=m";
-            case 25829 : return "+proj=utm +zone=29 +ellps=GRS80 +units=m";
-            case 25830 : return "+proj=utm +zone=30 +ellps=GRS80 +units=m";
-            case 25831 : return "+proj=utm +zone=31 +ellps=GRS80 +units=m";
-            case 25832 : return "+proj=utm +zone=32 +ellps=GRS80 +units=m";
-            case 25833 : return "+proj=utm +zone=33 +ellps=GRS80 +units=m";
-            case 25834 : return "+proj=utm +zone=34 +ellps=GRS80 +units=m";
-            case 25835 : return "+proj=utm +zone=35 +ellps=GRS80 +units=m";
-            case 25836 : return "+proj=utm +zone=36 +ellps=GRS80 +units=m";
-            case 25837 : return "+proj=utm +zone=37 +ellps=GRS80 +units=m";
-            case 25838 : return "+proj=utm +zone=38 +ellps=GRS80 +units=m";
-            case 25884 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 25932 : return "+proj=utm +zone=32 +south +ellps=intl +units=m";
-            case 26191 : return "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m";
-            case 26192 : return "+proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m";
-            case 26193 : return "+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m";
-            case 26194 : return "+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m";
-            case 26195 : return "+proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m";
-            case 26237 : return "+proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m";
-            case 26331 : return "+proj=utm +zone=31 +ellps=clrk80 +units=m";
-            case 26332 : return "+proj=utm +zone=32 +ellps=clrk80 +units=m";
-            case 26391 : return "+proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +units=m";
-            case 26392 : return "+proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +units=m";
-            case 26393 : return "+proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +units=m";
-            case 26432 : return "+proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m";
-            case 26591 : return "+proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m";
-            case 26592 : return "+proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +pm=rome +units=m";
-            case 26632 : return "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m";
-            case 26692 : return "+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m";
-            case 26701 : return "+proj=utm +zone=1 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26702 : return "+proj=utm +zone=2 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26703 : return "+proj=utm +zone=3 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26704 : return "+proj=utm +zone=4 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26705 : return "+proj=utm +zone=5 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26706 : return "+proj=utm +zone=6 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26707 : return "+proj=utm +zone=7 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26708 : return "+proj=utm +zone=8 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26709 : return "+proj=utm +zone=9 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26710 : return "+proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26711 : return "+proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26712 : return "+proj=utm +zone=12 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26713 : return "+proj=utm +zone=13 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26714 : return "+proj=utm +zone=14 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26715 : return "+proj=utm +zone=15 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26716 : return "+proj=utm +zone=16 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26717 : return "+proj=utm +zone=17 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26718 : return "+proj=utm +zone=18 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26719 : return "+proj=utm +zone=19 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26720 : return "+proj=utm +zone=20 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26721 : return "+proj=utm +zone=21 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26722 : return "+proj=utm +zone=22 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 26729 : return "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26730 : return "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26731 : return "+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26732 : return "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26733 : return "+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26734 : return "+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26735 : return "+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26736 : return "+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26737 : return "+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26738 : return "+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26739 : return "+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26740 : return "+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26741 : return "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26742 : return "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26743 : return "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26744 : return "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26745 : return "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26746 : return "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26747 : return "+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26748 : return "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26749 : return "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26750 : return "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26751 : return "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26752 : return "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26753 : return "+proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26754 : return "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26755 : return "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26756 : return "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26757 : return "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26758 : return "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26759 : return "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26760 : return "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26766 : return "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26767 : return "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26768 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26769 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26770 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26771 : return "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26772 : return "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26773 : return "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26774 : return "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26775 : return "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26776 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26777 : return "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26778 : return "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26779 : return "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26780 : return "+proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26781 : return "+proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26782 : return "+proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26783 : return "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26784 : return "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26785 : return "+proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26786 : return "+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26787 : return "+proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26791 : return "+proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26792 : return "+proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26793 : return "+proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26794 : return "+proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26795 : return "+proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26796 : return "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26797 : return "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26798 : return "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26799 : return "+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 26801 : return "+proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192";
-            case 26802 : return "+proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192";
-            case 26803 : return "+proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192";
-            case 26811 : return "+proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192";
-            case 26812 : return "+proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192";
-            case 26813 : return "+proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192";
-            case 26901 : return "+proj=utm +zone=1 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26902 : return "+proj=utm +zone=2 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26903 : return "+proj=utm +zone=3 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26904 : return "+proj=utm +zone=4 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26905 : return "+proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26906 : return "+proj=utm +zone=6 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26907 : return "+proj=utm +zone=7 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26908 : return "+proj=utm +zone=8 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26909 : return "+proj=utm +zone=9 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26910 : return "+proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26911 : return "+proj=utm +zone=11 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26912 : return "+proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26913 : return "+proj=utm +zone=13 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26914 : return "+proj=utm +zone=14 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26915 : return "+proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26916 : return "+proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26917 : return "+proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26918 : return "+proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26919 : return "+proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26920 : return "+proj=utm +zone=20 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26921 : return "+proj=utm +zone=21 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26922 : return "+proj=utm +zone=22 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26923 : return "+proj=utm +zone=23 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26929 : return "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26930 : return "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26931 : return "+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26932 : return "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26933 : return "+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26934 : return "+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26935 : return "+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26936 : return "+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26937 : return "+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26938 : return "+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26939 : return "+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26940 : return "+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26941 : return "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26942 : return "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26943 : return "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26944 : return "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26945 : return "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26946 : return "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26948 : return "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26949 : return "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26950 : return "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26951 : return "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26952 : return "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26953 : return "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26954 : return "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26955 : return "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26956 : return "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26957 : return "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26958 : return "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26959 : return "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26960 : return "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26961 : return "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26962 : return "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26963 : return "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26964 : return "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26965 : return "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26966 : return "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26967 : return "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26968 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26969 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26970 : return "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26971 : return "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26972 : return "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26973 : return "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26974 : return "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26975 : return "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26976 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26977 : return "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26978 : return "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26979 : return "+proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26980 : return "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26981 : return "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26982 : return "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26983 : return "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26984 : return "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26985 : return "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26986 : return "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26987 : return "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26988 : return "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26989 : return "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26990 : return "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26991 : return "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26992 : return "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26993 : return "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26994 : return "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26995 : return "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26996 : return "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26997 : return "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 26998 : return "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 27037 : return "+proj=utm +zone=37 +ellps=clrk80 +units=m";
-            case 27038 : return "+proj=utm +zone=38 +ellps=clrk80 +units=m";
-            case 27039 : return "+proj=utm +zone=39 +ellps=clrk80 +units=m";
-            case 27040 : return "+proj=utm +zone=40 +ellps=clrk80 +units=m";
-            case 27120 : return "+proj=utm +zone=20 +ellps=intl +units=m";
-            case 27200 : return "+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +datum=nzgd49 +units=m";
-            case 27205 : return "+proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27206 : return "+proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27207 : return "+proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27208 : return "+proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27209 : return "+proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27210 : return "+proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27211 : return "+proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27212 : return "+proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27213 : return "+proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27214 : return "+proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27215 : return "+proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27216 : return "+proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27217 : return "+proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27218 : return "+proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27219 : return "+proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27220 : return "+proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27221 : return "+proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27222 : return "+proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27223 : return "+proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27224 : return "+proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27225 : return "+proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27226 : return "+proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27227 : return "+proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27228 : return "+proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27229 : return "+proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27230 : return "+proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27231 : return "+proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m";
-            case 27232 : return "+proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +datum=nzgd49 +units=m";
-            case 27258 : return "+proj=utm +zone=58 +south +ellps=intl +datum=nzgd49 +units=m";
-            case 27259 : return "+proj=utm +zone=59 +south +ellps=intl +datum=nzgd49 +units=m";
-            case 27260 : return "+proj=utm +zone=60 +south +ellps=intl +datum=nzgd49 +units=m";
-            case 27291 : return "+proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287";
-            case 27292 : return "+proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287";
-            case 27391 : return "+proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m";
-            case 27392 : return "+proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m";
-            case 27393 : return "+proj=tmerc +lat_0=58 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m";
-            case 27394 : return "+proj=tmerc +lat_0=58 +lon_0=2.5 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m";
-            case 27395 : return "+proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m";
-            case 27396 : return "+proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m";
-            case 27397 : return "+proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m";
-            case 27398 : return "+proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m";
-            case 27429 : return "+proj=utm +zone=29 +ellps=intl +units=m";
-            case 27492 : return "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m";
-            case 27500 : return "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=5.399999999999999 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=paris +units=m";
-            case 27561 : return "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27562 : return "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27563 : return "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27564 : return "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27571 : return "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27572 : return "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27573 : return "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27574 : return "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27581 : return "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27582 : return "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27583 : return "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27584 : return "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27591 : return "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27592 : return "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27593 : return "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27594 : return "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
-            case 27700 : return "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m";
-            case 28191 : return "+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m";
-            case 28192 : return "+proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m";
-            case 28193 : return "+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m";
-            case 28232 : return "+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m";
-            case 28348 : return "+proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 28349 : return "+proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 28350 : return "+proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 28351 : return "+proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 28352 : return "+proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 28353 : return "+proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 28354 : return "+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 28355 : return "+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 28356 : return "+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 28357 : return "+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 28358 : return "+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 28402 : return "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m";
-            case 28403 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m";
-            case 28404 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m";
-            case 28405 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m";
-            case 28406 : return "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m";
-            case 28407 : return "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m";
-            case 28408 : return "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m";
-            case 28409 : return "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m";
-            case 28410 : return "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m";
-            case 28411 : return "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m";
-            case 28412 : return "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m";
-            case 28413 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m";
-            case 28414 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m";
-            case 28415 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m";
-            case 28416 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m";
-            case 28417 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m";
-            case 28418 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m";
-            case 28419 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m";
-            case 28420 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m";
-            case 28421 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m";
-            case 28422 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m";
-            case 28423 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m";
-            case 28424 : return "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m";
-            case 28425 : return "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m";
-            case 28426 : return "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m";
-            case 28427 : return "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m";
-            case 28428 : return "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m";
-            case 28429 : return "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m";
-            case 28430 : return "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m";
-            case 28431 : return "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m";
-            case 28432 : return "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m";
-            case 28462 : return "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28463 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28464 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28465 : return "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28466 : return "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28467 : return "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28468 : return "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28469 : return "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28470 : return "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28471 : return "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28472 : return "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28473 : return "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28474 : return "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28475 : return "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28476 : return "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28477 : return "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28478 : return "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28479 : return "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28480 : return "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28481 : return "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28482 : return "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28483 : return "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28484 : return "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28485 : return "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28486 : return "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28487 : return "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28488 : return "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28489 : return "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28490 : return "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28491 : return "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28492 : return "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m";
-            case 28600 : return "+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +units=m";
-            case 28991 : return "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 28992 : return "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m";
-            case 29100 : return "+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +units=m";
-            case 29101 : return "+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +units=m";
-            case 29118 : return "+proj=utm +zone=18 +ellps=GRS67 +units=m";
-            case 29119 : return "+proj=utm +zone=19 +ellps=GRS67 +units=m";
-            case 29120 : return "+proj=utm +zone=20 +ellps=GRS67 +units=m";
-            case 29121 : return "+proj=utm +zone=21 +ellps=GRS67 +units=m";
-            case 29122 : return "+proj=utm +zone=22 +ellps=GRS67 +units=m";
-            case 29168 : return "+proj=utm +zone=18 +ellps=aust_SA +units=m";
-            case 29169 : return "+proj=utm +zone=19 +ellps=aust_SA +units=m";
-            case 29170 : return "+proj=utm +zone=20 +ellps=aust_SA +units=m";
-            case 29171 : return "+proj=utm +zone=21 +ellps=aust_SA +units=m";
-            case 29172 : return "+proj=utm +zone=22 +ellps=aust_SA +units=m";
-            case 29177 : return "+proj=utm +zone=17 +south +ellps=GRS67 +units=m";
-            case 29178 : return "+proj=utm +zone=18 +south +ellps=GRS67 +units=m";
-            case 29179 : return "+proj=utm +zone=19 +south +ellps=GRS67 +units=m";
-            case 29180 : return "+proj=utm +zone=20 +south +ellps=GRS67 +units=m";
-            case 29181 : return "+proj=utm +zone=21 +south +ellps=GRS67 +units=m";
-            case 29182 : return "+proj=utm +zone=22 +south +ellps=GRS67 +units=m";
-            case 29183 : return "+proj=utm +zone=23 +south +ellps=GRS67 +units=m";
-            case 29184 : return "+proj=utm +zone=24 +south +ellps=GRS67 +units=m";
-            case 29185 : return "+proj=utm +zone=25 +south +ellps=GRS67 +units=m";
-            case 29187 : return "+proj=utm +zone=17 +south +ellps=aust_SA +units=m";
-            case 29188 : return "+proj=utm +zone=18 +south +ellps=aust_SA +units=m";
-            case 29189 : return "+proj=utm +zone=19 +south +ellps=aust_SA +units=m";
-            case 29190 : return "+proj=utm +zone=20 +south +ellps=aust_SA +units=m";
-            case 29191 : return "+proj=utm +zone=21 +south +ellps=aust_SA +units=m";
-            case 29192 : return "+proj=utm +zone=22 +south +ellps=aust_SA +units=m";
-            case 29193 : return "+proj=utm +zone=23 +south +ellps=aust_SA +units=m";
-            case 29194 : return "+proj=utm +zone=24 +south +ellps=aust_SA +units=m";
-            case 29195 : return "+proj=utm +zone=25 +south +ellps=aust_SA +units=m";
-            case 29220 : return "+proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m";
-            case 29221 : return "+proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m";
-            case 29333 : return "+proj=utm +zone=33 +south +ellps=bess_nam +units=m";
-            case 29635 : return "+proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m";
-            case 29636 : return "+proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m";
-            case 29700 : return "+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m";
-            case 29702 : return "+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m";
-            case 29738 : return "+proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m";
-            case 29739 : return "+proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m";
-            case 29849 : return "+proj=utm +zone=49 +ellps=evrstSS +units=m";
-            case 29850 : return "+proj=utm +zone=50 +ellps=evrstSS +units=m";
-            case 29871 : return "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +ellps=evrstSS +to_meter=20.11676512155263";
-            case 29872 : return "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +ellps=evrstSS +to_meter=0.3047994715386762";
-            case 29873 : return "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +ellps=evrstSS +units=m";
-            case 29900 : return "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m";
-            case 29901 : return "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m";
-            case 29902 : return "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m";
-            case 29903 : return "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m";
-            case 30161 : return "+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30162 : return "+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30163 : return "+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30164 : return "+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30165 : return "+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30166 : return "+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30167 : return "+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30168 : return "+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30169 : return "+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30170 : return "+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30171 : return "+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30172 : return "+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30173 : return "+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30174 : return "+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30175 : return "+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30176 : return "+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30177 : return "+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30178 : return "+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30179 : return "+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-            case 30200 : return "+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164";
-            case 30339 : return "+proj=utm +zone=39 +ellps=helmert +units=m";
-            case 30340 : return "+proj=utm +zone=40 +ellps=helmert +units=m";
-            case 30491 : return "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m";
-            case 30492 : return "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m";
-            case 30493 : return "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m";
-            case 30494 : return "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m";
-            case 30729 : return "+proj=utm +zone=29 +ellps=clrk80 +units=m";
-            case 30730 : return "+proj=utm +zone=30 +ellps=clrk80 +units=m";
-            case 30731 : return "+proj=utm +zone=31 +ellps=clrk80 +units=m";
-            case 30732 : return "+proj=utm +zone=32 +ellps=clrk80 +units=m";
-            case 30791 : return "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m";
-            case 30792 : return "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m";
-            case 30800 : return "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m";
-            case 31028 : return "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m";
-            case 31121 : return "+proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m";
-            case 31154 : return "+proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m";
-            case 31170 : return "+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m";
-            case 31171 : return "+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m";
-            case 31251 : return "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m";
-            case 31252 : return "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m";
-            case 31253 : return "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m";
-            case 31254 : return "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31255 : return "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31256 : return "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31257 : return "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31258 : return "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31259 : return "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31265 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31266 : return "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31267 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31268 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31275 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31276 : return "+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31277 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31278 : return "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31279 : return "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31281 : return "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m";
-            case 31282 : return "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m";
-            case 31283 : return "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m";
-            case 31284 : return "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31285 : return "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31286 : return "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31287 : return "+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31288 : return "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +pm=ferro +units=m";
-            case 31289 : return "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +pm=ferro +units=m";
-            case 31290 : return "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +pm=ferro +units=m";
-            case 31291 : return "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m";
-            case 31292 : return "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m";
-            case 31293 : return "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m";
-            case 31294 : return "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31295 : return "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31296 : return "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31297 : return "+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m";
-            case 31300 : return "+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +units=m";
-            case 31370 : return "+proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +units=m";
-            case 31461 : return "+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m";
-            case 31462 : return "+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m";
-            case 31463 : return "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m";
-            case 31464 : return "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m";
-            case 31465 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m";
-            case 31466 : return "+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m";
-            case 31467 : return "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m";
-            case 31468 : return "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m";
-            case 31469 : return "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m";
-            case 31528 : return "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m";
-            case 31529 : return "+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m";
-            case 31600 : return "+proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +units=m";
-            case 31700 : return "+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +units=m";
-            case 31838 : return "+proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m";
-            case 31839 : return "+proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m";
-            case 31900 : return "+proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 31901 : return "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m";
-            case 31965 : return "+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31966 : return "+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31967 : return "+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31968 : return "+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31969 : return "+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31970 : return "+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31971 : return "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31972 : return "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31973 : return "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31974 : return "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31975 : return "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31976 : return "+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31977 : return "+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31978 : return "+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31979 : return "+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31980 : return "+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31981 : return "+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31982 : return "+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31983 : return "+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31984 : return "+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31985 : return "+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31986 : return "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31987 : return "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31988 : return "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31989 : return "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31990 : return "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31991 : return "+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31992 : return "+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31993 : return "+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31994 : return "+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31995 : return "+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31996 : return "+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31997 : return "+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31998 : return "+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 31999 : return "+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 32000 : return "+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-            case 32001 : return "+proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32002 : return "+proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32003 : return "+proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32005 : return "+proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32006 : return "+proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32007 : return "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32008 : return "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32009 : return "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32010 : return "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32011 : return "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32012 : return "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32013 : return "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32014 : return "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32015 : return "+proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32016 : return "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32017 : return "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32018 : return "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32019 : return "+proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32020 : return "+proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32021 : return "+proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32022 : return "+proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32023 : return "+proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32024 : return "+proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32025 : return "+proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32026 : return "+proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32027 : return "+proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32028 : return "+proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32029 : return "+proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32030 : return "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32031 : return "+proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32033 : return "+proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32034 : return "+proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32035 : return "+proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32036 : return "+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32037 : return "+proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32038 : return "+proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32039 : return "+proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32040 : return "+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32041 : return "+proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32042 : return "+proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32043 : return "+proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32044 : return "+proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32045 : return "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32046 : return "+proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32047 : return "+proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32048 : return "+proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32049 : return "+proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32050 : return "+proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32051 : return "+proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32052 : return "+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32053 : return "+proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32054 : return "+proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32055 : return "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32056 : return "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32057 : return "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32058 : return "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32061 : return "+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 32062 : return "+proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 32064 : return "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32065 : return "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32066 : return "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32067 : return "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32074 : return "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32075 : return "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32076 : return "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32077 : return "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32081 : return "+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 32082 : return "+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 32083 : return "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 32084 : return "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 32085 : return "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 32086 : return "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 32098 : return "+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m";
-            case 32099 : return "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-            case 32100 : return "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32104 : return "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32107 : return "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32108 : return "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32109 : return "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32110 : return "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32111 : return "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32112 : return "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32113 : return "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32114 : return "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32115 : return "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32116 : return "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32117 : return "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32118 : return "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32119 : return "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32120 : return "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32121 : return "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32122 : return "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32123 : return "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32124 : return "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32125 : return "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32126 : return "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32127 : return "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32128 : return "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32129 : return "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32130 : return "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32133 : return "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32134 : return "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32135 : return "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32136 : return "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32137 : return "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32138 : return "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32139 : return "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32140 : return "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32141 : return "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32142 : return "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32143 : return "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32144 : return "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32145 : return "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32146 : return "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32147 : return "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32148 : return "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32149 : return "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32150 : return "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32151 : return "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32152 : return "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32153 : return "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32154 : return "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32155 : return "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32156 : return "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32157 : return "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32158 : return "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32161 : return "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32164 : return "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 32165 : return "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 32166 : return "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 32167 : return "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192";
-            case 32180 : return "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32181 : return "+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32182 : return "+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32183 : return "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32184 : return "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32185 : return "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32186 : return "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32187 : return "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32188 : return "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32189 : return "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32190 : return "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32191 : return "+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32192 : return "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32193 : return "+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32194 : return "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32195 : return "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32196 : return "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32197 : return "+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32198 : return "+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32199 : return "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-            case 32201 : return "+proj=utm +zone=1 +ellps=WGS72 +units=m";
-            case 32202 : return "+proj=utm +zone=2 +ellps=WGS72 +units=m";
-            case 32203 : return "+proj=utm +zone=3 +ellps=WGS72 +units=m";
-            case 32204 : return "+proj=utm +zone=4 +ellps=WGS72 +units=m";
-            case 32205 : return "+proj=utm +zone=5 +ellps=WGS72 +units=m";
-            case 32206 : return "+proj=utm +zone=6 +ellps=WGS72 +units=m";
-            case 32207 : return "+proj=utm +zone=7 +ellps=WGS72 +units=m";
-            case 32208 : return "+proj=utm +zone=8 +ellps=WGS72 +units=m";
-            case 32209 : return "+proj=utm +zone=9 +ellps=WGS72 +units=m";
-            case 32210 : return "+proj=utm +zone=10 +ellps=WGS72 +units=m";
-            case 32211 : return "+proj=utm +zone=11 +ellps=WGS72 +units=m";
-            case 32212 : return "+proj=utm +zone=12 +ellps=WGS72 +units=m";
-            case 32213 : return "+proj=utm +zone=13 +ellps=WGS72 +units=m";
-            case 32214 : return "+proj=utm +zone=14 +ellps=WGS72 +units=m";
-            case 32215 : return "+proj=utm +zone=15 +ellps=WGS72 +units=m";
-            case 32216 : return "+proj=utm +zone=16 +ellps=WGS72 +units=m";
-            case 32217 : return "+proj=utm +zone=17 +ellps=WGS72 +units=m";
-            case 32218 : return "+proj=utm +zone=18 +ellps=WGS72 +units=m";
-            case 32219 : return "+proj=utm +zone=19 +ellps=WGS72 +units=m";
-            case 32220 : return "+proj=utm +zone=20 +ellps=WGS72 +units=m";
-            case 32221 : return "+proj=utm +zone=21 +ellps=WGS72 +units=m";
-            case 32222 : return "+proj=utm +zone=22 +ellps=WGS72 +units=m";
-            case 32223 : return "+proj=utm +zone=23 +ellps=WGS72 +units=m";
-            case 32224 : return "+proj=utm +zone=24 +ellps=WGS72 +units=m";
-            case 32225 : return "+proj=utm +zone=25 +ellps=WGS72 +units=m";
-            case 32226 : return "+proj=utm +zone=26 +ellps=WGS72 +units=m";
-            case 32227 : return "+proj=utm +zone=27 +ellps=WGS72 +units=m";
-            case 32228 : return "+proj=utm +zone=28 +ellps=WGS72 +units=m";
-            case 32229 : return "+proj=utm +zone=29 +ellps=WGS72 +units=m";
-            case 32230 : return "+proj=utm +zone=30 +ellps=WGS72 +units=m";
-            case 32231 : return "+proj=utm +zone=31 +ellps=WGS72 +units=m";
-            case 32232 : return "+proj=utm +zone=32 +ellps=WGS72 +units=m";
-            case 32233 : return "+proj=utm +zone=33 +ellps=WGS72 +units=m";
-            case 32234 : return "+proj=utm +zone=34 +ellps=WGS72 +units=m";
-            case 32235 : return "+proj=utm +zone=35 +ellps=WGS72 +units=m";
-            case 32236 : return "+proj=utm +zone=36 +ellps=WGS72 +units=m";
-            case 32237 : return "+proj=utm +zone=37 +ellps=WGS72 +units=m";
-            case 32238 : return "+proj=utm +zone=38 +ellps=WGS72 +units=m";
-            case 32239 : return "+proj=utm +zone=39 +ellps=WGS72 +units=m";
-            case 32240 : return "+proj=utm +zone=40 +ellps=WGS72 +units=m";
-            case 32241 : return "+proj=utm +zone=41 +ellps=WGS72 +units=m";
-            case 32242 : return "+proj=utm +zone=42 +ellps=WGS72 +units=m";
-            case 32243 : return "+proj=utm +zone=43 +ellps=WGS72 +units=m";
-            case 32244 : return "+proj=utm +zone=44 +ellps=WGS72 +units=m";
-            case 32245 : return "+proj=utm +zone=45 +ellps=WGS72 +units=m";
-            case 32246 : return "+proj=utm +zone=46 +ellps=WGS72 +units=m";
-            case 32247 : return "+proj=utm +zone=47 +ellps=WGS72 +units=m";
-            case 32248 : return "+proj=utm +zone=48 +ellps=WGS72 +units=m";
-            case 32249 : return "+proj=utm +zone=49 +ellps=WGS72 +units=m";
-            case 32250 : return "+proj=utm +zone=50 +ellps=WGS72 +units=m";
-            case 32251 : return "+proj=utm +zone=51 +ellps=WGS72 +units=m";
-            case 32252 : return "+proj=utm +zone=52 +ellps=WGS72 +units=m";
-            case 32253 : return "+proj=utm +zone=53 +ellps=WGS72 +units=m";
-            case 32254 : return "+proj=utm +zone=54 +ellps=WGS72 +units=m";
-            case 32255 : return "+proj=utm +zone=55 +ellps=WGS72 +units=m";
-            case 32256 : return "+proj=utm +zone=56 +ellps=WGS72 +units=m";
-            case 32257 : return "+proj=utm +zone=57 +ellps=WGS72 +units=m";
-            case 32258 : return "+proj=utm +zone=58 +ellps=WGS72 +units=m";
-            case 32259 : return "+proj=utm +zone=59 +ellps=WGS72 +units=m";
-            case 32260 : return "+proj=utm +zone=60 +ellps=WGS72 +units=m";
-            case 32301 : return "+proj=utm +zone=1 +south +ellps=WGS72 +units=m";
-            case 32302 : return "+proj=utm +zone=2 +south +ellps=WGS72 +units=m";
-            case 32303 : return "+proj=utm +zone=3 +south +ellps=WGS72 +units=m";
-            case 32304 : return "+proj=utm +zone=4 +south +ellps=WGS72 +units=m";
-            case 32305 : return "+proj=utm +zone=5 +south +ellps=WGS72 +units=m";
-            case 32306 : return "+proj=utm +zone=6 +south +ellps=WGS72 +units=m";
-            case 32307 : return "+proj=utm +zone=7 +south +ellps=WGS72 +units=m";
-            case 32308 : return "+proj=utm +zone=8 +south +ellps=WGS72 +units=m";
-            case 32309 : return "+proj=utm +zone=9 +south +ellps=WGS72 +units=m";
-            case 32310 : return "+proj=utm +zone=10 +south +ellps=WGS72 +units=m";
-            case 32311 : return "+proj=utm +zone=11 +south +ellps=WGS72 +units=m";
-            case 32312 : return "+proj=utm +zone=12 +south +ellps=WGS72 +units=m";
-            case 32313 : return "+proj=utm +zone=13 +south +ellps=WGS72 +units=m";
-            case 32314 : return "+proj=utm +zone=14 +south +ellps=WGS72 +units=m";
-            case 32315 : return "+proj=utm +zone=15 +south +ellps=WGS72 +units=m";
-            case 32316 : return "+proj=utm +zone=16 +south +ellps=WGS72 +units=m";
-            case 32317 : return "+proj=utm +zone=17 +south +ellps=WGS72 +units=m";
-            case 32318 : return "+proj=utm +zone=18 +south +ellps=WGS72 +units=m";
-            case 32319 : return "+proj=utm +zone=19 +south +ellps=WGS72 +units=m";
-            case 32320 : return "+proj=utm +zone=20 +south +ellps=WGS72 +units=m";
-            case 32321 : return "+proj=utm +zone=21 +south +ellps=WGS72 +units=m";
-            case 32322 : return "+proj=utm +zone=22 +south +ellps=WGS72 +units=m";
-            case 32323 : return "+proj=utm +zone=23 +south +ellps=WGS72 +units=m";
-            case 32324 : return "+proj=utm +zone=24 +south +ellps=WGS72 +units=m";
-            case 32325 : return "+proj=utm +zone=25 +south +ellps=WGS72 +units=m";
-            case 32326 : return "+proj=utm +zone=26 +south +ellps=WGS72 +units=m";
-            case 32327 : return "+proj=utm +zone=27 +south +ellps=WGS72 +units=m";
-            case 32328 : return "+proj=utm +zone=28 +south +ellps=WGS72 +units=m";
-            case 32329 : return "+proj=utm +zone=29 +south +ellps=WGS72 +units=m";
-            case 32330 : return "+proj=utm +zone=30 +south +ellps=WGS72 +units=m";
-            case 32331 : return "+proj=utm +zone=31 +south +ellps=WGS72 +units=m";
-            case 32332 : return "+proj=utm +zone=32 +south +ellps=WGS72 +units=m";
-            case 32333 : return "+proj=utm +zone=33 +south +ellps=WGS72 +units=m";
-            case 32334 : return "+proj=utm +zone=34 +south +ellps=WGS72 +units=m";
-            case 32335 : return "+proj=utm +zone=35 +south +ellps=WGS72 +units=m";
-            case 32336 : return "+proj=utm +zone=36 +south +ellps=WGS72 +units=m";
-            case 32337 : return "+proj=utm +zone=37 +south +ellps=WGS72 +units=m";
-            case 32338 : return "+proj=utm +zone=38 +south +ellps=WGS72 +units=m";
-            case 32339 : return "+proj=utm +zone=39 +south +ellps=WGS72 +units=m";
-            case 32340 : return "+proj=utm +zone=40 +south +ellps=WGS72 +units=m";
-            case 32341 : return "+proj=utm +zone=41 +south +ellps=WGS72 +units=m";
-            case 32342 : return "+proj=utm +zone=42 +south +ellps=WGS72 +units=m";
-            case 32343 : return "+proj=utm +zone=43 +south +ellps=WGS72 +units=m";
-            case 32344 : return "+proj=utm +zone=44 +south +ellps=WGS72 +units=m";
-            case 32345 : return "+proj=utm +zone=45 +south +ellps=WGS72 +units=m";
-            case 32346 : return "+proj=utm +zone=46 +south +ellps=WGS72 +units=m";
-            case 32347 : return "+proj=utm +zone=47 +south +ellps=WGS72 +units=m";
-            case 32348 : return "+proj=utm +zone=48 +south +ellps=WGS72 +units=m";
-            case 32349 : return "+proj=utm +zone=49 +south +ellps=WGS72 +units=m";
-            case 32350 : return "+proj=utm +zone=50 +south +ellps=WGS72 +units=m";
-            case 32351 : return "+proj=utm +zone=51 +south +ellps=WGS72 +units=m";
-            case 32352 : return "+proj=utm +zone=52 +south +ellps=WGS72 +units=m";
-            case 32353 : return "+proj=utm +zone=53 +south +ellps=WGS72 +units=m";
-            case 32354 : return "+proj=utm +zone=54 +south +ellps=WGS72 +units=m";
-            case 32355 : return "+proj=utm +zone=55 +south +ellps=WGS72 +units=m";
-            case 32356 : return "+proj=utm +zone=56 +south +ellps=WGS72 +units=m";
-            case 32357 : return "+proj=utm +zone=57 +south +ellps=WGS72 +units=m";
-            case 32358 : return "+proj=utm +zone=58 +south +ellps=WGS72 +units=m";
-            case 32359 : return "+proj=utm +zone=59 +south +ellps=WGS72 +units=m";
-            case 32360 : return "+proj=utm +zone=60 +south +ellps=WGS72 +units=m";
-            case 32401 : return "+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32402 : return "+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32403 : return "+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32404 : return "+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32405 : return "+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32406 : return "+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32407 : return "+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32408 : return "+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32409 : return "+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32410 : return "+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32411 : return "+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32412 : return "+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32413 : return "+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32414 : return "+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32415 : return "+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32416 : return "+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32417 : return "+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32418 : return "+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32419 : return "+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32420 : return "+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32421 : return "+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32422 : return "+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32423 : return "+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32424 : return "+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32425 : return "+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32426 : return "+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32427 : return "+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32428 : return "+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32429 : return "+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32430 : return "+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32431 : return "+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32432 : return "+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32433 : return "+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32434 : return "+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32435 : return "+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32436 : return "+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32437 : return "+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32438 : return "+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32439 : return "+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32440 : return "+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32441 : return "+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32442 : return "+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32443 : return "+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32444 : return "+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32445 : return "+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32446 : return "+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32447 : return "+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32448 : return "+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32449 : return "+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32450 : return "+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32451 : return "+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32452 : return "+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32453 : return "+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32454 : return "+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32455 : return "+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32456 : return "+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32457 : return "+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32458 : return "+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32459 : return "+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32460 : return "+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32501 : return "+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32502 : return "+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32503 : return "+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32504 : return "+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32505 : return "+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32506 : return "+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32507 : return "+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32508 : return "+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32509 : return "+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32510 : return "+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32511 : return "+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32512 : return "+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32513 : return "+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32514 : return "+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32515 : return "+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32516 : return "+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32517 : return "+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32518 : return "+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32519 : return "+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32520 : return "+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32521 : return "+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32522 : return "+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32523 : return "+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32524 : return "+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32525 : return "+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32526 : return "+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32527 : return "+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32528 : return "+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32529 : return "+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32530 : return "+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32531 : return "+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32532 : return "+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32533 : return "+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32534 : return "+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32535 : return "+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32536 : return "+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32537 : return "+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32538 : return "+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32539 : return "+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32540 : return "+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32541 : return "+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32542 : return "+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32543 : return "+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32544 : return "+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32545 : return "+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32546 : return "+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32547 : return "+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32548 : return "+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32549 : return "+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32550 : return "+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32551 : return "+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32552 : return "+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32553 : return "+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32554 : return "+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32555 : return "+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32556 : return "+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32557 : return "+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32558 : return "+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32559 : return "+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32560 : return "+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m";
-            case 32601 : return "+proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32602 : return "+proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32603 : return "+proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32604 : return "+proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32605 : return "+proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32606 : return "+proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32607 : return "+proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32608 : return "+proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32609 : return "+proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32610 : return "+proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32611 : return "+proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32612 : return "+proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32613 : return "+proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32614 : return "+proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32615 : return "+proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32616 : return "+proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32617 : return "+proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32618 : return "+proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32619 : return "+proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32620 : return "+proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32621 : return "+proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32622 : return "+proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32623 : return "+proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32624 : return "+proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32625 : return "+proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32626 : return "+proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32627 : return "+proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32628 : return "+proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32629 : return "+proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32630 : return "+proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32631 : return "+proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32632 : return "+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32633 : return "+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32634 : return "+proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32635 : return "+proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32636 : return "+proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32637 : return "+proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32638 : return "+proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32639 : return "+proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32640 : return "+proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32641 : return "+proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32642 : return "+proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32643 : return "+proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32644 : return "+proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32645 : return "+proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32646 : return "+proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32647 : return "+proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32648 : return "+proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32649 : return "+proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32650 : return "+proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32651 : return "+proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32652 : return "+proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32653 : return "+proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32654 : return "+proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32655 : return "+proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32656 : return "+proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32657 : return "+proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32658 : return "+proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32659 : return "+proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32660 : return "+proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32661 : return "+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32662 : return "+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32664 : return "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +to_meter=0.3048006096012192";
-            case 32665 : return "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +to_meter=0.3048006096012192";
-            case 32666 : return "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +to_meter=0.3048006096012192";
-            case 32667 : return "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +to_meter=0.3048006096012192";
-            case 32701 : return "+proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32702 : return "+proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32703 : return "+proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32704 : return "+proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32705 : return "+proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32706 : return "+proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32707 : return "+proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32708 : return "+proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32709 : return "+proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32710 : return "+proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32711 : return "+proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32712 : return "+proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32713 : return "+proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32714 : return "+proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32715 : return "+proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32716 : return "+proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32717 : return "+proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32718 : return "+proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32719 : return "+proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32720 : return "+proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32721 : return "+proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32722 : return "+proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32723 : return "+proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32724 : return "+proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32725 : return "+proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32726 : return "+proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32727 : return "+proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32728 : return "+proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32729 : return "+proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32730 : return "+proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32731 : return "+proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32732 : return "+proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32733 : return "+proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32734 : return "+proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32735 : return "+proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32736 : return "+proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32737 : return "+proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32738 : return "+proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32739 : return "+proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32740 : return "+proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32741 : return "+proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32742 : return "+proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32743 : return "+proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32744 : return "+proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32745 : return "+proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32746 : return "+proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32747 : return "+proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32748 : return "+proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32749 : return "+proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32750 : return "+proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32751 : return "+proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32752 : return "+proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32753 : return "+proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32754 : return "+proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32755 : return "+proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32756 : return "+proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32757 : return "+proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32758 : return "+proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32759 : return "+proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32760 : return "+proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32761 : return "+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m";
-            case 32766 : return "+proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m";
-        }
-        return "";
-    }
-
-}
-#endif // DOXYGEN_NO_DETAIL
-
-// Overloaded function
-inline parameters init(int epsg_code)
-{
-    std::string args = detail::code_to_string(epsg_code);
-    return detail::pj_init_plus(args, false);
-}
-
-}}
-
-#endif
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/epsg_traits.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/epsg_traits.hpp
deleted file mode 100644
index d0da746..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/epsg_traits.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef _PROJECTIONS_EPSG_TRAITS_HPP
-#define _PROJECTIONS_EPSG_TRAITS_HPP
-
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-
-
-namespace ggl { namespace projection {
-
-/*!
-    \brief EPSG traits
-    \details With help of the EPSG traits library users can statically use projections
-        or coordinate systems specifying an EPSG code. The correct projections for transformations
-        are used automically then, still keeping static polymorphism.
-    \ingroup projection
-    \tparam EPSG epsg code
-    \tparam LL latlong point type
-    \tparam XY xy point type
-    \tparam PAR parameter type, normally not specified
-*/
-template <size_t EPSG, typename LLR, typename XY, typename PAR = parameters>
-struct epsg_traits
-{
-    // Specializations define:
-    // - type to get projection type
-    // - function par to get parameters
-};
-
-}}
-
-#endif
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/factory.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/factory.hpp
deleted file mode 100644
index 38fde1e..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/factory.hpp
+++ /dev/null
@@ -1,242 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_PROJECTIONS_FACTORY_HPP
-#define GGL_PROJECTIONS_FACTORY_HPP
-
-#include <map>
-#include <string>
-
-#include <boost/shared_ptr.hpp>
-
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/parameters.hpp>
-#include <ggl/extensions/gis/projections/proj/aea.hpp>
-#include <ggl/extensions/gis/projections/proj/aeqd.hpp>
-#include <ggl/extensions/gis/projections/proj/airy.hpp>
-#include <ggl/extensions/gis/projections/proj/aitoff.hpp>
-#include <ggl/extensions/gis/projections/proj/august.hpp>
-#include <ggl/extensions/gis/projections/proj/bacon.hpp>
-#include <ggl/extensions/gis/projections/proj/bipc.hpp>
-#include <ggl/extensions/gis/projections/proj/boggs.hpp>
-#include <ggl/extensions/gis/projections/proj/bonne.hpp>
-#include <ggl/extensions/gis/projections/proj/cass.hpp>
-#include <ggl/extensions/gis/projections/proj/cc.hpp>
-#include <ggl/extensions/gis/projections/proj/cea.hpp>
-#include <ggl/extensions/gis/projections/proj/chamb.hpp>  // control points XY
-#include <ggl/extensions/gis/projections/proj/collg.hpp>
-#include <ggl/extensions/gis/projections/proj/crast.hpp>
-#include <ggl/extensions/gis/projections/proj/denoy.hpp>
-#include <ggl/extensions/gis/projections/proj/eck1.hpp>
-#include <ggl/extensions/gis/projections/proj/eck2.hpp>
-#include <ggl/extensions/gis/projections/proj/eck3.hpp>
-#include <ggl/extensions/gis/projections/proj/eck4.hpp>
-#include <ggl/extensions/gis/projections/proj/eck5.hpp>
-#include <ggl/extensions/gis/projections/proj/eqc.hpp>
-#include <ggl/extensions/gis/projections/proj/eqdc.hpp>
-#include <ggl/extensions/gis/projections/proj/fahey.hpp>
-#include <ggl/extensions/gis/projections/proj/fouc_s.hpp>
-#include <ggl/extensions/gis/projections/proj/gall.hpp>
-#include <ggl/extensions/gis/projections/proj/geocent.hpp>
-#include <ggl/extensions/gis/projections/proj/geos.hpp>
-#include <ggl/extensions/gis/projections/proj/gins8.hpp>
-#include <ggl/extensions/gis/projections/proj/gn_sinu.hpp>
-#include <ggl/extensions/gis/projections/proj/gnom.hpp>
-#include <ggl/extensions/gis/projections/proj/goode.hpp> // includes two other projections
-#include <ggl/extensions/gis/projections/proj/gstmerc.hpp>
-#include <ggl/extensions/gis/projections/proj/hammer.hpp>
-#include <ggl/extensions/gis/projections/proj/hatano.hpp>
-#include <ggl/extensions/gis/projections/proj/krovak.hpp>
-#include <ggl/extensions/gis/projections/proj/imw_p.hpp> // xy functions after inverse
-#include <ggl/extensions/gis/projections/proj/laea.hpp>
-#include <ggl/extensions/gis/projections/proj/labrd.hpp>
-#include <ggl/extensions/gis/projections/proj/lagrng.hpp>
-#include <ggl/extensions/gis/projections/proj/larr.hpp>
-#include <ggl/extensions/gis/projections/proj/lask.hpp>
-#include <ggl/extensions/gis/projections/proj/latlong.hpp>
-#include <ggl/extensions/gis/projections/proj/lcc.hpp>
-#include <ggl/extensions/gis/projections/proj/lcca.hpp>
-#include <ggl/extensions/gis/projections/proj/loxim.hpp>
-#include <ggl/extensions/gis/projections/proj/lsat.hpp>
-#include <ggl/extensions/gis/projections/proj/mbtfpp.hpp>
-#include <ggl/extensions/gis/projections/proj/mbtfpq.hpp>
-#include <ggl/extensions/gis/projections/proj/mbt_fps.hpp>
-#include <ggl/extensions/gis/projections/proj/merc.hpp>
-#include <ggl/extensions/gis/projections/proj/mill.hpp>
-#include <ggl/extensions/gis/projections/proj/mod_ster.hpp>
-#include <ggl/extensions/gis/projections/proj/moll.hpp>
-#include <ggl/extensions/gis/projections/proj/nell.hpp>
-#include <ggl/extensions/gis/projections/proj/nell_h.hpp>
-#include <ggl/extensions/gis/projections/proj/nocol.hpp>
-#include <ggl/extensions/gis/projections/proj/nsper.hpp>
-#include <ggl/extensions/gis/projections/proj/nzmg.hpp>
-#include <ggl/extensions/gis/projections/proj/ob_tran.hpp> // includes other projection
-#include <ggl/extensions/gis/projections/proj/ocea.hpp>
-#include <ggl/extensions/gis/projections/proj/oea.hpp>
-#include <ggl/extensions/gis/projections/proj/omerc.hpp>
-#include <ggl/extensions/gis/projections/proj/ortho.hpp>
-#include <ggl/extensions/gis/projections/proj/poly.hpp>
-#include <ggl/extensions/gis/projections/proj/putp2.hpp>
-#include <ggl/extensions/gis/projections/proj/putp3.hpp>
-#include <ggl/extensions/gis/projections/proj/putp4p.hpp>
-#include <ggl/extensions/gis/projections/proj/putp5.hpp>
-#include <ggl/extensions/gis/projections/proj/putp6.hpp>
-#include <ggl/extensions/gis/projections/proj/robin.hpp>
-#include <ggl/extensions/gis/projections/proj/rouss.hpp>
-#include <ggl/extensions/gis/projections/proj/rpoly.hpp>
-#include <ggl/extensions/gis/projections/proj/sconics.hpp>
-#include <ggl/extensions/gis/projections/proj/somerc.hpp>
-#include <ggl/extensions/gis/projections/proj/stere.hpp>
-#include <ggl/extensions/gis/projections/proj/sterea.hpp>
-#include <ggl/extensions/gis/projections/proj/sts.hpp>
-#include <ggl/extensions/gis/projections/proj/tcc.hpp>
-#include <ggl/extensions/gis/projections/proj/tcea.hpp>
-#include <ggl/extensions/gis/projections/proj/tmerc.hpp>
-#include <ggl/extensions/gis/projections/proj/tpeqd.hpp>
-#include <ggl/extensions/gis/projections/proj/urm5.hpp>
-#include <ggl/extensions/gis/projections/proj/urmfps.hpp>
-#include <ggl/extensions/gis/projections/proj/vandg.hpp>
-#include <ggl/extensions/gis/projections/proj/vandg2.hpp>
-#include <ggl/extensions/gis/projections/proj/vandg4.hpp>
-#include <ggl/extensions/gis/projections/proj/wag2.hpp>
-#include <ggl/extensions/gis/projections/proj/wag3.hpp>
-#include <ggl/extensions/gis/projections/proj/wag7.hpp>
-#include <ggl/extensions/gis/projections/proj/wink1.hpp>
-#include <ggl/extensions/gis/projections/proj/wink2.hpp>
-
-namespace ggl { namespace projection
-{
-
-template <typename LatLong, typename Cartesian, typename Parameters = parameters>
-class factory : public detail::base_factory<LatLong, Cartesian, Parameters>
-{
-private:
-
-    typedef std::map<std::string, boost::shared_ptr<detail::factory_entry<LatLong, Cartesian, Parameters> > > prj_registry;
-    prj_registry m_registry;
-
-public:
-
-    factory()
-    {
-        detail::aea_init(*this);
-        detail::aeqd_init(*this);
-        detail::airy_init(*this);
-        detail::aitoff_init(*this);
-        detail::august_init(*this);
-        detail::bacon_init(*this);
-        detail::bipc_init(*this);
-        detail::boggs_init(*this);
-        detail::bonne_init(*this);
-        detail::cass_init(*this);
-        detail::cc_init(*this);
-        detail::cea_init(*this);
-        detail::chamb_init(*this);
-        detail::collg_init(*this);
-        detail::crast_init(*this);
-        detail::denoy_init(*this);
-        detail::eck1_init(*this);
-        detail::eck2_init(*this);
-        detail::eck3_init(*this);
-        detail::eck4_init(*this);
-        detail::eck5_init(*this);
-        detail::eqc_init(*this);
-        detail::eqdc_init(*this);
-        detail::fahey_init(*this);
-        detail::fouc_s_init(*this);
-        detail::gall_init(*this);
-        detail::geocent_init(*this);
-        detail::geos_init(*this);
-        detail::gins8_init(*this);
-        detail::gn_sinu_init(*this);
-        detail::gnom_init(*this);
-        detail::goode_init(*this);
-        detail::gstmerc_init(*this);
-        detail::hammer_init(*this);
-        detail::hatano_init(*this);
-        detail::krovak_init(*this);
-        detail::imw_p_init(*this);
-        detail::labrd_init(*this);
-        detail::laea_init(*this);
-        detail::lagrng_init(*this);
-        detail::larr_init(*this);
-        detail::lask_init(*this);
-        detail::latlong_init(*this);
-        detail::lcc_init(*this);
-        detail::lcca_init(*this);
-        detail::loxim_init(*this);
-        detail::lsat_init(*this);
-        detail::mbtfpp_init(*this);
-        detail::mbtfpq_init(*this);
-        detail::mbt_fps_init(*this);
-        detail::merc_init(*this);
-        detail::mill_init(*this);
-        detail::mod_ster_init(*this);
-        detail::moll_init(*this);
-        detail::nell_init(*this);
-        detail::nell_h_init(*this);
-        detail::nocol_init(*this);
-        detail::nsper_init(*this);
-        detail::nzmg_init(*this);
-        detail::ob_tran_init(*this);
-        detail::ocea_init(*this);
-        detail::oea_init(*this);
-        detail::omerc_init(*this);
-        detail::ortho_init(*this);
-        detail::poly_init(*this);
-        detail::putp2_init(*this);
-        detail::putp3_init(*this);
-        detail::putp4p_init(*this);
-        detail::putp5_init(*this);
-        detail::putp6_init(*this);
-        detail::robin_init(*this);
-        detail::rouss_init(*this);
-        detail::rpoly_init(*this);
-        detail::sconics_init(*this);
-        detail::somerc_init(*this);
-        detail::stere_init(*this);
-        detail::sterea_init(*this);
-        detail::sts_init(*this);
-        detail::tcc_init(*this);
-        detail::tcea_init(*this);
-        detail::tmerc_init(*this);
-        detail::tpeqd_init(*this);
-        detail::urm5_init(*this);
-        detail::urmfps_init(*this);
-        detail::vandg_init(*this);
-        detail::vandg2_init(*this);
-        detail::vandg4_init(*this);
-        detail::wag2_init(*this);
-        detail::wag3_init(*this);
-        detail::wag7_init(*this);
-        detail::wink1_init(*this);
-        detail::wink2_init(*this);
-    }
-
-    virtual ~factory() {}
-
-    virtual void add_to_factory(const std::string& name, detail::factory_entry<LatLong, Cartesian, Parameters>* sub)
-    {
-        m_registry[name].reset(sub);
-    }
-
-    inline projection<LatLong, Cartesian>* create_new(const Parameters& parameters)
-    {
-        typename prj_registry::iterator it = m_registry.find(parameters.name);
-        if (it != m_registry.end())
-        {
-            return it->second->create_new(parameters);
-        }
-
-        return 0;
-    }
-};
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_FACTORY_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/aasincos.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/aasincos.hpp
deleted file mode 100644
index 3952f6a..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/aasincos.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef GGL_PROJECTIONS_IMPL_AASINCOS_HPP
-#define GGL_PROJECTIONS_IMPL_AASINCOS_HPP
-
-#include <cmath>
-
-namespace ggl { namespace projection { namespace detail {
-
-namespace aasincos
-{
-    static const double ONE_TOL= 1.00000000000001;
-    //static const double TOL = 0.000000001;
-    static const double ATOL = 1e-50;
-}
-
-inline double aasin(double v)
-{
-    double av = 0;
-
-    if ((av = std::fabs(v)) >= 1.0)
-    {
-        if (av > aasincos::ONE_TOL)
-        {
-            throw proj_exception(-19);
-        }
-        return (v < 0.0 ? -HALFPI : HALFPI);
-    }
-
-    return std::asin(v);
-}
-
-inline double aacos(double v)
-{
-    double av = 0;
-
-    if ((av = std::fabs(v)) >= 1.0)
-    {
-        if (av > aasincos::ONE_TOL)
-        {
-            throw proj_exception(-19);
-        }
-        return (v < 0.0 ? PI : 0.0);
-    }
-
-    return acos(v);
-}
-
-inline double asqrt(double v)
-{
-    return ((v <= 0) ? 0. : std::sqrt(v));
-}
-
-inline double aatan2(double n, double d)
-{
-    return ((std::fabs(n) < aasincos::ATOL && std::fabs(d) < aasincos::ATOL) ? 0.0 : std::atan2(n, d));
-}
-
-}}} // namespace ggl::projection::impl
-
-#endif // GGL_PROJECTIONS_IMPL_AASINCOS_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/adjlon.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/adjlon.hpp
deleted file mode 100644
index 4e44db1..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/adjlon.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef GGL_PROJECTIONS_IMPL_ADJLON_HPP
-#define GGL_PROJECTIONS_IMPL_ADJLON_HPP
-
-#include <cmath>
-
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-
-namespace ggl { namespace projection { namespace detail {
-
-/* reduce argument to range +/- PI */
-inline double adjlon (double lon)
-{
-    static const double SPI = 3.14159265359;
-    static const double TWOPI = 6.2831853071795864769;
-    static const double ONEPI = 3.14159265358979323846;
-
-    if (std::fabs(lon) <= SPI)
-    {
-        return lon;
-    }
-
-    lon += ONEPI;  /* adjust to 0..2pi rad */
-    lon -= TWOPI * std::floor(lon / TWOPI); /* remove integral # of 'revolutions'*/
-    lon -= ONEPI;  /* adjust back to -pi..pi rad */
-
-    return lon;
-}
-
-}}} // namespace ggl::projection::impl
-
-#endif // GGL_PROJECTIONS_IMPL_ADJLON_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/base_dynamic.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/base_dynamic.hpp
deleted file mode 100644
index 85f3305..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/base_dynamic.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_PROJECTIONS_IMPL_BASE_DYNAMIC_HPP
-#define GGL_PROJECTIONS_IMPL_BASE_DYNAMIC_HPP
-
-#include <string>
-
-#include <boost/concept_check.hpp>
-
-#include <ggl/extensions/gis/projections/projection.hpp>
-
-namespace ggl { namespace projection {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-// Base-virtual-forward
-template <typename C, typename LL, typename XY, typename P>
-class base_v_f : public projection<LL, XY>
-{
-protected:
-
-    typedef typename projection<LL, XY>::LL_T LL_T;
-    typedef typename projection<LL, XY>::XY_T XY_T;
-
-public:
-
-    base_v_f(const P& params) : m_proj(params) {}
-
-    virtual P params() const {return m_proj.params();}
-
-    virtual bool forward(const LL& ll, XY& xy) const
-    {
-        return m_proj.forward(ll, xy);
-    }
-
-    virtual void fwd(LL_T& lp_lon, LL_T& lp_lat, XY_T& xy_x, XY_T& xy_y) const
-    {
-        m_proj.fwd(lp_lon, lp_lat, xy_x, xy_y);
-    }
-
-    virtual bool inverse(const XY& xy, LL& ll) const
-    {
-        boost::ignore_unused_variable_warning(xy);
-        boost::ignore_unused_variable_warning(ll);
-
-        // exception?
-        return false;
-    }
-    virtual void inv(XY_T& xy_x, XY_T& xy_y, LL_T& lp_lon, LL_T& lp_lat) const
-    {
-        boost::ignore_unused_variable_warning(xy_x);
-        boost::ignore_unused_variable_warning(xy_y);
-        boost::ignore_unused_variable_warning(lp_lon);
-        boost::ignore_unused_variable_warning(lp_lat);
-        // exception?
-    }
-
-    virtual std::string name() const
-    {
-        return m_proj.name();
-    }
-
-protected:
-
-    C m_proj;
-};
-
-// Base-virtual-forward/inverse
-template <typename C, typename LL, typename XY, typename P>
-class base_v_fi : public base_v_f<C, LL, XY, P>
-{
-private:
-
-    typedef typename base_v_f<C, LL, XY, P>::LL_T LL_T;
-    typedef typename base_v_f<C, LL, XY, P>::XY_T XY_T;
-
-public :
-
-    base_v_fi(const P& params) : base_v_f<C, LL, XY, P>(params) {}
-
-    virtual bool inverse(const XY& xy, LL& ll) const
-    {
-        return this->m_proj.inverse(xy, ll);
-    }
-
-    void inv(XY_T& xy_x, XY_T& xy_y, LL_T& lp_lon, LL_T& lp_lat) const
-    {
-        this->m_proj.inv(xy_x, xy_y, lp_lon, lp_lat);
-    }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_IMPL_BASE_DYNAMIC_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/base_static.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/base_static.hpp
deleted file mode 100644
index 0b7e5a3..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/base_static.hpp
+++ /dev/null
@@ -1,108 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_PROJECTIONS_IMPL_BASE_STATIC_HPP
-#define GGL_PROJECTIONS_IMPL_BASE_STATIC_HPP
-
-#if defined(_MSC_VER)
-// For CRTP, *this is acceptable in constructor -> turn warning off
-#pragma warning( disable : 4355 )
-#endif // defined(_MSC_VER)
-
-
-#include <string>
-
-#include <ggl/extensions/gis/projections/impl/pj_fwd.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_inv.hpp>
-
-namespace ggl { namespace projection {
-
-
-
-
-
-
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-// Base-template-forward
-template <typename Prj, typename LL, typename XY, typename P>
-struct base_t_f
-{
-public:
-
-    inline base_t_f(const Prj& prj, const P& params)
-        : m_par(params), m_prj(prj)
-    {}
-
-    inline P params() const {return m_par;}
-
-    inline bool forward(const LL& lp, XY& xy) const
-    {
-        try
-        {
-            pj_fwd(m_prj, m_par, lp, xy);
-            return true;
-        }
-        catch(...)
-        {
-            return false;
-        }
-    }
-
-    inline std::string name() const
-    {
-        return this->m_par.name;
-    }
-
-protected:
-
-    // Some projections do not work with float -> wrong results
-    // TODO: make traits which select <double> from int/float/double and else selects T
-
-    //typedef typename ggl::coordinate_type<LL>::type LL_T;
-    //typedef typename ggl::coordinate_type<XY>::type XY_T;
-    typedef double LL_T;
-    typedef double XY_T;
-
-    P m_par;
-    const Prj& m_prj;
-};
-
-// Base-template-forward/inverse
-template <typename Prj, typename LL, typename XY, typename P>
-struct base_t_fi : public base_t_f<Prj, LL, XY, P>
-{
-public :
-    inline base_t_fi(const Prj& prj, const P& params)
-        : base_t_f<Prj, LL, XY, P>(prj, params)
-    {}
-
-    inline bool inverse(const XY& xy, LL& lp) const
-    {
-        try
-        {
-            pj_inv(this->m_prj, this->m_par, xy, lp);
-            return true;
-        }
-        catch(...)
-        {
-            return false;
-        }
-    }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_IMPL_BASE_STATIC_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/factory_entry.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/factory_entry.hpp
deleted file mode 100644
index 0651d29..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/factory_entry.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_PROJECTIONS_IMPL_FACTORY_ENTRY_HPP
-#define GGL_PROJECTIONS_IMPL_FACTORY_ENTRY_HPP
-
-#include <string>
-
-#include <ggl/extensions/gis/projections/projection.hpp>
-
-namespace ggl { namespace projection { namespace detail {
-
-template <typename LL, typename XY, typename P>
-class factory_entry
-{
-public:
-
-    virtual ~factory_entry() {}
-    virtual projection<LL, XY>* create_new(const P& par) const = 0;
-};
-
-template <typename LL, typename XY, typename P>
-class base_factory
-{
-public:
-
-    virtual ~base_factory() {}
-    virtual void add_to_factory(const std::string& name, factory_entry<LL, XY, P>* sub) = 0;
-};
-
-}}} // namespace ggl::projection::impl
-
-#endif // GGL_PROJECTIONS_IMPL_FACTORY_ENTRY_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/function_overloads.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/function_overloads.hpp
deleted file mode 100644
index c45e97c..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/function_overloads.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_PROJECTIONS_IMPL_FUNCTION_OVERLOADS_HPP
-#define GGL_PROJECTIONS_IMPL_FUNCTION_OVERLOADS_HPP
-
-#include <cmath>
-
-namespace ggl { namespace projection {
-
-// Functions to resolve ambiguity when compiling with coordinates of different types
-/*inline double atan2(double a, double b)
-{
-    return std::atan2(a, b);
-}
-inline double pow(double a, double b)
-{
-    return std::pow(a, b);
-}
-*/
-
-inline int int_floor(double f)
-{
-    return int(std::floor(f));
-}
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_IMPL_FUNCTION_OVERLOADS_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/geocent.c b/include/builtin-ggl/ggl/extensions/gis/projections/impl/geocent.c
deleted file mode 100644
index 1018819..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/geocent.c
+++ /dev/null
@@ -1,454 +0,0 @@
-/***************************************************************************/
-/* RSC IDENTIFIER:  GEOCENTRIC
- *
- * ABSTRACT
- *
- *    This component provides conversions between Geodetic coordinates (latitude,
- *    longitude in radians and height in meters) and Geocentric coordinates
- *    (X, Y, Z) in meters.
- *
- * ERROR HANDLING
- *
- *    This component checks parameters for valid values.  If an invalid value
- *    is found, the error code is combined with the current error code using 
- *    the bitwise or.  This combining allows multiple error codes to be
- *    returned. The possible error codes are:
- *
- *      GEOCENT_NO_ERROR        : No errors occurred in function
- *      GEOCENT_LAT_ERROR       : Latitude out of valid range
- *                                 (-90 to 90 degrees)
- *      GEOCENT_LON_ERROR       : Longitude out of valid range
- *                                 (-180 to 360 degrees)
- *      GEOCENT_A_ERROR         : Semi-major axis lessthan or equal to zero
- *      GEOCENT_B_ERROR         : Semi-minor axis lessthan or equal to zero
- *      GEOCENT_A_LESS_B_ERROR  : Semi-major axis less than semi-minor axis
- *
- *
- * REUSE NOTES
- *
- *    GEOCENTRIC is intended for reuse by any application that performs
- *    coordinate conversions between geodetic coordinates and geocentric
- *    coordinates.
- *    
- *
- * REFERENCES
- *    
- *    An Improved Algorithm for Geocentric to Geodetic Coordinate Conversion,
- *    Ralph Toms, February 1996  UCRL-JC-123138.
- *    
- *    Further information on GEOCENTRIC can be found in the Reuse Manual.
- *
- *    GEOCENTRIC originated from : U.S. Army Topographic Engineering Center
- *                                 Geospatial Information Division
- *                                 7701 Telegraph Road
- *                                 Alexandria, VA  22310-3864
- *
- * LICENSES
- *
- *    None apply to this component.
- *
- * RESTRICTIONS
- *
- *    GEOCENTRIC has no restrictions.
- *
- * ENVIRONMENT
- *
- *    GEOCENTRIC was tested and certified in the following environments:
- *
- *    1. Solaris 2.5 with GCC version 2.8.1
- *    2. Windows 95 with MS Visual C++ version 6
- *
- * MODIFICATIONS
- *
- *    Date              Description
- *    ----              -----------
- *    25-02-97          Original Code
- *
- * $Log: geocent.c,v $
- * Revision 1.7  2007/09/11 20:19:36  fwarmerdam
- * avoid use of static variables to make reentrant
- *
- * Revision 1.6  2006/01/12 22:29:01  fwarmerdam
- * make geocent.c globals static to avoid conflicts
- *
- * Revision 1.5  2004/10/25 15:34:36  fwarmerdam
- * make names of geodetic funcs from geotrans unique
- *
- * Revision 1.4  2004/05/03 16:28:01  warmerda
- * Apply iterative solution to geocentric_to_geodetic as suggestion from
- * Lothar Gorling.
- * http://bugzilla.remotesensing.org/show_bug.cgi?id=563
- *
- * Revision 1.3  2002/01/08 15:04:08  warmerda
- * The latitude clamping fix from September in Convert_Geodetic_To_Geocentric
- * was botched.  Fixed up now.
- *
- */
-
-
-/***************************************************************************/
-/*
- *                               INCLUDES
- */
-#include <math.h>
-#include "geocent.h"
-/*
- *    math.h     - is needed for calls to sin, cos, tan and sqrt.
- *    geocent.h  - is needed for Error codes and prototype error checking.
- */
-
-
-/***************************************************************************/
-/*
- *                               DEFINES
- */
-#define PI         3.14159265358979323e0
-#define PI_OVER_2  (PI / 2.0e0)
-#define FALSE      0
-#define TRUE       1
-#define COS_67P5   0.38268343236508977  /* cosine of 67.5 degrees */
-#define AD_C       1.0026000            /* Toms region 1 constant */
-
-
-/***************************************************************************/
-/*
- *                              FUNCTIONS     
- */
-
-
-long pj_Set_Geocentric_Parameters (GeocentricInfo *gi, double a, double b) 
-
-{ /* BEGIN Set_Geocentric_Parameters */
-/*
- * The function Set_Geocentric_Parameters receives the ellipsoid parameters
- * as inputs and sets the corresponding state variables.
- *
- *    a  : Semi-major axis, in meters.          (input)
- *    b  : Semi-minor axis, in meters.          (input)
- */
-    long Error_Code = GEOCENT_NO_ERROR;
-
-    if (a <= 0.0)
-        Error_Code |= GEOCENT_A_ERROR;
-    if (b <= 0.0)
-        Error_Code |= GEOCENT_B_ERROR;
-    if (a < b)
-        Error_Code |= GEOCENT_A_LESS_B_ERROR;
-    if (!Error_Code)
-    {
-        gi->Geocent_a = a;
-        gi->Geocent_b = b;
-        gi->Geocent_a2 = a * a;
-        gi->Geocent_b2 = b * b;
-        gi->Geocent_e2 = (gi->Geocent_a2 - gi->Geocent_b2) / gi->Geocent_a2;
-        gi->Geocent_ep2 = (gi->Geocent_a2 - gi->Geocent_b2) / gi->Geocent_b2;
-    }
-    return (Error_Code);
-} /* END OF Set_Geocentric_Parameters */
-
-
-void pj_Get_Geocentric_Parameters (GeocentricInfo *gi,
-                                   double *a, 
-                                   double *b)
-{ /* BEGIN Get_Geocentric_Parameters */
-/*
- * The function Get_Geocentric_Parameters returns the ellipsoid parameters
- * to be used in geocentric coordinate conversions.
- *
- *    a  : Semi-major axis, in meters.          (output)
- *    b  : Semi-minor axis, in meters.          (output)
- */
-
-    *a = gi->Geocent_a;
-    *b = gi->Geocent_b;
-} /* END OF Get_Geocentric_Parameters */
-
-
-long pj_Convert_Geodetic_To_Geocentric (GeocentricInfo *gi,
-                                        double Latitude,
-                                        double Longitude,
-                                        double Height,
-                                        double *X,
-                                        double *Y,
-                                        double *Z) 
-{ /* BEGIN Convert_Geodetic_To_Geocentric */
-/*
- * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates
- * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),
- * according to the current ellipsoid parameters.
- *
- *    Latitude  : Geodetic latitude in radians                     (input)
- *    Longitude : Geodetic longitude in radians                    (input)
- *    Height    : Geodetic height, in meters                       (input)
- *    X         : Calculated Geocentric X coordinate, in meters    (output)
- *    Y         : Calculated Geocentric Y coordinate, in meters    (output)
- *    Z         : Calculated Geocentric Z coordinate, in meters    (output)
- *
- */
-  long Error_Code = GEOCENT_NO_ERROR;
-  double Rn;            /*  Earth radius at location  */
-  double Sin_Lat;       /*  sin(Latitude)  */
-  double Sin2_Lat;      /*  Square of sin(Latitude)  */
-  double Cos_Lat;       /*  cos(Latitude)  */
-
-  /*
-  ** Don't blow up if Latitude is just a little out of the value
-  ** range as it may just be a rounding issue.  Also removed longitude
-  ** test, it should be wrapped by cos() and sin().  NFW for PROJ.4, Sep/2001.
-  */
-  if( Latitude < -PI_OVER_2 && Latitude > -1.001 * PI_OVER_2 )
-      Latitude = -PI_OVER_2;
-  else if( Latitude > PI_OVER_2 && Latitude < 1.001 * PI_OVER_2 )
-      Latitude = PI_OVER_2;
-  else if ((Latitude < -PI_OVER_2) || (Latitude > PI_OVER_2))
-  { /* Latitude out of range */
-    Error_Code |= GEOCENT_LAT_ERROR;
-  }
-
-  if (!Error_Code)
-  { /* no errors */
-    if (Longitude > PI)
-      Longitude -= (2*PI);
-    Sin_Lat = sin(Latitude);
-    Cos_Lat = cos(Latitude);
-    Sin2_Lat = Sin_Lat * Sin_Lat;
-    Rn = gi->Geocent_a / (sqrt(1.0e0 - gi->Geocent_e2 * Sin2_Lat));
-    *X = (Rn + Height) * Cos_Lat * cos(Longitude);
-    *Y = (Rn + Height) * Cos_Lat * sin(Longitude);
-    *Z = ((Rn * (1 - gi->Geocent_e2)) + Height) * Sin_Lat;
-
-  }
-  return (Error_Code);
-} /* END OF Convert_Geodetic_To_Geocentric */
-
-/*
- * The function Convert_Geocentric_To_Geodetic converts geocentric
- * coordinates (X, Y, Z) to geodetic coordinates (latitude, longitude, 
- * and height), according to the current ellipsoid parameters.
- *
- *    X         : Geocentric X coordinate, in meters.         (input)
- *    Y         : Geocentric Y coordinate, in meters.         (input)
- *    Z         : Geocentric Z coordinate, in meters.         (input)
- *    Latitude  : Calculated latitude value in radians.       (output)
- *    Longitude : Calculated longitude value in radians.      (output)
- *    Height    : Calculated height value, in meters.         (output)
- */
-
-#define USE_ITERATIVE_METHOD
-
-void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo *gi,
-                                        double X,
-                                        double Y, 
-                                        double Z,
-                                        double *Latitude,
-                                        double *Longitude,
-                                        double *Height)
-{ /* BEGIN Convert_Geocentric_To_Geodetic */
-#if !defined(USE_ITERATIVE_METHOD)
-/*
- * The method used here is derived from 'An Improved Algorithm for
- * Geocentric to Geodetic Coordinate Conversion', by Ralph Toms, Feb 1996
- */
-
-/* Note: Variable names follow the notation used in Toms, Feb 1996 */
-
-    double W;        /* distance from Z axis */
-    double W2;       /* square of distance from Z axis */
-    double T0;       /* initial estimate of vertical component */
-    double T1;       /* corrected estimate of vertical component */
-    double S0;       /* initial estimate of horizontal component */
-    double S1;       /* corrected estimate of horizontal component */
-    double Sin_B0;   /* sin(B0), B0 is estimate of Bowring aux variable */
-    double Sin3_B0;  /* cube of sin(B0) */
-    double Cos_B0;   /* cos(B0) */
-    double Sin_p1;   /* sin(phi1), phi1 is estimated latitude */
-    double Cos_p1;   /* cos(phi1) */
-    double Rn;       /* Earth radius at location */
-    double Sum;      /* numerator of cos(phi1) */
-    int At_Pole;     /* indicates location is in polar region */
-
-    At_Pole = FALSE;
-    if (X != 0.0)
-    {
-        *Longitude = atan2(Y,X);
-    }
-    else
-    {
-        if (Y > 0)
-        {
-            *Longitude = PI_OVER_2;
-        }
-        else if (Y < 0)
-        {
-            *Longitude = -PI_OVER_2;
-        }
-        else
-        {
-            At_Pole = TRUE;
-            *Longitude = 0.0;
-            if (Z > 0.0)
-            {  /* north pole */
-                *Latitude = PI_OVER_2;
-            }
-            else if (Z < 0.0)
-            {  /* south pole */
-                *Latitude = -PI_OVER_2;
-            }
-            else
-            {  /* center of earth */
-                *Latitude = PI_OVER_2;
-                *Height = -Geocent_b;
-                return;
-            } 
-        }
-    }
-    W2 = X*X + Y*Y;
-    W = sqrt(W2);
-    T0 = Z * AD_C;
-    S0 = sqrt(T0 * T0 + W2);
-    Sin_B0 = T0 / S0;
-    Cos_B0 = W / S0;
-    Sin3_B0 = Sin_B0 * Sin_B0 * Sin_B0;
-    T1 = Z + gi->Geocent_b * gi->Geocent_ep2 * Sin3_B0;
-    Sum = W - gi->Geocent_a * gi->Geocent_e2 * Cos_B0 * Cos_B0 * Cos_B0;
-    S1 = sqrt(T1*T1 + Sum * Sum);
-    Sin_p1 = T1 / S1;
-    Cos_p1 = Sum / S1;
-    Rn = gi->Geocent_a / sqrt(1.0 - gi->Geocent_e2 * Sin_p1 * Sin_p1);
-    if (Cos_p1 >= COS_67P5)
-    {
-        *Height = W / Cos_p1 - Rn;
-    }
-    else if (Cos_p1 <= -COS_67P5)
-    {
-        *Height = W / -Cos_p1 - Rn;
-    }
-    else
-    {
-        *Height = Z / Sin_p1 + Rn * (gi->Geocent_e2 - 1.0);
-    }
-    if (At_Pole == FALSE)
-    {
-        *Latitude = atan(Sin_p1 / Cos_p1);
-    }
-#else /* defined(USE_ITERATIVE_METHOD) */
-/*
-* Reference...
-* ============
-* Wenzel, H.-G.(1985): Hochauflösende Kugelfunktionsmodelle für
-* das Gravitationspotential der Erde. Wiss. Arb. Univ. Hannover
-* Nr. 137, p. 130-131.
-
-* Programmed by GGA- Leibniz-Institue of Applied Geophysics
-*               Stilleweg 2
-*               D-30655 Hannover
-*               Federal Republic of Germany
-*               Internet: www.gga-hannover.de
-*
-*               Hannover, March 1999, April 2004.
-*               see also: comments in statements
-* remarks:
-* Mathematically exact and because of symmetry of rotation-ellipsoid,
-* each point (X,Y,Z) has at least two solutions (Latitude1,Longitude1,Height1) and
-* (Latitude2,Longitude2,Height2). Is point=(0.,0.,Z) (P=0.), so you get even
-* four solutions,	every two symmetrical to the semi-minor axis.
-* Here Height1 and Height2 have at least a difference in order of
-* radius of curvature (e.g. (0,0,b)=> (90.,0.,0.) or (-90.,0.,-2b);
-* (a+100.)*(sqrt(2.)/2.,sqrt(2.)/2.,0.) => (0.,45.,100.) or
-* (0.,225.,-(2a+100.))).
-* The algorithm always computes (Latitude,Longitude) with smallest |Height|.
-* For normal computations, that means |Height|<10000.m, algorithm normally
-* converges after to 2-3 steps!!!
-* But if |Height| has the amount of length of ellipsoid's axis
-* (e.g. -6300000.m),	algorithm needs about 15 steps.
-*/
-
-/* local defintions and variables */
-/* end-criterium of loop, accuracy of sin(Latitude) */
-#define genau   1.E-12
-#define genau2  (genau*genau)
-#define maxiter 30
-
-    double P;        /* distance between semi-minor axis and location */
-    double RR;       /* distance between center and location */
-    double CT;       /* sin of geocentric latitude */
-    double ST;       /* cos of geocentric latitude */
-    double RX;
-    double RK;
-    double RN;       /* Earth radius at location */
-    double CPHI0;    /* cos of start or old geodetic latitude in iterations */
-    double SPHI0;    /* sin of start or old geodetic latitude in iterations */
-    double CPHI;     /* cos of searched geodetic latitude */
-    double SPHI;     /* sin of searched geodetic latitude */
-    double SDPHI;    /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */
-    int At_Pole;     /* indicates location is in polar region */
-    int iter;        /* # of continous iteration, max. 30 is always enough (s.a.) */
-
-    At_Pole = FALSE;
-    P = sqrt(X*X+Y*Y);
-    RR = sqrt(X*X+Y*Y+Z*Z);
-
-/*	special cases for latitude and longitude */
-    if (P/gi->Geocent_a < genau) {
-
-/*  special case, if P=0. (X=0., Y=0.) */
-        At_Pole = TRUE;
-	*Longitude = 0.;
-
-/*  if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis
- *  of ellipsoid (=center of mass), Latitude becomes PI/2 */
-        if (RR/gi->Geocent_a < genau) {
-            *Latitude = PI_OVER_2;
-            *Height   = -gi->Geocent_b;
-            return ;
-
-        }
-    }
-    else {
-/*  ellipsoidal (geodetic) longitude
- *  interval: -PI < Longitude <= +PI */
-        *Longitude=atan2(Y,X);
-    }
-
-/* --------------------------------------------------------------
- * Following iterative algorithm was developped by
- * "Institut für Erdmessung", University of Hannover, July 1988.
- * Internet: www.ife.uni-hannover.de
- * Iterative computation of CPHI,SPHI and Height.
- * Iteration of CPHI and SPHI to 10**-12 radian resp.
- * 2*10**-7 arcsec.
- * --------------------------------------------------------------
- */
-    CT = Z/RR;
-    ST = P/RR;
-    RX = 1.0/sqrt(1.0-gi->Geocent_e2*(2.0-gi->Geocent_e2)*ST*ST);
-    CPHI0 = ST*(1.0-gi->Geocent_e2)*RX;
-    SPHI0 = CT*RX;
-    iter = 0;
-
-/* loop to find sin(Latitude) resp. Latitude
- * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */
-    do
-    {
-        iter++;
-        RN = gi->Geocent_a/sqrt(1.0-gi->Geocent_e2*SPHI0*SPHI0);
-
-/*  ellipsoidal (geodetic) height */
-        *Height = P*CPHI0+Z*SPHI0-RN*(1.0-gi->Geocent_e2*SPHI0*SPHI0);
-
-        RK = gi->Geocent_e2*RN/(RN+*Height);
-        RX = 1.0/sqrt(1.0-RK*(2.0-RK)*ST*ST);
-        CPHI = ST*(1.0-RK)*RX;
-        SPHI = CT*RX;
-        SDPHI = SPHI*CPHI0-CPHI*SPHI0;
-        CPHI0 = CPHI;
-        SPHI0 = SPHI;
-    }
-    while (SDPHI*SDPHI > genau2 && iter < maxiter);
-
-/*	ellipsoidal (geodetic) latitude */
-    *Latitude=atan(SPHI/fabs(CPHI));
-
-    return;
-#endif /* defined(USE_ITERATIVE_METHOD) */
-} /* END OF Convert_Geocentric_To_Geodetic */
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/geocent.h b/include/builtin-ggl/ggl/extensions/gis/projections/impl/geocent.h
deleted file mode 100644
index d6e90d2..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/geocent.h
+++ /dev/null
@@ -1,179 +0,0 @@
-#ifndef GEOCENT_H
-#define GEOCENT_H
-
-/***************************************************************************/
-/* RSC IDENTIFIER:  GEOCENTRIC
- *
- * ABSTRACT
- *
- *    This component provides conversions between Geodetic coordinates (latitude,
- *    longitude in radians and height in meters) and Geocentric coordinates
- *    (X, Y, Z) in meters.
- *
- * ERROR HANDLING
- *
- *    This component checks parameters for valid values.  If an invalid value
- *    is found, the error code is combined with the current error code using 
- *    the bitwise or.  This combining allows multiple error codes to be
- *    returned. The possible error codes are:
- *
- *      GEOCENT_NO_ERROR        : No errors occurred in function
- *      GEOCENT_LAT_ERROR       : Latitude out of valid range
- *                                 (-90 to 90 degrees)
- *      GEOCENT_LON_ERROR       : Longitude out of valid range
- *                                 (-180 to 360 degrees)
- *      GEOCENT_A_ERROR         : Semi-major axis less than or equal to zero
- *      GEOCENT_B_ERROR         : Semi-minor axis less than or equal to zero
- *      GEOCENT_A_LESS_B_ERROR  : Semi-major axis less than semi-minor axis
- *
- *
- * REUSE NOTES
- *
- *    GEOCENTRIC is intended for reuse by any application that performs
- *    coordinate conversions between geodetic coordinates and geocentric
- *    coordinates.
- *    
- *
- * REFERENCES
- *    
- *    An Improved Algorithm for Geocentric to Geodetic Coordinate Conversion,
- *    Ralph Toms, February 1996  UCRL-JC-123138.
- *    
- *    Further information on GEOCENTRIC can be found in the Reuse Manual.
- *
- *    GEOCENTRIC originated from : U.S. Army Topographic Engineering Center
- *                                 Geospatial Information Division
- *                                 7701 Telegraph Road
- *                                 Alexandria, VA  22310-3864
- *
- * LICENSES
- *
- *    None apply to this component.
- *
- * RESTRICTIONS
- *
- *    GEOCENTRIC has no restrictions.
- *
- * ENVIRONMENT
- *
- *    GEOCENTRIC was tested and certified in the following environments:
- *
- *    1. Solaris 2.5 with GCC version 2.8.1
- *    2. Windows 95 with MS Visual C++ version 6
- *
- * MODIFICATIONS
- *
- *    Date              Description
- *    ----              -----------
- *
- *
- */
-
-
-/***************************************************************************/
-/*
- *                              DEFINES
- */
-#define GEOCENT_NO_ERROR        0x0000
-#define GEOCENT_LAT_ERROR       0x0001
-#define GEOCENT_LON_ERROR       0x0002
-#define GEOCENT_A_ERROR         0x0004
-#define GEOCENT_B_ERROR         0x0008
-#define GEOCENT_A_LESS_B_ERROR  0x0010
-
-
-/***************************************************************************/
-/*
- *                              FUNCTION PROTOTYPES
- */
-
-/* ensure proper linkage to c++ programs */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct 
-{
-    double Geocent_a;        /* Semi-major axis of ellipsoid in meters */
-    double Geocent_b;        /* Semi-minor axis of ellipsoid           */
-    double Geocent_a2;       /* Square of semi-major axis */
-    double Geocent_b2;       /* Square of semi-minor axis */
-    double Geocent_e2;       /* Eccentricity squared  */
-    double Geocent_ep2;      /* 2nd eccentricity squared */
-} GeocentricInfo;
-
-void pj_Init_Geocentric( GeocentricInfo *gi );
-long pj_Set_Geocentric_Parameters( GeocentricInfo *gi, 
-                                   double a, 
-                                   double b);
-
-/*
- * The function Set_Geocentric_Parameters receives the ellipsoid parameters
- * as inputs and sets the corresponding state variables.
- *
- *    a  : Semi-major axis, in meters.          (input)
- *    b  : Semi-minor axis, in meters.          (input)
- */
-
-
-void pj_Get_Geocentric_Parameters ( GeocentricInfo *gi,
-                                    double *a, 
-                                    double *b);
-
-/*
- * The function Get_Geocentric_Parameters returns the ellipsoid parameters
- * to be used in geocentric coordinate conversions.
- *
- *    a  : Semi-major axis, in meters.          (output)
- *    b  : Semi-minor axis, in meters.          (output)
- */
-
-
-long pj_Convert_Geodetic_To_Geocentric ( GeocentricInfo *gi,
-                                         double Latitude,
-                                         double Longitude,
-                                         double Height,
-                                         double *X,
-                                         double *Y,
-                                         double *Z);
-/*
- * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates
- * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),
- * according to the current ellipsoid parameters.
- *
- *    Latitude  : Geodetic latitude in radians                     (input)
- *    Longitude : Geodetic longitude in radians                    (input)
- *    Height    : Geodetic height, in meters                       (input)
- *    X         : Calculated Geocentric X coordinate, in meters.   (output)
- *    Y         : Calculated Geocentric Y coordinate, in meters.   (output)
- *    Z         : Calculated Geocentric Z coordinate, in meters.   (output)
- *
- */
-
-
-void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo *gi,
-                                        double X,
-                                        double Y, 
-                                        double Z,
-                                        double *Latitude,
-                                        double *Longitude,
-                                        double *Height);
-/*
- * The function Convert_Geocentric_To_Geodetic converts geocentric
- * coordinates (X, Y, Z) to geodetic coordinates (latitude, longitude, 
- * and height), according to the current ellipsoid parameters.
- *
- *    X         : Geocentric X coordinate, in meters.         (input)
- *    Y         : Geocentric Y coordinate, in meters.         (input)
- *    Z         : Geocentric Z coordinate, in meters.         (input)
- *    Latitude  : Calculated latitude value in radians.       (output)
- *    Longitude : Calculated longitude value in radians.      (output)
- *    Height    : Calculated height value, in meters.         (output)
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* GEOCENT_H */
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_auth.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_auth.hpp
deleted file mode 100644
index 246f674..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_auth.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef GGL_PROJECTIONS_IMPL_PJ_AUTH_HPP
-#define GGL_PROJECTIONS_IMPL_PJ_AUTH_HPP
-
-#include <cassert>
-#include <cmath>
-
-namespace ggl { namespace projection { namespace detail {
-
-static const double P00 = .33333333333333333333;
-static const double P01 = .17222222222222222222;
-static const double P02 = .10257936507936507936;
-static const double P10 = .06388888888888888888;
-static const double P11 = .06640211640211640211;
-static const double P20 = .01641501294219154443;
-static const int APA_SIZE = 3;
-
-/* determine latitude from authalic latitude */
-inline void pj_authset(double es, double* APA)
-{
-    assert(0 != APA);
-
-    double t = 0;
-
-    // if (APA = (double *)pj_malloc(APA_SIZE * sizeof(double)))
-    {
-        APA[0] = es * P00;
-        t = es * es;
-        APA[0] += t * P01;
-        APA[1] = t * P10;
-        t *= es;
-        APA[0] += t * P02;
-        APA[1] += t * P11;
-        APA[2] = t * P20;
-    }
-}
-
-inline double pj_authlat(double beta, const double* APA)
-{
-    assert(0 != APA);
-
-    const double t = beta + beta;
-
-    return(beta + APA[0] * std::sin(t) + APA[1] * std::sin(t + t) + APA[2] * std::sin(t + t + t));
-}
-
-}}} // namespace ggl::projection::impl
-
-#endif // GGL_PROJECTIONS_IMPL_PJ_AUTH_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_datum_set.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_datum_set.hpp
deleted file mode 100644
index 7c9efec..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_datum_set.hpp
+++ /dev/null
@@ -1,164 +0,0 @@
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef GGL_PROJECTIONS_IMPL_PJ_DATUM_SET_HPP
-#define GGL_PROJECTIONS_IMPL_PJ_DATUM_SET_HPP
-
-#include <string>
-#include <vector>
-
-#include <boost/algorithm/string.hpp>
-
-#include <ggl/extensions/gis/projections/impl/pj_datums.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_param.hpp>
-#include <ggl/extensions/gis/projections/parameters.hpp>
-
-namespace ggl { namespace projection { namespace detail {
-
-
-/* SEC_TO_RAD = Pi/180/3600 */
-const double SEC_TO_RAD = 4.84813681109535993589914102357e-6;
-
-/************************************************************************/
-/*                            pj_datum_set()                            */
-/************************************************************************/
-
-inline void pj_datum_set(std::vector<pvalue>& pvalues, parameters& projdef)
-{
-    std::string name, towgs84, nadgrids;
-
-    projdef.datum_type = PJD_UNKNOWN;
-
-    /* -------------------------------------------------------------------- */
-    /*      Is there a datum definition in the parameter list?  If so,     */
-    /*      add the defining values to the parameter list.  Note that       */
-    /*      this will append the ellipse definition as well as the          */
-    /*      towgs84= and related parameters.  It should also be pointed     */
-    /*      out that the addition is permanent rather than temporary        */
-    /*      like most other keyword expansion so that the ellipse           */
-    /*      definition will last into the pj_ell_set() function called      */
-    /*      after this one.                                                 */
-    /* -------------------------------------------------------------------- */
-    name = pj_param(pvalues, "sdatum").s;
-    if(! name.empty())
-    {
-        /* find the datum definition */
-        const int n = sizeof(pj_datums) / sizeof(pj_datums[0]);
-        int index = -1;
-        for (int i = 0; i < n && index == -1; i++)
-        {
-            if(pj_datums[i].id == name)
-            {
-                index = i;
-            }
-        }
-
-        if (index == -1)
-        {
-            throw proj_exception(-9);
-        }
-
-        if(! pj_datums[index].ellipse_id.empty())
-        {
-            std::string entry("ellps=");
-            entry +=pj_datums[index].ellipse_id;
-            pvalues.push_back(pj_mkparam(entry));
-        }
-
-        if(! pj_datums[index].defn.empty())
-        {
-            pvalues.push_back(pj_mkparam(pj_datums[index].defn));
-        }
-    }
-
-/* -------------------------------------------------------------------- */
-/*      Check for nadgrids parameter.                                   */
-/* -------------------------------------------------------------------- */
-    nadgrids = pj_param(pvalues, "snadgrids").s;
-    towgs84 = pj_param(pvalues, "stowgs84").s;
-    if(! nadgrids.empty())
-    {
-        /* We don't actually save the value separately.  It will continue
-           to exist int he param list for use in pj_apply_gridshift.c */
-
-        projdef.datum_type = PJD_GRIDSHIFT;
-    }
-
-/* -------------------------------------------------------------------- */
-/*      Check for towgs84 parameter.                                    */
-/* -------------------------------------------------------------------- */
-    else if(! towgs84.empty())
-    {
-        int parm_count = 0;
-
-        int n = sizeof(projdef.datum_params) / sizeof(projdef.datum_params[0]);
-
-        /* parse out the pvalues */
-        std::vector<std::string> parm;
-        boost::split(parm, towgs84, boost::is_any_of(" ,"));
-        for (std::vector<std::string>::const_iterator it = parm.begin();
-            it != parm.end() && parm_count < n;
-            ++it)
-        {
-            projdef.datum_params[parm_count++] = atof(it->c_str());
-        }
-
-        if( projdef.datum_params[3] != 0.0
-            || projdef.datum_params[4] != 0.0
-            || projdef.datum_params[5] != 0.0
-            || projdef.datum_params[6] != 0.0 )
-        {
-            projdef.datum_type = PJD_7PARAM;
-
-            /* transform from arc seconds to radians */
-            projdef.datum_params[3] *= SEC_TO_RAD;
-            projdef.datum_params[4] *= SEC_TO_RAD;
-            projdef.datum_params[5] *= SEC_TO_RAD;
-            /* transform from parts per million to scaling factor */
-            projdef.datum_params[6] =
-                (projdef.datum_params[6]/1000000.0) + 1;
-        }
-        else
-        {
-            projdef.datum_type = PJD_3PARAM;
-        }
-
-        /* Note that pj_init() will later switch datum_type to
-           PJD_WGS84 if shifts are all zero, and ellipsoid is WGS84 or GRS80 */
-    }
-}
-
-}}} // namespace ggl::projection::impl
-
-#endif // GGL_PROJECTIONS_IMPL_PJ_DATUM_SET_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_datums.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_datums.hpp
deleted file mode 100644
index cac6a7a..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_datums.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef GGL_PROJECTIONS_IMPL_PJ_DATUMS_HPP
-#define GGL_PROJECTIONS_IMPL_PJ_DATUMS_HPP
-
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-
-namespace ggl { namespace projection { namespace detail {
-
-/*
- * The ellipse code must match one from pj_ellps.c.  The datum id should
- * be kept to 12 characters or less if possible.  Use the official OGC
- * datum name for the comments if available.
- */
-
-static const PJ_DATUMS pj_datums[] =
-{
-    /* id          definition        ellipse  comments */
-    /* --          ----------        -------  -------- */
-    { "WGS84",     "towgs84=0,0,0",  "WGS84", "" },
-
-    { "GGRS87",    "towgs84=-199.87,74.79,246.62",
-                                     "GRS80", "Greek_Geodetic_Reference_System_1987" },
-
-    { "NAD83",     "towgs84=0,0,0",  "GRS80","North_American_Datum_1983" },
-
-    { "NAD27",     "nadgrids=@conus, at alaska, at ntv2_0.gsb, at ntv1_can.dat",
-                                     "clrk66", "North_American_Datum_1927" },
-
-    { "potsdam",   "towgs84=606.0,23.0,413.0",
-                                     "bessel",  "Potsdam Rauenberg 1950 DHDN" },
-
-    { "carthage",  "towgs84=-263.0,6.0,431.0",
-                                     "clark80",  "Carthage 1934 Tunisia" },
-
-    { "hermannskogel", "towgs84=653.0,-212.0,449.0",
-                                     "bessel",  "Hermannskogel" },
-
-    { "ire65",     "towgs84=482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",
-                                     "mod_airy",  "Ireland 1965" },
-
-    { "nzgd49",    "towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",
-                                     "intl", "New Zealand Geodetic Datum 1949" },
-
-    { "OSGB36",    "towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",
-                                     "airy", "Airy 1830" }
-};
-
-
-static const PJ_PRIME_MERIDIANS pj_prime_meridians[] =
-{
-    /* id          definition */
-    /* --          ---------- */
-    { "greenwich", "0dE" },
-    { "lisbon",    "9d07'54.862\"W" },
-    { "paris",     "2d20'14.025\"E" },
-    { "bogota",    "74d04'51.3\"W" },
-    { "madrid",    "3d41'16.58\"W" },
-    { "rome",      "12d27'8.4\"E" },
-    { "bern",      "7d26'22.5\"E" },
-    { "jakarta",   "106d48'27.79\"E" },
-    { "ferro",     "17d40'W" },
-    { "brussels",  "4d22'4.71\"E" },
-    { "stockholm", "18d3'29.8\"E" },
-    { "athens",    "23d42'58.815\"E" },
-    { "oslo",      "10d43'22.5\"E" }
-};
-
-}}} // namespace ggl::projection::impl
-
-#endif // GGL_PROJECTIONS_IMPL_PJ_DATUMS_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_ell_set.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_ell_set.hpp
deleted file mode 100644
index c6083cc..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_ell_set.hpp
+++ /dev/null
@@ -1,150 +0,0 @@
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef GGL_PROJECTIONS_IMPL_PJ_ELL_SET_HPP
-#define GGL_PROJECTIONS_IMPL_PJ_ELL_SET_HPP
-
-#include <string>
-#include <vector>
-
-#include <ggl/extensions/gis/projections/impl/pj_ellps.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_param.hpp>
-
-namespace ggl { namespace projection { namespace detail {
-
-/* set ellipsoid parameters a and es */
-static const double SIXTH =  .1666666666666666667; /* 1/6 */
-static const double RA4 = .04722222222222222222; /* 17/360 */
-static const double RA6 = .02215608465608465608; /* 67/3024 */
-static const double RV4 = .06944444444444444444; /* 5/72 */
-static const double RV6 = .04243827160493827160; /* 55/1296 */
-
-/* initialize geographic shape parameters */
-inline void pj_ell_set(std::vector<pvalue>& parameters, double &a, double &es)
-{
-    int i = 0;
-    double b = 0.0;
-    double e = 0.0;
-    std::string name;
-
-    /* check for varying forms of ellipsoid input */
-    a = es = 0.;
-
-    /* R takes precedence */
-    if (pj_param(parameters, "tR").i)
-        a = pj_param(parameters, "dR").f;
-    else { /* probable elliptical figure */
-
-        /* check if ellps present and temporarily append its values to pl */
-        name = pj_param(parameters, "sellps").s;
-        if (! name.empty())
-        {
-            const int n = sizeof(pj_ellps) / sizeof(pj_ellps[0]);
-            int index = -1;
-            for (int i = 0; i < n && index == -1; i++)
-            {
-                if(pj_ellps[i].id == name)
-                {
-                    index = i;
-                }
-            }
-
-            if (index == -1) { throw proj_exception(-9); }
-
-            parameters.push_back(pj_mkparam(pj_ellps[index].major));
-            parameters.push_back(pj_mkparam(pj_ellps[index].ell));
-        }
-        a = pj_param(parameters, "da").f;
-        if (pj_param(parameters, "tes").i) /* eccentricity squared */
-            es = pj_param(parameters, "des").f;
-        else if (pj_param(parameters, "te").i) { /* eccentricity */
-            e = pj_param(parameters, "de").f;
-            es = e * e;
-        } else if (pj_param(parameters, "trf").i) { /* recip flattening */
-            es = pj_param(parameters, "drf").f;
-            if (!es) {
-                throw proj_exception(-10);
-            }
-            es = 1./ es;
-            es = es * (2. - es);
-        } else if (pj_param(parameters, "tf").i) { /* flattening */
-            es = pj_param(parameters, "df").f;
-            es = es * (2. - es);
-        } else if (pj_param(parameters, "tb").i) { /* minor axis */
-            b = pj_param(parameters, "db").f;
-            es = 1. - (b * b) / (a * a);
-        }     /* else es == 0. and sphere of radius a */
-        if (!b)
-            b = a * sqrt(1. - es);
-        /* following options turn ellipsoid into equivalent sphere */
-        if (pj_param(parameters, "bR_A").i) { /* sphere--area of ellipsoid */
-            a *= 1. - es * (SIXTH + es * (RA4 + es * RA6));
-            es = 0.;
-        } else if (pj_param(parameters, "bR_V").i) { /* sphere--vol. of ellipsoid */
-            a *= 1. - es * (SIXTH + es * (RV4 + es * RV6));
-            es = 0.;
-        } else if (pj_param(parameters, "bR_a").i) { /* sphere--arithmetic mean */
-            a = .5 * (a + b);
-            es = 0.;
-        } else if (pj_param(parameters, "bR_g").i) { /* sphere--geometric mean */
-            a = sqrt(a * b);
-            es = 0.;
-        } else if (pj_param(parameters, "bR_h").i) { /* sphere--harmonic mean */
-            a = 2. * a * b / (a + b);
-            es = 0.;
-        } else if ((i = pj_param(parameters, "tR_lat_a").i) || /* sphere--arith. */
-            pj_param(parameters, "tR_lat_g").i) { /* or geom. mean at latitude */
-            double tmp;
-
-            tmp = sin(pj_param(parameters, i ? "rR_lat_a" : "rR_lat_g").f);
-            if (fabs(tmp) > HALFPI) {
-                throw proj_exception(-11);
-            }
-            tmp = 1. - es * tmp * tmp;
-            a *= i ? .5 * (1. - es + tmp) / ( tmp * sqrt(tmp)) :
-                sqrt(1. - es) / tmp;
-            es = 0.;
-        }
-    }
-
-    /* some remaining checks */
-    if (es < 0.)
-        { throw proj_exception(-12); }
-    if (a <= 0.)
-        { throw proj_exception(-13); }
-}
-
-}}} // namespace ggl::projection::impl
-
-#endif // GGL_PROJECTIONS_IMPL_PJ_ELL_SET_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_ellps.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_ellps.hpp
deleted file mode 100644
index 0f3a256..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_ellps.hpp
+++ /dev/null
@@ -1,90 +0,0 @@
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef GGL_PROJECTIONS_IMPL_PJ_ELLPS_HPP
-#define GGL_PROJECTIONS_IMPL_PJ_ELLPS_HPP
-
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-
-namespace ggl { namespace projection { namespace detail {
-
-static const PJ_ELLPS pj_ellps[] =
-{
-    { "MERIT",    "a=6378137.0",   "rf=298.257",        "MERIT 1983" },
-    { "SGS85",    "a=6378136.0",   "rf=298.257",        "Soviet Geodetic System 85" },
-    { "GRS80",    "a=6378137.0",   "rf=298.257222101",  "GRS 1980(IUGG, 1980)" },
-    { "IAU76",    "a=6378140.0",   "rf=298.257",        "IAU 1976" },
-    { "airy",     "a=6377563.396", "b=6356256.910",     "Airy 1830" },
-    { "APL4.9",   "a=6378137.0.",  "rf=298.25",         "Appl. Physics. 1965" },
-    { "NWL9D",    "a=6378145.0.",  "rf=298.25",         "Naval Weapons Lab., 1965" },
-    { "mod_airy", "a=6377340.189", "b=6356034.446",     "Modified Airy" },
-    { "andrae",   "a=6377104.43",  "rf=300.0",          "Andrae 1876 (Den., Iclnd.)" },
-    { "aust_SA",  "a=6378160.0",   "rf=298.25",         "Australian Natl & S. Amer. 1969" },
-    { "GRS67",    "a=6378160.0",   "rf=298.2471674270", "GRS 67(IUGG 1967)" },
-    { "bessel",   "a=6377397.155", "rf=299.1528128",    "Bessel 1841" },
-    { "bess_nam", "a=6377483.865", "rf=299.1528128",    "Bessel 1841 (Namibia)" },
-    { "clrk66",   "a=6378206.4",   "b=6356583.8",  "Clarke 1866" },
-    { "clrk80",   "a=6378249.145", "rf=293.4663",  "Clarke 1880 mod." },
-    { "CPM",      "a=6375738.7",   "rf=334.29",    "Comm. des Poids et Mesures 1799" },
-    { "delmbr",   "a=6376428.",    "rf=311.5",     "Delambre 1810 (Belgium)" },
-    { "engelis",  "a=6378136.05",  "rf=298.2566",  "Engelis 1985" },
-    { "evrst30",  "a=6377276.345", "rf=300.8017",  "Everest 1830" },
-    { "evrst48",  "a=6377304.063", "rf=300.8017",  "Everest 1948" },
-    { "evrst56",  "a=6377301.243", "rf=300.8017",  "Everest 1956" },
-    { "evrst69",  "a=6377295.664", "rf=300.8017",  "Everest 1969" },
-    { "evrstSS",  "a=6377298.556", "rf=300.8017",  "Everest (Sabah & Sarawak)" },
-    { "fschr60",  "a=6378166.",    "rf=298.3", "Fischer (Mercury Datum) 1960" },
-    { "fschr60m", "a=6378155.",    "rf=298.3", "Modified Fischer 1960" },
-    { "fschr68",  "a=6378150.",    "rf=298.3", "Fischer 1968" },
-    { "helmert",  "a=6378200.",    "rf=298.3", "Helmert 1906" },
-    { "hough",    "a=6378270.0",   "rf=297.",  "Hough" },
-    { "intl",     "a=6378388.0",   "rf=297.",  "International 1909 (Hayford)" },
-    { "krass",    "a=6378245.0",   "rf=298.3", "Krassovsky, 1942" },
-    { "kaula",    "a=6378163.",    "rf=298.24",  "Kaula 1961" },
-    { "lerch",    "a=6378139.",    "rf=298.257", "Lerch 1979" },
-    { "mprts",    "a=6397300.",    "rf=191.",    "Maupertius 1738" },
-    { "new_intl", "a=6378157.5",   "b=6356772.2","New International 1967" },
-    { "plessis",  "a=6376523.",    "b=6355863.", "Plessis 1817 (France)" },
-    { "SEasia",   "a=6378155.0",   "b=6356773.3205", "Southeast Asia" },
-    { "walbeck",  "a=6376896.0",   "b=6355834.8467", "Walbeck" },
-    { "WGS60",    "a=6378165.0",   "rf=298.3",  "WGS 60" },
-    { "WGS66",    "a=6378145.0",   "rf=298.25", "WGS 66" },
-    { "WGS72",    "a=6378135.0",   "rf=298.26", "WGS 72" },
-    { "WGS84",    "a=6378137.0",   "rf=298.257223563", "WGS 84" },
-    { "sphere",   "a=6370997.0",   "b=6370997.0", "Normal Sphere (r=6370997)" }
-};
-
-}}} // namespace ggl::projection::impl
-
-#endif // GGL_PROJECTIONS_IMPL_PJ_ELLPS_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_fwd.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_fwd.hpp
deleted file mode 100644
index 88cb1e3..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_fwd.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef GGL_PROJECTIONS_IMPL_PJ_FWD_HPP
-#define GGL_PROJECTIONS_IMPL_PJ_FWD_HPP
-
-#include <cmath>
-
-#include <ggl/core/radian_access.hpp>
-#include <ggl/extensions/gis/projections/impl/adjlon.hpp>
-
-/* general forward projection */
-
-namespace ggl { namespace projection { namespace detail {
-
-namespace forwrd
-{
-    static const double EPS = 1.0e-12;
-}
-
-/* forward projection entry */
-template <typename Prj, typename LL, typename XY, typename P>
-inline void pj_fwd(const Prj& prj, const P& par, const LL& ll, XY& xy)
-{
-    using namespace detail;
-
-    double lp_lon = ggl::get_as_radian<0>(ll);
-    double lp_lat = ggl::get_as_radian<1>(ll);
-    const double t = std::fabs(lp_lat) - HALFPI;
-
-    /* check for forward and latitude or longitude overange */
-    if (t > forwrd::EPS || std::fabs(lp_lon) > 10.)
-    {
-        throw proj_exception();
-    }
-
-    if (std::fabs(t) <= forwrd::EPS)
-    {
-        lp_lat = lp_lat < 0. ? -HALFPI : HALFPI;
-    }
-    else if (par.geoc)
-    {
-        lp_lat = std::atan(par.rone_es * std::tan(lp_lat));
-    }
-
-    lp_lon -= par.lam0;    /* compute del lp.lam */
-    if (! par.over)
-    {
-        lp_lon = adjlon(lp_lon); /* post_forward del longitude */
-    }
-
-    double x = 0;
-    double y = 0;
-
-    prj.fwd(lp_lon, lp_lat, x, y);
-    ggl::set<0>(xy, par.fr_meter * (par.a * x + par.x0));
-    ggl::set<1>(xy, par.fr_meter * (par.a * y + par.y0));
-}
-
-}}} // namespace ggl::projection::impl
-
-#endif // GGL_PROJECTIONS_IMPL_PJ_FWD_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_gauss.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_gauss.hpp
deleted file mode 100644
index 61e2be2..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_gauss.hpp
+++ /dev/null
@@ -1,124 +0,0 @@
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef GGL_PROJECTIONS_IMPL_PJ_GAUSS_HPP
-#define GGL_PROJECTIONS_IMPL_PJ_GAUSS_HPP
-
-
-namespace ggl { namespace projection { namespace detail { namespace gauss {
-
-
-static const int MAX_ITER = 20;
-
-struct GAUSS
-{
-    double C;
-    double K;
-    double e;
-    double ratexp;
-};
-
-static const double DEL_TOL = 1e-14;
-
-inline double srat(double esinp, double exp)
-{
-    return (std::pow((1.0 - esinp) / (1.0 + esinp), exp));
-}
-
-inline GAUSS gauss_ini(double e, double phi0, double &chi, double &rc)
-{
-    using std::asin;
-    using std::cos;
-    using std::sin;
-    using std::sqrt;
-    using std::tan;
-
-    double sphi = 0;
-    double cphi = 0;
-    double es = 0;
-
-    GAUSS en;
-    es = e * e;
-    en.e = e;
-    sphi = sin(phi0);
-    cphi = cos(phi0);
-    cphi *= cphi;
-
-    rc = sqrt(1.0 - es) / (1.0 - es * sphi * sphi);
-    en.C = sqrt(1.0 + es * cphi * cphi / (1.0 - es));
-    chi = asin(sphi / en.C);
-    en.ratexp = 0.5 * en.C * e;
-    en.K = tan(0.5 * chi + detail::FORTPI)
-           / (pow(tan(0.5 * phi0 + detail::FORTPI), en.C) * srat(en.e * sphi, en.ratexp));
-
-    return en;
-}
-
-template <typename T>
-inline void gauss(const GAUSS& en, T& lam, T& phi)
-{
-    phi = 2.0 * std::atan(en.K * std::pow(std::tan(0.5 * phi + FORTPI), en.C)
-          * srat(en.e * std::sin(phi), en.ratexp) ) - HALFPI;
-
-    lam *= en.C;
-}
-
-template <typename T>
-inline void inv_gauss(const GAUSS& en, T& lam, T& phi)
-{
-    lam /= en.C;
-    const double num = std::pow(std::tan(0.5 * phi + FORTPI) / en.K, 1.0 / en.C);
-
-    int i = 0;
-    for (i = MAX_ITER; i; --i)
-    {
-        const double elp_phi = 2.0 * std::atan(num * srat(en.e * std::sin(phi), - 0.5 * en.e)) - HALFPI;
-
-        if (std::fabs(elp_phi - phi) < DEL_TOL)
-        {
-            break;
-        }
-        phi = elp_phi;
-    }
-
-    /* convergence failed */
-    if (!i)
-    {
-        throw proj_exception(-17);
-    }
-}
-
-}}}} // namespace ggl::projection::detail::gauss
-
-#endif // GGL_PROJECTIONS_IMPL_PJ_GAUSS_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_init.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_init.hpp
deleted file mode 100644
index 9db955c..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_init.hpp
+++ /dev/null
@@ -1,291 +0,0 @@
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef GGL_PROJECTIONS_IMPL_PJ_INIT_HPP
-#define GGL_PROJECTIONS_IMPL_PJ_INIT_HPP
-
-#include <string>
-#include <vector>
-
-#include <boost/algorithm/string.hpp>
-#include <boost/range/functions.hpp>
-
-#include <ggl/extensions/gis/projections/impl/pj_datum_set.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_datums.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_ell_set.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_param.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_units.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/parameters.hpp>
-
-#include <ggl/extensions/gis/geographic/strategies/dms_parser.hpp>
-
-namespace ggl { namespace projection { namespace detail {
-
-/************************************************************************/
-/*                              pj_init()                               */
-/*                                                                      */
-/*      Main entry point for initialing a PJ projections                */
-/*      definition.  Note that the projection specific function is      */
-/*      called to do the initial allocation so it can be created        */
-/*      large enough to hold projection specific parameters.            */
-/************************************************************************/
-template <typename R>
-parameters pj_init(const R& arguments, bool use_defaults = true)
-{
-    parameters pin;
-    for (std::vector<std::string>::const_iterator it = boost::begin(arguments);
-        it != boost::end(arguments); it++)
-    {
-        pin.params.push_back(pj_mkparam(*it));
-    }
-
-    /* check if +init present */
-    if (pj_param(pin.params, "tinit").i)
-    {
-        // maybe TODO: handle "init" parameter
-        //if (!(curr = get_init(&arguments, curr, pj_param(pin.params, "sinit").s)))
-    }
-
-    // find projection -> implemented in projection factory
-    pin.name = pj_param(pin.params, "sproj").s;
-    //if (pin.name.empty())
-    //{ throw proj_exception(-4); }
-
-
-    // set defaults, unless inhibited
-    // GL-Addition, if use_defaults is false then defaults are ignored
-    if (use_defaults && ! pj_param(pin.params, "bno_defs").i)
-    {
-        // proj4 gets defaults from "proj_def.dat", file of 94/02/23 with a few defaults.
-        // Here manually
-        if (pin.name == "lcc")
-        {
-            pin.params.push_back(pj_mkparam("lat_1=33"));
-            pin.params.push_back(pj_mkparam("lat_2=45"));
-        }
-        else if (pin.name == "aea")
-        {
-            pin.params.push_back(pj_mkparam("lat_1=29.5"));
-            pin.params.push_back(pj_mkparam("lat_2=45.5 "));
-        }
-        else
-        {
-            //<general>ellps=WGS84
-        }
-        //curr = get_defaults(&arguments, curr, name);
-    }
-
-    /* allocate projection structure */
-    // done by constructor:
-    // pin.is_latlong = 0;
-    // pin.is_geocent = 0;
-    // pin.long_wrap_center = 0.0;
-
-    /* set datum parameters */
-    pj_datum_set(pin.params, pin);
-
-    /* set ellipsoid/sphere parameters */
-    pj_ell_set(pin.params, pin.a, pin.es);
-
-    pin.a_orig = pin.a;
-    pin.es_orig = pin.es;
-
-    pin.e = sqrt(pin.es);
-    pin.ra = 1. / pin.a;
-    pin.one_es = 1. - pin.es;
-    if (pin.one_es == 0.) { throw proj_exception(-6); }
-    pin.rone_es = 1./pin.one_es;
-
-    /* Now that we have ellipse information check for WGS84 datum */
-    if( pin.datum_type == PJD_3PARAM
-        && pin.datum_params[0] == 0.0
-        && pin.datum_params[1] == 0.0
-        && pin.datum_params[2] == 0.0
-        && pin.a == 6378137.0
-        && fabs(pin.es - 0.006694379990) < 0.000000000050 )/*WGS84/GRS80*/
-    {
-        pin.datum_type = PJD_WGS84;
-    }
-
-    /* set pin.geoc coordinate system */
-    pin.geoc = (pin.es && pj_param(pin.params, "bgeoc").i);
-
-    /* over-ranging flag */
-    pin.over = pj_param(pin.params, "bover").i;
-
-    /* longitude center for wrapping */
-    pin.long_wrap_center = pj_param(pin.params, "rlon_wrap").f;
-
-    /* central meridian */
-    pin.lam0 = pj_param(pin.params, "rlon_0").f;
-
-    /* central latitude */
-    pin.phi0 = pj_param(pin.params, "rlat_0").f;
-
-    /* false easting and northing */
-    pin.x0 = pj_param(pin.params, "dx_0").f;
-    pin.y0 = pj_param(pin.params, "dy_0").f;
-
-    /* general scaling factor */
-    if (pj_param(pin.params, "tk_0").i)
-        pin.k0 = pj_param(pin.params, "dk_0").f;
-    else if (pj_param(pin.params, "tk").i)
-        pin.k0 = pj_param(pin.params, "dk").f;
-    else
-        pin.k0 = 1.;
-    if (pin.k0 <= 0.) {
-        throw proj_exception(-31);
-    }
-
-    /* set units */
-    std::string s;
-    std::string units = pj_param(pin.params, "sunits").s;
-    if (! units.empty())
-    {
-        const int n = sizeof(pj_units) / sizeof(pj_units[0]);
-        int index = -1;
-        for (int i = 0; i < n && index == -1; i++)
-        {
-            if(pj_units[i].id == units)
-            {
-                index = i;
-            }
-        }
-
-        if (index == -1) { throw proj_exception(-7); }
-        s = pj_units[index].to_meter;
-    }
-
-    if (s.empty())
-    {
-        s = pj_param(pin.params, "sto_meter").s;
-    }
-
-    if (! s.empty())
-    {
-        // TODO: IMPLEMENT SPLIT
-        pin.to_meter = atof(s.c_str());
-        //if (*s == '/') /* ratio number */
-        //    pin.to_meter /= strtod(++s, 0);
-        pin.fr_meter = 1. / pin.to_meter;
-    }
-    else
-    {
-        pin.to_meter = pin.fr_meter = 1.;
-    }
-
-    /* prime meridian */
-    s.clear();
-    std::string pm = pj_param(pin.params, "spm").s;
-    if (! pm.empty())
-    {
-        std::string value;
-
-        int n = sizeof(pj_prime_meridians) / sizeof(pj_prime_meridians[0]);
-        int index = -1;
-        for (int i = 0; i < n && index == -1; i++)
-        {
-            if(pj_prime_meridians[i].id == pm)
-            {
-                value = pj_prime_meridians[i].defn;
-                index = i;
-            }
-        }
-
-        if (index == -1) { throw proj_exception(-7); }
-        if (value.empty()) { throw proj_exception(-46); }
-
-        ggl::strategy::dms_parser<true> parser;
-        pin.from_greenwich = parser(value.c_str());
-    }
-    else
-    {
-        pin.from_greenwich = 0.0;
-    }
-
-    return pin;
-}
-
-/************************************************************************/
-/*                            pj_init_plus()                            */
-/*                                                                      */
-/*      Same as pj_init() except it takes one argument string with      */
-/*      individual arguments preceeded by '+', such as "+proj=utm       */
-/*      +zone=11 +ellps=WGS84".                                         */
-/************************************************************************/
-
-inline parameters pj_init_plus(const std::string& definition, bool use_defaults = true)
-{
-    static const char* sep = " +";
-
-    /* split into arguments based on '+' and trim white space */
-
-    // boost::split splits on one character, here it should be on " +", so implementation below
-    // todo: put in different routine or sort out
-    std::vector<std::string> arguments;
-    std::string def = boost::trim_copy(definition);
-    boost::trim_left_if(def, boost::is_any_of(sep));
-
-    std::string::size_type loc = def.find(sep);
-    while (loc != std::string::npos)
-    {
-        std::string par = def.substr(0, loc);
-        boost::trim(par);
-        if (! par.empty())
-        {
-            arguments.push_back(par);
-        }
-
-        def.erase(0, loc);
-        boost::trim_left_if(def, boost::is_any_of(sep));
-        loc = def.find(sep);
-    }
-
-    if (! def.empty())
-    {
-        arguments.push_back(def);
-    }
-
-    /*boost::split(arguments, definition, boost::is_any_of("+"));
-    for (std::vector<std::string>::iterator it = arguments.begin(); it != arguments.end(); it++)
-    {
-        boost::trim(*it);
-    }*/
-    return pj_init(arguments, use_defaults);
-}
-
-}}} // namespace ggl::projection::impl
-
-#endif // GGL_PROJECTIONS_IMPL_PJ_INIT_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_inv.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_inv.hpp
deleted file mode 100644
index 7d61f1e..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_inv.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-#ifndef _PROJECTIONS_PJ_INV_HPP
-#define _PROJECTIONS_PJ_INV_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-
-#include <ggl/extensions/gis/projections/impl/adjlon.hpp>
-#include <ggl/core/radian_access.hpp>
-
-/* general inverse projection */
-
-namespace ggl { namespace projection { namespace detail {
-
-namespace inv
-{
-    static const double EPS = 1.0e-12;
-}
-
- /* inverse projection entry */
-template <typename PRJ, typename LL, typename XY, typename PAR>
-void pj_inv(const PRJ& prj, const PAR& par, const XY& xy, LL& ll)
-{
-    /* can't do as much preliminary checking as with forward */
-    /* descale and de-offset */
-    double xy_x = (ggl::get<0>(xy) * par.to_meter - par.x0) * par.ra;
-    double xy_y = (ggl::get<1>(xy) * par.to_meter - par.y0) * par.ra;
-    double lon = 0, lat = 0;
-    prj.inv(xy_x, xy_y, lon, lat); /* inverse project */
-    lon += par.lam0; /* reduce from del lp.lam */
-    if (!par.over)
-        lon = adjlon(lon); /* adjust longitude to CM */
-    if (par.geoc && fabs(fabs(lat)-HALFPI) > inv::EPS)
-        lat = atan(par.one_es * tan(lat));
-
-    ggl::set_from_radian<0>(ll, lon);
-    ggl::set_from_radian<1>(ll, lat);
-}
-
-}}} // namespace ggl::projection::impl
-#endif
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_mlfn.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_mlfn.hpp
deleted file mode 100644
index 4dfbd21..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_mlfn.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-#ifndef _PROJECTIONS_PJ_MLFN_HPP
-#define _PROJECTIONS_PJ_MLFN_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-namespace ggl { namespace projection { namespace detail {
-
-/* meridinal distance for ellipsoid and inverse
-**    8th degree - accurate to < 1e-5 meters when used in conjuction
-**        with typical major axis values.
-**    Inverse determines phi to EPS (1e-11) radians, about 1e-6 seconds.
-*/
-static const double C00 = 1.;
-static const double C02 = .25;
-static const double C04 = .046875;
-static const double C06 = .01953125;
-static const double C08 = .01068115234375;
-static const double C22 = .75;
-static const double C44 = .46875;
-static const double C46 = .01302083333333333333;
-static const double C48 = .00712076822916666666;
-static const double C66 = .36458333333333333333;
-static const double C68 = .00569661458333333333;
-static const double C88 = .3076171875;
-static const double EPS = 1e-11;
-static const int MAX_ITER = 10;
-static const int EN_SIZE = 5;
-
-inline void pj_enfn(double es, double* en)
-{
-    double t; //, *en;
-
-    //if (en = (double *)pj_malloc(EN_SIZE * sizeof(double)))
-    {
-        en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));
-        en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));
-        en[2] = (t = es * es) * (C44 - es * (C46 + es * C48));
-        en[3] = (t *= es) * (C66 - es * C68);
-        en[4] = t * es * C88;
-    }
-    // return en;
-}
-
-inline double pj_mlfn(double phi, double sphi, double cphi, const double *en)
-{
-    cphi *= sphi;
-    sphi *= sphi;
-    return(en[0] * phi - cphi * (en[1] + sphi*(en[2]
-        + sphi*(en[3] + sphi*en[4]))));
-}
-
-inline double pj_inv_mlfn(double arg, double es, const double *en)
-{
-    double s, t, phi, k = 1./(1.-es);
-    int i;
-
-    phi = arg;
-    for (i = MAX_ITER; i ; --i) { /* rarely goes over 2 iterations */
-        s = sin(phi);
-        t = 1. - es * s * s;
-        phi -= t = (pj_mlfn(phi, s, cos(phi), en) - arg) * (t * sqrt(t)) * k;
-        if (fabs(t) < EPS)
-            return phi;
-    }
-    throw proj_exception(-17);
-    return phi;
-}
-
-}}} // namespace ggl::projection::impl
-
-#endif
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_msfn.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_msfn.hpp
deleted file mode 100644
index 3fcbb0a..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_msfn.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef _PROJECTIONS_PJ_MSFN_HPP
-#define _PROJECTIONS_PJ_MSFN_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-namespace ggl { namespace projection { namespace detail {
-
-
-/* determine constant small m */
-inline double pj_msfn(double sinphi, double cosphi, double es)
-{
-    return (cosphi / sqrt (1. - es * sinphi * sinphi));
-}
-
-
-}}} // namespace ggl::projection::impl
-#endif
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_param.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_param.hpp
deleted file mode 100644
index db0c8cd..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_param.hpp
+++ /dev/null
@@ -1,150 +0,0 @@
-#ifndef GGL_PROJECTIONS_PJ_PARAM_HPP
-#define GGL_PROJECTIONS_PJ_PARAM_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <string>
-#include <vector>
-
-#include <ggl/extensions/gis/geographic/strategies/dms_parser.hpp>
-
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-
-
-namespace ggl { namespace projection { namespace detail {
-
-
-
-/* create pvalue list entry */
-inline pvalue pj_mkparam(const std::string& str)
-{
-    std::string name = str;
-    std::string value;
-    boost::trim_left_if(name, boost::is_any_of("+"));
-    std::string::size_type loc = name.find("=");
-    if (loc != std::string::npos)
-    {
-        value = name.substr(loc + 1);
-        name.erase(loc);
-    }
-
-
-    pvalue newitem;
-    newitem.param = name;
-    newitem.s = value;
-    newitem.used = 0;
-    newitem.i = atoi(value.c_str());
-    newitem.f = atof(value.c_str());
-    return newitem;
-}
-
-/************************************************************************/
-/*                              pj_param()                              */
-/*                                                                      */
-/*      Test for presence or get pvalue value.  The first            */
-/*      character in `opt' is a pvalue type which can take the       */
-/*      values:                                                         */
-/*                                                                      */
-/*       `t' - test for presence, return TRUE/FALSE in pvalue.i         */
-/*       `i' - integer value returned in pvalue.i                       */
-/*       `d' - simple valued real input returned in pvalue.f            */
-/*       `r' - degrees (DMS translation applied), returned as           */
-/*             radians in pvalue.f                                      */
-/*       `s' - string returned in pvalue.s                              */
-/*       `b' - test for t/T/f/F, return in pvalue.i                     */
-/*                                                                      */
-/************************************************************************/
-
-inline pvalue pj_param(const std::vector<pvalue>& pl, std::string opt)
-{
-    char type = opt[0];
-    opt.erase(opt.begin());
-
-    pvalue value;
-
-    /* simple linear lookup */
-    for (std::vector<pvalue>::const_iterator it = pl.begin(); it != pl.end(); it++)
-    {
-        if (it->param == opt)
-        {
-            //it->used = 1;
-            switch (type)
-            {
-            case 't':
-                value.i = 1;
-                break;
-            case 'i':    /* integer input */
-                value.i = atoi(it->s.c_str());
-                break;
-            case 'd':    /* simple real input */
-                value.f = atof(it->s.c_str());
-                break;
-            case 'r':    /* degrees input */
-                {
-                    ggl::strategy::dms_parser<true> parser;
-                    value.f = parser(it->s.c_str());
-                }
-                break;
-            case 's':    /* char string */
-                value.s = it->s;
-                break;
-            case 'b':    /* boolean */
-                switch (it->s[0])
-                {
-                case 'F': case 'f':
-                    value.i = 0;
-                    break;
-                case '\0': case 'T': case 't':
-                    value.i = 1;
-                    break;
-                default:
-                    value.i = 0;
-                    break;
-                }
-                break;
-            }
-            return value;
-        }
-
-    }
-
-    value.i = 0;
-    value.f = 0.0;
-    value.s = "";
-    return value;
-}
-
-}}} // namespace ggl::projection::impl
-#endif
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_phi2.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_phi2.hpp
deleted file mode 100644
index 08393f6..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_phi2.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-#ifndef _PROJECTIONS_PHI2_HPP
-#define _PROJECTIONS_PHI2_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-
-namespace ggl { namespace projection { namespace detail {
-
-namespace phi2
-{
-    static const double TOL = 1.0e-10;
-    static const int N_ITER = 15;
-}
-
-inline double pj_phi2(double ts, double e)
-{
-    double eccnth, Phi, con, dphi;
-    int i;
-
-    eccnth = .5 * e;
-    Phi = HALFPI - 2. * atan (ts);
-    i = phi2::N_ITER;
-    do {
-        con = e * sin (Phi);
-        dphi = HALFPI - 2. * atan (ts * pow((1. - con) /
-           (1. + con), eccnth)) - Phi;
-        Phi += dphi;
-    } while ( fabs(dphi) > phi2::TOL && --i);
-    if (i <= 0)
-        throw proj_exception(-18);
-    return Phi;
-}
-
-}}} // namespace ggl::projection::impl
-#endif
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_qsfn.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_qsfn.hpp
deleted file mode 100644
index e3a9970..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_qsfn.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-#ifndef _PROJECTIONS_PJ_QSFN_HPP
-#define _PROJECTIONS_PJ_QSFN_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-namespace ggl { namespace projection { namespace detail {
-
-/* determine small q */
-inline double pj_qsfn(double sinphi, double e, double one_es)
-{
-    static const double EPSILON = 1.0e-7;
-
-    if (e >= EPSILON)
-    {
-        double con = e * sinphi;
-        return (one_es * (sinphi / (1. - con * con) -
-           (.5 / e) * log ((1. - con) / (1. + con))));
-    } else
-        return (sinphi + sinphi);
-}
-
-
-#define MAX_C 9
-struct AUTHALIC
-{
-    double C[MAX_C], CP[MAX_C], CQ[MAX_C];
-};
-
-/**
- * @brief determine authalic latitude
- * @param[in] phi geographic latitude
- * @param[in] a initialized structure pointer
- * @return authalic latitude
- */
-inline double proj_qsfn(double phi, const AUTHALIC& a)
-{
-    double s, s2, sum;
-    int i = MAX_C;
-
-    s = sin(phi);
-    s2 = s * s;
-    sum = a.CQ[MAX_C - 1];
-    while (--i) sum = a.CQ[i] + s2 * sum;
-    return(s * sum);
-}
-
-}}} // namespace ggl::projection::impl
-#endif
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_transform.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_transform.hpp
deleted file mode 100644
index 0d74189..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_transform.hpp
+++ /dev/null
@@ -1,751 +0,0 @@
-#ifndef _PROJECTIONS_PJ_TRANSFORM_HPP
-#define _PROJECTIONS_PJ_TRANSFORM_HPP
-
-namespace ggl
-{
-namespace projection
-{
-	namespace detail
-	{
-
-		#include <ggl/extensions/gis/projections/parameters.hpp>
-		#include <ggl/extensions/gis/projections/impl/projects.hpp>
-		#include <ggl/extensions/gis/projections/impl/geocent.h>
-
-		#ifndef SRS_WGS84_SEMIMAJOR
-		#define SRS_WGS84_SEMIMAJOR 6378137.0
-		#endif
-
-		#ifndef SRS_WGS84_ESQUARED
-		#define SRS_WGS84_ESQUARED 0.0066943799901413165
-		#endif
-
-		#define Dx_BF (defn->params().datum_params[0])
-		#define Dy_BF (defn->params().datum_params[1])
-		#define Dz_BF (defn->params().datum_params[2])
-		#define Rx_BF (defn->params().datum_params[3])
-		#define Ry_BF (defn->params().datum_params[4])
-		#define Rz_BF (defn->params().datum_params[5])
-		#define M_BF  (defn->params().datum_params[6])
-
-		/* datum system errors */
-		#define PJD_ERR_GEOCENTRIC -45
-		typedef struct { double u, v; } projUV;
-		typedef void *projPJ;
-		#define projXY projUV
-		#define projLP projUV
-
-		/* 
-		** This table is intended to indicate for any given error code in 
-		** the range 0 to -44, whether that error will occur for all locations (ie.
-		** it is a problem with the coordinate system as a whole) in which case the
-		** value would be 0, or if the problem is with the point being transformed
-		** in which case the value is 1. 
-		**
-		** At some point we might want to move this array in with the error message
-		** list or something, but while experimenting with it this should be fine. 
-		*/
-
-		static const int transient_error[45] = {
-			/*             0  1  2  3  4  5  6  7  8  9   */
-			/* 0 to 9 */   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-			/* 10 to 19 */ 0, 0, 0, 0, 1, 1, 0, 1, 1, 1,  
-			/* 20 to 29 */ 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-			/* 30 to 39 */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-			/* 40 to 44 */ 0, 0, 0, 0, 0 };
-
-		//int pj_apply_gridshift( const char *nadgrids, int inverse, 
-		//						long point_count, int point_offset,
-		//						double *x, double *y, double *z )
-
-		//{
-		//	int grid_count = 0;
-		//	PJ_GRIDINFO   **tables;
-		//	int  i;
-		//	int debug_flag = getenv( "PROJ_DEBUG" ) != NULL;
-		//	static int debug_count = 0;
-
-		//	pj_errno = 0;
-
-		//	tables = pj_gridlist_from_nadgrids( nadgrids, &grid_count);
-		//	if( tables == NULL || grid_count == 0 )
-		//		return pj_errno;
-
-		//	for( i = 0; i < point_count; i++ )
-		//	{
-		//		long io = i * point_offset;
-		//		LP   input, output;
-		//		int  itable;
-
-		//		input.phi = y[io];
-		//		input.lam = x[io];
-		//		output.phi = HUGE_VAL;
-		//		output.lam = HUGE_VAL;
-
-		//		/* keep trying till we find a table that works */
-		//		for( itable = 0; itable < grid_count; itable++ )
-		//		{
-		//			PJ_GRIDINFO *gi = tables[itable];
-		//			struct CTABLE *ct = gi->ct;
-
-		//			/* skip tables that don't match our point at all.  */
-		//			if( ct->ll.phi > input.phi || ct->ll.lam > input.lam
-		//				|| ct->ll.phi + (ct->lim.phi-1) * ct->del.phi < input.phi
-		//				|| ct->ll.lam + (ct->lim.lam-1) * ct->del.lam < input.lam )
-		//				continue;
-
-		//			/* If we have child nodes, check to see if any of them apply. */
-		//			if( gi->child != NULL )
-		//			{
-		//				PJ_GRIDINFO *child;
-
-		//				for( child = gi->child; child != NULL; child = child->next )
-		//				{
-		//					struct CTABLE *ct1 = child->ct;
-
-		//					if( ct1->ll.phi > input.phi || ct1->ll.lam > input.lam
-		//					  || ct1->ll.phi+(ct1->lim.phi-1)*ct1->del.phi < input.phi
-		//					  || ct1->ll.lam+(ct1->lim.lam-1)*ct1->del.lam < input.lam)
-		//						continue;
-
-		//					break;
-		//				}
-
-		//				/* we found a more refined child node to use */
-		//				if( child != NULL )
-		//				{
-		//					gi = child;
-		//					ct = child->ct;
-		//				}
-		//			}
-
-		//			/* load the grid shift info if we don't have it. */
-		//			if( ct->cvs == NULL && !pj_gridinfo_load( gi ) )
-		//			{
-		//				pj_errno = -38;
-		//				return pj_errno;
-		//			}
-		//            
-		//			output = nad_cvt( input, inverse, ct );
-		//			if( output.lam != HUGE_VAL )
-		//			{
-		//				if( debug_flag && debug_count++ < 20 )
-		//					fprintf( stderr,
-		//							 "pj_apply_gridshift(): used %s\n",
-		//							 ct->id );
-		//				break;
-		//			}
-		//		}
-
-		//		if( output.lam == HUGE_VAL )
-		//		{
-		//			if( debug_flag )
-		//			{
-		//				fprintf( stderr, 
-		//						 "pj_apply_gridshift(): failed to find a grid shift table for\n"
-		//						 "                      location (%.7fdW,%.7fdN)\n",
-		//						 x[io] * RAD_TO_DEG, 
-		//						 y[io] * RAD_TO_DEG );
-		//				fprintf( stderr, 
-		//						 "   tried: %s\n", nadgrids );
-		//			}
-		//        
-		//			pj_errno = -38;
-		//			return pj_errno;
-		//		}
-		//		else
-		//		{
-		//			y[io] = output.phi;
-		//			x[io] = output.lam;
-		//		}
-		//	}
-
-		//	return 0;
-		//}
-
-		/************************************************************************/
-		/*                            pj_transform()                            */
-		/*                                                                      */
-		/*      Currently this function doesn't recognise if two projections    */
-		/*      are identical (to short circuit reprojection) because it is     */
-		/*      difficult to compare PJ structures (since there are some        */
-		/*      projection specific components).                                */
-		/************************************************************************/
-
-		template <typename PRJF, typename PRJT>
-		inline int pj_transform( PRJF *srcdefn, PRJT *dstdefn, long point_count, int point_offset, double *x, double *y, double *z )
-
-		{
-			long      i;
-			//int       need_datum_shift;
-
-			int pj_errno = 0;
-
-			if( point_offset == 0 )
-				point_offset = 1;
-
-		/* -------------------------------------------------------------------- */
-		/*      Transform geocentric source coordinates to lat/long.            */
-		/* -------------------------------------------------------------------- */
-			if( srcdefn->params().is_geocent )
-			{
-				if( z == NULL )
-				{
-					pj_errno = PJD_ERR_GEOCENTRIC;
-					return PJD_ERR_GEOCENTRIC;
-				}
-
-				if( srcdefn->params().to_meter != 1.0 )
-				{
-					for( i = 0; i < point_count; i++ )
-					{
-						if( x[point_offset*i] != HUGE_VAL )
-						{
-							x[point_offset*i] *= srcdefn->params().to_meter;
-							y[point_offset*i] *= srcdefn->params().to_meter;
-						}
-					}
-				}
-
-				if( pj_geocentric_to_geodetic( srcdefn->params().a_orig, srcdefn->params().es_orig,
-											   point_count, point_offset, 
-											   x, y, z ) != 0) 
-					return pj_errno;
-			}
-
-		/* -------------------------------------------------------------------- */
-		/*      Transform source points to lat/long, if they aren't             */
-		/*      already.                                                        */
-		/* -------------------------------------------------------------------- */
-			else if( !srcdefn->params().is_latlong )
-			{
-				for( i = 0; i < point_count; i++ )
-				{
-					projXY         projected_loc;
-					projLP	       geodetic_loc;
-
-					projected_loc.u = x[point_offset*i];
-					projected_loc.v = y[point_offset*i];
-
-					if( projected_loc.u == HUGE_VAL )
-						continue;
-
-					point_2d in(projected_loc.u, projected_loc.v);
-					point_ll_deg out;
-
-					if (!srcdefn->inverse(in, out)) {
-						fprintf( stderr, 
-							   "pj_transform(): source projection not invertable\n" );
-						return -17;
-					}
-					geodetic_loc.u = out.lon()*PI/180.;
-					geodetic_loc.v = out.lat()*PI/180.;
-
-					if( pj_errno != 0 )
-					{
-						if( (pj_errno != 33 /*EDOM*/ && pj_errno != 34 /*ERANGE*/ )
-							&& (pj_errno > 0 || pj_errno < -44 || point_count == 1
-								|| transient_error[-pj_errno] == 0 ) )
-							return pj_errno;
-						else
-						{
-							geodetic_loc.u = HUGE_VAL;
-							geodetic_loc.v = HUGE_VAL;
-						}
-					}
-
-					x[point_offset*i] = geodetic_loc.u;
-					y[point_offset*i] = geodetic_loc.v;
-				}
-			}
-		/* -------------------------------------------------------------------- */
-		/*      But if they are already lat long, adjust for the prime          */
-		/*      meridian if there is one in effect.                             */
-		/* -------------------------------------------------------------------- */
-			if( srcdefn->params().from_greenwich != 0.0 )
-			{
-				for( i = 0; i < point_count; i++ )
-				{
-					if( x[point_offset*i] != HUGE_VAL )
-						x[point_offset*i] += srcdefn->params().from_greenwich;
-				}
-			}
-
-		/* -------------------------------------------------------------------- */
-		/*      Convert datums if needed, and possible.                         */
-		/* -------------------------------------------------------------------- */
-			if( pj_datum_transform( srcdefn, dstdefn, point_count, point_offset, 
-									x, y, z ) != 0 )
-				return pj_errno;
-
-		/* -------------------------------------------------------------------- */
-		/*      But if they are staying lat long, adjust for the prime          */
-		/*      meridian if there is one in effect.                             */
-		/* -------------------------------------------------------------------- */
-			if( dstdefn->params().from_greenwich != 0.0 )
-			{
-				for( i = 0; i < point_count; i++ )
-				{
-					if( x[point_offset*i] != HUGE_VAL )
-						x[point_offset*i] -= dstdefn->params().from_greenwich;
-				}
-			}
-
-
-		/* -------------------------------------------------------------------- */
-		/*      Transform destination latlong to geocentric if required.        */
-		/* -------------------------------------------------------------------- */
-			if( dstdefn->params().is_geocent )
-			{
-				if( z == NULL )
-				{
-					pj_errno = PJD_ERR_GEOCENTRIC;
-					return PJD_ERR_GEOCENTRIC;
-				}
-
-				pj_geodetic_to_geocentric( dstdefn->params().a_orig, dstdefn->params().es_orig,
-										   point_count, point_offset, x, y, z );
-
-				if( dstdefn->params().fr_meter != 1.0 )
-				{
-					for( i = 0; i < point_count; i++ )
-					{
-						if( x[point_offset*i] != HUGE_VAL )
-						{
-							x[point_offset*i] *= dstdefn->params().fr_meter;
-							y[point_offset*i] *= dstdefn->params().fr_meter;
-						}
-					}
-				}
-			}
-
-		/* -------------------------------------------------------------------- */
-		/*      Transform destination points to projection coordinates, if      */
-		/*      desired.                                                        */
-		/* -------------------------------------------------------------------- */
-			else if( !dstdefn->params().is_latlong )
-			{
-				for( i = 0; i < point_count; i++ )
-				{
-					projXY         projected_loc;
-					projLP	       geodetic_loc;
-
-					geodetic_loc.u = x[point_offset*i];
-					geodetic_loc.v = y[point_offset*i];
-
-					if( geodetic_loc.u == HUGE_VAL )
-						continue;
-
-					point_ll_deg in(longitude<>(geodetic_loc.u*180/PI), latitude<>(geodetic_loc.v*180/PI));
-					point_2d out;
-
-					dstdefn->forward(in, out);
-					projected_loc.u = out.x();
-					projected_loc.v = out.y();
-
-					if( pj_errno != 0 )
-					{
-						if( (pj_errno != 33 /*EDOM*/ && pj_errno != 34 /*ERANGE*/ )
-							&& (pj_errno > 0 || pj_errno < -44 || point_count == 1
-								|| transient_error[-pj_errno] == 0 ) )
-							return pj_errno;
-						else
-						{
-							projected_loc.u = HUGE_VAL;
-							projected_loc.v = HUGE_VAL;
-						}
-					}
-
-					x[point_offset*i] = projected_loc.u;
-					y[point_offset*i] = projected_loc.v;
-				}
-			}
-
-		/* -------------------------------------------------------------------- */
-		/*      If a wrapping center other than 0 is provided, rewrap around    */
-		/*      the suggested center (for latlong coordinate systems only).     */
-		/* -------------------------------------------------------------------- */
-			else if( dstdefn->params().is_latlong && dstdefn->params().long_wrap_center != 0 )
-			{
-				for( i = 0; i < point_count; i++ )
-				{
-					if( x[point_offset*i] == HUGE_VAL )
-						continue;
-
-					while( x[point_offset*i] < dstdefn->params().long_wrap_center - HALFPI )
-						x[point_offset*i] += PI;
-					while( x[point_offset*i] > dstdefn->params().long_wrap_center + HALFPI )
-						x[point_offset*i] -= PI;
-				}
-			}
-
-			return 0;
-		}
-
-		/************************************************************************/
-		/*                     pj_geodetic_to_geocentric()                      */
-		/************************************************************************/
-
-		int pj_geodetic_to_geocentric( double a, double es, 
-									   long point_count, int point_offset,
-									   double *x, double *y, double *z )
-
-		{
-			double b;
-			int    i;
-			GeocentricInfo gi;
-
-			int pj_errno = 0;
-
-			if( es == 0.0 )
-				b = a;
-			else
-				b = a * sqrt(1-es);
-
-			if( pj_Set_Geocentric_Parameters( &gi, a, b ) != 0 )
-			{
-				pj_errno = PJD_ERR_GEOCENTRIC;
-				return pj_errno;
-			}
-
-			for( i = 0; i < point_count; i++ )
-			{
-				long io = i * point_offset;
-
-				if( x[io] == HUGE_VAL  )
-					continue;
-
-				if( pj_Convert_Geodetic_To_Geocentric( &gi, y[io], x[io], z[io], 
-													   x+io, y+io, z+io ) != 0 )
-				{
-					pj_errno = -14;
-					x[io] = y[io] = HUGE_VAL;
-					/* but keep processing points! */
-				}
-			}
-
-			return pj_errno;
-		}
-
-		/************************************************************************/
-		/*                     pj_geodetic_to_geocentric()                      */
-		/************************************************************************/
-
-		int pj_geocentric_to_geodetic( double a, double es, 
-									   long point_count, int point_offset,
-									   double *x, double *y, double *z )
-
-		{
-			double b;
-			int    i;
-			GeocentricInfo gi;
-
-			if( es == 0.0 )
-				b = a;
-			else
-				b = a * sqrt(1-es);
-
-			if( pj_Set_Geocentric_Parameters( &gi, a, b ) != 0 )
-			{
-				int pj_errno = PJD_ERR_GEOCENTRIC;
-				return pj_errno;
-			}
-
-			for( i = 0; i < point_count; i++ )
-			{
-				long io = i * point_offset;
-
-				if( x[io] == HUGE_VAL )
-					continue;
-
-				pj_Convert_Geocentric_To_Geodetic( &gi, x[io], y[io], z[io], 
-												   y+io, x+io, z+io );
-			}
-
-			return 0;
-		}
-
-		/************************************************************************/
-		/*                         pj_compare_datums()                          */
-		/*                                                                      */
-		/*      Returns TRUE if the two datums are identical, otherwise         */
-		/*      FALSE.                                                          */
-		/************************************************************************/
-
-		template <typename PRJF, typename PRJT>
-		int pj_compare_datums( PRJF *srcdefn, PRJT *dstdefn )
-
-		{
-			if( srcdefn->params().datum_type != dstdefn->params().datum_type )
-			{
-				return 0;
-			}
-			else if( srcdefn->params().a_orig != dstdefn->params().a_orig 
-					 || fabs(srcdefn->params().es_orig - dstdefn->params().es_orig) > 0.000000000050 )
-			{
-				/* the tolerence for es is to ensure that GRS80 and WGS84 are
-				   considered identical */
-				return 0;
-			}
-			else if( srcdefn->params().datum_type == PJD_3PARAM )
-			{
-				return (srcdefn->params().datum_params[0] == dstdefn->params().datum_params[0]
-						&& srcdefn->params().datum_params[1] == dstdefn->params().datum_params[1]
-						&& srcdefn->params().datum_params[2] == dstdefn->params().datum_params[2]);
-			}
-			else if( srcdefn->params().datum_type == PJD_7PARAM )
-			{
-				return (srcdefn->params().datum_params[0] == dstdefn->params().datum_params[0]
-						&& srcdefn->params().datum_params[1] == dstdefn->params().datum_params[1]
-						&& srcdefn->params().datum_params[2] == dstdefn->params().datum_params[2]
-						&& srcdefn->params().datum_params[3] == dstdefn->params().datum_params[3]
-						&& srcdefn->params().datum_params[4] == dstdefn->params().datum_params[4]
-						&& srcdefn->params().datum_params[5] == dstdefn->params().datum_params[5]
-						&& srcdefn->params().datum_params[6] == dstdefn->params().datum_params[6]);
-			}
-			else if( srcdefn->params().datum_type == PJD_GRIDSHIFT )
-			{
-				return strcmp( pj_param(srcdefn->params().params,"snadgrids").s.c_str(),
-							   pj_param(dstdefn->params().params,"snadgrids").s.c_str() ) == 0;
-			}
-			else
-				return 1;
-		}
-
-		/************************************************************************/
-		/*                       pj_geocentic_to_wgs84()                        */
-		/************************************************************************/
-
-		template <typename PJ>
-		int pj_geocentric_to_wgs84( PJ *defn, 
-									long point_count, int point_offset,
-									double *x, double *y, double *z )
-
-		{
-			int       i;
-
-			//int pj_errno = 0;
-
-			if( defn->params().datum_type == PJD_3PARAM )
-			{
-				for( i = 0; i < point_count; i++ )
-				{
-					long io = i * point_offset;
-		            
-					if( x[io] == HUGE_VAL )
-						continue;
-
-					x[io] = x[io] + Dx_BF;
-					y[io] = y[io] + Dy_BF;
-					z[io] = z[io] + Dz_BF;
-				}
-			}
-			else if( defn->params().datum_type == PJD_7PARAM )
-			{
-				for( i = 0; i < point_count; i++ )
-				{
-					long io = i * point_offset;
-					double x_out, y_out, z_out;
-
-					if( x[io] == HUGE_VAL )
-						continue;
-
-					x_out = M_BF*(       x[io] - Rz_BF*y[io] + Ry_BF*z[io]) + Dx_BF;
-					y_out = M_BF*( Rz_BF*x[io] +       y[io] - Rx_BF*z[io]) + Dy_BF;
-					z_out = M_BF*(-Ry_BF*x[io] + Rx_BF*y[io] +       z[io]) + Dz_BF;
-
-					x[io] = x_out;
-					y[io] = y_out;
-					z[io] = z_out;
-				}
-			}
-
-			return 0;
-		}
-
-		/************************************************************************/
-		/*                      pj_geocentic_from_wgs84()                       */
-		/************************************************************************/
-
-		template <typename PJ>
-		int pj_geocentric_from_wgs84( PJ *defn, 
-									  long point_count, int point_offset,
-									  double *x, double *y, double *z )
-
-		{
-			int       i;
-
-			//int pj_errno = 0;
-
-			if( defn->params().datum_type == PJD_3PARAM )
-			{
-				for( i = 0; i < point_count; i++ )
-				{
-					long io = i * point_offset;
-
-					if( x[io] == HUGE_VAL )
-						continue;
-		            
-					x[io] = x[io] - Dx_BF;
-					y[io] = y[io] - Dy_BF;
-					z[io] = z[io] - Dz_BF;
-				}
-			}
-			else if( defn->params().datum_type == PJD_7PARAM )
-			{
-				for( i = 0; i < point_count; i++ )
-				{
-					long io = i * point_offset;
-					double x_tmp, y_tmp, z_tmp;
-
-					if( x[io] == HUGE_VAL )
-						continue;
-
-					x_tmp = (x[io] - Dx_BF) / M_BF;
-					y_tmp = (y[io] - Dy_BF) / M_BF;
-					z_tmp = (z[io] - Dz_BF) / M_BF;
-
-					x[io] =        x_tmp + Rz_BF*y_tmp - Ry_BF*z_tmp;
-					y[io] = -Rz_BF*x_tmp +       y_tmp + Rx_BF*z_tmp;
-					z[io] =  Ry_BF*x_tmp - Rx_BF*y_tmp +       z_tmp;
-				}
-			}
-
-			return 0;
-		}
-
-		/************************************************************************/
-		/*                         pj_datum_transform()                         */
-		/*                                                                      */
-		/*      The input should be long/lat/z coordinates in radians in the    */
-		/*      source datum, and the output should be long/lat/z               */
-		/*      coordinates in radians in the destination datum.                */
-		/************************************************************************/
-
-		template <typename PRJF, typename PRJT>
-		int pj_datum_transform( PRJF *srcdefn, PRJT *dstdefn, 
-								long point_count, int point_offset,
-								double *x, double *y, double *z )
-
-		{
-			double      src_a, src_es, dst_a, dst_es;
-			int         z_is_temp = FALSE;
-
-			int pj_errno = 0;
-
-		/* -------------------------------------------------------------------- */
-		/*      We cannot do any meaningful datum transformation if either      */
-		/*      the source or destination are of an unknown datum type          */
-		/*      (ie. only a +ellps declaration, no +datum).  This is new        */
-		/*      behavior for PROJ 4.6.0.                                        */
-		/* -------------------------------------------------------------------- */
-			if( srcdefn->params().datum_type == PJD_UNKNOWN
-				|| dstdefn->params().datum_type == PJD_UNKNOWN )
-				return 0;
-
-		/* -------------------------------------------------------------------- */
-		/*      Short cut if the datums are identical.                          */
-		/* -------------------------------------------------------------------- */
-			if( pj_compare_datums( srcdefn, dstdefn ) )
-				return 0;
-
-			src_a = srcdefn->params().a_orig;
-			src_es = srcdefn->params().es_orig;
-
-			dst_a = dstdefn->params().a_orig;
-			dst_es = dstdefn->params().es_orig;
-
-		/* -------------------------------------------------------------------- */
-		/*      Create a temporary Z array if one is not provided.              */
-		/* -------------------------------------------------------------------- */
-			if( z == NULL )
-			{
-				int	bytes = sizeof(double) * point_count * point_offset;
-				z = (double *) malloc(bytes);
-				memset( z, 0, bytes );
-				z_is_temp = TRUE;
-			}
-
-		#define CHECK_RETURN {if( pj_errno != 0 && (pj_errno > 0 || transient_error[-pj_errno] == 0) ) { if( z_is_temp ) free(z); return pj_errno; }}
-
-		/* -------------------------------------------------------------------- */
-		/*	If this datum requires grid shifts, then apply it to geodetic   */
-		/*      coordinates.                                                    */
-		/* -------------------------------------------------------------------- */
-			//if( srcdefn->params().datum_type == PJD_GRIDSHIFT )
-			//{
-			//	pj_apply_gridshift( pj_param(srcdefn->params().params,"snadgrids").s, 0, 
-			//						point_count, point_offset, x, y, z );
-			//	CHECK_RETURN;
-
-			//	src_a = SRS_WGS84_SEMIMAJOR;
-			//	src_es = SRS_WGS84_ESQUARED;
-			//}
-
-			//if( dstdefn->params().datum_type == PJD_GRIDSHIFT )
-			//{
-			//	dst_a = SRS_WGS84_SEMIMAJOR;
-			//	dst_es = SRS_WGS84_ESQUARED;
-			//}
-		        
-		/* ==================================================================== */
-		/*      Do we need to go through geocentric coordinates?                */
-		/* ==================================================================== */
-			if( src_es != dst_es || src_a != dst_a
-				|| srcdefn->params().datum_type == PJD_3PARAM 
-				|| srcdefn->params().datum_type == PJD_7PARAM
-				|| dstdefn->params().datum_type == PJD_3PARAM 
-				|| dstdefn->params().datum_type == PJD_7PARAM)
-			{
-		/* -------------------------------------------------------------------- */
-		/*      Convert to geocentric coordinates.                              */
-		/* -------------------------------------------------------------------- */
-				pj_geodetic_to_geocentric( src_a, src_es,
-										   point_count, point_offset, x, y, z );
-				CHECK_RETURN;
-
-		/* -------------------------------------------------------------------- */
-		/*      Convert between datums.                                         */
-		/* -------------------------------------------------------------------- */
-				if( srcdefn->params().datum_type == PJD_3PARAM 
-					|| srcdefn->params().datum_type == PJD_7PARAM )
-				{
-					pj_geocentric_to_wgs84( srcdefn, point_count, point_offset,x,y,z);
-					CHECK_RETURN;
-				}
-
-				if( dstdefn->params().datum_type == PJD_3PARAM 
-					|| dstdefn->params().datum_type == PJD_7PARAM )
-				{
-					pj_geocentric_from_wgs84( dstdefn, point_count,point_offset,x,y,z);
-					CHECK_RETURN;
-				}
-
-		/* -------------------------------------------------------------------- */
-		/*      Convert back to geodetic coordinates.                           */
-		/* -------------------------------------------------------------------- */
-				pj_geocentric_to_geodetic( dst_a, dst_es,
-										   point_count, point_offset, x, y, z );
-				CHECK_RETURN;
-			}
-
-		/* -------------------------------------------------------------------- */
-		/*      Apply grid shift to destination if required.                    */
-		/* -------------------------------------------------------------------- */
-			//if( dstdefn->params().datum_type == PJD_GRIDSHIFT )
-			//{
-			//	pj_apply_gridshift( pj_param(dstdefn->params().params,"snadgrids").s, 1,
-			//						point_count, point_offset, x, y, z );
-			//	CHECK_RETURN;
-			//}
-
-			if( z_is_temp )
-				free( z );
-
-			return 0;
-		}
-	}
-}
-}
-
-#endif
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_tsfn.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_tsfn.hpp
deleted file mode 100644
index c863489..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_tsfn.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef _PROJECTIONS_PJ_TSFN_HPP
-#define _PROJECTIONS_PJ_TSFN_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-
-namespace ggl { namespace projection { namespace detail {
-
-    /* determine small t */
-    inline double pj_tsfn(double phi, double sinphi, double e)
-    {
-        sinphi *= e;
-        return (tan (.5 * (HALFPI - phi)) /
-           pow((1. - sinphi) / (1. + sinphi), .5 * e));
-    }
-
-}}} // namespace ggl::projection::impl
-#endif
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_units.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_units.hpp
deleted file mode 100644
index 23d3ddc..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_units.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef GGL_PROJECTIONS_IMPL_PJ_UNITS_HPP
-#define GGL_PROJECTIONS_IMPL_PJ_UNITS_HPP
-
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-
-namespace ggl { namespace projection { namespace detail {
-
-/* Field 2 that contains the multiplier to convert named units to meters
-** may be expressed by either a simple floating point constant or a
-** numerator/denomenator values (e.g. 1/1000) */
-
-static const PJ_UNITS pj_units[] =
-{
-    { "km",     "1000.",    "Kilometer" },
-    { "m",      "1.",       "Meter" },
-    { "dm",     "1/10",     "Decimeter" },
-    { "cm",     "1/100",    "Centimeter" },
-    { "mm",     "1/1000",   "Millimeter" },
-    { "kmi",    "1852.0",   "International Nautical Mile" },
-    { "in",     "0.0254",   "International Inch" },
-    { "ft",     "0.3048",   "International Foot" },
-    { "yd",     "0.9144",   "International Yard" },
-    { "mi",     "1609.344", "International Statute Mile" },
-    { "fath",   "1.8288",   "International Fathom" },
-    { "ch",     "20.1168",  "International Chain" },
-    { "link",   "0.201168", "International Link" },
-    { "us-in",  "1./39.37", "U.S. Surveyor's Inch" },
-    { "us-ft",  "0.304800609601219", "U.S. Surveyor's Foot" },
-    { "us-yd",  "0.914401828803658", "U.S. Surveyor's Yard" },
-    { "us-ch",  "20.11684023368047", "U.S. Surveyor's Chain" },
-    { "us-mi",  "1609.347218694437", "U.S. Surveyor's Statute Mile" },
-    { "ind-yd", "0.91439523",        "Indian Yard" },
-    { "ind-ft", "0.30479841",        "Indian Foot" },
-    { "ind-ch", "20.11669506",       "Indian Chain" }
-};
-
-}}} // namespace ggl::projection::impl
-
-#endif // GGL_PROJECTIONS_IMPL_PJ_UNITS_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_zpoly1.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_zpoly1.hpp
deleted file mode 100644
index 860779a..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/pj_zpoly1.hpp
+++ /dev/null
@@ -1,99 +0,0 @@
-#ifndef _PROJECTIONS_ZPOLY1_HPP
-#define _PROJECTIONS_ZPOLY1_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-
-
-namespace ggl { namespace projection { namespace detail {
-
-    /* evaluate complex polynomial */
-
-    /* note: coefficients are always from C_1 to C_n
-    **    i.e. C_0 == (0., 0)
-    **    n should always be >= 1 though no checks are made
-    */
-    inline COMPLEX
-    pj_zpoly1(COMPLEX z, COMPLEX *C, int n)
-    {
-        COMPLEX a;
-        double t;
-
-        a = *(C += n);
-        while (n-- > 0)
-        {
-            a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i;
-            a.i = C->i + z.r * a.i + z.i * t;
-        }
-        a.r = z.r * (t = a.r) - z.i * a.i;
-        a.i = z.r * a.i + z.i * t;
-        return a;
-    }
-
-    /* evaluate complex polynomial and derivative */
-    inline COMPLEX
-    pj_zpolyd1(COMPLEX z, COMPLEX *C, int n, COMPLEX *der)
-    {
-        double t;
-        bool first = true;
-
-        COMPLEX a = *(C += n);
-        COMPLEX b = a;
-        while (n-- > 0)
-        {
-            if (first)
-            {
-                first = false;
-            }
-            else
-            {
-                b.r = a.r + z.r * (t = b.r) - z.i * b.i;
-                b.i = a.i + z.r * b.i + z.i * t;
-            }
-            a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i;
-            a.i = C->i + z.r * a.i + z.i * t;
-        }
-        b.r = a.r + z.r * (t = b.r) - z.i * b.i;
-        b.i = a.i + z.r * b.i + z.i * t;
-        a.r = z.r * (t = a.r) - z.i * a.i;
-        a.i = z.r * a.i + z.i * t;
-        *der = b;
-        return a;
-    }
-
-}}} // namespace ggl::projection::impl
-#endif
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/proj_mdist.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/proj_mdist.hpp
deleted file mode 100644
index 469c83b..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/proj_mdist.hpp
+++ /dev/null
@@ -1,131 +0,0 @@
-#ifndef _PROJECTIONS_PROJ_MDIST_HPP
-#define _PROJECTIONS_PROJ_MDIST_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-namespace ggl { namespace projection
-{
-namespace detail
-{
-    static const int MDIST_MAX_ITER = 20;
-
-    struct MDIST
-    {
-        int nb;
-        double es;
-        double E;
-        double b[MDIST_MAX_ITER];
-    };
-
-    inline void proj_mdist_ini(double es, MDIST& b)
-    {
-        double numf, numfi, twon1, denf, denfi, ens, T, twon;
-        double den, El, Es;
-        double E[MDIST_MAX_ITER];
-        int i, j;
-
-        /* generate E(e^2) and its terms E[] */
-        ens = es;
-        numf = twon1 = denfi = 1.;
-        denf = 1.;
-        twon = 4.;
-        Es = El = E[0] = 1.;
-        for (i = 1; i < MDIST_MAX_ITER ; ++i)
-        {
-            numf *= (twon1 * twon1);
-            den = twon * denf * denf * twon1;
-            T = numf/den;
-            Es -= (E[i] = T * ens);
-            ens *= es;
-            twon *= 4.;
-            denf *= ++denfi;
-            twon1 += 2.;
-            if (Es == El) /* jump out if no change */
-                break;
-            El = Es;
-        }
-        b.nb = i - 1;
-        b.es = es;
-        b.E = Es;
-        /* generate b_n coefficients--note: collapse with prefix ratios */
-        b.b[0] = Es = 1. - Es;
-        numf = denf = 1.;
-        numfi = 2.;
-        denfi = 3.;
-        for (j = 1; j < i; ++j)
-        {
-            Es -= E[j];
-            numf *= numfi;
-            denf *= denfi;
-            b.b[j] = Es * numf / denf;
-            numfi += 2.;
-            denfi += 2.;
-        }
-    }
-    inline double proj_mdist(double phi, double sphi, double cphi, const MDIST& b)
-    {
-        double sc, sum, sphi2, D;
-        int i;
-
-        sc = sphi * cphi;
-        sphi2 = sphi * sphi;
-        D = phi * b.E - b.es * sc / sqrt(1. - b.es * sphi2);
-        sum = b.b[i = b.nb];
-        while (i) sum = b.b[--i] + sphi2 * sum;
-        return(D + sc * sum);
-    }
-    inline double proj_inv_mdist(double dist, const MDIST& b)
-    {
-        static const double TOL = 1e-14;
-        double s, t, phi, k;
-        int i;
-
-        k = 1./(1.- b.es);
-        i = MDIST_MAX_ITER;
-        phi = dist;
-        while ( i-- ) {
-            s = sin(phi);
-            t = 1. - b.es * s * s;
-            phi -= t = (proj_mdist(phi, s, cos(phi), b) - dist) *
-                (t * sqrt(t)) * k;
-            if (fabs(t) < TOL) /* that is no change */
-                return phi;
-        }
-            /* convergence failed */
-        throw proj_exception(-17);
-    }
-}
-}}
-#endif
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/impl/projects.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/impl/projects.hpp
deleted file mode 100644
index bb3cfd5..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/impl/projects.hpp
+++ /dev/null
@@ -1,184 +0,0 @@
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is manually converted from PROJ4 (projects.h)
-
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef GGL_PROJECTIONS_IMPL_PROJECTS_HPP
-#define GGL_PROJECTIONS_IMPL_PROJECTS_HPP
-
-#include <cstring>
-#include <string>
-#include <vector>
-
-#include <boost/concept_check.hpp>
-
-namespace ggl { namespace projection
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-/* some useful constants */
-static const double HALFPI = 1.5707963267948966;
-static const double FORTPI = 0.78539816339744833;
-static const double PI = 3.14159265358979323846;
-static const double TWOPI = 6.2831853071795864769;
-
-static const double RAD_TO_DEG = 57.29577951308232;
-static const double DEG_TO_RAD = .0174532925199432958;
-
-static const int PJD_UNKNOWN =0;
-static const int PJD_3PARAM = 1;
-static const int PJD_7PARAM = 2;
-static const int PJD_GRIDSHIFT = 3;
-static const int PJD_WGS84 = 4;   /* WGS84 (or anything considered equivelent) */
-
-
-struct pvalue
-{
-    std::string param;
-    int used;
-
-    int i;
-    double f;
-    std::string s;
-};
-
-struct pj_const_pod
-{
-    int over;   /* over-range flag */
-    int geoc;   /* geocentric latitude flag */
-    int is_latlong; /* proj=latlong ... not really a projection at all */
-    int is_geocent; /* proj=geocent ... not really a projection at all */
-    double
-        a,  /* major axis or radius if es==0 */
-        a_orig, /* major axis before any +proj related adjustment */
-        es, /* e ^ 2 */
-        es_orig, /* es before any +proj related adjustment */
-        e,  /* eccentricity */
-        ra, /* 1/A */
-        one_es, /* 1 - e^2 */
-        rone_es, /* 1/one_es */
-        lam0, phi0, /* central longitude, latitude */
-        x0, y0, /* easting and northing */
-        k0,    /* general scaling factor */
-        to_meter, fr_meter; /* cartesian scaling */
-
-    int datum_type; /* PJD_UNKNOWN/3PARAM/7PARAM/GRIDSHIFT/WGS84 */
-    double  datum_params[7];
-    double  from_greenwich; /* prime meridian offset (in radians) */
-    double  long_wrap_center; /* 0.0 for -180 to 180, actually in radians*/
-
-    // Initialize all variables to zero
-    pj_const_pod()
-    {
-        std::memset(this, 0, sizeof(pj_const_pod));
-    }
-};
-
-// PROJ4 complex. Might be replaced with std::complex
-struct COMPLEX { double r, i; };
-
-struct PJ_ELLPS
-{
-    std::string id;    /* ellipse keyword name */
-    std::string major;    /* a= value */
-    std::string ell;    /* elliptical parameter */
-    std::string name;    /* comments */
-};
-
-struct PJ_DATUMS
-{
-    std::string id;     /* datum keyword */
-    std::string defn;   /* ie. "to_wgs84=..." */
-    std::string ellipse_id; /* ie from ellipse table */
-    std::string comments; /* EPSG code, etc */
-};
-
-struct PJ_PRIME_MERIDIANS
-{
-    std::string id;     /* prime meridian keyword */
-    std::string defn;   /* offset from greenwich in DMS format. */
-};
-
-struct PJ_UNITS
-{
-    std::string id;    /* units keyword */
-    std::string to_meter;    /* multiply by value to get meters */
-    std::string name;    /* comments */
-};
-
-struct DERIVS
-{
-    double x_l, x_p; /* derivatives of x for lambda-phi */
-    double y_l, y_p; /* derivatives of y for lambda-phi */
-};
-
-struct FACTORS
-{
-    struct DERIVS der;
-    double h, k;    /* meridinal, parallel scales */
-    double omega, thetap;    /* angular distortion, theta prime */
-    double conv;    /* convergence */
-    double s;        /* areal scale factor */
-    double a, b;    /* max-min scale error */
-    int code;        /* info as to analytics, see following */
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-/*!
-    \brief parameters, projection parameters
-    \details This structure initializes all projections
-    \ingroup projection
-*/
-struct parameters : public detail::pj_const_pod
-{
-    std::string name;
-    std::vector<detail::pvalue> params;
-};
-
-// TODO: derived from boost::exception / make more for forward/inverse/init/setup
-class proj_exception
-{
-public:
-
-    proj_exception(int code = 0)
-    {
-        boost::ignore_unused_variable_warning(code);
-    }
-};
-
-}} // namespace ggl::projection
-#endif // GGL_PROJECTIONS_IMPL_PROJECTS_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/parameters.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/parameters.hpp
deleted file mode 100644
index dd5bec0..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/parameters.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef _PROJECTIONS_PARAMETERS_HPP
-#define _PROJECTIONS_PARAMETERS_HPP
-
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#include <string>
-#include <vector>
-
-
-#include <ggl/extensions/gis/projections/impl/pj_init.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-
-
-namespace ggl { namespace projection {
-
-template <typename R>
-inline parameters init(const R& arguments)
-{
-    return detail::pj_init(arguments);
-}
-
-/*!
-\ingroup projection
-\brief Initializes a projection as a string, using the format with + and =
-\details The projection can be initialized with a string (with the same format as the PROJ4 package) for
-  convenient initialization from, for example, the command line
-\par Example
-    <tt>+proj=labrd +ellps=intl +lon_0=46d26'13.95E +lat_0=18d54S +azi=18d54 +k_0=.9995 +x_0=400000 +y_0=800000</tt>
-    for the Madagascar projection.
-\note Parameters are described in the group
-*/
-inline parameters init(const std::string& arguments)
-{
-    return detail::pj_init_plus(arguments);
-}
-
-/*!
-\ingroup projection
-\brief Overload using a const char*
-*/
-inline parameters init(const char* arguments)
-{
-    return detail::pj_init_plus(arguments);
-}
-
-
-// todo:
-/*
-parameters init(const std::map<std::string, std::string>& arguments)
-{
-    return detail::pj_init_plus(arguments);
-}
-*/
-
-
-
-}} // namespace ggl::projection
-#endif
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/aea.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/aea.hpp
deleted file mode 100644
index 1eb88e2..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/aea.hpp
+++ /dev/null
@@ -1,525 +0,0 @@
-#ifndef GGL_PROJECTIONS_AEA_HPP
-#define GGL_PROJECTIONS_AEA_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_msfn.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_qsfn.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_mlfn.hpp>
-
-#include <ggl/extensions/gis/projections/epsg_traits.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace aea{ 
-            static const double EPS10 = 1.e-10;
-            static const double TOL7 = 1.e-7;
-            static const int N_ITER = 15;
-            static const double EPSILON = 1.0e-7;
-            static const double TOL = 1.0e-10;
-
-            struct par_aea
-            {
-                double    ec;
-                double    n;
-                double    c;
-                double    dd;
-                double    n2;
-                double    rho0;
-                double    rho;
-                double    phi1;
-                double    phi2;
-                double    en[EN_SIZE];
-                int        ellips;
-            };
-            
-            
-            
-            
-            
-            /* determine latitude angle phi-1 */
-                inline double
-            phi1_(double qs, double Te, double Tone_es) {
-                int i;
-                double Phi, sinpi, cospi, con, com, dphi;
-            
-                Phi = asin (.5 * qs);
-                if (Te < EPSILON)
-                    return( Phi );
-                i = N_ITER;
-                do {
-                    sinpi = sin (Phi);
-                    cospi = cos (Phi);
-                    con = Te * sinpi;
-                    com = 1. - con * con;
-                    dphi = .5 * com * com / cospi * (qs / Tone_es -
-                       sinpi / com + .5 / Te * log ((1. - con) /
-                       (1. + con)));
-                    Phi += dphi;
-                } while (fabs(dphi) > TOL && --i);
-                return( i ? Phi : HUGE_VAL );
-            }
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_aea_ellipsoid : public base_t_fi<base_aea_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                mutable par_aea m_proj_parm;
-
-                inline base_aea_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_aea_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    if ((this->m_proj_parm.rho = this->m_proj_parm.c - (this->m_proj_parm.ellips ? this->m_proj_parm.n * pj_qsfn(sin(lp_lat),
-                        this->m_par.e, this->m_par.one_es) : this->m_proj_parm.n2 * sin(lp_lat))) < 0.) throw proj_exception();
-                    this->m_proj_parm.rho = this->m_proj_parm.dd * sqrt(this->m_proj_parm.rho);
-                    xy_x = this->m_proj_parm.rho * sin( lp_lon *= this->m_proj_parm.n );
-                    xy_y = this->m_proj_parm.rho0 - this->m_proj_parm.rho * cos(lp_lon);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    if( (this->m_proj_parm.rho = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.rho0 - xy_y)) != 0.0 ) {
-                        if (this->m_proj_parm.n < 0.) {
-                            this->m_proj_parm.rho = -this->m_proj_parm.rho;
-                            xy_x = -xy_x;
-                            xy_y = -xy_y;
-                        }
-                        lp_lat =  this->m_proj_parm.rho / this->m_proj_parm.dd;
-                        if (this->m_proj_parm.ellips) {
-                            lp_lat = (this->m_proj_parm.c - lp_lat * lp_lat) / this->m_proj_parm.n;
-                            if (fabs(this->m_proj_parm.ec - fabs(lp_lat)) > TOL7) {
-                                if ((lp_lat = phi1_(lp_lat, this->m_par.e, this->m_par.one_es)) == HUGE_VAL)
-                                    throw proj_exception();
-                            } else
-                                lp_lat = lp_lat < 0. ? -HALFPI : HALFPI;
-                        } else if (fabs(lp_lat = (this->m_proj_parm.c - lp_lat * lp_lat) / this->m_proj_parm.n2) <= 1.)
-                            lp_lat = asin(lp_lat);
-                        else
-                            lp_lat = lp_lat < 0. ? -HALFPI : HALFPI;
-                        lp_lon = atan2(xy_x, xy_y) / this->m_proj_parm.n;
-                    } else {
-                        lp_lon = 0.;
-                        lp_lat = this->m_proj_parm.n > 0. ? HALFPI : - HALFPI;
-                    }
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_aea& proj_parm) 
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                double cosphi, sinphi;
-                int secant;
-                if (fabs(proj_parm.phi1 + proj_parm.phi2) < EPS10) throw proj_exception(-21);
-                proj_parm.n = sinphi = sin(proj_parm.phi1);
-                cosphi = cos(proj_parm.phi1);
-                secant = fabs(proj_parm.phi1 - proj_parm.phi2) >= EPS10;
-                if( (proj_parm.ellips = (par.es > 0.))) {
-                    double ml1, m1;
-                    pj_enfn(par.es, proj_parm.en);
-                    m1 = pj_msfn(sinphi, cosphi, par.es);
-                    ml1 = pj_qsfn(sinphi, par.e, par.one_es);
-                    if (secant) { /* secant cone */
-                        double ml2, m2;
-                        sinphi = sin(proj_parm.phi2);
-                        cosphi = cos(proj_parm.phi2);
-                        m2 = pj_msfn(sinphi, cosphi, par.es);
-                        ml2 = pj_qsfn(sinphi, par.e, par.one_es);
-                        proj_parm.n = (m1 * m1 - m2 * m2) / (ml2 - ml1);
-                    }
-                    proj_parm.ec = 1. - .5 * par.one_es * log((1. - par.e) /
-                        (1. + par.e)) / par.e;
-                    proj_parm.c = m1 * m1 + proj_parm.n * ml1;
-                    proj_parm.dd = 1. / proj_parm.n;
-                    proj_parm.rho0 = proj_parm.dd * sqrt(proj_parm.c - proj_parm.n * pj_qsfn(sin(par.phi0),
-                        par.e, par.one_es));
-                } else {
-                    if (secant) proj_parm.n = .5 * (proj_parm.n + sin(proj_parm.phi2));
-                    proj_parm.n2 = proj_parm.n + proj_parm.n;
-                    proj_parm.c = cosphi * cosphi + proj_parm.n2 * sinphi;
-                    proj_parm.dd = 1. / proj_parm.n;
-                    proj_parm.rho0 = proj_parm.dd * sqrt(proj_parm.c - proj_parm.n2 * sin(par.phi0));
-                }
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-            }
-
-
-            // Albers Equal Area
-            template <typename Parameters>
-            void setup_aea(Parameters& par, par_aea& proj_parm)
-            {
-                proj_parm.phi1 = pj_param(par.params, "rlat_1").f;
-                proj_parm.phi2 = pj_param(par.params, "rlat_2").f;
-                setup(par, proj_parm);
-            }
-
-            // Lambert Equal Area Conic
-            template <typename Parameters>
-            void setup_leac(Parameters& par, par_aea& proj_parm)
-            {
-                proj_parm.phi2 = pj_param(par.params, "rlat_1").f;
-                proj_parm.phi1 = pj_param(par.params, "bsouth").i ? - HALFPI: HALFPI;
-                setup(par, proj_parm);
-            }
-
-        }} // namespace detail::aea
-    #endif // doxygen 
-
-    /*!
-        \brief Albers Equal Area projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - Ellipsoid
-         - lat_1= lat_2=
-        \par Example
-        \image html ex_aea.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct aea_ellipsoid : public detail::aea::base_aea_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline aea_ellipsoid(const Parameters& par) : detail::aea::base_aea_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::aea::setup_aea(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Lambert Equal Area Conic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - Ellipsoid
-         - lat_1= south
-        \par Example
-        \image html ex_leac.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct leac_ellipsoid : public detail::aea::base_aea_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline leac_ellipsoid(const Parameters& par) : detail::aea::base_aea_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::aea::setup_leac(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class aea_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<aea_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class leac_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<leac_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void aea_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("aea", new aea_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("leac", new leac_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    // Create EPSG specializations
-    // (Proof of Concept, only for some)
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2964, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3005, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3083, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3085, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3086, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3087, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3153, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3174, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3175, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3309, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3310, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +datum=NAD83 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3311, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3338, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3467, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3488, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3513, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3577, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3578, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3579, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3665, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef aea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-        }
-    };
-
-
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_AEA_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/aeqd.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/aeqd.hpp
deleted file mode 100644
index 2a482ad..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/aeqd.hpp
+++ /dev/null
@@ -1,454 +0,0 @@
-#ifndef GGL_PROJECTIONS_AEQD_HPP
-#define GGL_PROJECTIONS_AEQD_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/aasincos.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_mlfn.hpp>
-#include <ggl/extensions/gis/projections/impl/proj_mdist.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace aeqd{ 
-            static const double EPS10 = 1.e-10;
-            static const double TOL = 1.e-14;
-            static const int N_POLE = 0;
-            static const int S_POLE = 1;
-            static const int EQUIT = 2;
-            static const int OBLIQ = 3;
-
-            struct par_aeqd
-            {
-                double    sinph0;
-                double    cosph0;
-                double    en[EN_SIZE];
-                double    M1;
-                double    N1;
-                double    Mp;
-                double    He;
-                double    G;
-                int        mode;
-            };
-            
-            
-            
-            
-            
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_aeqd_ellipsoid : public base_t_fi<base_aeqd_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_aeqd m_proj_parm;
-
-                inline base_aeqd_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_aeqd_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double  coslam, cosphi, sinphi, rho, s, H, H2, c, Az, t, ct, st, cA, sA;
-                
-                    coslam = cos(lp_lon);
-                    cosphi = cos(lp_lat);
-                    sinphi = sin(lp_lat);
-                    switch (this->m_proj_parm.mode) {
-                    case N_POLE:
-                        coslam = - coslam;
-                    case S_POLE:
-                        xy_x = (rho = fabs(this->m_proj_parm.Mp - pj_mlfn(lp_lat, sinphi, cosphi, this->m_proj_parm.en))) *
-                            sin(lp_lon);
-                        xy_y = rho * coslam;
-                        break;
-                    case EQUIT:
-                    case OBLIQ:
-                        if (fabs(lp_lon) < EPS10 && fabs(lp_lat - this->m_par.phi0) < EPS10) {
-                            xy_x = xy_y = 0.;
-                            break;
-                        }
-                        t = atan2(this->m_par.one_es * sinphi + this->m_par.es * this->m_proj_parm.N1 * this->m_proj_parm.sinph0 *
-                            sqrt(1. - this->m_par.es * sinphi * sinphi), cosphi);
-                        ct = cos(t); st = sin(t);
-                        Az = atan2(sin(lp_lon) * ct, this->m_proj_parm.cosph0 * st - this->m_proj_parm.sinph0 * coslam * ct);
-                        cA = cos(Az); sA = sin(Az);
-                        s = aasin( fabs(sA) < TOL ?
-                            (this->m_proj_parm.cosph0 * st - this->m_proj_parm.sinph0 * coslam * ct) / cA :
-                            sin(lp_lon) * ct / sA );
-                        H = this->m_proj_parm.He * cA;
-                        H2 = H * H;
-                        c = this->m_proj_parm.N1 * s * (1. + s * s * (- H2 * (1. - H2)/6. +
-                            s * ( this->m_proj_parm.G * H * (1. - 2. * H2 * H2) / 8. +
-                            s * ((H2 * (4. - 7. * H2) - 3. * this->m_proj_parm.G * this->m_proj_parm.G * (1. - 7. * H2)) /
-                            120. - s * this->m_proj_parm.G * H / 48.))));
-                        xy_x = c * sA;
-                        xy_y = c * cA;
-                        break;
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double c, Az, cosAz, A, B, D, E, F, psi, t;
-                
-                    if ((c = boost::math::hypot(xy_x, xy_y)) < EPS10) {
-                        lp_lat = this->m_par.phi0;
-                        lp_lon = 0.;
-                            return;
-                    }
-                    if (this->m_proj_parm.mode == OBLIQ || this->m_proj_parm.mode == EQUIT) {
-                        cosAz = cos(Az = atan2(xy_x, xy_y));
-                        t = this->m_proj_parm.cosph0 * cosAz;
-                        B = this->m_par.es * t / this->m_par.one_es;
-                        A = - B * t;
-                        B *= 3. * (1. - A) * this->m_proj_parm.sinph0;
-                        D = c / this->m_proj_parm.N1;
-                        E = D * (1. - D * D * (A * (1. + A) / 6. + B * (1. + 3.*A) * D / 24.));
-                        F = 1. - E * E * (A / 2. + B * E / 6.);
-                        psi = aasin(this->m_proj_parm.sinph0 * cos(E) + t * sin(E));
-                        lp_lon = aasin(sin(Az) * sin(E) / cos(psi));
-                        if ((t = fabs(psi)) < EPS10)
-                            lp_lat = 0.;
-                        else if (fabs(t - HALFPI) < 0.)
-                            lp_lat = HALFPI;
-                        else
-                            lp_lat = atan((1. - this->m_par.es * F * this->m_proj_parm.sinph0 / sin(psi)) * tan(psi) /
-                                this->m_par.one_es);
-                    } else { /* Polar */
-                        lp_lat = pj_inv_mlfn(this->m_proj_parm.mode == N_POLE ? this->m_proj_parm.Mp - c : this->m_proj_parm.Mp + c,
-                            this->m_par.es, this->m_proj_parm.en);
-                        lp_lon = atan2(xy_x, this->m_proj_parm.mode == N_POLE ? -xy_y : xy_y);
-                    }
-                }
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_aeqd_guam : public base_t_fi<base_aeqd_guam<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_aeqd m_proj_parm;
-
-                inline base_aeqd_guam(const Parameters& par)
-                    : base_t_fi<base_aeqd_guam<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double  cosphi, sinphi, t;
-                
-                    cosphi = cos(lp_lat);
-                    sinphi = sin(lp_lat);
-                    t = 1. / sqrt(1. - this->m_par.es * sinphi * sinphi);
-                    xy_x = lp_lon * cosphi * t;
-                    xy_y = pj_mlfn(lp_lat, sinphi, cosphi, this->m_proj_parm.en) - this->m_proj_parm.M1 +
-                        .5 * lp_lon * lp_lon * cosphi * sinphi * t;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double x2, t;
-                    int i;
-                
-                    x2 = 0.5 * xy_x * xy_x;
-                    lp_lat = this->m_par.phi0;
-                    for (i = 0; i < 3; ++i) {
-                        t = this->m_par.e * sin(lp_lat);
-                        lp_lat = pj_inv_mlfn(this->m_proj_parm.M1 + xy_y -
-                            x2 * tan(lp_lat) * (t = sqrt(1. - t * t)), this->m_par.es, this->m_proj_parm.en);
-                    }
-                    lp_lon = xy_x * t / cos(lp_lat);
-                }
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_aeqd_spheroid : public base_t_fi<base_aeqd_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_aeqd m_proj_parm;
-
-                inline base_aeqd_spheroid(const Parameters& par)
-                    : base_t_fi<base_aeqd_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double  coslam, cosphi, sinphi;
-                
-                    sinphi = sin(lp_lat);
-                    cosphi = cos(lp_lat);
-                    coslam = cos(lp_lon);
-                    switch (this->m_proj_parm.mode) {
-                    case EQUIT:
-                        xy_y = cosphi * coslam;
-                        goto oblcon;
-                    case OBLIQ:
-                        xy_y = this->m_proj_parm.sinph0 * sinphi + this->m_proj_parm.cosph0 * cosphi * coslam;
-                oblcon:
-                        if (fabs(fabs(xy_y) - 1.) < TOL)
-                            if (xy_y < 0.)
-                                throw proj_exception(); 
-                            else
-                                xy_x = xy_y = 0.;
-                        else {
-                            xy_y = acos(xy_y);
-                            xy_y /= sin(xy_y);
-                            xy_x = xy_y * cosphi * sin(lp_lon);
-                            xy_y *= (this->m_proj_parm.mode == EQUIT) ? sinphi :
-                                   this->m_proj_parm.cosph0 * sinphi - this->m_proj_parm.sinph0 * cosphi * coslam;
-                        }
-                        break;
-                    case N_POLE:
-                        lp_lat = -lp_lat;
-                        coslam = -coslam;
-                    case S_POLE:
-                        if (fabs(lp_lat - HALFPI) < EPS10) throw proj_exception();;
-                        xy_x = (xy_y = (HALFPI + lp_lat)) * sin(lp_lon);
-                        xy_y *= coslam;
-                        break;
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double cosc, c_rh, sinc;
-                
-                    if ((c_rh = boost::math::hypot(xy_x, xy_y)) > PI) {
-                        if (c_rh - EPS10 > PI) throw proj_exception();;
-                        c_rh = PI;
-                    } else if (c_rh < EPS10) {
-                        lp_lat = this->m_par.phi0;
-                        lp_lon = 0.;
-                            return;
-                    }
-                    if (this->m_proj_parm.mode == OBLIQ || this->m_proj_parm.mode == EQUIT) {
-                        sinc = sin(c_rh);
-                        cosc = cos(c_rh);
-                        if (this->m_proj_parm.mode == EQUIT) {
-                            lp_lat = aasin(xy_y * sinc / c_rh);
-                            xy_x *= sinc;
-                            xy_y = cosc * c_rh;
-                        } else {
-                            lp_lat = aasin(cosc * this->m_proj_parm.sinph0 + xy_y * sinc * this->m_proj_parm.cosph0 /
-                                c_rh);
-                            xy_y = (cosc - this->m_proj_parm.sinph0 * sin(lp_lat)) * c_rh;
-                            xy_x *= sinc * this->m_proj_parm.cosph0;
-                        }
-                        lp_lon = xy_y == 0. ? 0. : atan2(xy_x, xy_y);
-                    } else if (this->m_proj_parm.mode == N_POLE) {
-                        lp_lat = HALFPI - c_rh;
-                        lp_lon = atan2(xy_x, -xy_y);
-                    } else {
-                        lp_lat = c_rh - HALFPI;
-                        lp_lon = atan2(xy_x, xy_y);
-                    }
-                }
-            };
-
-            // Azimuthal Equidistant
-            template <typename Parameters>
-            void setup_aeqd(Parameters& par, par_aeqd& proj_parm)
-            {
-                par.phi0 = pj_param(par.params, "rlat_0").f;
-                if (fabs(fabs(par.phi0) - HALFPI) < EPS10) {
-                    proj_parm.mode = par.phi0 < 0. ? S_POLE : N_POLE;
-                    proj_parm.sinph0 = par.phi0 < 0. ? -1. : 1.;
-                    proj_parm.cosph0 = 0.;
-                } else if (fabs(par.phi0) < EPS10) {
-                    proj_parm.mode = EQUIT;
-                    proj_parm.sinph0 = 0.;
-                    proj_parm.cosph0 = 1.;
-                } else {
-                    proj_parm.mode = OBLIQ;
-                    proj_parm.sinph0 = sin(par.phi0);
-                    proj_parm.cosph0 = cos(par.phi0);
-                }
-                if (! par.es) {
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                } else {
-                    pj_enfn(par.es, proj_parm.en);
-                    if (pj_param(par.params, "bguam").i) {
-                        proj_parm.M1 = pj_mlfn(par.phi0, proj_parm.sinph0, proj_parm.cosph0, proj_parm.en);
-                // par.inv = e_guam_inv;
-                // par.fwd = e_guam_fwd;
-                    } else {
-                        switch (proj_parm.mode) {
-                        case N_POLE:
-                            proj_parm.Mp = pj_mlfn(HALFPI, 1., 0., proj_parm.en);
-                            break;
-                        case S_POLE:
-                            proj_parm.Mp = pj_mlfn(-HALFPI, -1., 0., proj_parm.en);
-                            break;
-                        case EQUIT:
-                        case OBLIQ:
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-                            proj_parm.N1 = 1. / sqrt(1. - par.es * proj_parm.sinph0 * proj_parm.sinph0);
-                            proj_parm.G = proj_parm.sinph0 * (proj_parm.He = par.e / sqrt(par.one_es));
-                            proj_parm.He *= proj_parm.cosph0;
-                            break;
-                        }
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-                    }
-                }
-            }
-
-        }} // namespace detail::aeqd
-    #endif // doxygen 
-
-    /*!
-        \brief Azimuthal Equidistant projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-         - Ellipsoid
-         - lat_0 guam
-        \par Example
-        \image html ex_aeqd.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct aeqd_ellipsoid : public detail::aeqd::base_aeqd_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline aeqd_ellipsoid(const Parameters& par) : detail::aeqd::base_aeqd_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::aeqd::setup_aeqd(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Azimuthal Equidistant projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-         - Ellipsoid
-         - lat_0 guam
-        \par Example
-        \image html ex_aeqd.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct aeqd_guam : public detail::aeqd::base_aeqd_guam<Geographic, Cartesian, Parameters>
-    {
-        inline aeqd_guam(const Parameters& par) : detail::aeqd::base_aeqd_guam<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::aeqd::setup_aeqd(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Azimuthal Equidistant projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-         - Ellipsoid
-         - lat_0 guam
-        \par Example
-        \image html ex_aeqd.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct aeqd_spheroid : public detail::aeqd::base_aeqd_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline aeqd_spheroid(const Parameters& par) : detail::aeqd::base_aeqd_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::aeqd::setup_aeqd(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class aeqd_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    if (! par.es)
-                        return new base_v_fi<aeqd_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                    else if (pj_param(par.params, "bguam").i)
-                        return new base_v_fi<aeqd_guam<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                    else
-                        return new base_v_fi<aeqd_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void aeqd_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("aeqd", new aeqd_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_AEQD_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/airy.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/airy.hpp
deleted file mode 100644
index dc95feb..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/airy.hpp
+++ /dev/null
@@ -1,217 +0,0 @@
-#ifndef GGL_PROJECTIONS_AIRY_HPP
-#define GGL_PROJECTIONS_AIRY_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace airy{ 
-            static const double EPS = 1.e-10;
-            static const int N_POLE = 0;
-            static const int S_POLE = 1;
-            static const int EQUIT = 2;
-            static const int OBLIQ = 3;
-
-            struct par_airy
-            {
-                double    p_halfpi;
-                double    sinph0;
-                double    cosph0;
-                double    Cb;
-                int        mode;
-                int        no_cut;    /* do not cut at hemisphere limit */
-            };
-            
-            
-            
-            
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_airy_spheroid : public base_t_f<base_airy_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_airy m_proj_parm;
-
-                inline base_airy_spheroid(const Parameters& par)
-                    : base_t_f<base_airy_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double  sinlam, coslam, cosphi, sinphi, t, s, Krho, cosz;
-                
-                    sinlam = sin(lp_lon);
-                    coslam = cos(lp_lon);
-                    switch (this->m_proj_parm.mode) {
-                    case EQUIT:
-                    case OBLIQ:
-                        sinphi = sin(lp_lat);
-                        cosphi = cos(lp_lat);
-                        cosz = cosphi * coslam;
-                        if (this->m_proj_parm.mode == OBLIQ)
-                            cosz = this->m_proj_parm.sinph0 * sinphi + this->m_proj_parm.cosph0 * cosz;
-                        if (!this->m_proj_parm.no_cut && cosz < -EPS)
-                            throw proj_exception();;
-                        if (fabs(s = 1. - cosz) > EPS) {
-                            t = 0.5 * (1. + cosz);
-                            Krho = -log(t)/s - this->m_proj_parm.Cb / t;
-                        } else
-                            Krho = 0.5 - this->m_proj_parm.Cb;
-                        xy_x = Krho * cosphi * sinlam;
-                        if (this->m_proj_parm.mode == OBLIQ)
-                            xy_y = Krho * (this->m_proj_parm.cosph0 * sinphi -
-                                this->m_proj_parm.sinph0 * cosphi * coslam);
-                        else
-                            xy_y = Krho * sinphi;
-                        break;
-                    case S_POLE:
-                    case N_POLE:
-                        lp_lat = fabs(this->m_proj_parm.p_halfpi - lp_lat);
-                        if (!this->m_proj_parm.no_cut && (lp_lat - EPS) > HALFPI)
-                            throw proj_exception();;
-                        if ((lp_lat *= 0.5) > EPS) {
-                            t = tan(lp_lat);
-                            Krho = -2.*(log(cos(lp_lat)) / t + t * this->m_proj_parm.Cb);
-                            xy_x = Krho * sinlam;
-                            xy_y = Krho * coslam;
-                            if (this->m_proj_parm.mode == N_POLE)
-                                xy_y = -xy_y;
-                        } else
-                            xy_x = xy_y = 0.;
-                    }
-                }
-            };
-
-            // Airy
-            template <typename Parameters>
-            void setup_airy(Parameters& par, par_airy& proj_parm)
-            {
-                double beta;
-                proj_parm.no_cut = pj_param(par.params, "bno_cut").i;
-                beta = 0.5 * (HALFPI - pj_param(par.params, "rlat_b").f);
-                if (fabs(beta) < EPS)
-                    proj_parm.Cb = -0.5;
-                else {
-                    proj_parm.Cb = 1./tan(beta);
-                    proj_parm.Cb *= proj_parm.Cb * log(cos(beta));
-                }
-                if (fabs(fabs(par.phi0) - HALFPI) < EPS)
-                    if (par.phi0 < 0.) {
-                        proj_parm.p_halfpi = -HALFPI;
-                        proj_parm.mode = S_POLE;
-                    } else {
-                        proj_parm.p_halfpi =  HALFPI;
-                        proj_parm.mode = N_POLE;
-                    }
-                else {
-                    if (fabs(par.phi0) < EPS)
-                        proj_parm.mode = EQUIT;
-                    else {
-                        proj_parm.mode = OBLIQ;
-                        proj_parm.sinph0 = sin(par.phi0);
-                        proj_parm.cosph0 = cos(par.phi0);
-                    }
-                }
-                // par.fwd = s_forward;
-                par.es = 0.;
-            }
-
-        }} // namespace detail::airy
-    #endif // doxygen 
-
-    /*!
-        \brief Airy projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-         - no_cut lat_b=
-        \par Example
-        \image html ex_airy.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct airy_spheroid : public detail::airy::base_airy_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline airy_spheroid(const Parameters& par) : detail::airy::base_airy_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::airy::setup_airy(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class airy_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<airy_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void airy_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("airy", new airy_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_AIRY_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/aitoff.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/aitoff.hpp
deleted file mode 100644
index 9c9d0aa..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/aitoff.hpp
+++ /dev/null
@@ -1,210 +0,0 @@
-#ifndef GGL_PROJECTIONS_AITOFF_HPP
-#define GGL_PROJECTIONS_AITOFF_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace aitoff{ 
-
-            struct par_aitoff
-            {
-                double    cosphi1;
-                int        mode;
-            };
-            
-            
-            
-            
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_aitoff_spheroid : public base_t_f<base_aitoff_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_aitoff m_proj_parm;
-
-                inline base_aitoff_spheroid(const Parameters& par)
-                    : base_t_f<base_aitoff_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double c, d;
-                
-                    if((d = acos(cos(lp_lat) * cos(c = 0.5 * lp_lon)))) {/* basic Aitoff */
-                        xy_x = 2. * d * cos(lp_lat) * sin(c) * (xy_y = 1. / sin(d));
-                        xy_y *= d * sin(lp_lat);
-                    } else
-                        xy_x = xy_y = 0.;
-                    if (this->m_proj_parm.mode) { /* Winkel Tripel */
-                        xy_x = (xy_x + lp_lon * this->m_proj_parm.cosphi1) * 0.5;
-                        xy_y = (xy_y + lp_lat) * 0.5;
-                    }
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_aitoff& proj_parm) 
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                // par.inv = 0;
-                // par.fwd = s_forward;
-                par.es = 0.;
-            }
-
-
-            // Aitoff
-            template <typename Parameters>
-            void setup_aitoff(Parameters& par, par_aitoff& proj_parm)
-            {
-                proj_parm.mode = 0;
-                setup(par, proj_parm);
-            }
-
-            // Winkel Tripel
-            template <typename Parameters>
-            void setup_wintri(Parameters& par, par_aitoff& proj_parm)
-            {
-                proj_parm.mode = 1;
-                if (pj_param(par.params, "tlat_1").i)
-                    {
-                    if ((proj_parm.cosphi1 = cos(pj_param(par.params, "rlat_1").f)) == 0.)
-                        throw proj_exception(-22);
-                    }
-                else /* 50d28' or acos(2/pi) */
-                    proj_parm.cosphi1 = 0.636619772367581343;
-                setup(par, proj_parm);
-            }
-
-        }} // namespace detail::aitoff
-    #endif // doxygen 
-
-    /*!
-        \brief Aitoff projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-        \par Example
-        \image html ex_aitoff.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct aitoff_spheroid : public detail::aitoff::base_aitoff_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline aitoff_spheroid(const Parameters& par) : detail::aitoff::base_aitoff_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::aitoff::setup_aitoff(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Winkel Tripel projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - lat_1
-        \par Example
-        \image html ex_wintri.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct wintri_spheroid : public detail::aitoff::base_aitoff_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline wintri_spheroid(const Parameters& par) : detail::aitoff::base_aitoff_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::aitoff::setup_wintri(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class aitoff_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<aitoff_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class wintri_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<wintri_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void aitoff_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("aitoff", new aitoff_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("wintri", new wintri_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_AITOFF_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/august.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/august.hpp
deleted file mode 100644
index 6c651eb..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/august.hpp
+++ /dev/null
@@ -1,141 +0,0 @@
-#ifndef GGL_PROJECTIONS_AUGUST_HPP
-#define GGL_PROJECTIONS_AUGUST_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace august{ 
-            static const double M = 1.333333333333333;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_august_spheroid : public base_t_f<base_august_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_august_spheroid(const Parameters& par)
-                    : base_t_f<base_august_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double t, c1, c, x1, x12, y1, y12;
-                
-                    t = tan(.5 * lp_lat);
-                    c1 = sqrt(1. - t * t);
-                    c = 1. + c1 * cos(lp_lon *= .5);
-                    x1 = sin(lp_lon) *  c1 / c;
-                    y1 =  t / c;
-                    xy_x = M * x1 * (3. + (x12 = x1 * x1) - 3. * (y12 = y1 *  y1));
-                    xy_y = M * y1 * (3. + 3. * x12 - y12);
-                }
-            };
-
-            // August Epicycloidal
-            template <typename Parameters>
-            void setup_august(Parameters& par)
-            {
-                // par.inv = 0;
-                // par.fwd = s_forward;
-                par.es = 0.;
-            }
-
-        }} // namespace detail::august
-    #endif // doxygen 
-
-    /*!
-        \brief August Epicycloidal projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-        \par Example
-        \image html ex_august.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct august_spheroid : public detail::august::base_august_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline august_spheroid(const Parameters& par) : detail::august::base_august_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::august::setup_august(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class august_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<august_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void august_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("august", new august_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_AUGUST_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/bacon.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/bacon.hpp
deleted file mode 100644
index 9049992..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/bacon.hpp
+++ /dev/null
@@ -1,238 +0,0 @@
-#ifndef GGL_PROJECTIONS_BACON_HPP
-#define GGL_PROJECTIONS_BACON_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace bacon{ 
-            static const double HLFPI2 = 2.46740110027233965467;
-            static const double EPS = 1e-10;
-
-            struct par_bacon
-            {
-                int bacn;
-                int ortl;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_bacon_spheroid : public base_t_f<base_bacon_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_bacon m_proj_parm;
-
-                inline base_bacon_spheroid(const Parameters& par)
-                    : base_t_f<base_bacon_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double ax, f;
-                
-                    xy_y = this->m_proj_parm.bacn ? HALFPI * sin(lp_lat) : lp_lat;
-                    if ((ax = fabs(lp_lon)) >= EPS) {
-                        if (this->m_proj_parm.ortl && ax >= HALFPI)
-                            xy_x = sqrt(HLFPI2 - lp_lat * lp_lat + EPS) + ax - HALFPI;
-                        else {
-                            f = 0.5 * (HLFPI2 / ax + ax);
-                            xy_x = ax - f + sqrt(f * f - xy_y * xy_y);
-                        }
-                        if (lp_lon < 0.) xy_x = - xy_x;
-                    } else
-                        xy_x = 0.;
-                }
-            };
-
-            // Apian Globular I
-            template <typename Parameters>
-            void setup_apian(Parameters& par, par_bacon& proj_parm)
-            {
-                proj_parm.bacn = proj_parm.ortl = 0;
-                par.es = 0.;
-                // par.fwd = s_forward;
-            }
-
-            // Ortelius Oval
-            template <typename Parameters>
-            void setup_ortel(Parameters& par, par_bacon& proj_parm)
-            {
-                proj_parm.bacn = 0;
-                proj_parm.ortl = 1;
-                par.es = 0.;
-                // par.fwd = s_forward;
-            }
-
-            // Bacon Globular
-            template <typename Parameters>
-            void setup_bacon(Parameters& par, par_bacon& proj_parm)
-            {
-                proj_parm.bacn = 1;
-                proj_parm.ortl = 0;
-                par.es = 0.;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::bacon
-    #endif // doxygen 
-
-    /*!
-        \brief Apian Globular I projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-        \par Example
-        \image html ex_apian.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct apian_spheroid : public detail::bacon::base_bacon_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline apian_spheroid(const Parameters& par) : detail::bacon::base_bacon_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::bacon::setup_apian(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Ortelius Oval projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-        \par Example
-        \image html ex_ortel.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct ortel_spheroid : public detail::bacon::base_bacon_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline ortel_spheroid(const Parameters& par) : detail::bacon::base_bacon_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::bacon::setup_ortel(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Bacon Globular projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-        \par Example
-        \image html ex_bacon.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct bacon_spheroid : public detail::bacon::base_bacon_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline bacon_spheroid(const Parameters& par) : detail::bacon::base_bacon_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::bacon::setup_bacon(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class apian_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<apian_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class ortel_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<ortel_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class bacon_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<bacon_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void bacon_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("apian", new apian_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("ortel", new ortel_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("bacon", new bacon_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_BACON_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/bipc.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/bipc.hpp
deleted file mode 100644
index c2b6584..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/bipc.hpp
+++ /dev/null
@@ -1,253 +0,0 @@
-#ifndef GGL_PROJECTIONS_BIPC_HPP
-#define GGL_PROJECTIONS_BIPC_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace bipc{ 
-            static const double EPS = 1e-10;
-            static const double EPS10 = 1e-10;
-            static const double ONEEPS = 1.000000001;
-            static const int NITER = 10;
-            static const double lamB = -.34894976726250681539;
-            static const double n = .63055844881274687180;
-            static const double F = 1.89724742567461030582;
-            static const double Azab = .81650043674686363166;
-            static const double Azba = 1.82261843856185925133;
-            static const double T = 1.27246578267089012270;
-            static const double rhoc = 1.20709121521568721927;
-            static const double cAzc = .69691523038678375519;
-            static const double sAzc = .71715351331143607555;
-            static const double C45 = .70710678118654752469;
-            static const double S45 = .70710678118654752410;
-            static const double C20 = .93969262078590838411;
-            static const double S20 = -.34202014332566873287;
-            static const double R110 = 1.91986217719376253360;
-            static const double R104 = 1.81514242207410275904;
-
-            struct par_bipc
-            {
-                int    noskew;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_bipc_spheroid : public base_t_fi<base_bipc_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_bipc m_proj_parm;
-
-                inline base_bipc_spheroid(const Parameters& par)
-                    : base_t_fi<base_bipc_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double cphi, sphi, tphi, t, al, Az, z, Av, cdlam, sdlam, r;
-                    int tag;
-                
-                    cphi = cos(lp_lat);
-                    sphi = sin(lp_lat);
-                    cdlam = cos(sdlam = lamB - lp_lon);
-                    sdlam = sin(sdlam);
-                    if (fabs(fabs(lp_lat) - HALFPI) < EPS10) {
-                        Az = lp_lat < 0. ? PI : 0.;
-                        tphi = HUGE_VAL;
-                    } else {
-                        tphi = sphi / cphi;
-                        Az = atan2(sdlam , C45 * (tphi - cdlam));
-                    }
-                    if( (tag = (Az > Azba)) ) {
-                        cdlam = cos(sdlam = lp_lon + R110);
-                        sdlam = sin(sdlam);
-                        z = S20 * sphi + C20 * cphi * cdlam;
-                        if (fabs(z) > 1.) {
-                            if (fabs(z) > ONEEPS) throw proj_exception();
-                            else z = z < 0. ? -1. : 1.;
-                        } else
-                            z = acos(z);
-                        if (tphi != HUGE_VAL)
-                            Az = atan2(sdlam, (C20 * tphi - S20 * cdlam));
-                        Av = Azab;
-                        xy_y = rhoc;
-                    } else {
-                        z = S45 * (sphi + cphi * cdlam);
-                        if (fabs(z) > 1.) {
-                            if (fabs(z) > ONEEPS) throw proj_exception();
-                            else z = z < 0. ? -1. : 1.;
-                        } else
-                            z = acos(z);
-                        Av = Azba;
-                        xy_y = -rhoc;
-                    }
-                    if (z < 0.) throw proj_exception();;
-                    r = F * (t = pow(tan(.5 * z), n));
-                    if ((al = .5 * (R104 - z)) < 0.) throw proj_exception();;
-                    al = (t + pow(al, n)) / T;
-                    if (fabs(al) > 1.) {
-                        if (fabs(al) > ONEEPS) throw proj_exception();
-                        else al = al < 0. ? -1. : 1.;
-                    } else
-                        al = acos(al);
-                    if (fabs(t = n * (Av - Az)) < al)
-                        r /= cos(al + (tag ? t : -t));
-                    xy_x = r * sin(t);
-                    xy_y += (tag ? -r : r) * cos(t);
-                    if (this->m_proj_parm.noskew) {
-                        t = xy_x;
-                        xy_x = -xy_x * cAzc - xy_y * sAzc; 
-                        xy_y = -xy_y * cAzc + t * sAzc; 
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double t, r, rp, rl, al, z, fAz, Az, s, c, Av;
-                    int neg, i;
-                
-                    if (this->m_proj_parm.noskew) {
-                        t = xy_x;
-                        xy_x = -xy_x * cAzc + xy_y * sAzc; 
-                        xy_y = -xy_y * cAzc - t * sAzc; 
-                    }
-                    if( (neg = (xy_x < 0.)) ) {
-                        xy_y = rhoc - xy_y;
-                        s = S20;
-                        c = C20;
-                        Av = Azab;
-                    } else {
-                        xy_y += rhoc;
-                        s = S45;
-                        c = C45;
-                        Av = Azba;
-                    }
-                    rl = rp = r = boost::math::hypot(xy_x, xy_y);
-                    fAz = fabs(Az = atan2(xy_x, xy_y));
-                    for (i = NITER; i ; --i) {
-                        z = 2. * atan(pow(r / F,1 / n));
-                        al = acos((pow(tan(.5 * z), n) +
-                           pow(tan(.5 * (R104 - z)), n)) / T);
-                        if (fAz < al)
-                            r = rp * cos(al + (neg ? Az : -Az));
-                        if (fabs(rl - r) < EPS)
-                            break;
-                        rl = r;
-                    }
-                    if (! i) throw proj_exception();;
-                    Az = Av - Az / n;
-                    lp_lat = asin(s * cos(z) + c * sin(z) * cos(Az));
-                    lp_lon = atan2(sin(Az), c / tan(z) - s * cos(Az));
-                    if (neg)
-                        lp_lon -= R110;
-                    else
-                        lp_lon = lamB - lp_lon;
-                }
-            };
-
-            // Bipolar conic of western hemisphere
-            template <typename Parameters>
-            void setup_bipc(Parameters& par, par_bipc& proj_parm)
-            {
-                proj_parm.noskew = pj_param(par.params, "bns").i;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                par.es = 0.;
-            }
-
-        }} // namespace detail::bipc
-    #endif // doxygen 
-
-    /*!
-        \brief Bipolar conic of western hemisphere projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-        \par Example
-        \image html ex_bipc.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct bipc_spheroid : public detail::bipc::base_bipc_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline bipc_spheroid(const Parameters& par) : detail::bipc::base_bipc_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::bipc::setup_bipc(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class bipc_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<bipc_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void bipc_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("bipc", new bipc_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_BIPC_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/boggs.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/boggs.hpp
deleted file mode 100644
index 1e4428a..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/boggs.hpp
+++ /dev/null
@@ -1,154 +0,0 @@
-#ifndef GGL_PROJECTIONS_BOGGS_HPP
-#define GGL_PROJECTIONS_BOGGS_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace boggs{ 
-            static const int NITER = 20;
-            static const double EPS = 1e-7;
-            static const double ONETOL = 1.000001;
-            static const double FXC = 2.00276;
-            static const double FXC2 = 1.11072;
-            static const double FYC = 0.49931;
-            static const double FYC2 = 1.41421356237309504880;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_boggs_spheroid : public base_t_f<base_boggs_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_boggs_spheroid(const Parameters& par)
-                    : base_t_f<base_boggs_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double theta, th1, c;
-                    int i;
-                
-                    theta = lp_lat;
-                    if (fabs(fabs(lp_lat) - HALFPI) < EPS)
-                        xy_x = 0.;
-                    else {
-                        c = sin(theta) * PI;
-                        for (i = NITER; i; --i) {
-                            theta -= th1 = (theta + sin(theta) - c) /
-                                (1. + cos(theta));
-                            if (fabs(th1) < EPS) break;
-                        }
-                        theta *= 0.5;
-                        xy_x = FXC * lp_lon / (1. / cos(lp_lat) + FXC2 / cos(theta));
-                    }
-                    xy_y = FYC * (lp_lat + FYC2 * sin(theta));
-                }
-            };
-
-            // Boggs Eumorphic
-            template <typename Parameters>
-            void setup_boggs(Parameters& par)
-            {
-                par.es = 0.;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::boggs
-    #endif // doxygen 
-
-    /*!
-        \brief Boggs Eumorphic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - no inverse
-         - Spheroid
-        \par Example
-        \image html ex_boggs.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct boggs_spheroid : public detail::boggs::base_boggs_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline boggs_spheroid(const Parameters& par) : detail::boggs::base_boggs_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::boggs::setup_boggs(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class boggs_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<boggs_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void boggs_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("boggs", new boggs_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_BOGGS_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/bonne.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/bonne.hpp
deleted file mode 100644
index 383a38b..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/bonne.hpp
+++ /dev/null
@@ -1,246 +0,0 @@
-#ifndef GGL_PROJECTIONS_BONNE_HPP
-#define GGL_PROJECTIONS_BONNE_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_mlfn.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace bonne{ 
-            static const double EPS10 = 1e-10;
-
-            struct par_bonne
-            {
-                double phi1;
-                double cphi1;
-                double am1;
-                double m1;
-                double en[EN_SIZE];
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_bonne_ellipsoid : public base_t_fi<base_bonne_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_bonne m_proj_parm;
-
-                inline base_bonne_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_bonne_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double rh, E, c;
-                
-                    rh = this->m_proj_parm.am1 + this->m_proj_parm.m1 - pj_mlfn(lp_lat, E = sin(lp_lat), c = cos(lp_lat), this->m_proj_parm.en);
-                    E = c * lp_lon / (rh * sqrt(1. - this->m_par.es * E * E));
-                    xy_x = rh * sin(E);
-                    xy_y = this->m_proj_parm.am1 - rh * cos(E);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double s, rh;
-                
-                    rh = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.am1 - xy_y);
-                    lp_lat = pj_inv_mlfn(this->m_proj_parm.am1 + this->m_proj_parm.m1 - rh, this->m_par.es, this->m_proj_parm.en);
-                    if ((s = fabs(lp_lat)) < HALFPI) {
-                        s = sin(lp_lat);
-                        lp_lon = rh * atan2(xy_x, xy_y) *
-                           sqrt(1. - this->m_par.es * s * s) / cos(lp_lat);
-                    } else if (fabs(s - HALFPI) <= EPS10)
-                        lp_lon = 0.;
-                    else throw proj_exception();;
-                }
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_bonne_spheroid : public base_t_fi<base_bonne_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_bonne m_proj_parm;
-
-                inline base_bonne_spheroid(const Parameters& par)
-                    : base_t_fi<base_bonne_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double E, rh;
-                
-                    rh = this->m_proj_parm.cphi1 + this->m_proj_parm.phi1 - lp_lat;
-                    if (fabs(rh) > EPS10) {
-                        xy_x = rh * sin(E = lp_lon * cos(lp_lat) / rh);
-                        xy_y = this->m_proj_parm.cphi1 - rh * cos(E);
-                    } else
-                        xy_x = xy_y = 0.;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double rh;
-                
-                    rh = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.cphi1 - xy_y);
-                    lp_lat = this->m_proj_parm.cphi1 + this->m_proj_parm.phi1 - rh;
-                    if (fabs(lp_lat) > HALFPI) throw proj_exception();;
-                    if (fabs(fabs(lp_lat) - HALFPI) <= EPS10)
-                        lp_lon = 0.;
-                    else
-                        lp_lon = rh * atan2(xy_x, xy_y) / cos(lp_lat);
-                }
-            };
-
-            // Bonne (Werner lat_1=90)
-            template <typename Parameters>
-            void setup_bonne(Parameters& par, par_bonne& proj_parm)
-            {
-                double c;
-                proj_parm.phi1 = pj_param(par.params, "rlat_1").f;
-                if (fabs(proj_parm.phi1) < EPS10) throw proj_exception(-23);
-                if (par.es) {
-                    pj_enfn(par.es, proj_parm.en);
-                    proj_parm.m1 = pj_mlfn(proj_parm.phi1, proj_parm.am1 = sin(proj_parm.phi1),
-                        c = cos(proj_parm.phi1), proj_parm.en);
-                    proj_parm.am1 = c / (sqrt(1. - par.es * proj_parm.am1 * proj_parm.am1) * proj_parm.am1);
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-                } else {
-                    if (fabs(proj_parm.phi1) + EPS10 >= HALFPI)
-                        proj_parm.cphi1 = 0.;
-                    else
-                        proj_parm.cphi1 = 1. / tan(proj_parm.phi1);
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                }
-            }
-
-        }} // namespace detail::bonne
-    #endif // doxygen 
-
-    /*!
-        \brief Bonne (Werner lat_1=90) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - Ellipsoid
-         - lat_1=
-        \par Example
-        \image html ex_bonne.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct bonne_ellipsoid : public detail::bonne::base_bonne_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline bonne_ellipsoid(const Parameters& par) : detail::bonne::base_bonne_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::bonne::setup_bonne(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Bonne (Werner lat_1=90) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - Ellipsoid
-         - lat_1=
-        \par Example
-        \image html ex_bonne.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct bonne_spheroid : public detail::bonne::base_bonne_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline bonne_spheroid(const Parameters& par) : detail::bonne::base_bonne_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::bonne::setup_bonne(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class bonne_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    if (par.es)
-                        return new base_v_fi<bonne_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                    else
-                        return new base_v_fi<bonne_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void bonne_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("bonne", new bonne_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_BONNE_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/cass.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/cass.hpp
deleted file mode 100644
index 67a7dca..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/cass.hpp
+++ /dev/null
@@ -1,465 +0,0 @@
-#ifndef GGL_PROJECTIONS_CASS_HPP
-#define GGL_PROJECTIONS_CASS_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_mlfn.hpp>
-
-#include <ggl/extensions/gis/projections/epsg_traits.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace cass{ 
-            static const double EPS10 = 1e-10;
-            static const double C1 = .16666666666666666666;
-            static const double C2 = .00833333333333333333;
-            static const double C3 = .04166666666666666666;
-            static const double C4 = .33333333333333333333;
-            static const double C5 = .06666666666666666666;
-
-            struct par_cass
-            {
-                double m0;
-                double n;
-                double t;
-                double a1;
-                double c;
-                double r;
-                double dd;
-                double d2;
-                double a2;
-                double tn;
-                double en[EN_SIZE];
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_cass_ellipsoid : public base_t_fi<base_cass_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                mutable par_cass m_proj_parm;
-
-                inline base_cass_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_cass_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_y = pj_mlfn(lp_lat, this->m_proj_parm.n = sin(lp_lat), this->m_proj_parm.c = cos(lp_lat), this->m_proj_parm.en);
-                    this->m_proj_parm.n = 1./sqrt(1. - this->m_par.es * this->m_proj_parm.n * this->m_proj_parm.n);
-                    this->m_proj_parm.tn = tan(lp_lat); this->m_proj_parm.t = this->m_proj_parm.tn * this->m_proj_parm.tn;
-                    this->m_proj_parm.a1 = lp_lon * this->m_proj_parm.c;
-                    this->m_proj_parm.c *= this->m_par.es * this->m_proj_parm.c / (1 - this->m_par.es);
-                    this->m_proj_parm.a2 = this->m_proj_parm.a1 * this->m_proj_parm.a1;
-                    xy_x = this->m_proj_parm.n * this->m_proj_parm.a1 * (1. - this->m_proj_parm.a2 * this->m_proj_parm.t *
-                        (C1 - (8. - this->m_proj_parm.t + 8. * this->m_proj_parm.c) * this->m_proj_parm.a2 * C2));
-                    xy_y -= this->m_proj_parm.m0 - this->m_proj_parm.n * this->m_proj_parm.tn * this->m_proj_parm.a2 *
-                        (.5 + (5. - this->m_proj_parm.t + 6. * this->m_proj_parm.c) * this->m_proj_parm.a2 * C3);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double ph1;
-                
-                    ph1 = pj_inv_mlfn(this->m_proj_parm.m0 + xy_y, this->m_par.es, this->m_proj_parm.en);
-                    this->m_proj_parm.tn = tan(ph1); this->m_proj_parm.t = this->m_proj_parm.tn * this->m_proj_parm.tn;
-                    this->m_proj_parm.n = sin(ph1);
-                    this->m_proj_parm.r = 1. / (1. - this->m_par.es * this->m_proj_parm.n * this->m_proj_parm.n);
-                    this->m_proj_parm.n = sqrt(this->m_proj_parm.r);
-                    this->m_proj_parm.r *= (1. - this->m_par.es) * this->m_proj_parm.n;
-                    this->m_proj_parm.dd = xy_x / this->m_proj_parm.n;
-                    this->m_proj_parm.d2 = this->m_proj_parm.dd * this->m_proj_parm.dd;
-                    lp_lat = ph1 - (this->m_proj_parm.n * this->m_proj_parm.tn / this->m_proj_parm.r) * this->m_proj_parm.d2 *
-                        (.5 - (1. + 3. * this->m_proj_parm.t) * this->m_proj_parm.d2 * C3);
-                    lp_lon = this->m_proj_parm.dd * (1. + this->m_proj_parm.t * this->m_proj_parm.d2 *
-                        (-C4 + (1. + 3. * this->m_proj_parm.t) * this->m_proj_parm.d2 * C5)) / cos(ph1);
-                }
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_cass_spheroid : public base_t_fi<base_cass_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                mutable par_cass m_proj_parm;
-
-                inline base_cass_spheroid(const Parameters& par)
-                    : base_t_fi<base_cass_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = asin(cos(lp_lat) * sin(lp_lon));
-                    xy_y = atan2(tan(lp_lat) , cos(lp_lon)) - this->m_par.phi0;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = asin(sin(this->m_proj_parm.dd = xy_y + this->m_par.phi0) * cos(xy_x));
-                    lp_lon = atan2(tan(xy_x), cos(this->m_proj_parm.dd));
-                }
-            };
-
-            // Cassini
-            template <typename Parameters>
-            void setup_cass(Parameters& par, par_cass& proj_parm)
-            {
-                if (par.es) {
-                    pj_enfn(par.es, proj_parm.en);
-                    proj_parm.m0 = pj_mlfn(par.phi0, sin(par.phi0), cos(par.phi0), proj_parm.en);
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-                } else {
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                }
-            }
-
-        }} // namespace detail::cass
-    #endif // doxygen 
-
-    /*!
-        \brief Cassini projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - Ellipsoid
-        \par Example
-        \image html ex_cass.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct cass_ellipsoid : public detail::cass::base_cass_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline cass_ellipsoid(const Parameters& par) : detail::cass::base_cass_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::cass::setup_cass(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Cassini projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - Ellipsoid
-        \par Example
-        \image html ex_cass.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct cass_spheroid : public detail::cass::base_cass_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline cass_spheroid(const Parameters& par) : detail::cass::base_cass_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::cass::setup_cass(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class cass_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    if (par.es)
-                        return new base_v_fi<cass_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                    else
-                        return new base_v_fi<cass_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void cass_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("cass", new cass_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    // Create EPSG specializations
-    // (Proof of Concept, only for some)
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2066, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2099, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2314, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3068, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +datum=potsdam +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3140, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +to_meter=0.201168";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3366, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3377, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3378, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3379, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3380, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3381, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3382, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3383, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3384, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3385, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3407, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<24500, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<28191, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<28193, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<30200, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef cass_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164";
-        }
-    };
-
-
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_CASS_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/cc.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/cc.hpp
deleted file mode 100644
index 6b97fc2..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/cc.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-#ifndef GGL_PROJECTIONS_CC_HPP
-#define GGL_PROJECTIONS_CC_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace cc{ 
-            static const double EPS10 = 1.e-10;
-
-            struct par_cc
-            {
-                double ap;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_cc_spheroid : public base_t_fi<base_cc_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_cc m_proj_parm;
-
-                inline base_cc_spheroid(const Parameters& par)
-                    : base_t_fi<base_cc_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    if (fabs(fabs(lp_lat) - HALFPI) <= EPS10) throw proj_exception();;
-                    xy_x = lp_lon;
-                    xy_y = tan(lp_lat);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = atan(xy_y);
-                    lp_lon = xy_x;
-                }
-            };
-
-            // Central Cylindrical
-            template <typename Parameters>
-            void setup_cc(Parameters& par, par_cc& proj_parm)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::cc
-    #endif // doxygen 
-
-    /*!
-        \brief Central Cylindrical projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-        \par Example
-        \image html ex_cc.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct cc_spheroid : public detail::cc::base_cc_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline cc_spheroid(const Parameters& par) : detail::cc::base_cc_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::cc::setup_cc(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class cc_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<cc_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void cc_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("cc", new cc_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_CC_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/cea.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/cea.hpp
deleted file mode 100644
index a41b4d4..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/cea.hpp
+++ /dev/null
@@ -1,224 +0,0 @@
-#ifndef GGL_PROJECTIONS_CEA_HPP
-#define GGL_PROJECTIONS_CEA_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_qsfn.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_auth.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace cea{ 
-            static const double EPS = 1e-10;
-
-            struct par_cea
-            {
-                double qp;
-                double apa[APA_SIZE];
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_cea_ellipsoid : public base_t_fi<base_cea_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_cea m_proj_parm;
-
-                inline base_cea_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_cea_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = this->m_par.k0 * lp_lon;
-                    xy_y = .5 * pj_qsfn(sin(lp_lat), this->m_par.e, this->m_par.one_es) / this->m_par.k0;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = pj_authlat(asin( 2. * xy_y * this->m_par.k0 / this->m_proj_parm.qp), this->m_proj_parm.apa);
-                    lp_lon = xy_x / this->m_par.k0;
-                }
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_cea_spheroid : public base_t_fi<base_cea_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_cea m_proj_parm;
-
-                inline base_cea_spheroid(const Parameters& par)
-                    : base_t_fi<base_cea_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = this->m_par.k0 * lp_lon;
-                    xy_y = sin(lp_lat) / this->m_par.k0;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double t;
-                
-                    if ((t = fabs(xy_y *= this->m_par.k0)) - EPS <= 1.) {
-                        if (t >= 1.)
-                            lp_lat = xy_y < 0. ? -HALFPI : HALFPI;
-                        else
-                            lp_lat = asin(xy_y);
-                        lp_lon = xy_x / this->m_par.k0;
-                    } else throw proj_exception();;
-                }
-            };
-
-            // Equal Area Cylindrical
-            template <typename Parameters>
-            void setup_cea(Parameters& par, par_cea& proj_parm)
-            {
-                double t;
-                if (pj_param(par.params, "tlat_ts").i &&
-                    (par.k0 = cos(t = pj_param(par.params, "rlat_ts").f)) < 0.) throw proj_exception(-24);
-                else
-                    t = 0.;
-                if (par.es) {
-                    t = sin(t);
-                    par.k0 /= sqrt(1. - par.es * t * t);
-                    par.e = sqrt(par.es);
-                    pj_authset(par.es, proj_parm.apa);
-                    proj_parm.qp = pj_qsfn(1., par.e, par.one_es);
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-                } else {
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                }
-            }
-
-        }} // namespace detail::cea
-    #endif // doxygen 
-
-    /*!
-        \brief Equal Area Cylindrical projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - Ellipsoid
-         - lat_ts=
-        \par Example
-        \image html ex_cea.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct cea_ellipsoid : public detail::cea::base_cea_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline cea_ellipsoid(const Parameters& par) : detail::cea::base_cea_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::cea::setup_cea(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Equal Area Cylindrical projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - Ellipsoid
-         - lat_ts=
-        \par Example
-        \image html ex_cea.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct cea_spheroid : public detail::cea::base_cea_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline cea_spheroid(const Parameters& par) : detail::cea::base_cea_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::cea::setup_cea(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class cea_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    if (par.es)
-                        return new base_v_fi<cea_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                    else
-                        return new base_v_fi<cea_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void cea_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("cea", new cea_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_CEA_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/chamb.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/chamb.hpp
deleted file mode 100644
index 5020b9e..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/chamb.hpp
+++ /dev/null
@@ -1,242 +0,0 @@
-#ifndef GGL_PROJECTIONS_CHAMB_HPP
-#define GGL_PROJECTIONS_CHAMB_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <cstdio>
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/aasincos.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace chamb{ 
-            static const double THIRD = 0.333333333333333333;
-            static const double TOL = 1e-9;
-
-            struct VECT { double r, Az; };
-            struct CXY { double x, y; }; // x/y for chamb
-
-            struct par_chamb
-            {
-                struct { /* control point data */
-                double phi, lam;
-                double cosphi, sinphi;
-                VECT v;
-                CXY    p;
-                double Az;
-                } c[3];
-                CXY p;
-                double beta_0, beta_1, beta_2;
-            };
-                inline VECT /* distance and azimuth from point 1 to point 2 */
-            vect(double dphi, double c1, double s1, double c2, double s2, double dlam) {
-                VECT v;
-                double cdl, dp, dl;
-            
-                cdl = cos(dlam);
-                if (fabs(dphi) > 1. || fabs(dlam) > 1.)
-                    v.r = aacos(s1 * s2 + c1 * c2 * cdl);
-                else { /* more accurate for smaller distances */
-                    dp = sin(.5 * dphi);
-                    dl = sin(.5 * dlam);
-                    v.r = 2. * aasin(sqrt(dp * dp + c1 * c2 * dl * dl));
-                }
-                if (fabs(v.r) > TOL)
-                    v.Az = atan2(c2 * sin(dlam), c1 * s2 - s1 * c2 * cdl);
-                else
-                    v.r = v.Az = 0.;
-                return v;
-            }
-                inline double /* law of cosines */
-            lc(double b,double c,double a) {
-                return aacos(.5 * (b * b + c * c - a * a) / (b * c));
-            }
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_chamb_spheroid : public base_t_f<base_chamb_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_chamb m_proj_parm;
-
-                inline base_chamb_spheroid(const Parameters& par)
-                    : base_t_f<base_chamb_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double sinphi, cosphi, a;
-                    VECT v[3];
-                    int i, j;
-                
-                    sinphi = sin(lp_lat);
-                    cosphi = cos(lp_lat);
-                    for (i = 0; i < 3; ++i) { /* dist/azimiths from control */
-                        v[i] = vect(lp_lat - this->m_proj_parm.c[i].phi, this->m_proj_parm.c[i].cosphi, this->m_proj_parm.c[i].sinphi,
-                            cosphi, sinphi, lp_lon - this->m_proj_parm.c[i].lam);
-                        if ( ! v[i].r)
-                            break;
-                        v[i].Az = adjlon(v[i].Az - this->m_proj_parm.c[i].v.Az);
-                    }
-                    if (i < 3) /* current point at control point */
-                        { xy_x = this->m_proj_parm.c[i].p.x; xy_y = this->m_proj_parm.c[i].p.y; }
-                    else { /* point mean of intersepts */
-                        { xy_x = this->m_proj_parm.p.x; xy_y = this->m_proj_parm.p.y; }
-                        for (i = 0; i < 3; ++i) {
-                            j = i == 2 ? 0 : i + 1;
-                            a = lc(this->m_proj_parm.c[i].v.r, v[i].r, v[j].r);
-                            if (v[i].Az < 0.)
-                                a = -a;
-                            if (! i) { /* coord comp unique to each arc */
-                                xy_x += v[i].r * cos(a);
-                                xy_y -= v[i].r * sin(a);
-                            } else if (i == 1) {
-                                a = this->m_proj_parm.beta_1 - a;
-                                xy_x -= v[i].r * cos(a);
-                                xy_y -= v[i].r * sin(a);
-                            } else {
-                                a = this->m_proj_parm.beta_2 - a;
-                                xy_x += v[i].r * cos(a);
-                                xy_y += v[i].r * sin(a);
-                            }
-                        }
-                        xy_x *= THIRD; /* mean of arc intercepts */
-                        xy_y *= THIRD;
-                    }
-                }
-            };
-
-            // Chamberlin Trimetric
-            template <typename Parameters>
-            void setup_chamb(Parameters& par, par_chamb& proj_parm)
-            {
-                int i, j;
-                char line[10];
-                for (i = 0;
-             i < 3;
-             ++i) { /* get control point locations */
-                    (void)sprintf(line, "rlat_%d", i+1);
-                    proj_parm.c[i].phi = pj_param(par.params, line).f;
-                    (void)sprintf(line, "rlon_%d", i+1);
-                    proj_parm.c[i].lam = pj_param(par.params, line).f;
-                    proj_parm.c[i].lam = adjlon(proj_parm.c[i].lam - par.lam0);
-                    proj_parm.c[i].cosphi = cos(proj_parm.c[i].phi);
-                    proj_parm.c[i].sinphi = sin(proj_parm.c[i].phi);
-                }
-                for (i = 0;
-             i < 3;
-             ++i) { /* inter ctl pt. distances and azimuths */
-                    j = i == 2 ? 0 : i + 1;
-                    proj_parm.c[i].v = vect(proj_parm.c[j].phi - proj_parm.c[i].phi, proj_parm.c[i].cosphi, proj_parm.c[i].sinphi,
-                        proj_parm.c[j].cosphi, proj_parm.c[j].sinphi, proj_parm.c[j].lam - proj_parm.c[i].lam);
-                    if (! proj_parm.c[i].v.r) throw proj_exception(-25);
-                    /* co-linearity problem ignored for now */
-                }
-                proj_parm.beta_0 = lc(proj_parm.c[0].v.r, proj_parm.c[2].v.r, proj_parm.c[1].v.r);
-                proj_parm.beta_1 = lc(proj_parm.c[0].v.r, proj_parm.c[1].v.r, proj_parm.c[2].v.r);
-                proj_parm.beta_2 = PI - proj_parm.beta_0;
-                proj_parm.p.y = 2. * (proj_parm.c[0].p.y = proj_parm.c[1].p.y = proj_parm.c[2].v.r * sin(proj_parm.beta_0));
-                proj_parm.c[2].p.y = 0.;
-                proj_parm.c[0].p.x = - (proj_parm.c[1].p.x = 0.5 * proj_parm.c[0].v.r);
-                proj_parm.p.x = proj_parm.c[2].p.x = proj_parm.c[0].p.x + proj_parm.c[2].v.r * cos(proj_parm.beta_0);
-                par.es = 0.;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::chamb
-    #endif // doxygen 
-
-    /*!
-        \brief Chamberlin Trimetric projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-         - lat_1= lon_1= lat_2= lon_2= lat_3= lon_3=
-        \par Example
-        \image html ex_chamb.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct chamb_spheroid : public detail::chamb::base_chamb_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline chamb_spheroid(const Parameters& par) : detail::chamb::base_chamb_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::chamb::setup_chamb(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class chamb_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<chamb_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void chamb_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("chamb", new chamb_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_CHAMB_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/collg.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/collg.hpp
deleted file mode 100644
index 26a7963..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/collg.hpp
+++ /dev/null
@@ -1,152 +0,0 @@
-#ifndef GGL_PROJECTIONS_COLLG_HPP
-#define GGL_PROJECTIONS_COLLG_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace collg{ 
-            static const double FXC = 1.12837916709551257390;
-            static const double FYC = 1.77245385090551602729;
-            static const double ONEEPS = 1.0000001;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_collg_spheroid : public base_t_fi<base_collg_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_collg_spheroid(const Parameters& par)
-                    : base_t_fi<base_collg_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    if ((xy_y = 1. - sin(lp_lat)) <= 0.)
-                        xy_y = 0.;
-                    else
-                        xy_y = sqrt(xy_y);
-                    xy_x = FXC * lp_lon * xy_y;
-                    xy_y = FYC * (1. - xy_y);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = xy_y / FYC - 1.;
-                    if (fabs(lp_lat = 1. - lp_lat * lp_lat) < 1.)
-                        lp_lat = asin(lp_lat);
-                    else if (fabs(lp_lat) > ONEEPS) throw proj_exception();
-                    else    lp_lat = lp_lat < 0. ? -HALFPI : HALFPI;
-                    if ((lp_lon = 1. - sin(lp_lat)) <= 0.)
-                        lp_lon = 0.;
-                    else
-                        lp_lon = xy_x / (FXC * sqrt(lp_lon));
-                }
-            };
-
-            // Collignon
-            template <typename Parameters>
-            void setup_collg(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::collg
-    #endif // doxygen 
-
-    /*!
-        \brief Collignon projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_collg.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct collg_spheroid : public detail::collg::base_collg_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline collg_spheroid(const Parameters& par) : detail::collg::base_collg_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::collg::setup_collg(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class collg_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<collg_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void collg_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("collg", new collg_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_COLLG_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/crast.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/crast.hpp
deleted file mode 100644
index 2f7caa8..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/crast.hpp
+++ /dev/null
@@ -1,144 +0,0 @@
-#ifndef GGL_PROJECTIONS_CRAST_HPP
-#define GGL_PROJECTIONS_CRAST_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace crast{ 
-            static const double XM = 0.97720502380583984317;
-            static const double RXM = 1.02332670794648848847;
-            static const double YM = 3.06998012383946546542;
-            static const double RYM = 0.32573500793527994772;
-            static const double THIRD = 0.333333333333333333;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_crast_spheroid : public base_t_fi<base_crast_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_crast_spheroid(const Parameters& par)
-                    : base_t_fi<base_crast_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    lp_lat *= THIRD;
-                    xy_x = XM * lp_lon * (2. * cos(lp_lat + lp_lat) - 1.);
-                    xy_y = YM * sin(lp_lat);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = 3. * asin(xy_y * RYM);
-                    lp_lon = xy_x * RXM / (2. * cos((lp_lat + lp_lat) * THIRD) - 1);
-                }
-            };
-
-            // Craster Parabolic (Putnins P4)
-            template <typename Parameters>
-            void setup_crast(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::crast
-    #endif // doxygen 
-
-    /*!
-        \brief Craster Parabolic (Putnins P4) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_crast.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct crast_spheroid : public detail::crast::base_crast_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline crast_spheroid(const Parameters& par) : detail::crast::base_crast_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::crast::setup_crast(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class crast_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<crast_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void crast_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("crast", new crast_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_CRAST_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/denoy.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/denoy.hpp
deleted file mode 100644
index c008218..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/denoy.hpp
+++ /dev/null
@@ -1,140 +0,0 @@
-#ifndef GGL_PROJECTIONS_DENOY_HPP
-#define GGL_PROJECTIONS_DENOY_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace denoy{ 
-            static const double C0 = 0.95;
-            static const double C1 = -.08333333333333333333;
-            static const double C3 = .00166666666666666666;
-            static const double D1 = 0.9;
-            static const double D5 = 0.03;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_denoy_spheroid : public base_t_f<base_denoy_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_denoy_spheroid(const Parameters& par)
-                    : base_t_f<base_denoy_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_y = lp_lat;
-                    xy_x = lp_lon;
-                    lp_lon = fabs(lp_lon);
-                    xy_x *= cos((C0 + lp_lon * (C1 + lp_lon * lp_lon * C3)) *
-                        (lp_lat * (D1 + D5 * lp_lat * lp_lat * lp_lat * lp_lat)));
-                }
-            };
-
-            // Denoyer Semi-Elliptical
-            template <typename Parameters>
-            void setup_denoy(Parameters& par)
-            {
-                par.es = 0.;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::denoy
-    #endif // doxygen 
-
-    /*!
-        \brief Denoyer Semi-Elliptical projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - no inverse
-         - Spheroid
-        \par Example
-        \image html ex_denoy.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct denoy_spheroid : public detail::denoy::base_denoy_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline denoy_spheroid(const Parameters& par) : detail::denoy::base_denoy_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::denoy::setup_denoy(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class denoy_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<denoy_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void denoy_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("denoy", new denoy_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_DENOY_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck1.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck1.hpp
deleted file mode 100644
index cd37bbb..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck1.hpp
+++ /dev/null
@@ -1,140 +0,0 @@
-#ifndef GGL_PROJECTIONS_ECK1_HPP
-#define GGL_PROJECTIONS_ECK1_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace eck1{ 
-            static const double FC = .92131773192356127802;
-            static const double RP = .31830988618379067154;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_eck1_spheroid : public base_t_fi<base_eck1_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_eck1_spheroid(const Parameters& par)
-                    : base_t_fi<base_eck1_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = FC * lp_lon * (1. - RP * fabs(lp_lat));
-                    xy_y = FC * lp_lat;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = xy_y / FC;
-                    lp_lon = xy_x / (FC * (1. - RP * fabs(lp_lat)));
-                }
-            };
-
-            // Eckert I
-            template <typename Parameters>
-            void setup_eck1(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::eck1
-    #endif // doxygen 
-
-    /*!
-        \brief Eckert I projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_eck1.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct eck1_spheroid : public detail::eck1::base_eck1_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline eck1_spheroid(const Parameters& par) : detail::eck1::base_eck1_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::eck1::setup_eck1(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class eck1_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<eck1_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void eck1_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("eck1", new eck1_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_ECK1_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck2.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck2.hpp
deleted file mode 100644
index db674bb..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck2.hpp
+++ /dev/null
@@ -1,151 +0,0 @@
-#ifndef GGL_PROJECTIONS_ECK2_HPP
-#define GGL_PROJECTIONS_ECK2_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace eck2{ 
-            static const double FXC = 0.46065886596178063902;
-            static const double FYC = 1.44720250911653531871;
-            static const double C13 = 0.33333333333333333333;
-            static const double ONEEPS = 1.0000001;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_eck2_spheroid : public base_t_fi<base_eck2_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_eck2_spheroid(const Parameters& par)
-                    : base_t_fi<base_eck2_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = FXC * lp_lon * (xy_y = sqrt(4. - 3. * sin(fabs(lp_lat))));
-                    xy_y = FYC * (2. - xy_y);
-                    if ( lp_lat < 0.) xy_y = -xy_y;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lon = xy_x / (FXC * ( lp_lat = 2. - fabs(xy_y) / FYC) );
-                    lp_lat = (4. - lp_lat * lp_lat) * C13;
-                    if (fabs(lp_lat) >= 1.) {
-                        if (fabs(lp_lat) > ONEEPS)    throw proj_exception();
-                        else
-                            lp_lat = lp_lat < 0. ? -HALFPI : HALFPI;
-                    } else
-                        lp_lat = asin(lp_lat);
-                    if (xy_y < 0)
-                        lp_lat = -lp_lat;
-                }
-            };
-
-            // Eckert II
-            template <typename Parameters>
-            void setup_eck2(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::eck2
-    #endif // doxygen 
-
-    /*!
-        \brief Eckert II projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_eck2.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct eck2_spheroid : public detail::eck2::base_eck2_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline eck2_spheroid(const Parameters& par) : detail::eck2::base_eck2_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::eck2::setup_eck2(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class eck2_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<eck2_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void eck2_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("eck2", new eck2_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_ECK2_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck3.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck3.hpp
deleted file mode 100644
index 2bcda05..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck3.hpp
+++ /dev/null
@@ -1,286 +0,0 @@
-#ifndef GGL_PROJECTIONS_ECK3_HPP
-#define GGL_PROJECTIONS_ECK3_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace eck3{ 
-
-            struct par_eck3
-            {
-                double C_x, C_y, A, B;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_eck3_spheroid : public base_t_fi<base_eck3_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_eck3 m_proj_parm;
-
-                inline base_eck3_spheroid(const Parameters& par)
-                    : base_t_fi<base_eck3_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_y = this->m_proj_parm.C_y * lp_lat;
-                    xy_x = this->m_proj_parm.C_x * lp_lon * (this->m_proj_parm.A + asqrt(1. - this->m_proj_parm.B * lp_lat * lp_lat));
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = xy_y / this->m_proj_parm.C_y;
-                    lp_lon = xy_x / (this->m_proj_parm.C_x * (this->m_proj_parm.A + asqrt(1. - this->m_proj_parm.B * lp_lat * lp_lat)));
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_eck3& proj_parm) 
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-
-            // Eckert III
-            template <typename Parameters>
-            void setup_eck3(Parameters& par, par_eck3& proj_parm)
-            {
-                proj_parm.C_x = .42223820031577120149;
-                proj_parm.C_y = .84447640063154240298;
-                proj_parm.A = 1.;
-                proj_parm.B = 0.4052847345693510857755;
-                setup(par, proj_parm);
-            }
-
-            // Putnins P1
-            template <typename Parameters>
-            void setup_putp1(Parameters& par, par_eck3& proj_parm)
-            {
-                proj_parm.C_x = 1.89490;
-                proj_parm.C_y = 0.94745;
-                proj_parm.A = -0.5;
-                proj_parm.B = 0.30396355092701331433;
-                setup(par, proj_parm);
-            }
-
-            // Wagner VI
-            template <typename Parameters>
-            void setup_wag6(Parameters& par, par_eck3& proj_parm)
-            {
-                proj_parm.C_x = proj_parm.C_y = 0.94745;
-                proj_parm.A = 0.;
-                proj_parm.B = 0.30396355092701331433;
-                setup(par, proj_parm);
-            }
-
-            // Kavraisky VII
-            template <typename Parameters>
-            void setup_kav7(Parameters& par, par_eck3& proj_parm)
-            {
-                proj_parm.C_x = 0.2632401569273184856851;
-                proj_parm.C_x = 0.8660254037844;
-                proj_parm.C_y = 1.;
-                proj_parm.A = 0.;
-                proj_parm.B = 0.30396355092701331433;
-                setup(par, proj_parm);
-            }
-
-        }} // namespace detail::eck3
-    #endif // doxygen 
-
-    /*!
-        \brief Eckert III projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_eck3.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct eck3_spheroid : public detail::eck3::base_eck3_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline eck3_spheroid(const Parameters& par) : detail::eck3::base_eck3_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::eck3::setup_eck3(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Putnins P1 projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_putp1.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct putp1_spheroid : public detail::eck3::base_eck3_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline putp1_spheroid(const Parameters& par) : detail::eck3::base_eck3_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::eck3::setup_putp1(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Wagner VI projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_wag6.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct wag6_spheroid : public detail::eck3::base_eck3_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline wag6_spheroid(const Parameters& par) : detail::eck3::base_eck3_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::eck3::setup_wag6(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Kavraisky VII projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_kav7.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct kav7_spheroid : public detail::eck3::base_eck3_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline kav7_spheroid(const Parameters& par) : detail::eck3::base_eck3_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::eck3::setup_kav7(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class eck3_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<eck3_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class putp1_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<putp1_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class wag6_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<wag6_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class kav7_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<kav7_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void eck3_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("eck3", new eck3_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("putp1", new putp1_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("wag6", new wag6_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("kav7", new kav7_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_ECK3_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck4.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck4.hpp
deleted file mode 100644
index 673f83f..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck4.hpp
+++ /dev/null
@@ -1,167 +0,0 @@
-#ifndef GGL_PROJECTIONS_ECK4_HPP
-#define GGL_PROJECTIONS_ECK4_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace eck4{ 
-            static const double C_x = .42223820031577120149;
-            static const double C_y = 1.32650042817700232218;
-            static const double RC_y = .75386330736002178205;
-            static const double C_p = 3.57079632679489661922;
-            static const double RC_p = .28004957675577868795;
-            static const double EPS = 1e-7;
-            static const int NITER = 6;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_eck4_spheroid : public base_t_fi<base_eck4_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_eck4_spheroid(const Parameters& par)
-                    : base_t_fi<base_eck4_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double p, V, s, c;
-                    int i;
-                
-                    p = C_p * sin(lp_lat);
-                    V = lp_lat * lp_lat;
-                    lp_lat *= 0.895168 + V * ( 0.0218849 + V * 0.00826809 );
-                    for (i = NITER; i ; --i) {
-                        c = cos(lp_lat);
-                        s = sin(lp_lat);
-                        lp_lat -= V = (lp_lat + s * (c + 2.) - p) /
-                            (1. + c * (c + 2.) - s * s);
-                        if (fabs(V) < EPS)
-                            break;
-                    }
-                    if (!i) {
-                        xy_x = C_x * lp_lon;
-                        xy_y = lp_lat < 0. ? -C_y : C_y;
-                    } else {
-                        xy_x = C_x * lp_lon * (1. + cos(lp_lat));
-                        xy_y = C_y * sin(lp_lat);
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double c;
-                
-                    lp_lat = aasin(xy_y / C_y);
-                    lp_lon = xy_x / (C_x * (1. + (c = cos(lp_lat))));
-                    lp_lat = aasin((lp_lat + sin(lp_lat) * (c + 2.)) / C_p);
-                }
-            };
-
-            // Eckert IV
-            template <typename Parameters>
-            void setup_eck4(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::eck4
-    #endif // doxygen 
-
-    /*!
-        \brief Eckert IV projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_eck4.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct eck4_spheroid : public detail::eck4::base_eck4_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline eck4_spheroid(const Parameters& par) : detail::eck4::base_eck4_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::eck4::setup_eck4(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class eck4_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<eck4_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void eck4_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("eck4", new eck4_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_ECK4_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck5.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck5.hpp
deleted file mode 100644
index e5b5c18..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/eck5.hpp
+++ /dev/null
@@ -1,141 +0,0 @@
-#ifndef GGL_PROJECTIONS_ECK5_HPP
-#define GGL_PROJECTIONS_ECK5_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace eck5{ 
-            static const double XF = 0.44101277172455148219;
-            static const double RXF = 2.26750802723822639137;
-            static const double YF = 0.88202554344910296438;
-            static const double RYF = 1.13375401361911319568;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_eck5_spheroid : public base_t_fi<base_eck5_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_eck5_spheroid(const Parameters& par)
-                    : base_t_fi<base_eck5_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = XF * (1. + cos(lp_lat)) * lp_lon;
-                    xy_y = YF * lp_lat;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lon = RXF * xy_x / (1. + cos( lp_lat = RYF * xy_y));
-                }
-            };
-
-            // Eckert V
-            template <typename Parameters>
-            void setup_eck5(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::eck5
-    #endif // doxygen 
-
-    /*!
-        \brief Eckert V projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_eck5.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct eck5_spheroid : public detail::eck5::base_eck5_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline eck5_spheroid(const Parameters& par) : detail::eck5::base_eck5_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::eck5::setup_eck5(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class eck5_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<eck5_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void eck5_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("eck5", new eck5_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_ECK5_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/eqc.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/eqc.hpp
deleted file mode 100644
index 3d01d95..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/eqc.hpp
+++ /dev/null
@@ -1,146 +0,0 @@
-#ifndef GGL_PROJECTIONS_EQC_HPP
-#define GGL_PROJECTIONS_EQC_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace eqc{ 
-
-            struct par_eqc
-            {
-                double rc;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_eqc_spheroid : public base_t_fi<base_eqc_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_eqc m_proj_parm;
-
-                inline base_eqc_spheroid(const Parameters& par)
-                    : base_t_fi<base_eqc_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = this->m_proj_parm.rc * lp_lon;
-                    xy_y = lp_lat - this->m_par.phi0;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lon = xy_x / this->m_proj_parm.rc;
-                    lp_lat = xy_y + this->m_par.phi0;
-                }
-            };
-
-            // Equidistant Cylindrical (Plate Caree)
-            template <typename Parameters>
-            void setup_eqc(Parameters& par, par_eqc& proj_parm)
-            {
-                if ((proj_parm.rc = cos(pj_param(par.params, "rlat_ts").f)) <= 0.) throw proj_exception(-24);
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                par.es = 0.;
-            }
-
-        }} // namespace detail::eqc
-    #endif // doxygen 
-
-    /*!
-        \brief Equidistant Cylindrical (Plate Caree) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - lat_ts=[
-         - lat_0=0]
-        \par Example
-        \image html ex_eqc.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct eqc_spheroid : public detail::eqc::base_eqc_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline eqc_spheroid(const Parameters& par) : detail::eqc::base_eqc_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::eqc::setup_eqc(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class eqc_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<eqc_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void eqc_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("eqc", new eqc_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_EQC_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/eqdc.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/eqdc.hpp
deleted file mode 100644
index 75db6b3..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/eqdc.hpp
+++ /dev/null
@@ -1,212 +0,0 @@
-#ifndef GGL_PROJECTIONS_EQDC_HPP
-#define GGL_PROJECTIONS_EQDC_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_msfn.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_mlfn.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace eqdc{ 
-            static const double EPS10 = 1.e-10;
-
-            struct par_eqdc
-            {
-                double phi1;
-                double phi2;
-                double n;
-                double rho;
-                double rho0;
-                double c;
-                double en[EN_SIZE];
-                int        ellips;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_eqdc_ellipsoid : public base_t_fi<base_eqdc_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                mutable par_eqdc m_proj_parm;
-
-                inline base_eqdc_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_eqdc_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    this->m_proj_parm.rho = this->m_proj_parm.c - (this->m_proj_parm.ellips ? pj_mlfn(lp_lat, sin(lp_lat),
-                        cos(lp_lat), this->m_proj_parm.en) : lp_lat);
-                    xy_x = this->m_proj_parm.rho * sin( lp_lon *= this->m_proj_parm.n );
-                    xy_y = this->m_proj_parm.rho0 - this->m_proj_parm.rho * cos(lp_lon);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    if ((this->m_proj_parm.rho = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.rho0 - xy_y)) != 0.0 ) {
-                        if (this->m_proj_parm.n < 0.) {
-                            this->m_proj_parm.rho = -this->m_proj_parm.rho;
-                            xy_x = -xy_x;
-                            xy_y = -xy_y;
-                        }
-                        lp_lat = this->m_proj_parm.c - this->m_proj_parm.rho;
-                        if (this->m_proj_parm.ellips)
-                            lp_lat = pj_inv_mlfn(lp_lat, this->m_par.es, this->m_proj_parm.en);
-                        lp_lon = atan2(xy_x, xy_y) / this->m_proj_parm.n;
-                    } else {
-                        lp_lon = 0.;
-                        lp_lat = this->m_proj_parm.n > 0. ? HALFPI : - HALFPI;
-                    }
-                }
-
-                #ifdef SPECIAL_FACTORS_NOT_CONVERTED
-                inline void fac(Geographic lp, Factors &fac) const
-                {
-                    double sinphi, cosphi;
-                
-                    sinphi = sin(lp_lat);
-                    cosphi = cos(lp_lat);
-                    this->m_fac.code |= IS_ANAL_HK;
-                    this->m_fac.h = 1.;
-                    this->m_fac.k = this->m_proj_parm.n * (this->m_proj_parm.c - (this->m_proj_parm.ellips ? pj_mlfn(lp_lat, sinphi,
-                        cosphi, this->m_proj_parm.en) : lp_lat)) / pj_msfn(sinphi, cosphi, this->m_par.es);
-                }
-                #endif
-            };
-
-            // Equidistant Conic
-            template <typename Parameters>
-            void setup_eqdc(Parameters& par, par_eqdc& proj_parm)
-            {
-                double cosphi, sinphi;
-                int secant;
-                proj_parm.phi1 = pj_param(par.params, "rlat_1").f;
-                proj_parm.phi2 = pj_param(par.params, "rlat_2").f;
-                if (fabs(proj_parm.phi1 + proj_parm.phi2) < EPS10) throw proj_exception(-21);
-                    pj_enfn(par.es, proj_parm.en);
-            
-                proj_parm.n = sinphi = sin(proj_parm.phi1);
-                cosphi = cos(proj_parm.phi1);
-                secant = fabs(proj_parm.phi1 - proj_parm.phi2) >= EPS10;
-                if( (proj_parm.ellips = (par.es > 0.)) ) {
-                    double ml1, m1;
-                    m1 = pj_msfn(sinphi, cosphi, par.es);
-                    ml1 = pj_mlfn(proj_parm.phi1, sinphi, cosphi, proj_parm.en);
-                    if (secant) { /* secant cone */
-                        sinphi = sin(proj_parm.phi2);
-                        cosphi = cos(proj_parm.phi2);
-                        proj_parm.n = (m1 - pj_msfn(sinphi, cosphi, par.es)) /
-                            (pj_mlfn(proj_parm.phi2, sinphi, cosphi, proj_parm.en) - ml1);
-                    }
-                    proj_parm.c = ml1 + m1 / proj_parm.n;
-                    proj_parm.rho0 = proj_parm.c - pj_mlfn(par.phi0, sin(par.phi0),
-                        cos(par.phi0), proj_parm.en);
-                } else {
-                    if (secant)
-                        proj_parm.n = (cosphi - cos(proj_parm.phi2)) / (proj_parm.phi2 - proj_parm.phi1);
-                    proj_parm.c = proj_parm.phi1 + cos(proj_parm.phi1) / proj_parm.n;
-                    proj_parm.rho0 = proj_parm.c - par.phi0;
-                }
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-                // par.spc = fac;
-            }
-
-        }} // namespace detail::eqdc
-    #endif // doxygen 
-
-    /*!
-        \brief Equidistant Conic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - Ellipsoid
-         - lat_1= lat_2=
-        \par Example
-        \image html ex_eqdc.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct eqdc_ellipsoid : public detail::eqdc::base_eqdc_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline eqdc_ellipsoid(const Parameters& par) : detail::eqdc::base_eqdc_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::eqdc::setup_eqdc(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class eqdc_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<eqdc_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void eqdc_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("eqdc", new eqdc_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_EQDC_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/fahey.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/fahey.hpp
deleted file mode 100644
index fc5956b..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/fahey.hpp
+++ /dev/null
@@ -1,140 +0,0 @@
-#ifndef GGL_PROJECTIONS_FAHEY_HPP
-#define GGL_PROJECTIONS_FAHEY_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace fahey{ 
-            static const double TOL = 1e-6;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_fahey_spheroid : public base_t_fi<base_fahey_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_fahey_spheroid(const Parameters& par)
-                    : base_t_fi<base_fahey_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_y = 1.819152 * ( xy_x = tan(0.5 * lp_lat) );
-                    xy_x = 0.819152 * lp_lon * asqrt(1 - xy_x * xy_x);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = 2. * atan(xy_y /= 1.819152);
-                    lp_lon = fabs(xy_y = 1. - xy_y * xy_y) < TOL ? 0. :
-                        xy_x / (0.819152 * sqrt(xy_y));
-                }
-            };
-
-            // Fahey
-            template <typename Parameters>
-            void setup_fahey(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::fahey
-    #endif // doxygen 
-
-    /*!
-        \brief Fahey projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_fahey.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct fahey_spheroid : public detail::fahey::base_fahey_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline fahey_spheroid(const Parameters& par) : detail::fahey::base_fahey_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::fahey::setup_fahey(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class fahey_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<fahey_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void fahey_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("fahey", new fahey_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_FAHEY_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/fouc_s.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/fouc_s.hpp
deleted file mode 100644
index c5110f1..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/fouc_s.hpp
+++ /dev/null
@@ -1,167 +0,0 @@
-#ifndef GGL_PROJECTIONS_FOUC_S_HPP
-#define GGL_PROJECTIONS_FOUC_S_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace fouc_s{ 
-            static const int MAX_ITER = 10;
-            static const double LOOP_TOL = 1e-7;
-
-            struct par_fouc_s
-            {
-                double n, n1;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_fouc_s_spheroid : public base_t_fi<base_fouc_s_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_fouc_s m_proj_parm;
-
-                inline base_fouc_s_spheroid(const Parameters& par)
-                    : base_t_fi<base_fouc_s_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double t;
-                
-                    t = cos(lp_lat);
-                    xy_x = lp_lon * t / (this->m_proj_parm.n + this->m_proj_parm.n1 * t);
-                    xy_y = this->m_proj_parm.n * lp_lat + this->m_proj_parm.n1 * sin(lp_lat);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double V;
-                    int i;
-                
-                    if (this->m_proj_parm.n) {
-                        lp_lat = xy_y;
-                        for (i = MAX_ITER; i ; --i) {
-                            lp_lat -= V = (this->m_proj_parm.n * lp_lat + this->m_proj_parm.n1 * sin(lp_lat) - xy_y ) /
-                                (this->m_proj_parm.n + this->m_proj_parm.n1 * cos(lp_lat));
-                            if (fabs(V) < LOOP_TOL)
-                                break;
-                        }
-                        if (!i)
-                            lp_lat = xy_y < 0. ? -HALFPI : HALFPI;
-                    } else
-                        lp_lat = aasin(xy_y);
-                    V = cos(lp_lat);
-                    lp_lon = xy_x * (this->m_proj_parm.n + this->m_proj_parm.n1 * V) / V;
-                }
-            };
-
-            // Foucaut Sinusoidal
-            template <typename Parameters>
-            void setup_fouc_s(Parameters& par, par_fouc_s& proj_parm)
-            {
-                proj_parm.n = pj_param(par.params, "dn").f;
-                if (proj_parm.n < 0. || proj_parm.n > 1.)
-                    throw proj_exception(-99);
-                proj_parm.n1 = 1. - proj_parm.n;
-                par.es = 0;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::fouc_s
-    #endif // doxygen 
-
-    /*!
-        \brief Foucaut Sinusoidal projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_fouc_s.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct fouc_s_spheroid : public detail::fouc_s::base_fouc_s_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline fouc_s_spheroid(const Parameters& par) : detail::fouc_s::base_fouc_s_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::fouc_s::setup_fouc_s(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class fouc_s_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<fouc_s_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void fouc_s_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("fouc_s", new fouc_s_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_FOUC_S_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/gall.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/gall.hpp
deleted file mode 100644
index c90ddb5..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/gall.hpp
+++ /dev/null
@@ -1,142 +0,0 @@
-#ifndef GGL_PROJECTIONS_GALL_HPP
-#define GGL_PROJECTIONS_GALL_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace gall{ 
-            static const double YF = 1.70710678118654752440;
-            static const double XF = 0.70710678118654752440;
-            static const double RYF = 0.58578643762690495119;
-            static const double RXF = 1.41421356237309504880;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_gall_spheroid : public base_t_fi<base_gall_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_gall_spheroid(const Parameters& par)
-                    : base_t_fi<base_gall_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = XF * lp_lon;
-                    xy_y = YF * tan(.5 * lp_lat);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lon = RXF * xy_x;
-                    lp_lat = 2. * atan(xy_y * RYF);
-                }
-            };
-
-            // Gall (Gall Stereographic)
-            template <typename Parameters>
-            void setup_gall(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::gall
-    #endif // doxygen 
-
-    /*!
-        \brief Gall (Gall Stereographic) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-        \par Example
-        \image html ex_gall.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct gall_spheroid : public detail::gall::base_gall_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline gall_spheroid(const Parameters& par) : detail::gall::base_gall_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::gall::setup_gall(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class gall_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<gall_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void gall_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("gall", new gall_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_GALL_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/geocent.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/geocent.hpp
deleted file mode 100644
index a74a1a9..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/geocent.hpp
+++ /dev/null
@@ -1,143 +0,0 @@
-#ifndef GGL_PROJECTIONS_GEOCENT_HPP
-#define GGL_PROJECTIONS_GEOCENT_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace geocent{ 
-
-            
-            
-            
-            
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_geocent_other : public base_t_fi<base_geocent_other<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_geocent_other(const Parameters& par)
-                    : base_t_fi<base_geocent_other<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                        xy_x = lp_lon;
-                        xy_y = lp_lat;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                        lp_lat = xy_y;
-                        lp_lon = xy_x;
-                }
-            };
-
-            // Geocentric
-            template <typename Parameters>
-            void setup_geocent(Parameters& par)
-            {
-                par.is_geocent = 1;
-             
-                par.x0 = 0.0;
-                par.y0 = 0.0;
-                // par.inv = inverse;
-                // par.fwd = forward;
-            }
-
-        }} // namespace detail::geocent
-    #endif // doxygen 
-
-    /*!
-        \brief Geocentric projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-        \par Example
-        \image html ex_geocent.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct geocent_other : public detail::geocent::base_geocent_other<Geographic, Cartesian, Parameters>
-    {
-        inline geocent_other(const Parameters& par) : detail::geocent::base_geocent_other<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::geocent::setup_geocent(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class geocent_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<geocent_other<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void geocent_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("geocent", new geocent_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_GEOCENT_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/geos.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/geos.hpp
deleted file mode 100644
index eb79ec5..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/geos.hpp
+++ /dev/null
@@ -1,280 +0,0 @@
-#ifndef GGL_PROJECTIONS_GEOS_HPP
-#define GGL_PROJECTIONS_GEOS_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace geos{ 
-
-            struct par_geos
-            {
-                double    h;
-                double  radius_p;
-                double  radius_p2;
-                double  radius_p_inv2;
-                double  radius_g;
-                double  radius_g_1;
-                double  C;
-            };
-            
-            
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_geos_ellipsoid : public base_t_fi<base_geos_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_geos m_proj_parm;
-
-                inline base_geos_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_geos_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double r, Vx, Vy, Vz, tmp;
-                
-                /* Calculation of geocentric latitude. */
-                    lp_lat = atan (this->m_proj_parm.radius_p2 * tan (lp_lat));
-                /* Calculation of the three components of the vector from satellite to
-                ** position on earth surface (lon,lat).*/
-                    r = (this->m_proj_parm.radius_p) / boost::math::hypot(this->m_proj_parm.radius_p * cos (lp_lat), sin (lp_lat));
-                    Vx = r * cos (lp_lon) * cos (lp_lat);
-                    Vy = r * sin (lp_lon) * cos (lp_lat);
-                    Vz = r * sin (lp_lat);
-                /* Check visibility. */
-                    if (((this->m_proj_parm.radius_g - Vx) * Vx - Vy * Vy - Vz * Vz * this->m_proj_parm.radius_p_inv2) < 0.)
-                        throw proj_exception();;
-                /* Calculation based on view angles from satellite. */
-                    tmp = this->m_proj_parm.radius_g - Vx;
-                    xy_x = this->m_proj_parm.radius_g_1 * atan (Vy / tmp);
-                    xy_y = this->m_proj_parm.radius_g_1 * atan (Vz / boost::math::hypot (Vy, tmp));
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double Vx, Vy, Vz, a, b, det, k;
-                
-                /* Setting three components of vector from satellite to position.*/
-                    Vx = -1.0;
-                    Vy = tan (xy_x / this->m_proj_parm.radius_g_1);
-                    Vz = tan (xy_y / this->m_proj_parm.radius_g_1) * boost::math::hypot(1.0, Vy);
-                /* Calculation of terms in cubic equation and determinant.*/
-                    a = Vz / this->m_proj_parm.radius_p;
-                    a   = Vy * Vy + a * a + Vx * Vx;
-                    b   = 2 * this->m_proj_parm.radius_g * Vx;
-                    if ((det = (b * b) - 4 * a * this->m_proj_parm.C) < 0.) throw proj_exception();;
-                /* Calculation of three components of vector from satellite to position.*/
-                    k  = (-b - sqrt(det)) / (2. * a);
-                    Vx = this->m_proj_parm.radius_g + k * Vx;
-                    Vy *= k;
-                    Vz *= k;
-                /* Calculation of longitude and latitude.*/
-                    lp_lon  = atan2 (Vy, Vx);
-                    lp_lat = atan (Vz * cos (lp_lon) / Vx);
-                    lp_lat = atan (this->m_proj_parm.radius_p_inv2 * tan (lp_lat));
-                }
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_geos_spheroid : public base_t_fi<base_geos_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_geos m_proj_parm;
-
-                inline base_geos_spheroid(const Parameters& par)
-                    : base_t_fi<base_geos_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double Vx, Vy, Vz, tmp;
-                
-                /* Calculation of the three components of the vector from satellite to
-                ** position on earth surface (lon,lat).*/
-                    tmp = cos(lp_lat);
-                    Vx = cos (lp_lon) * tmp;
-                    Vy = sin (lp_lon) * tmp;
-                    Vz = sin (lp_lat);
-                /* Check visibility.*/
-                    if (((this->m_proj_parm.radius_g - Vx) * Vx - Vy * Vy - Vz * Vz) < 0.) throw proj_exception();;
-                /* Calculation based on view angles from satellite.*/
-                    tmp = this->m_proj_parm.radius_g - Vx;
-                    xy_x = this->m_proj_parm.radius_g_1 * atan(Vy / tmp);
-                    xy_y = this->m_proj_parm.radius_g_1 * atan(Vz / boost::math::hypot(Vy, tmp));
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double Vx, Vy, Vz, a, b, det, k;
-                
-                /* Setting three components of vector from satellite to position.*/
-                    Vx = -1.0;
-                    Vy = tan (xy_x / (this->m_proj_parm.radius_g - 1.0));
-                    Vz = tan (xy_y / (this->m_proj_parm.radius_g - 1.0)) * sqrt (1.0 + Vy * Vy);
-                /* Calculation of terms in cubic equation and determinant.*/
-                    a   = Vy * Vy + Vz * Vz + Vx * Vx;
-                    b   = 2 * this->m_proj_parm.radius_g * Vx;
-                    if ((det = (b * b) - 4 * a * this->m_proj_parm.C) < 0.) throw proj_exception();;
-                /* Calculation of three components of vector from satellite to position.*/
-                    k  = (-b - sqrt(det)) / (2 * a);
-                    Vx = this->m_proj_parm.radius_g + k * Vx;
-                    Vy *= k;
-                    Vz *= k;
-                /* Calculation of longitude and latitude.*/
-                    lp_lon = atan2 (Vy, Vx);
-                    lp_lat = atan (Vz * cos (lp_lon) / Vx);
-                }
-            };
-
-            // Geostationary Satellite View
-            template <typename Parameters>
-            void setup_geos(Parameters& par, par_geos& proj_parm)
-            {
-                if ((proj_parm.h = pj_param(par.params, "dh").f) <= 0.) throw proj_exception(-30);
-                if (par.phi0) throw proj_exception(-46);
-                proj_parm.radius_g = 1. + (proj_parm.radius_g_1 = proj_parm.h / par.a);
-                proj_parm.C  = proj_parm.radius_g * proj_parm.radius_g - 1.0;
-                if (par.es) {
-                    proj_parm.radius_p      = sqrt (par.one_es);
-                    proj_parm.radius_p2     = par.one_es;
-                    proj_parm.radius_p_inv2 = par.rone_es;
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-                } else {
-                    proj_parm.radius_p = proj_parm.radius_p2 = proj_parm.radius_p_inv2 = 1.0;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                }
-            }
-
-        }} // namespace detail::geos
-    #endif // doxygen 
-
-    /*!
-        \brief Geostationary Satellite View projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-         - Ellipsoid
-         - h=
-        \par Example
-        \image html ex_geos.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct geos_ellipsoid : public detail::geos::base_geos_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline geos_ellipsoid(const Parameters& par) : detail::geos::base_geos_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::geos::setup_geos(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Geostationary Satellite View projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-         - Ellipsoid
-         - h=
-        \par Example
-        \image html ex_geos.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct geos_spheroid : public detail::geos::base_geos_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline geos_spheroid(const Parameters& par) : detail::geos::base_geos_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::geos::setup_geos(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class geos_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    if (par.es)
-                        return new base_v_fi<geos_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                    else
-                        return new base_v_fi<geos_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void geos_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("geos", new geos_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_GEOS_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/gins8.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/gins8.hpp
deleted file mode 100644
index 4ec540a..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/gins8.hpp
+++ /dev/null
@@ -1,140 +0,0 @@
-#ifndef GGL_PROJECTIONS_GINS8_HPP
-#define GGL_PROJECTIONS_GINS8_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace gins8{ 
-            static const double Cl = 0.000952426;
-            static const double Cp = 0.162388;
-            static const double C12 = 0.08333333333333333;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_gins8_spheroid : public base_t_f<base_gins8_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_gins8_spheroid(const Parameters& par)
-                    : base_t_f<base_gins8_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double t = lp_lat * lp_lat;
-                
-                    xy_y = lp_lat * (1. + t * C12);
-                    xy_x = lp_lon * (1. - Cp * t);
-                    t = lp_lon * lp_lon;
-                    xy_x *= (0.87 - Cl * t * t);
-                }
-            };
-
-            // Ginsburg VIII (TsNIIGAiK)
-            template <typename Parameters>
-            void setup_gins8(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = 0;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::gins8
-    #endif // doxygen 
-
-    /*!
-        \brief Ginsburg VIII (TsNIIGAiK) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-         - no inverse
-        \par Example
-        \image html ex_gins8.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct gins8_spheroid : public detail::gins8::base_gins8_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline gins8_spheroid(const Parameters& par) : detail::gins8::base_gins8_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::gins8::setup_gins8(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class gins8_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<gins8_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void gins8_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("gins8", new gins8_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_GINS8_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/gn_sinu.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/gn_sinu.hpp
deleted file mode 100644
index e3ffda8..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/gn_sinu.hpp
+++ /dev/null
@@ -1,380 +0,0 @@
-#ifndef GGL_PROJECTIONS_GN_SINU_HPP
-#define GGL_PROJECTIONS_GN_SINU_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_mlfn.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace gn_sinu{ 
-            static const double EPS10 = 1e-10;
-            static const int MAX_ITER = 8;
-            static const double LOOP_TOL = 1e-7;
-
-            struct par_gn_sinu
-            {
-                double    en[EN_SIZE];
-                double    m, n, C_x, C_y;
-            };
-            /* Ellipsoidal Sinusoidal only */
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_gn_sinu_ellipsoid : public base_t_fi<base_gn_sinu_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_gn_sinu m_proj_parm;
-
-                inline base_gn_sinu_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_gn_sinu_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double s, c;
-                
-                    xy_y = pj_mlfn(lp_lat, s = sin(lp_lat), c = cos(lp_lat), this->m_proj_parm.en);
-                    xy_x = lp_lon * c / sqrt(1. - this->m_par.es * s * s);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double s; boost::ignore_unused_variable_warning(s);
-                
-                    if ((s = fabs(lp_lat = pj_inv_mlfn(xy_y, this->m_par.es, this->m_proj_parm.en))) < HALFPI) {
-                        s = sin(lp_lat);
-                        lp_lon = xy_x * sqrt(1. - this->m_par.es * s * s) / cos(lp_lat);
-                    } else if ((s - EPS10) < HALFPI)
-                        lp_lon = 0.;
-                    else throw proj_exception();;
-                            return;
-                }
-                /* General spherical sinusoidals */
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_gn_sinu_spheroid : public base_t_fi<base_gn_sinu_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_gn_sinu m_proj_parm;
-
-                inline base_gn_sinu_spheroid(const Parameters& par)
-                    : base_t_fi<base_gn_sinu_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    if (!this->m_proj_parm.m)
-                        lp_lat = this->m_proj_parm.n != 1. ? aasin(this->m_proj_parm.n * sin(lp_lat)): lp_lat;
-                    else {
-                        double k, V;
-                        int i;
-                
-                        k = this->m_proj_parm.n * sin(lp_lat);
-                        for (i = MAX_ITER; i ; --i) {
-                            lp_lat -= V = (this->m_proj_parm.m * lp_lat + sin(lp_lat) - k) /
-                                (this->m_proj_parm.m + cos(lp_lat));
-                            if (fabs(V) < LOOP_TOL)
-                                break;
-                        }
-                        if (!i)
-                            throw proj_exception();
-                    }
-                    xy_x = this->m_proj_parm.C_x * lp_lon * (this->m_proj_parm.m + cos(lp_lat));
-                    xy_y = this->m_proj_parm.C_y * lp_lat;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double s; boost::ignore_unused_variable_warning(s);
-                
-                    xy_y /= this->m_proj_parm.C_y;
-                    lp_lat = this->m_proj_parm.m ? aasin((this->m_proj_parm.m * xy_y + sin(xy_y)) / this->m_proj_parm.n) :
-                        ( this->m_proj_parm.n != 1. ? aasin(sin(xy_y) / this->m_proj_parm.n) : xy_y );
-                    lp_lon = xy_x / (this->m_proj_parm.C_x * (this->m_proj_parm.m + cos(xy_y)));
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_gn_sinu& proj_parm) 
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                par.es = 0;
-                proj_parm.C_x = (proj_parm.C_y = sqrt((proj_parm.m + 1.) / proj_parm.n))/(proj_parm.m + 1.);
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-
-            // General Sinusoidal Series
-            template <typename Parameters>
-            void setup_gn_sinu(Parameters& par, par_gn_sinu& proj_parm)
-            {
-                if (pj_param(par.params, "tn").i && pj_param(par.params, "tm").i) {
-                    proj_parm.n = pj_param(par.params, "dn").f;
-                    proj_parm.m = pj_param(par.params, "dm").f;
-                } else
-                    throw proj_exception(-99);
-                setup(par, proj_parm);
-            }
-
-            // Sinusoidal (Sanson-Flamsteed)
-            template <typename Parameters>
-            void setup_sinu(Parameters& par, par_gn_sinu& proj_parm)
-            {
-                    pj_enfn(par.es, proj_parm.en);
-            
-                if (par.es) {
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-                } else {
-                    proj_parm.n = 1.;
-                    proj_parm.m = 0.;
-                    setup(par, proj_parm);
-                }
-            }
-
-            // Eckert VI
-            template <typename Parameters>
-            void setup_eck6(Parameters& par, par_gn_sinu& proj_parm)
-            {
-                proj_parm.m = 1.;
-                proj_parm.n = 2.570796326794896619231321691;
-                setup(par, proj_parm);
-            }
-
-            // McBryde-Thomas Flat-Polar Sinusoidal
-            template <typename Parameters>
-            void setup_mbtfps(Parameters& par, par_gn_sinu& proj_parm)
-            {
-                proj_parm.m = 0.5;
-                proj_parm.n = 1.785398163397448309615660845;
-                setup(par, proj_parm);
-            }
-
-        }} // namespace detail::gn_sinu
-    #endif // doxygen 
-
-    /*!
-        \brief Sinusoidal (Sanson-Flamsteed) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-         - Ellipsoid
-        \par Example
-        \image html ex_sinu.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct sinu_ellipsoid : public detail::gn_sinu::base_gn_sinu_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline sinu_ellipsoid(const Parameters& par) : detail::gn_sinu::base_gn_sinu_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::gn_sinu::setup_sinu(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief General Sinusoidal Series projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-         - m= n=
-        \par Example
-        \image html ex_gn_sinu.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct gn_sinu_spheroid : public detail::gn_sinu::base_gn_sinu_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline gn_sinu_spheroid(const Parameters& par) : detail::gn_sinu::base_gn_sinu_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::gn_sinu::setup_gn_sinu(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Sinusoidal (Sanson-Flamsteed) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-         - Ellipsoid
-        \par Example
-        \image html ex_sinu.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct sinu_spheroid : public detail::gn_sinu::base_gn_sinu_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline sinu_spheroid(const Parameters& par) : detail::gn_sinu::base_gn_sinu_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::gn_sinu::setup_sinu(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Eckert VI projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_eck6.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct eck6_spheroid : public detail::gn_sinu::base_gn_sinu_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline eck6_spheroid(const Parameters& par) : detail::gn_sinu::base_gn_sinu_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::gn_sinu::setup_eck6(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief McBryde-Thomas Flat-Polar Sinusoidal projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_mbtfps.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct mbtfps_spheroid : public detail::gn_sinu::base_gn_sinu_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline mbtfps_spheroid(const Parameters& par) : detail::gn_sinu::base_gn_sinu_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::gn_sinu::setup_mbtfps(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class gn_sinu_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<gn_sinu_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class sinu_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    if (par.es)
-                        return new base_v_fi<sinu_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                    else
-                        return new base_v_fi<sinu_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class eck6_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<eck6_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class mbtfps_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<mbtfps_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void gn_sinu_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("gn_sinu", new gn_sinu_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("sinu", new sinu_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("eck6", new eck6_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("mbtfps", new mbtfps_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_GN_SINU_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/gnom.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/gnom.hpp
deleted file mode 100644
index 1fa7f5c..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/gnom.hpp
+++ /dev/null
@@ -1,227 +0,0 @@
-#ifndef GGL_PROJECTIONS_GNOM_HPP
-#define GGL_PROJECTIONS_GNOM_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace gnom{ 
-            static const double EPS10 = 1.e-10;
-            static const int N_POLE = 0;
-            static const int S_POLE = 1;
-            static const int EQUIT = 2;
-            static const int OBLIQ = 3;
-
-            struct par_gnom
-            {
-                double    sinph0;
-                double    cosph0;
-                int        mode;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_gnom_spheroid : public base_t_fi<base_gnom_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_gnom m_proj_parm;
-
-                inline base_gnom_spheroid(const Parameters& par)
-                    : base_t_fi<base_gnom_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double  coslam, cosphi, sinphi;
-                
-                    sinphi = sin(lp_lat);
-                    cosphi = cos(lp_lat);
-                    coslam = cos(lp_lon);
-                    switch (this->m_proj_parm.mode) {
-                    case EQUIT:
-                        xy_y = cosphi * coslam;
-                        break;
-                    case OBLIQ:
-                        xy_y = this->m_proj_parm.sinph0 * sinphi + this->m_proj_parm.cosph0 * cosphi * coslam;
-                        break;
-                    case S_POLE:
-                        xy_y = - sinphi;
-                        break;
-                    case N_POLE:
-                        xy_y = sinphi;
-                        break;
-                    }
-                    if (xy_y <= EPS10) throw proj_exception();;
-                    xy_x = (xy_y = 1. / xy_y) * cosphi * sin(lp_lon);
-                    switch (this->m_proj_parm.mode) {
-                    case EQUIT:
-                        xy_y *= sinphi;
-                        break;
-                    case OBLIQ:
-                        xy_y *= this->m_proj_parm.cosph0 * sinphi - this->m_proj_parm.sinph0 * cosphi * coslam;
-                        break;
-                    case N_POLE:
-                        coslam = - coslam;
-                    case S_POLE:
-                        xy_y *= cosphi * coslam;
-                        break;
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double  rh, cosz, sinz;
-                
-                    rh = boost::math::hypot(xy_x, xy_y);
-                    sinz = sin(lp_lat = atan(rh));
-                    cosz = sqrt(1. - sinz * sinz);
-                    if (fabs(rh) <= EPS10) {
-                        lp_lat = this->m_par.phi0;
-                        lp_lon = 0.;
-                    } else {
-                        switch (this->m_proj_parm.mode) {
-                        case OBLIQ:
-                            lp_lat = cosz * this->m_proj_parm.sinph0 + xy_y * sinz * this->m_proj_parm.cosph0 / rh;
-                            if (fabs(lp_lat) >= 1.)
-                                lp_lat = lp_lat > 0. ? HALFPI : - HALFPI;
-                            else
-                                lp_lat = asin(lp_lat);
-                            xy_y = (cosz - this->m_proj_parm.sinph0 * sin(lp_lat)) * rh;
-                            xy_x *= sinz * this->m_proj_parm.cosph0;
-                            break;
-                        case EQUIT:
-                            lp_lat = xy_y * sinz / rh;
-                            if (fabs(lp_lat) >= 1.)
-                                lp_lat = lp_lat > 0. ? HALFPI : - HALFPI;
-                            else
-                                lp_lat = asin(lp_lat);
-                            xy_y = cosz * rh;
-                            xy_x *= sinz;
-                            break;
-                        case S_POLE:
-                            lp_lat -= HALFPI;
-                            break;
-                        case N_POLE:
-                            lp_lat = HALFPI - lp_lat;
-                            xy_y = -xy_y;
-                            break;
-                        }
-                        lp_lon = atan2(xy_x, xy_y);
-                    }
-                }
-            };
-
-            // Gnomonic
-            template <typename Parameters>
-            void setup_gnom(Parameters& par, par_gnom& proj_parm)
-            {
-                if (fabs(fabs(par.phi0) - HALFPI) < EPS10)
-                    proj_parm.mode = par.phi0 < 0. ? S_POLE : N_POLE;
-                else if (fabs(par.phi0) < EPS10)
-                    proj_parm.mode = EQUIT;
-                else {
-                    proj_parm.mode = OBLIQ;
-                    proj_parm.sinph0 = sin(par.phi0);
-                    proj_parm.cosph0 = cos(par.phi0);
-                }
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                par.es = 0.;
-            }
-
-        }} // namespace detail::gnom
-    #endif // doxygen 
-
-    /*!
-        \brief Gnomonic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-        \par Example
-        \image html ex_gnom.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct gnom_spheroid : public detail::gnom::base_gnom_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline gnom_spheroid(const Parameters& par) : detail::gnom::base_gnom_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::gnom::setup_gnom(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class gnom_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<gnom_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void gnom_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("gnom", new gnom_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_GNOM_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/goode.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/goode.hpp
deleted file mode 100644
index 11f01cb..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/goode.hpp
+++ /dev/null
@@ -1,160 +0,0 @@
-#ifndef GGL_PROJECTIONS_GOODE_HPP
-#define GGL_PROJECTIONS_GOODE_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-#include <ggl/extensions/gis/projections/proj/moll.hpp>
-#include <ggl/extensions/gis/projections/proj/gn_sinu.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace goode{ 
-            static const double Y_COR = 0.05280;
-            static const double PHI_LIM = .71093078197902358062;
-
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct par_goode
-            {
-                sinu_ellipsoid<Geographic, Cartesian, Parameters>    sinu;
-                moll_spheroid<Geographic, Cartesian, Parameters>    moll;
-                
-                par_goode(const Parameters& par) : sinu(par), moll(par) {}
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_goode_spheroid : public base_t_fi<base_goode_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_goode<Geographic, Cartesian, Parameters> m_proj_parm;
-
-                inline base_goode_spheroid(const Parameters& par)
-                    : base_t_fi<base_goode_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par), m_proj_parm(par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    if (fabs(lp_lat) <= PHI_LIM)
-                        this->m_proj_parm.sinu.fwd(lp_lon, lp_lat, xy_x, xy_y);
-                    else {
-                        this->m_proj_parm.moll.fwd(lp_lon, lp_lat, xy_x, xy_y);
-                        xy_y -= lp_lat >= 0.0 ? Y_COR : -Y_COR;
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    if (fabs(xy_y) <= PHI_LIM)
-                        this->m_proj_parm.sinu.inv(xy_x, xy_y, lp_lon, lp_lat);
-                    else {
-                        xy_y += xy_y >= 0.0 ? Y_COR : -Y_COR;
-                        this->m_proj_parm.moll.inv(xy_x, xy_y, lp_lon, lp_lat);
-                    }
-                }
-            };
-
-            // Goode Homolosine
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            void setup_goode(Parameters& par, par_goode<Geographic, Cartesian, Parameters>& proj_parm)
-            {
-                par.es = 0.;
-                // par.fwd = s_forward;
-                // par.inv = s_inverse;
-            }
-
-        }} // namespace detail::goode
-    #endif // doxygen 
-
-    /*!
-        \brief Goode Homolosine projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_goode.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct goode_spheroid : public detail::goode::base_goode_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline goode_spheroid(const Parameters& par) : detail::goode::base_goode_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::goode::setup_goode(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class goode_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<goode_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void goode_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("goode", new goode_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_GOODE_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/gstmerc.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/gstmerc.hpp
deleted file mode 100644
index 24cc1fa..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/gstmerc.hpp
+++ /dev/null
@@ -1,176 +0,0 @@
-#ifndef GGL_PROJECTIONS_GSTMERC_HPP
-#define GGL_PROJECTIONS_GSTMERC_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_tsfn.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_phi2.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace gstmerc{ 
-
-            struct par_gstmerc
-            {
-                double lamc;
-                double phic;
-                double c;
-                double n1;
-                double n2;
-                double XS;
-                double YS;
-            };
-            
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_gstmerc_spheroid : public base_t_fi<base_gstmerc_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_gstmerc m_proj_parm;
-
-                inline base_gstmerc_spheroid(const Parameters& par)
-                    : base_t_fi<base_gstmerc_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double L, Ls, sinLs1, Ls1;
-                    L= this->m_proj_parm.n1*lp_lon;
-                    Ls= this->m_proj_parm.c+this->m_proj_parm.n1*log(pj_tsfn(-1.0*lp_lat,-1.0*sin(lp_lat),this->m_par.e));
-                    sinLs1= sin(L)/cosh(Ls);
-                    Ls1= log(pj_tsfn(-1.0*asin(sinLs1),0.0,0.0));
-                    xy_x= (this->m_proj_parm.XS + this->m_proj_parm.n2*Ls1)*this->m_par.ra;
-                    xy_y= (this->m_proj_parm.YS + this->m_proj_parm.n2*atan(sinh(Ls)/cos(L)))*this->m_par.ra;
-                    /*fprintf(stderr,"fwd:\nL      =%16.13f\nLs     =%16.13f\nLs1    =%16.13f\nLP(%16.13f,%16.13f)=XY(%16.4f,%16.4f)\n",L,Ls,Ls1,lp_lon+this->m_par.lam0,lp_lat,(xy_x*this->m_par.a + this->m_par.x0)*this->m_par.to_meter,(xy_y*this->m_par.a + this->m_par.y0)*this->m_par.to_meter);*/
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double L, LC, sinC;
-                    L= atan(sinh((xy_x*this->m_par.a - this->m_proj_parm.XS)/this->m_proj_parm.n2)/cos((xy_y*this->m_par.a - this->m_proj_parm.YS)/this->m_proj_parm.n2));
-                    sinC= sin((xy_y*this->m_par.a - this->m_proj_parm.YS)/this->m_proj_parm.n2)/cosh((xy_x*this->m_par.a - this->m_proj_parm.XS)/this->m_proj_parm.n2);
-                    LC= log(pj_tsfn(-1.0*asin(sinC),0.0,0.0));
-                    lp_lon= L/this->m_proj_parm.n1;
-                    lp_lat= -1.0*pj_phi2(exp((LC-this->m_proj_parm.c)/this->m_proj_parm.n1),this->m_par.e);
-                    /*fprintf(stderr,"inv:\nL      =%16.13f\nsinC   =%16.13f\nLC     =%16.13f\nXY(%16.4f,%16.4f)=LP(%16.13f,%16.13f)\n",L,sinC,LC,((xy_x/this->m_par.ra)+this->m_par.x0)/this->m_par.to_meter,((xy_y/this->m_par.ra)+this->m_par.y0)/this->m_par.to_meter,lp_lon+this->m_par.lam0,lp_lat);*/
-                }
-            };
-
-            // Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)
-            template <typename Parameters>
-            void setup_gstmerc(Parameters& par, par_gstmerc& proj_parm)
-            {
-                proj_parm.lamc= par.lam0;
-                proj_parm.n1= sqrt(1.0+par.es*pow(cos(par.phi0),4.0)/(1.0-par.es));
-                proj_parm.phic= asin(sin(par.phi0)/proj_parm.n1);
-                proj_parm.c=       log(pj_tsfn(-1.0*proj_parm.phic,0.0,0.0))
-                     -proj_parm.n1*log(pj_tsfn(-1.0*par.phi0,-1.0*sin(par.phi0),par.e));
-                proj_parm.n2= par.k0*par.a*sqrt(1.0-par.es)/(1.0-par.es*sin(par.phi0)*sin(par.phi0));
-                proj_parm.XS= 0;
-            /* -par.x0 */
-                proj_parm.YS= -1.0*proj_parm.n2*proj_parm.phic;
-            /* -par.y0 */
-                // par.inv= s_inverse;
-                // par.fwd= s_forward;
-                /*fprintf(stderr,"a  (m) =%16.4f\ne      =%16.13f\nl0(rad)=%16.13f\np0(rad)=%16.13f\nk0     =%16.4f\nX0  (m)=%16.4f\nY0  (m)=%16.4f\n\nlC(rad)=%16.13f\npC(rad)=%16.13f\nc      =%16.13f\nn1     =%16.13f\nn2 (m) =%16.4f\nXS (m) =%16.4f\nYS (m) =%16.4f\n", par.a, par.e, par.lam0, par.phi0, par.k0, par.x0, par.y0, proj_parm.lamc, proj_parm.phic, proj_parm.c, proj_parm.n1, proj_parm.n2, proj_parm.XS +par.x0, proj_parm.YS + par.y0);
-            */
-            }
-
-        }} // namespace detail::gstmerc
-    #endif // doxygen 
-
-    /*!
-        \brief Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - Ellipsoid
-         - lat_0= lon_0= k_0=
-        \par Example
-        \image html ex_gstmerc.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct gstmerc_spheroid : public detail::gstmerc::base_gstmerc_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline gstmerc_spheroid(const Parameters& par) : detail::gstmerc::base_gstmerc_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::gstmerc::setup_gstmerc(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class gstmerc_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<gstmerc_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void gstmerc_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("gstmerc", new gstmerc_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_GSTMERC_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/hammer.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/hammer.hpp
deleted file mode 100644
index adaa082..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/hammer.hpp
+++ /dev/null
@@ -1,152 +0,0 @@
-#ifndef GGL_PROJECTIONS_HAMMER_HPP
-#define GGL_PROJECTIONS_HAMMER_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace hammer{ 
-
-            struct par_hammer
-            {
-                double w;
-                double m, rm;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_hammer_spheroid : public base_t_f<base_hammer_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_hammer m_proj_parm;
-
-                inline base_hammer_spheroid(const Parameters& par)
-                    : base_t_f<base_hammer_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double cosphi, d;
-                
-                    d = sqrt(2./(1. + (cosphi = cos(lp_lat)) * cos(lp_lon *= this->m_proj_parm.w)));
-                    xy_x = this->m_proj_parm.m * d * cosphi * sin(lp_lon);
-                    xy_y = this->m_proj_parm.rm * d * sin(lp_lat);
-                }
-            };
-
-            // Hammer & Eckert-Greifendorff
-            template <typename Parameters>
-            void setup_hammer(Parameters& par, par_hammer& proj_parm)
-            {
-                if (pj_param(par.params, "tW").i) {
-                    if ((proj_parm.w = fabs(pj_param(par.params, "dW").f)) <= 0.) throw proj_exception(-27);
-                } else
-                    proj_parm.w = .5;
-                if (pj_param(par.params, "tM").i) {
-                    if ((proj_parm.m = fabs(pj_param(par.params, "dM").f)) <= 0.) throw proj_exception(-27);
-                } else
-                    proj_parm.m = 1.;
-                proj_parm.rm = 1. / proj_parm.m;
-                proj_parm.m /= proj_parm.w;
-                par.es = 0.;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::hammer
-    #endif // doxygen 
-
-    /*!
-        \brief Hammer & Eckert-Greifendorff projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-         - W= M=
-        \par Example
-        \image html ex_hammer.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct hammer_spheroid : public detail::hammer::base_hammer_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline hammer_spheroid(const Parameters& par) : detail::hammer::base_hammer_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::hammer::setup_hammer(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class hammer_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<hammer_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void hammer_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("hammer", new hammer_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_HAMMER_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/hatano.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/hatano.hpp
deleted file mode 100644
index 55f3f89..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/hatano.hpp
+++ /dev/null
@@ -1,173 +0,0 @@
-#ifndef GGL_PROJECTIONS_HATANO_HPP
-#define GGL_PROJECTIONS_HATANO_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace hatano{ 
-            static const int NITER = 20;
-            static const double EPS = 1e-7;
-            static const double ONETOL = 1.000001;
-            static const double CN = 2.67595;
-            static const double CS = 2.43763;
-            static const double RCN = 0.37369906014686373063;
-            static const double RCS = 0.41023453108141924738;
-            static const double FYCN = 1.75859;
-            static const double FYCS = 1.93052;
-            static const double RYCN = 0.56863737426006061674;
-            static const double RYCS = 0.51799515156538134803;
-            static const double FXC = 0.85;
-            static const double RXC = 1.17647058823529411764;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_hatano_spheroid : public base_t_fi<base_hatano_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_hatano_spheroid(const Parameters& par)
-                    : base_t_fi<base_hatano_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double th1, c;
-                    int i;
-                
-                    c = sin(lp_lat) * (lp_lat < 0. ? CS : CN);
-                    for (i = NITER; i; --i) {
-                        lp_lat -= th1 = (lp_lat + sin(lp_lat) - c) / (1. + cos(lp_lat));
-                        if (fabs(th1) < EPS) break;
-                    }
-                    xy_x = FXC * lp_lon * cos(lp_lat *= .5);
-                    xy_y = sin(lp_lat) * (lp_lat < 0. ? FYCS : FYCN);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double th;
-                
-                    th = xy_y * ( xy_y < 0. ? RYCS : RYCN);
-                    if (fabs(th) > 1.)
-                        if (fabs(th) > ONETOL)    throw proj_exception();
-                        else            th = th > 0. ? HALFPI : - HALFPI;
-                    else
-                        th = asin(th);
-                    lp_lon = RXC * xy_x / cos(th);
-                    th += th;
-                    lp_lat = (th + sin(th)) * (xy_y < 0. ? RCS : RCN);
-                    if (fabs(lp_lat) > 1.)
-                        if (fabs(lp_lat) > ONETOL)    throw proj_exception();
-                        else            lp_lat = lp_lat > 0. ? HALFPI : - HALFPI;
-                    else
-                        lp_lat = asin(lp_lat);
-                }
-            };
-
-            // Hatano Asymmetrical Equal Area
-            template <typename Parameters>
-            void setup_hatano(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::hatano
-    #endif // doxygen 
-
-    /*!
-        \brief Hatano Asymmetrical Equal Area projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_hatano.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct hatano_spheroid : public detail::hatano::base_hatano_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline hatano_spheroid(const Parameters& par) : detail::hatano::base_hatano_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::hatano::setup_hatano(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class hatano_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<hatano_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void hatano_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("hatano", new hatano_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_HATANO_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/imw_p.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/imw_p.hpp
deleted file mode 100644
index 082eb35..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/imw_p.hpp
+++ /dev/null
@@ -1,281 +0,0 @@
-#ifndef GGL_PROJECTIONS_IMW_P_HPP
-#define GGL_PROJECTIONS_IMW_P_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_mlfn.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace imw_p{ 
-            static const double TOL = 1e-10;
-            static const double EPS = 1e-10;
-
-            struct PXY { double x, y; }; // x/y projection specific
-
-            struct par_imw_p
-            {
-                double    P, Pp, Q, Qp, R_1, R_2, sphi_1, sphi_2, C2;
-                double    phi_1, phi_2, lam_1;
-                double    en[EN_SIZE];
-                int    mode; /* = 0, phi_1 and phi_2 != 0, = 1, phi_1 = 0, = -1 phi_2 = 0 */
-            };
-            template <typename Parameters>
-                inline int
-            phi12(Parameters& par, par_imw_p& proj_parm, double *del, double *sig) {
-                int err = 0;
-            
-                if (!pj_param(par.params, "tlat_1").i ||
-                    !pj_param(par.params, "tlat_2").i) {
-                    err = -41;
-                } else {
-                    proj_parm.phi_1 = pj_param(par.params, "rlat_1").f;
-                    proj_parm.phi_2 = pj_param(par.params, "rlat_2").f;
-                    *del = 0.5 * (proj_parm.phi_2 - proj_parm.phi_1);
-                    *sig = 0.5 * (proj_parm.phi_2 + proj_parm.phi_1);
-                    err = (fabs(*del) < EPS || fabs(*sig) < EPS) ? -42 : 0;
-                }
-                return err;
-            }
-            template <typename Parameters>
-                inline PXY
-            loc_for(double const& lp_lam, double const& lp_phi, const Parameters& par, par_imw_p const& proj_parm, double *yc) {
-                PXY xy;
-            
-                if (! lp_phi) {
-                    xy.x = lp_lam;
-                    xy.y = 0.;
-                } else {
-                    double xa, ya, xb, yb, xc, D, B, m, sp, t, R, C;
-            
-                    sp = sin(lp_phi);
-                    m = pj_mlfn(lp_phi, sp, cos(lp_phi), proj_parm.en);
-                    xa = proj_parm.Pp + proj_parm.Qp * m;
-                    ya = proj_parm.P + proj_parm.Q * m;
-                    R = 1. / (tan(lp_phi) * sqrt(1. - par.es * sp * sp));
-                    C = sqrt(R * R - xa * xa);
-                    if (lp_phi < 0.) C = - C;
-                    C += ya - R;
-                    if (proj_parm.mode < 0) {
-                        xb = lp_lam;
-                        yb = proj_parm.C2;
-                    } else {
-                        t = lp_lam * proj_parm.sphi_2;
-                        xb = proj_parm.R_2 * sin(t);
-                        yb = proj_parm.C2 + proj_parm.R_2 * (1. - cos(t));
-                    }
-                    if (proj_parm.mode > 0) {
-                        xc = lp_lam;
-                        *yc = 0.;
-                    } else {
-                        t = lp_lam * proj_parm.sphi_1;
-                        xc = proj_parm.R_1 * sin(t);
-                        *yc = proj_parm.R_1 * (1. - cos(t));
-                    }
-                    D = (xb - xc)/(yb - *yc);
-                    B = xc + D * (C + R - *yc);
-                    xy.x = D * sqrt(R * R * (1 + D * D) - B * B);
-                    if (lp_phi > 0)
-                        xy.x = - xy.x;
-                    xy.x = (B + xy.x) / (1. + D * D);
-                    xy.y = sqrt(R * R - xy.x * xy.x);
-                    if (lp_phi > 0)
-                        xy.y = - xy.y;
-                    xy.y += C + R;
-                }
-                return (xy);
-            }
-            
-            template <typename Parameters>
-            inline void
-            xy(Parameters& par, par_imw_p& proj_parm, double phi, double *x, double *y, double *sp, double *R) {
-                double F;
-            
-                *sp = sin(phi);
-                *R = 1./(tan(phi) * sqrt(1. - par.es * *sp * *sp ));
-                F = proj_parm.lam_1 * *sp;
-                *y = *R * (1 - cos(F));
-                *x = *R * sin(F);
-            }
-            
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_imw_p_ellipsoid : public base_t_fi<base_imw_p_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_imw_p m_proj_parm;
-
-                inline base_imw_p_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_imw_p_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double yc = 0;
-                    PXY xy = loc_for(lp_lon, lp_lat, this->m_par, m_proj_parm, &yc);
-                    xy_x = xy.x; xy_y = xy.y;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    PXY t;
-                    double yc = 0;
-                
-                    lp_lat = this->m_proj_parm.phi_2;
-                    lp_lon = xy_x / cos(lp_lat);
-                    do {
-                        t = loc_for(lp_lon, lp_lat, this->m_par, m_proj_parm, &yc);
-                        lp_lat = ((lp_lat - this->m_proj_parm.phi_1) * (xy_y - yc) / (t.y - yc)) + this->m_proj_parm.phi_1;
-                        lp_lon = lp_lon * xy_x / t.x;
-                    } while (fabs(t.x - xy_x) > TOL || fabs(t.y - xy_y) > TOL);
-                }
-            };
-
-            // International Map of the World Polyconic
-            template <typename Parameters>
-            void setup_imw_p(Parameters& par, par_imw_p& proj_parm)
-            {
-                double del, sig, s, t, x1, x2, T2, y1, m1, m2, y2;
-                int i;
-                    pj_enfn(par.es, proj_parm.en);
-                if( (i = phi12(par, proj_parm, &del, &sig)) != 0)
-                    throw proj_exception(i);
-                if (proj_parm.phi_2 < proj_parm.phi_1) { /* make sure proj_parm.phi_1 most southerly */
-                    del = proj_parm.phi_1;
-                    proj_parm.phi_1 = proj_parm.phi_2;
-                    proj_parm.phi_2 = del;
-                }
-                if (pj_param(par.params, "tlon_1").i)
-                    proj_parm.lam_1 = pj_param(par.params, "rlon_1").f;
-                else { /* use predefined based upon latitude */
-                    sig = fabs(sig * RAD_TO_DEG);
-                    if (sig <= 60)        sig = 2.;
-                    else if (sig <= 76) sig = 4.;
-                    else                sig = 8.;
-                    proj_parm.lam_1 = sig * DEG_TO_RAD;
-                }
-                proj_parm.mode = 0;
-                if (proj_parm.phi_1) xy(par, proj_parm, proj_parm.phi_1, &x1, &y1, &proj_parm.sphi_1, &proj_parm.R_1);
-                else {
-                    proj_parm.mode = 1;
-                    y1 = 0.;
-                    x1 = proj_parm.lam_1;
-                }
-                if (proj_parm.phi_2) xy(par, proj_parm, proj_parm.phi_2, &x2, &T2, &proj_parm.sphi_2, &proj_parm.R_2);
-                else {
-                    proj_parm.mode = -1;
-                    T2 = 0.;
-                    x2 = proj_parm.lam_1;
-                }
-                m1 = pj_mlfn(proj_parm.phi_1, proj_parm.sphi_1, cos(proj_parm.phi_1), proj_parm.en);
-                m2 = pj_mlfn(proj_parm.phi_2, proj_parm.sphi_2, cos(proj_parm.phi_2), proj_parm.en);
-                t = m2 - m1;
-                s = x2 - x1;
-                y2 = sqrt(t * t - s * s) + y1;
-                proj_parm.C2 = y2 - T2;
-                t = 1. / t;
-                proj_parm.P = (m2 * y1 - m1 * y2) * t;
-                proj_parm.Q = (y2 - y1) * t;
-                proj_parm.Pp = (m2 * x1 - m1 * x2) * t;
-                proj_parm.Qp = (x2 - x1) * t;
-                // par.fwd = e_forward;
-                // par.inv = e_inverse;
-            }
-
-        }} // namespace detail::imw_p
-    #endif // doxygen 
-
-    /*!
-        \brief International Map of the World Polyconic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Mod Polyconic
-         - Ellipsoid
-         - lat_1= and lat_2= [lon_1=]
-        \par Example
-        \image html ex_imw_p.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct imw_p_ellipsoid : public detail::imw_p::base_imw_p_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline imw_p_ellipsoid(const Parameters& par) : detail::imw_p::base_imw_p_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::imw_p::setup_imw_p(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class imw_p_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<imw_p_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void imw_p_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("imw_p", new imw_p_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_IMW_P_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/krovak.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/krovak.hpp
deleted file mode 100644
index b0e3484..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/krovak.hpp
+++ /dev/null
@@ -1,338 +0,0 @@
-#ifndef GGL_PROJECTIONS_KROVAK_HPP
-#define GGL_PROJECTIONS_KROVAK_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace krovak{ 
-
-            struct par_krovak
-            {
-                double    C_x;
-            };
-            
-            
-            
-            
-            
-            /**
-               NOTES: According to EPSG the full Krovak projection method should have
-                      the following parameters.  Within PROJ.4 the azimuth, and pseudo
-                      standard parallel are hardcoded in the algorithm and can't be 
-                      altered from outside.  The others all have defaults to match the
-                      common usage with Krovak projection.
-            
-              lat_0 = latitude of centre of the projection
-                     
-              lon_0 = longitude of centre of the projection
-              
-              ** = azimuth (true) of the centre line passing through the centre of the projection
-            
-              ** = latitude of pseudo standard parallel
-               
-              k  = scale factor on the pseudo standard parallel
-              
-              x_0 = False Easting of the centre of the projection at the apex of the cone
-              
-              y_0 = False Northing of the centre of the projection at the apex of the cone
-            
-             **/
-            
-            
-            
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_krovak_ellipsoid : public base_t_fi<base_krovak_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_krovak m_proj_parm;
-
-                inline base_krovak_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_krovak_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                /* calculate xy from lat/lon */
-                
-                    
-                    
-                
-                /* Constants, identical to inverse transform function */
-                    double s45, s90, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n;
-                    double gfi, u, fi0, deltav, s, d, eps, ro;
-                
-                
-                    s45 = 0.785398163397448;    /* 45 DEG */
-                    s90 = 2 * s45;
-                    fi0 = this->m_par.phi0;    /* Latitude of projection centre 49 DEG 30' */
-                
-                   /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must 
-                      be set to 1 here.
-                      Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128,
-                      e2=0.006674372230614;
-                   */
-                    a =  1; /* 6377397.155; */
-                    /* e2 = this->m_par.es;*/       /* 0.006674372230614; */
-                    e2 = 0.006674372230614;
-                    e = sqrt(e2);
-                
-                    alfa = sqrt(1. + (e2 * pow(cos(fi0), 4)) / (1. - e2));
-                
-                    uq = 1.04216856380474;      /* DU(2, 59, 42, 42.69689) */
-                    u0 = asin(sin(fi0) / alfa);
-                    g = pow(   (1. + e * sin(fi0)) / (1. - e * sin(fi0)) , alfa * e / 2.  );
-                
-                    k = tan( u0 / 2. + s45) / pow  (tan(fi0 / 2. + s45) , alfa) * g;
-                
-                    k1 = this->m_par.k0;
-                    n0 = a * sqrt(1. - e2) / (1. - e2 * pow(sin(fi0), 2));
-                    s0 = 1.37008346281555;       /* Latitude of pseudo standard parallel 78 DEG 30'00" N */
-                    n = sin(s0);
-                    ro0 = k1 * n0 / tan(s0);
-                    ad = s90 - uq;
-                
-                /* Transformation */
-                
-                    gfi =pow ( ((1. + e * sin(lp_lat)) /
-                               (1. - e * sin(lp_lat))) , (alfa * e / 2.));
-                
-                    u= 2. * (atan(k * pow( tan(lp_lat / 2. + s45), alfa) / gfi)-s45);
-                
-                    deltav = - lp_lon * alfa;
-                
-                    s = asin(cos(ad) * sin(u) + sin(ad) * cos(u) * cos(deltav));
-                    d = asin(cos(u) * sin(deltav) / cos(s));
-                    eps = n * d;
-                    ro = ro0 * pow(tan(s0 / 2. + s45) , n) / pow(tan(s / 2. + s45) , n)   ;
-                
-                   /* x and y are reverted! */
-                    xy_y = ro * cos(eps) / a;
-                    xy_x = ro * sin(eps) / a;
-                
-                        if( !pj_param(this->m_par.params, "tczech").i )
-                      {
-                        xy_y *= -1.0;
-                        xy_x *= -1.0;
-                      }
-                
-                            return;
-                }
-                
-                
-                
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    /* calculate lat/lon from xy */
-                
-                /* Constants, identisch wie in der Umkehrfunktion */
-                    double s45, s90, fi0, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n;
-                    double u, deltav, s, d, eps, ro, fi1, xy0;
-                    int ok;
-                
-                    s45 = 0.785398163397448;    /* 45 DEG */
-                    s90 = 2 * s45;
-                    fi0 = this->m_par.phi0;    /* Latitude of projection centre 49 DEG 30' */
-                
-                
-                   /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must 
-                      be set to 1 here.
-                      Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128,
-                      e2=0.006674372230614;
-                   */
-                    a = 1; /* 6377397.155; */
-                    /* e2 = this->m_par.es; */      /* 0.006674372230614; */
-                    e2 = 0.006674372230614;
-                    e = sqrt(e2);
-                
-                    alfa = sqrt(1. + (e2 * pow(cos(fi0), 4)) / (1. - e2));
-                    uq = 1.04216856380474;      /* DU(2, 59, 42, 42.69689) */
-                    u0 = asin(sin(fi0) / alfa);
-                    g = pow(   (1. + e * sin(fi0)) / (1. - e * sin(fi0)) , alfa * e / 2.  );
-                
-                    k = tan( u0 / 2. + s45) / pow  (tan(fi0 / 2. + s45) , alfa) * g;
-                
-                    k1 = this->m_par.k0;
-                    n0 = a * sqrt(1. - e2) / (1. - e2 * pow(sin(fi0), 2));
-                    s0 = 1.37008346281555;       /* Latitude of pseudo standard parallel 78 DEG 30'00" N */
-                    n = sin(s0);
-                    ro0 = k1 * n0 / tan(s0);
-                    ad = s90 - uq;
-                
-                
-                /* Transformation */
-                   /* revert y, x*/
-                    xy0=xy_x;
-                    xy_x=xy_y;
-                    xy_y=xy0;
-                
-                        if( !pj_param(this->m_par.params, "tczech").i )
-                      {
-                        xy_x *= -1.0;
-                        xy_y *= -1.0;
-                      }
-                
-                    ro = sqrt(xy_x * xy_x + xy_y * xy_y);
-                    eps = atan2(xy_y, xy_x);
-                    d = eps / sin(s0);
-                    s = 2. * (atan(  pow(ro0 / ro, 1. / n) * tan(s0 / 2. + s45)) - s45);
-                
-                    u = asin(cos(ad) * sin(s) - sin(ad) * cos(s) * cos(d));
-                    deltav = asin(cos(s) * sin(d) / cos(u));
-                
-                    lp_lon = this->m_par.lam0 - deltav / alfa;
-                
-                /* ITERATION FOR lp_lat */
-                   fi1 = u;
-                
-                   ok = 0;
-                   do
-                   {
-                       lp_lat = 2. * ( atan( pow( k, -1. / alfa)  *
-                                            pow( tan(u / 2. + s45) , 1. / alfa)  *
-                                            pow( (1. + e * sin(fi1)) / (1. - e * sin(fi1)) , e / 2.)
-                                           )  - s45);
-                
-                      if (fabs(fi1 - lp_lat) < 0.000000000000001) ok=1;
-                      fi1 = lp_lat;
-                
-                   }
-                   while (ok==0);
-                
-                   lp_lon -= this->m_par.lam0;
-                
-                            return;
-                }
-                
-            };
-
-            // Krovak
-            template <typename Parameters>
-            void setup_krovak(Parameters& par, par_krovak& proj_parm)
-            {
-                double ts;
-                /* read some Parameters,
-                 * here Latitude Truescale */
-                ts = pj_param(par.params, "rlat_ts").f;
-                proj_parm.C_x = ts;
-                
-                /* we want Bessel as fixed ellipsoid */
-                par.a = 6377397.155;
-                par.e = sqrt(par.es = 0.006674372230614);
-                    /* if latitude of projection center is not set, use 49d30'N */
-                if (!pj_param(par.params, "tlat_0").i)
-                        par.phi0 = 0.863937979737193;
-             
-                    /* if center long is not set use 42d30'E of Ferro - 17d40' for Ferro */
-                    /* that will correspond to using longitudes relative to greenwich    */
-                    /* as input and output, instead of lat/long relative to Ferro */
-                if (!pj_param(par.params, "tlon_0").i)
-                        par.lam0 = 0.7417649320975901 - 0.308341501185665;
-                    /* if scale not set default to 0.9999 */
-                if (!pj_param(par.params, "tk").i)
-                        par.k0 = 0.9999;
-                /* always the same */
-                // par.inv = e_inverse;
-             
-                // par.fwd = e_forward;
-            }
-
-        }} // namespace detail::krovak
-    #endif // doxygen 
-
-    /*!
-        \brief Krovak projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Ellps
-        \par Example
-        \image html ex_krovak.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct krovak_ellipsoid : public detail::krovak::base_krovak_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline krovak_ellipsoid(const Parameters& par) : detail::krovak::base_krovak_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::krovak::setup_krovak(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class krovak_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<krovak_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void krovak_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("krovak", new krovak_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_KROVAK_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/labrd.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/labrd.hpp
deleted file mode 100644
index eb814e8..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/labrd.hpp
+++ /dev/null
@@ -1,231 +0,0 @@
-#ifndef GGL_PROJECTIONS_LABRD_HPP
-#define GGL_PROJECTIONS_LABRD_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace labrd{ 
-            static const double EPS = 1.e-10;
-
-            struct par_labrd
-            {
-                double    Az, kRg, p0s, A, C, Ca, Cb, Cc, Cd;
-                int        rot;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_labrd_ellipsoid : public base_t_fi<base_labrd_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_labrd m_proj_parm;
-
-                inline base_labrd_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_labrd_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double V1, V2, ps, sinps, cosps, sinps2, cosps2, I1, I2, I3, I4, I5, I6,
-                        x2, y2, t;
-                
-                    V1 = this->m_proj_parm.A * log( tan(FORTPI + .5 * lp_lat) );
-                    t = this->m_par.e * sin(lp_lat);
-                    V2 = .5 * this->m_par.e * this->m_proj_parm.A * log ((1. + t)/(1. - t));
-                    ps = 2. * (atan(exp(V1 - V2 + this->m_proj_parm.C)) - FORTPI);
-                    I1 = ps - this->m_proj_parm.p0s;
-                    cosps = cos(ps);    cosps2 = cosps * cosps;
-                    sinps = sin(ps);    sinps2 = sinps * sinps;
-                    I4 = this->m_proj_parm.A * cosps;
-                    I2 = .5 * this->m_proj_parm.A * I4 * sinps;
-                    I3 = I2 * this->m_proj_parm.A * this->m_proj_parm.A * (5. * cosps2 - sinps2) / 12.;
-                    I6 = I4 * this->m_proj_parm.A * this->m_proj_parm.A;
-                    I5 = I6 * (cosps2 - sinps2) / 6.;
-                    I6 *= this->m_proj_parm.A * this->m_proj_parm.A *
-                        (5. * cosps2 * cosps2 + sinps2 * (sinps2 - 18. * cosps2)) / 120.;
-                    t = lp_lon * lp_lon;
-                    xy_x = this->m_proj_parm.kRg * lp_lon * (I4 + t * (I5 + t * I6));
-                    xy_y = this->m_proj_parm.kRg * (I1 + t * (I2 + t * I3));
-                    x2 = xy_x * xy_x;
-                    y2 = xy_y * xy_y;
-                    V1 = 3. * xy_x * y2 - xy_x * x2;
-                    V2 = xy_y * y2 - 3. * x2 * xy_y;
-                    xy_x += this->m_proj_parm.Ca * V1 + this->m_proj_parm.Cb * V2;
-                    xy_y += this->m_proj_parm.Ca * V2 - this->m_proj_parm.Cb * V1;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double x2, y2, V1, V2, V3, V4, t, t2, ps, pe, tpe, s,
-                        I7, I8, I9, I10, I11, d, Re;
-                    int i;
-                
-                    x2 = xy_x * xy_x;
-                    y2 = xy_y * xy_y;
-                    V1 = 3. * xy_x * y2 - xy_x * x2;
-                    V2 = xy_y * y2 - 3. * x2 * xy_y;
-                    V3 = xy_x * (5. * y2 * y2 + x2 * (-10. * y2 + x2 ));
-                    V4 = xy_y * (5. * x2 * x2 + y2 * (-10. * x2 + y2 ));
-                    xy_x += - this->m_proj_parm.Ca * V1 - this->m_proj_parm.Cb * V2 + this->m_proj_parm.Cc * V3 + this->m_proj_parm.Cd * V4;
-                    xy_y +=   this->m_proj_parm.Cb * V1 - this->m_proj_parm.Ca * V2 - this->m_proj_parm.Cd * V3 + this->m_proj_parm.Cc * V4;
-                    ps = this->m_proj_parm.p0s + xy_y / this->m_proj_parm.kRg;
-                    pe = ps + this->m_par.phi0 - this->m_proj_parm.p0s;
-                    for ( i = 20; i; --i) {
-                        V1 = this->m_proj_parm.A * log(tan(FORTPI + .5 * pe));
-                        tpe = this->m_par.e * sin(pe);
-                        V2 = .5 * this->m_par.e * this->m_proj_parm.A * log((1. + tpe)/(1. - tpe));
-                        t = ps - 2. * (atan(exp(V1 - V2 + this->m_proj_parm.C)) - FORTPI);
-                        pe += t;
-                        if (fabs(t) < EPS)
-                            break;
-                    }
-                /*
-                    if (!i) {
-                    } else {
-                    }
-                */
-                    t = this->m_par.e * sin(pe);
-                    t = 1. - t * t;
-                    Re = this->m_par.one_es / ( t * sqrt(t) );
-                    t = tan(ps);
-                    t2 = t * t;
-                    s = this->m_proj_parm.kRg * this->m_proj_parm.kRg;
-                    d = Re * this->m_par.k0 * this->m_proj_parm.kRg;
-                    I7 = t / (2. * d);
-                    I8 = t * (5. + 3. * t2) / (24. * d * s);
-                    d = cos(ps) * this->m_proj_parm.kRg * this->m_proj_parm.A;
-                    I9 = 1. / d;
-                    d *= s;
-                    I10 = (1. + 2. * t2) / (6. * d);
-                    I11 = (5. + t2 * (28. + 24. * t2)) / (120. * d * s);
-                    x2 = xy_x * xy_x;
-                    lp_lat = pe + x2 * (-I7 + I8 * x2);
-                    lp_lon = xy_x * (I9 + x2 * (-I10 + x2 * I11));
-                }
-            };
-
-            // Laborde
-            template <typename Parameters>
-            void setup_labrd(Parameters& par, par_labrd& proj_parm)
-            {
-                double Az, sinp, R, N, t;
-                proj_parm.rot    = pj_param(par.params, "bno_rot").i == 0;
-                Az = pj_param(par.params, "razi").f;
-                sinp = sin(par.phi0);
-                t = 1. - par.es * sinp * sinp;
-                N = 1. / sqrt(t);
-                R = par.one_es * N / t;
-                proj_parm.kRg = par.k0 * sqrt( N * R );
-                proj_parm.p0s = atan( sqrt(R / N) * tan(par.phi0) );
-                proj_parm.A = sinp / sin(proj_parm.p0s);
-                t = par.e * sinp;
-                proj_parm.C = .5 * par.e * proj_parm.A * log((1. + t)/(1. - t)) +
-                    - proj_parm.A * log( tan(FORTPI + .5 * par.phi0))
-                    + log( tan(FORTPI + .5 * proj_parm.p0s));
-                t = Az + Az;
-                proj_parm.Ca = (1. - cos(t)) * ( proj_parm.Cb = 1. / (12. * proj_parm.kRg * proj_parm.kRg) );
-                proj_parm.Cb *= sin(t);
-                proj_parm.Cc = 3. * (proj_parm.Ca * proj_parm.Ca - proj_parm.Cb * proj_parm.Cb);
-                proj_parm.Cd = 6. * proj_parm.Ca * proj_parm.Cb;
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-            }
-
-        }} // namespace detail::labrd
-    #endif // doxygen 
-
-    /*!
-        \brief Laborde projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - Special for Madagascar
-        \par Example
-        \image html ex_labrd.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct labrd_ellipsoid : public detail::labrd::base_labrd_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline labrd_ellipsoid(const Parameters& par) : detail::labrd::base_labrd_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::labrd::setup_labrd(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class labrd_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<labrd_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void labrd_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("labrd", new labrd_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_LABRD_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/laea.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/laea.hpp
deleted file mode 100644
index 422117b..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/laea.hpp
+++ /dev/null
@@ -1,391 +0,0 @@
-#ifndef GGL_PROJECTIONS_LAEA_HPP
-#define GGL_PROJECTIONS_LAEA_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_qsfn.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_auth.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace laea{ 
-            static const double EPS10 = 1.e-10;
-            static const int NITER = 20;
-            static const double CONV = 1.e-10;
-            static const int N_POLE = 0;
-            static const int S_POLE = 1;
-            static const int EQUIT = 2;
-            static const int OBLIQ = 3;
-
-            struct par_laea
-            {
-                double    sinb1;
-                double    cosb1;
-                double    xmf;
-                double    ymf;
-                double    mmf;
-                double    qp;
-                double    dd;
-                double    rq;
-                double    apa[APA_SIZE];
-                int        mode;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_laea_ellipsoid : public base_t_fi<base_laea_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_laea m_proj_parm;
-
-                inline base_laea_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_laea_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double coslam, sinlam, sinphi, q, sinb=0.0, cosb=0.0, b=0.0;
-                
-                    coslam = cos(lp_lon);
-                    sinlam = sin(lp_lon);
-                    sinphi = sin(lp_lat);
-                    q = pj_qsfn(sinphi, this->m_par.e, this->m_par.one_es);
-                    if (this->m_proj_parm.mode == OBLIQ || this->m_proj_parm.mode == EQUIT) {
-                        sinb = q / this->m_proj_parm.qp;
-                        cosb = sqrt(1. - sinb * sinb);
-                    }
-                    switch (this->m_proj_parm.mode) {
-                    case OBLIQ:
-                        b = 1. + this->m_proj_parm.sinb1 * sinb + this->m_proj_parm.cosb1 * cosb * coslam;
-                        break;
-                    case EQUIT:
-                        b = 1. + cosb * coslam;
-                        break;
-                    case N_POLE:
-                        b = HALFPI + lp_lat;
-                        q = this->m_proj_parm.qp - q;
-                        break;
-                    case S_POLE:
-                        b = lp_lat - HALFPI;
-                        q = this->m_proj_parm.qp + q;
-                        break;
-                    }
-                    if (fabs(b) < EPS10) throw proj_exception();;
-                    switch (this->m_proj_parm.mode) {
-                    case OBLIQ:
-                        xy_y = this->m_proj_parm.ymf * ( b = sqrt(2. / b) )
-                           * (this->m_proj_parm.cosb1 * sinb - this->m_proj_parm.sinb1 * cosb * coslam);
-                        goto eqcon;
-                        break;
-                    case EQUIT:
-                        xy_y = (b = sqrt(2. / (1. + cosb * coslam))) * sinb * this->m_proj_parm.ymf; 
-                eqcon:
-                        xy_x = this->m_proj_parm.xmf * b * cosb * sinlam;
-                        break;
-                    case N_POLE:
-                    case S_POLE:
-                        if (q >= 0.) {
-                            xy_x = (b = sqrt(q)) * sinlam;
-                            xy_y = coslam * (this->m_proj_parm.mode == S_POLE ? b : -b);
-                        } else
-                            xy_x = xy_y = 0.;
-                        break;
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double cCe, sCe, q, rho, ab=0.0;
-                
-                    switch (this->m_proj_parm.mode) {
-                    case EQUIT:
-                    case OBLIQ:
-                        if ((rho = boost::math::hypot(xy_x /= this->m_proj_parm.dd, xy_y *=  this->m_proj_parm.dd)) < EPS10) {
-                            lp_lon = 0.;
-                            lp_lat = this->m_par.phi0;
-                            return;
-                        }
-                        cCe = cos(sCe = 2. * asin(.5 * rho / this->m_proj_parm.rq));
-                        xy_x *= (sCe = sin(sCe));
-                        if (this->m_proj_parm.mode == OBLIQ) {
-                            q = this->m_proj_parm.qp * (ab = cCe * this->m_proj_parm.sinb1 + xy_y * sCe * this->m_proj_parm.cosb1 / rho);
-                            xy_y = rho * this->m_proj_parm.cosb1 * cCe - xy_y * this->m_proj_parm.sinb1 * sCe;
-                        } else {
-                            q = this->m_proj_parm.qp * (ab = xy_y * sCe / rho);
-                            xy_y = rho * cCe;
-                        }
-                        break;
-                    case N_POLE:
-                        xy_y = -xy_y;
-                    case S_POLE:
-                        if (!(q = (xy_x * xy_x + xy_y * xy_y)) ) {
-                            lp_lon = 0.;
-                            lp_lat = this->m_par.phi0;
-                            return;
-                        }
-                        /*
-                        q = this->m_proj_parm.qp - q;
-                        */
-                        ab = 1. - q / this->m_proj_parm.qp;
-                        if (this->m_proj_parm.mode == S_POLE)
-                            ab = - ab;
-                        break;
-                    }
-                    lp_lon = atan2(xy_x, xy_y);
-                    lp_lat = pj_authlat(asin(ab), this->m_proj_parm.apa);
-                }
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_laea_spheroid : public base_t_fi<base_laea_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_laea m_proj_parm;
-
-                inline base_laea_spheroid(const Parameters& par)
-                    : base_t_fi<base_laea_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double  coslam, cosphi, sinphi;
-                
-                    sinphi = sin(lp_lat);
-                    cosphi = cos(lp_lat);
-                    coslam = cos(lp_lon);
-                    switch (this->m_proj_parm.mode) {
-                    case EQUIT:
-                        xy_y = 1. + cosphi * coslam;
-                        goto oblcon;
-                    case OBLIQ:
-                        xy_y = 1. + this->m_proj_parm.sinb1 * sinphi + this->m_proj_parm.cosb1 * cosphi * coslam;
-                oblcon:
-                        if (xy_y <= EPS10) throw proj_exception();;
-                        xy_x = (xy_y = sqrt(2. / xy_y)) * cosphi * sin(lp_lon);
-                        xy_y *= this->m_proj_parm.mode == EQUIT ? sinphi :
-                           this->m_proj_parm.cosb1 * sinphi - this->m_proj_parm.sinb1 * cosphi * coslam;
-                        break;
-                    case N_POLE:
-                        coslam = -coslam;
-                    case S_POLE:
-                        if (fabs(lp_lat + this->m_par.phi0) < EPS10) throw proj_exception();;
-                        xy_y = FORTPI - lp_lat * .5;
-                        xy_y = 2. * (this->m_proj_parm.mode == S_POLE ? cos(xy_y) : sin(xy_y));
-                        xy_x = xy_y * sin(lp_lon);
-                        xy_y *= coslam;
-                        break;
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double  cosz=0.0, rh, sinz=0.0;
-                
-                    rh = boost::math::hypot(xy_x, xy_y);
-                    if ((lp_lat = rh * .5 ) > 1.) throw proj_exception();;
-                    lp_lat = 2. * asin(lp_lat);
-                    if (this->m_proj_parm.mode == OBLIQ || this->m_proj_parm.mode == EQUIT) {
-                        sinz = sin(lp_lat);
-                        cosz = cos(lp_lat);
-                    }
-                    switch (this->m_proj_parm.mode) {
-                    case EQUIT:
-                        lp_lat = fabs(rh) <= EPS10 ? 0. : asin(xy_y * sinz / rh);
-                        xy_x *= sinz;
-                        xy_y = cosz * rh;
-                        break;
-                    case OBLIQ:
-                        lp_lat = fabs(rh) <= EPS10 ? this->m_par.phi0 :
-                           asin(cosz * this->m_proj_parm.sinb1 + xy_y * sinz * this->m_proj_parm.cosb1 / rh);
-                        xy_x *= sinz * this->m_proj_parm.cosb1;
-                        xy_y = (cosz - sin(lp_lat) * this->m_proj_parm.sinb1) * rh;
-                        break;
-                    case N_POLE:
-                        xy_y = -xy_y;
-                        lp_lat = HALFPI - lp_lat;
-                        break;
-                    case S_POLE:
-                        lp_lat -= HALFPI;
-                        break;
-                    }
-                    lp_lon = (xy_y == 0. && (this->m_proj_parm.mode == EQUIT || this->m_proj_parm.mode == OBLIQ)) ?
-                        0. : atan2(xy_x, xy_y);
-                }
-            };
-
-            // Lambert Azimuthal Equal Area
-            template <typename Parameters>
-            void setup_laea(Parameters& par, par_laea& proj_parm)
-            {
-                double t;
-                if (fabs((t = fabs(par.phi0)) - HALFPI) < EPS10)
-                    proj_parm.mode = par.phi0 < 0. ? S_POLE : N_POLE;
-                else if (fabs(t) < EPS10)
-                    proj_parm.mode = EQUIT;
-                else
-                    proj_parm.mode = OBLIQ;
-                if (par.es) {
-                    double sinphi;
-                    par.e = sqrt(par.es);
-                    proj_parm.qp = pj_qsfn(1., par.e, par.one_es);
-                    proj_parm.mmf = .5 / (1. - par.es);
-                    pj_authset(par.es, proj_parm.apa);
-                    switch (proj_parm.mode) {
-                    case N_POLE:
-                    case S_POLE:
-                        proj_parm.dd = 1.;
-                        break;
-                    case EQUIT:
-                        proj_parm.dd = 1. / (proj_parm.rq = sqrt(.5 * proj_parm.qp));
-                        proj_parm.xmf = 1.;
-                        proj_parm.ymf = .5 * proj_parm.qp;
-                        break;
-                    case OBLIQ:
-                        proj_parm.rq = sqrt(.5 * proj_parm.qp);
-                        sinphi = sin(par.phi0);
-                        proj_parm.sinb1 = pj_qsfn(sinphi, par.e, par.one_es) / proj_parm.qp;
-                        proj_parm.cosb1 = sqrt(1. - proj_parm.sinb1 * proj_parm.sinb1);
-                        proj_parm.dd = cos(par.phi0) / (sqrt(1. - par.es * sinphi * sinphi) *
-                           proj_parm.rq * proj_parm.cosb1);
-                        proj_parm.ymf = (proj_parm.xmf = proj_parm.rq) / proj_parm.dd;
-                        proj_parm.xmf *= proj_parm.dd;
-                        break;
-                    }
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-                } else {
-                    if (proj_parm.mode == OBLIQ) {
-                        proj_parm.sinb1 = sin(par.phi0);
-                        proj_parm.cosb1 = cos(par.phi0);
-                    }
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                }
-            }
-
-        }} // namespace detail::laea
-    #endif // doxygen 
-
-    /*!
-        \brief Lambert Azimuthal Equal Area projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-         - Ellipsoid
-        \par Example
-        \image html ex_laea.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct laea_ellipsoid : public detail::laea::base_laea_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline laea_ellipsoid(const Parameters& par) : detail::laea::base_laea_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::laea::setup_laea(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Lambert Azimuthal Equal Area projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-         - Ellipsoid
-        \par Example
-        \image html ex_laea.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct laea_spheroid : public detail::laea::base_laea_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline laea_spheroid(const Parameters& par) : detail::laea::base_laea_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::laea::setup_laea(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class laea_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    if (par.es)
-                        return new base_v_fi<laea_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                    else
-                        return new base_v_fi<laea_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void laea_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("laea", new laea_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_LAEA_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/lagrng.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/lagrng.hpp
deleted file mode 100644
index 4c2b414..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/lagrng.hpp
+++ /dev/null
@@ -1,158 +0,0 @@
-#ifndef GGL_PROJECTIONS_LAGRNG_HPP
-#define GGL_PROJECTIONS_LAGRNG_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace lagrng{ 
-            static const double TOL = 1e-10;
-
-            struct par_lagrng
-            {
-                double    hrw;
-                double    rw;
-                double    a1;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_lagrng_spheroid : public base_t_f<base_lagrng_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_lagrng m_proj_parm;
-
-                inline base_lagrng_spheroid(const Parameters& par)
-                    : base_t_f<base_lagrng_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double v, c;
-                
-                    if (fabs(fabs(lp_lat) - HALFPI) < TOL) {
-                        xy_x = 0;
-                        xy_y = lp_lat < 0 ? -2. : 2.;
-                    } else {
-                        lp_lat = sin(lp_lat);
-                        v = this->m_proj_parm.a1 * pow((1. + lp_lat)/(1. - lp_lat), this->m_proj_parm.hrw);
-                        if ((c = 0.5 * (v + 1./v) + cos(lp_lon *= this->m_proj_parm.rw)) < TOL)
-                            throw proj_exception();;
-                        xy_x = 2. * sin(lp_lon) / c;
-                        xy_y = (v - 1./v) / c;
-                    }
-                }
-            };
-
-            // Lagrange
-            template <typename Parameters>
-            void setup_lagrng(Parameters& par, par_lagrng& proj_parm)
-            {
-                double phi1;
-                if ((proj_parm.rw = pj_param(par.params, "dW").f) <= 0) throw proj_exception(-27);
-                proj_parm.hrw = 0.5 * (proj_parm.rw = 1. / proj_parm.rw);
-                phi1 = pj_param(par.params, "rlat_1").f;
-                if (fabs(fabs(phi1 = sin(phi1)) - 1.) < TOL) throw proj_exception(-22);
-                proj_parm.a1 = pow((1. - phi1)/(1. + phi1), proj_parm.hrw);
-                par.es = 0.;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::lagrng
-    #endif // doxygen 
-
-    /*!
-        \brief Lagrange projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-         - W=
-        \par Example
-        \image html ex_lagrng.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct lagrng_spheroid : public detail::lagrng::base_lagrng_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline lagrng_spheroid(const Parameters& par) : detail::lagrng::base_lagrng_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::lagrng::setup_lagrng(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class lagrng_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<lagrng_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void lagrng_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("lagrng", new lagrng_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_LAGRNG_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/larr.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/larr.hpp
deleted file mode 100644
index fe41827..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/larr.hpp
+++ /dev/null
@@ -1,134 +0,0 @@
-#ifndef GGL_PROJECTIONS_LARR_HPP
-#define GGL_PROJECTIONS_LARR_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace larr{ 
-            static const double SIXTH = .16666666666666666;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_larr_spheroid : public base_t_f<base_larr_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_larr_spheroid(const Parameters& par)
-                    : base_t_f<base_larr_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = 0.5 * lp_lon * (1. + sqrt(cos(lp_lat)));
-                    xy_y = lp_lat / (cos(0.5 * lp_lat) * cos(SIXTH * lp_lon));
-                }
-            };
-
-            // Larrivee
-            template <typename Parameters>
-            void setup_larr(Parameters& par)
-            {
-                // par.fwd = s_forward;
-                // par.inv = 0;
-                par.es = 0.;
-            }
-
-        }} // namespace detail::larr
-    #endif // doxygen 
-
-    /*!
-        \brief Larrivee projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-        \par Example
-        \image html ex_larr.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct larr_spheroid : public detail::larr::base_larr_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline larr_spheroid(const Parameters& par) : detail::larr::base_larr_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::larr::setup_larr(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class larr_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<larr_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void larr_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("larr", new larr_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_LARR_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/lask.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/lask.hpp
deleted file mode 100644
index 46d84d6..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/lask.hpp
+++ /dev/null
@@ -1,148 +0,0 @@
-#ifndef GGL_PROJECTIONS_LASK_HPP
-#define GGL_PROJECTIONS_LASK_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace lask{ 
-            static const double a10 = 0.975534;
-            static const double a12 = -0.119161;
-            static const double a32 = -0.0143059;
-            static const double a14 = -0.0547009;
-            static const double b01 = 1.00384;
-            static const double b21 = 0.0802894;
-            static const double b03 = 0.0998909;
-            static const double b41 = 0.000199025;
-            static const double b23 = -0.0285500;
-            static const double b05 = -0.0491032;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_lask_spheroid : public base_t_f<base_lask_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_lask_spheroid(const Parameters& par)
-                    : base_t_f<base_lask_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double l2, p2;
-                
-                    l2 = lp_lon * lp_lon;
-                    p2 = lp_lat * lp_lat;
-                    xy_x = lp_lon * (a10 + p2 * (a12 + l2 * a32 + p2 * a14));
-                    xy_y = lp_lat * (b01 + l2 * (b21 + p2 * b23 + l2 * b41) +
-                        p2 * (b03 + p2 * b05));
-                }
-            };
-
-            // Laskowski
-            template <typename Parameters>
-            void setup_lask(Parameters& par)
-            {
-                // par.fwd = s_forward;
-                // par.inv = 0;
-                par.es = 0.;
-            }
-
-        }} // namespace detail::lask
-    #endif // doxygen 
-
-    /*!
-        \brief Laskowski projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-        \par Example
-        \image html ex_lask.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct lask_spheroid : public detail::lask::base_lask_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline lask_spheroid(const Parameters& par) : detail::lask::base_lask_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::lask::setup_lask(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class lask_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<lask_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void lask_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("lask", new lask_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_LASK_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/latlong.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/latlong.hpp
deleted file mode 100644
index a60bfc8..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/latlong.hpp
+++ /dev/null
@@ -1,282 +0,0 @@
-#ifndef GGL_PROJECTIONS_LATLONG_HPP
-#define GGL_PROJECTIONS_LATLONG_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-#include <ggl/extensions/gis/projections/epsg_traits.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace latlong{ 
-
-            
-            /* very loosely based upon DMA code by Bradford W. Drew */
-            
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_latlong_other : public base_t_fi<base_latlong_other<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_latlong_other(const Parameters& par)
-                    : base_t_fi<base_latlong_other<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                
-                        xy_x = lp_lon / this->m_par.a;
-                        xy_y = lp_lat / this->m_par.a;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                
-                        lp_lat = xy_y * this->m_par.a;
-                        lp_lon = xy_x * this->m_par.a;
-                }
-            };
-
-            // Lat/long (Geodetic)
-            template <typename Parameters>
-            void setup_lonlat(Parameters& par)
-            {
-                    par.is_latlong = 1;
-                    par.x0 = 0.0;
-                    par.y0 = 0.0;
-                // par.inv = inverse;
-                // par.fwd = forward;
-            }
-
-            // Lat/long (Geodetic alias)
-            template <typename Parameters>
-            void setup_latlon(Parameters& par)
-            {
-                    par.is_latlong = 1;
-                    par.x0 = 0.0;
-                    par.y0 = 0.0;
-                // par.inv = inverse;
-                // par.fwd = forward;
-            }
-
-            // Lat/long (Geodetic alias)
-            template <typename Parameters>
-            void setup_latlong(Parameters& par)
-            {
-                    par.is_latlong = 1;
-                    par.x0 = 0.0;
-                    par.y0 = 0.0;
-                // par.inv = inverse;
-                // par.fwd = forward;
-            }
-
-            // Lat/long (Geodetic alias)
-            template <typename Parameters>
-            void setup_longlat(Parameters& par)
-            {
-                    par.is_latlong = 1;
-                    par.x0 = 0.0;
-                    par.y0 = 0.0;
-                // par.inv = inverse;
-                // par.fwd = forward;
-            }
-
-        }} // namespace detail::latlong
-    #endif // doxygen 
-
-    /*!
-        \brief Lat/long (Geodetic) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-        \par Example
-        \image html ex_lonlat.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct lonlat_other : public detail::latlong::base_latlong_other<Geographic, Cartesian, Parameters>
-    {
-        inline lonlat_other(const Parameters& par) : detail::latlong::base_latlong_other<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::latlong::setup_lonlat(this->m_par);
-        }
-    };
-
-    /*!
-        \brief Lat/long (Geodetic alias) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-        \par Example
-        \image html ex_latlon.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct latlon_other : public detail::latlong::base_latlong_other<Geographic, Cartesian, Parameters>
-    {
-        inline latlon_other(const Parameters& par) : detail::latlong::base_latlong_other<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::latlong::setup_latlon(this->m_par);
-        }
-    };
-
-    /*!
-        \brief Lat/long (Geodetic alias) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-        \par Example
-        \image html ex_latlong.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct latlong_other : public detail::latlong::base_latlong_other<Geographic, Cartesian, Parameters>
-    {
-        inline latlong_other(const Parameters& par) : detail::latlong::base_latlong_other<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::latlong::setup_latlong(this->m_par);
-        }
-    };
-
-    /*!
-        \brief Lat/long (Geodetic alias) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-        \par Example
-        \image html ex_longlat.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct longlat_other : public detail::latlong::base_latlong_other<Geographic, Cartesian, Parameters>
-    {
-        inline longlat_other(const Parameters& par) : detail::latlong::base_latlong_other<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::latlong::setup_longlat(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class lonlat_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<lonlat_other<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class latlon_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<latlon_other<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class latlong_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<latlong_other<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class longlat_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<longlat_other<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void latlong_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("lonlat", new lonlat_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("latlon", new latlon_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("latlong", new latlong_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("longlat", new longlat_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    // Create EPSG specializations
-    // (Proof of Concept, only for some)
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<4326, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef longlat_other<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=longlat +ellps=WGS84 +datum=WGS84";
-        }
-    };
-
-
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_LATLONG_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/lcc.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/lcc.hpp
deleted file mode 100644
index 92eb25b..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/lcc.hpp
+++ /dev/null
@@ -1,249 +0,0 @@
-#ifndef GGL_PROJECTIONS_LCC_HPP
-#define GGL_PROJECTIONS_LCC_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_msfn.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_tsfn.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_phi2.hpp>
-
-#include <ggl/extensions/gis/projections/epsg_traits.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace lcc{ 
-            static const double EPS10 = 1.e-10;
-
-            struct par_lcc
-            {
-                double    phi1;
-                double    phi2;
-                double    n;
-                double    rho0;
-                double    c;
-                int        ellips;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_lcc_ellipsoid : public base_t_fi<base_lcc_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                mutable par_lcc m_proj_parm;
-
-                inline base_lcc_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_lcc_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                        double rho;
-                    if (fabs(fabs(lp_lat) - HALFPI) < EPS10) {
-                        if ((lp_lat * this->m_proj_parm.n) <= 0.) throw proj_exception();;
-                        rho = 0.;
-                        }
-                    else
-                        rho = this->m_proj_parm.c * (this->m_proj_parm.ellips ? pow(pj_tsfn(lp_lat, sin(lp_lat),
-                            this->m_par.e), this->m_proj_parm.n) : pow(tan(FORTPI + .5 * lp_lat), -this->m_proj_parm.n));
-                    xy_x = this->m_par.k0 * (rho * sin( lp_lon *= this->m_proj_parm.n ) );
-                    xy_y = this->m_par.k0 * (this->m_proj_parm.rho0 - rho * cos(lp_lon) );
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                        double rho;
-                    xy_x /= this->m_par.k0;
-                    xy_y /= this->m_par.k0;
-                    if( (rho = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.rho0 - xy_y)) != 0.0) {
-                        if (this->m_proj_parm.n < 0.) {
-                            rho = -rho;
-                            xy_x = -xy_x;
-                            xy_y = -xy_y;
-                        }
-                        if (this->m_proj_parm.ellips) {
-                            if ((lp_lat = pj_phi2(pow(rho / this->m_proj_parm.c, 1./this->m_proj_parm.n), this->m_par.e))
-                                == HUGE_VAL)
-                                throw proj_exception();;
-                        } else
-                            lp_lat = 2. * atan(pow(this->m_proj_parm.c / rho, 1./this->m_proj_parm.n)) - HALFPI;
-                        lp_lon = atan2(xy_x, xy_y) / this->m_proj_parm.n;
-                    } else {
-                        lp_lon = 0.;
-                        lp_lat = this->m_proj_parm.n > 0. ? HALFPI : - HALFPI;
-                    }
-                }
-
-                #ifdef SPECIAL_FACTORS_NOT_CONVERTED
-                inline void fac(Geographic lp, Factors &fac) const
-                {
-                        double rho;
-                    if (fabs(fabs(lp_lat) - HALFPI) < EPS10) {
-                        if ((lp_lat * this->m_proj_parm.n) <= 0.) return;
-                        rho = 0.;
-                    } else
-                        rho = this->m_proj_parm.c * (this->m_proj_parm.ellips ? pow(pj_tsfn(lp_lat, sin(lp_lat),
-                            this->m_par.e), this->m_proj_parm.n) : pow(tan(FORTPI + .5 * lp_lat), -this->m_proj_parm.n));
-                    this->m_fac.code |= IS_ANAL_HK + IS_ANAL_CONV;
-                    this->m_fac.k = this->m_fac.h = this->m_par.k0 * this->m_proj_parm.n * rho /
-                        pj_msfn(sin(lp_lat), cos(lp_lat), this->m_par.es);
-                    this->m_fac.conv = - this->m_proj_parm.n * lp_lon;
-                }
-                #endif
-            };
-
-            // Lambert Conformal Conic
-            template <typename Parameters>
-            void setup_lcc(Parameters& par, par_lcc& proj_parm)
-            {
-                double cosphi, sinphi;
-                int secant;
-                proj_parm.phi1 = pj_param(par.params, "rlat_1").f;
-                if (pj_param(par.params, "tlat_2").i)
-                    proj_parm.phi2 = pj_param(par.params, "rlat_2").f;
-                else {
-                    proj_parm.phi2 = proj_parm.phi1;
-                    if (!pj_param(par.params, "tlat_0").i)
-                        par.phi0 = proj_parm.phi1;
-                }
-                if (fabs(proj_parm.phi1 + proj_parm.phi2) < EPS10) throw proj_exception(-21);
-                proj_parm.n = sinphi = sin(proj_parm.phi1);
-                cosphi = cos(proj_parm.phi1);
-                secant = fabs(proj_parm.phi1 - proj_parm.phi2) >= EPS10;
-                if( (proj_parm.ellips = (par.es != 0.)) ) {
-                    double ml1, m1;
-                    par.e = sqrt(par.es);
-                    m1 = pj_msfn(sinphi, cosphi, par.es);
-                    ml1 = pj_tsfn(proj_parm.phi1, sinphi, par.e);
-                    if (secant) { /* secant cone */
-                        proj_parm.n = log(m1 /
-                           pj_msfn(sinphi = sin(proj_parm.phi2), cos(proj_parm.phi2), par.es));
-                        proj_parm.n /= log(ml1 / pj_tsfn(proj_parm.phi2, sinphi, par.e));
-                    }
-                    proj_parm.c = (proj_parm.rho0 = m1 * pow(ml1, -proj_parm.n) / proj_parm.n);
-                    proj_parm.rho0 *= (fabs(fabs(par.phi0) - HALFPI) < EPS10) ? 0. :
-                        pow(pj_tsfn(par.phi0, sin(par.phi0), par.e), proj_parm.n);
-                } else {
-                    if (secant)
-                        proj_parm.n = log(cosphi / cos(proj_parm.phi2)) /
-                           log(tan(FORTPI + .5 * proj_parm.phi2) /
-                           tan(FORTPI + .5 * proj_parm.phi1));
-                    proj_parm.c = cosphi * pow(tan(FORTPI + .5 * proj_parm.phi1), proj_parm.n) / proj_parm.n;
-                    proj_parm.rho0 = (fabs(fabs(par.phi0) - HALFPI) < EPS10) ? 0. :
-                        proj_parm.c * pow(tan(FORTPI + .5 * par.phi0), -proj_parm.n);
-                }
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-                // par.spc = fac;
-            }
-
-        }} // namespace detail::lcc
-    #endif // doxygen 
-
-    /*!
-        \brief Lambert Conformal Conic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - Ellipsoid
-         - lat_1= and lat_2= or lat_0
-        \par Example
-        \image html ex_lcc.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct lcc_ellipsoid : public detail::lcc::base_lcc_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline lcc_ellipsoid(const Parameters& par) : detail::lcc::base_lcc_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::lcc::setup_lcc(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class lcc_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<lcc_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void lcc_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("lcc", new lcc_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    // Create EPSG specializations
-    // (Proof of Concept, only for some)
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2805, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef lcc_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_LCC_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/lcca.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/lcca.hpp
deleted file mode 100644
index 83c6d45..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/lcca.hpp
+++ /dev/null
@@ -1,191 +0,0 @@
-#ifndef GGL_PROJECTIONS_LCCA_HPP
-#define GGL_PROJECTIONS_LCCA_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_mlfn.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace lcca{ 
-            static const int MAX_ITER = 10;
-            static const double DEL_TOL = 1e-12;
-
-            struct par_lcca
-            {
-                double    en[EN_SIZE];
-                double    r0, l, M0;
-                double    C;
-            };
-            
-            
-                inline double /* func to compute dr */
-            fS(double S, double C) {
-                    return(S * ( 1. + S * S * C));
-            }
-                inline double /* deriv of fs */
-            fSp(double S, double C) {
-                return(1. + 3.* S * S * C);
-            }
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_lcca_ellipsoid : public base_t_fi<base_lcca_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_lcca m_proj_parm;
-
-                inline base_lcca_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_lcca_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double S, r, dr;
-                    
-                    S = pj_mlfn(lp_lat, sin(lp_lat), cos(lp_lat), this->m_proj_parm.en) - this->m_proj_parm.M0;
-                    dr = fS(S, this->m_proj_parm.C);
-                    r = this->m_proj_parm.r0 - dr;
-                    xy_x = this->m_par.k0 * (r * sin( lp_lon *= this->m_proj_parm.l ) );
-                    xy_y = this->m_par.k0 * (this->m_proj_parm.r0 - r * cos(lp_lon) );
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double theta, dr, S, dif;
-                    int i;
-                
-                    xy_x /= this->m_par.k0;
-                    xy_y /= this->m_par.k0;
-                    theta = atan2(xy_x , this->m_proj_parm.r0 - xy_y);
-                    dr = xy_y - xy_x * tan(0.5 * theta);
-                    lp_lon = theta / this->m_proj_parm.l;
-                    S = dr;
-                    for (i = MAX_ITER; i ; --i) {
-                        S -= (dif = (fS(S, this->m_proj_parm.C) - dr) / fSp(S, this->m_proj_parm.C));
-                        if (fabs(dif) < DEL_TOL) break;
-                    }
-                    if (!i) throw proj_exception();
-                    lp_lat = pj_inv_mlfn(S + this->m_proj_parm.M0, this->m_par.es, this->m_proj_parm.en);
-                }
-            };
-
-            // Lambert Conformal Conic Alternative
-            template <typename Parameters>
-            void setup_lcca(Parameters& par, par_lcca& proj_parm)
-            {
-                double s2p0, N0, R0, tan0, tan20;
-                    pj_enfn(par.es, proj_parm.en);
-                if (!pj_param(par.params, "tlat_0").i) throw proj_exception(50);
-                if (par.phi0 == 0.) throw proj_exception(51);
-                proj_parm.l = sin(par.phi0);
-                proj_parm.M0 = pj_mlfn(par.phi0, proj_parm.l, cos(par.phi0), proj_parm.en);
-                s2p0 = proj_parm.l * proj_parm.l;
-                R0 = 1. / (1. - par.es * s2p0);
-                N0 = sqrt(R0);
-                R0 *= par.one_es * N0;
-                tan0 = tan(par.phi0);
-                tan20 = tan0 * tan0;
-                proj_parm.r0 = N0 / tan0;
-                proj_parm.C = 1. / (6. * R0 * N0);
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-            }
-
-        }} // namespace detail::lcca
-    #endif // doxygen 
-
-    /*!
-        \brief Lambert Conformal Conic Alternative projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - Ellipsoid
-         - lat_0=
-        \par Example
-        \image html ex_lcca.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct lcca_ellipsoid : public detail::lcca::base_lcca_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline lcca_ellipsoid(const Parameters& par) : detail::lcca::base_lcca_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::lcca::setup_lcca(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class lcca_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<lcca_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void lcca_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("lcca", new lcca_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_LCCA_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/loxim.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/loxim.hpp
deleted file mode 100644
index d49a8a3..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/loxim.hpp
+++ /dev/null
@@ -1,164 +0,0 @@
-#ifndef GGL_PROJECTIONS_LOXIM_HPP
-#define GGL_PROJECTIONS_LOXIM_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace loxim{ 
-            static const double EPS = 1e-8;
-
-            struct par_loxim
-            {
-                double phi1;
-                double cosphi1;
-                double tanphi1;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_loxim_spheroid : public base_t_fi<base_loxim_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_loxim m_proj_parm;
-
-                inline base_loxim_spheroid(const Parameters& par)
-                    : base_t_fi<base_loxim_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_y = lp_lat - this->m_proj_parm.phi1;
-                    if (fabs(xy_y) < EPS)
-                        xy_x = lp_lon * this->m_proj_parm.cosphi1;
-                    else {
-                        xy_x = FORTPI + 0.5 * lp_lat;
-                        if (fabs(xy_x) < EPS || fabs(fabs(xy_x) - HALFPI) < EPS)
-                            xy_x = 0.;
-                        else
-                            xy_x = lp_lon * xy_y / log( tan(xy_x) / this->m_proj_parm.tanphi1 );
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = xy_y + this->m_proj_parm.phi1;
-                    if (fabs(xy_y) < EPS)
-                        lp_lon = xy_x / this->m_proj_parm.cosphi1;
-                    else
-                        if (fabs( lp_lon = FORTPI + 0.5 * lp_lat ) < EPS ||
-                            fabs(fabs(lp_lon) - HALFPI) < EPS)
-                            lp_lon = 0.;
-                        else
-                            lp_lon = xy_x * log( tan(lp_lon) / this->m_proj_parm.tanphi1 ) / xy_y ;
-                }
-            };
-
-            // Loximuthal
-            template <typename Parameters>
-            void setup_loxim(Parameters& par, par_loxim& proj_parm)
-            {
-                proj_parm.phi1 = pj_param(par.params, "rlat_1").f;
-                if ((proj_parm.cosphi1 = cos(proj_parm.phi1)) < EPS) throw proj_exception(-22);
-                proj_parm.tanphi1 = tan(FORTPI + 0.5 * proj_parm.phi1);
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                par.es = 0.;
-            }
-
-        }} // namespace detail::loxim
-    #endif // doxygen 
-
-    /*!
-        \brief Loximuthal projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_loxim.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct loxim_spheroid : public detail::loxim::base_loxim_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline loxim_spheroid(const Parameters& par) : detail::loxim::base_loxim_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::loxim::setup_loxim(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class loxim_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<loxim_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void loxim_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("loxim", new loxim_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_LOXIM_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/lsat.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/lsat.hpp
deleted file mode 100644
index b59f1e4..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/lsat.hpp
+++ /dev/null
@@ -1,299 +0,0 @@
-#ifndef GGL_PROJECTIONS_LSAT_HPP
-#define GGL_PROJECTIONS_LSAT_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace lsat{ 
-            static const double TOL = 1e-7;
-            static const double PI_HALFPI = 4.71238898038468985766;
-            static const double TWOPI_HALFPI = 7.85398163397448309610;
-
-            struct par_lsat
-            {
-                double a2, a4, b, c1, c3;
-                double q, t, u, w, p22, sa, ca, xj, rlm, rlm2;
-            };
-            /* based upon Snyder and Linck, USGS-NMD */
-            template <typename Parameters>
-                inline void
-            seraz0(double lam, double mult, Parameters& par, par_lsat& proj_parm) {
-                double sdsq, h, s, fc, sd, sq, d__1;
-            
-                lam *= DEG_TO_RAD;
-                sd = sin(lam);
-                sdsq = sd * sd;
-                s = proj_parm.p22 * proj_parm.sa * cos(lam) * sqrt((1. + proj_parm.t * sdsq) / ((
-                    1. + proj_parm.w * sdsq) * (1. + proj_parm.q * sdsq)));
-                d__1 = 1. + proj_parm.q * sdsq;
-                h = sqrt((1. + proj_parm.q * sdsq) / (1. + proj_parm.w * sdsq)) * ((1. + 
-                    proj_parm.w * sdsq) / (d__1 * d__1) - proj_parm.p22 * proj_parm.ca);
-                sq = sqrt(proj_parm.xj * proj_parm.xj + s * s);
-                proj_parm.b += fc = mult * (h * proj_parm.xj - s * s) / sq;
-                proj_parm.a2 += fc * cos(lam + lam);
-                proj_parm.a4 += fc * cos(lam * 4.);
-                fc = mult * s * (h + proj_parm.xj) / sq;
-                proj_parm.c1 += fc * cos(lam);
-                proj_parm.c3 += fc * cos(lam * 3.);
-            }
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_lsat_ellipsoid : public base_t_fi<base_lsat_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_lsat m_proj_parm;
-
-                inline base_lsat_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_lsat_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    int l, nn;
-                    double lamt, xlam, sdsq, c, d, s, lamdp, phidp, lampp, tanph,
-                        lamtp, cl, sd, sp, fac, sav, tanphi;
-                
-                    if (lp_lat > HALFPI)
-                        lp_lat = HALFPI;
-                    else if (lp_lat < -HALFPI)
-                        lp_lat = -HALFPI;
-                    lampp = lp_lat >= 0. ? HALFPI : PI_HALFPI;
-                    tanphi = tan(lp_lat);
-                    for (nn = 0;;) {
-                        sav = lampp;
-                        lamtp = lp_lon + this->m_proj_parm.p22 * lampp;
-                        cl = cos(lamtp);
-                        if (fabs(cl) < TOL)
-                            lamtp -= TOL;
-                        fac = lampp - sin(lampp) * (cl < 0. ? -HALFPI : HALFPI);
-                        for (l = 50; l; --l) {
-                            lamt = lp_lon + this->m_proj_parm.p22 * sav;
-                            if (fabs(c = cos(lamt)) < TOL)
-                                lamt -= TOL;
-                            xlam = (this->m_par.one_es * tanphi * this->m_proj_parm.sa + sin(lamt) * this->m_proj_parm.ca) / c;
-                            lamdp = atan(xlam) + fac;
-                            if (fabs(fabs(sav) - fabs(lamdp)) < TOL)
-                                break;
-                            sav = lamdp;
-                        }
-                        if (!l || ++nn >= 3 || (lamdp > this->m_proj_parm.rlm && lamdp < this->m_proj_parm.rlm2))
-                            break;
-                        if (lamdp <= this->m_proj_parm.rlm)
-                            lampp = TWOPI_HALFPI;
-                        else if (lamdp >= this->m_proj_parm.rlm2)
-                            lampp = HALFPI;
-                    }
-                    if (l) {
-                        sp = sin(lp_lat);
-                        phidp = aasin((this->m_par.one_es * this->m_proj_parm.ca * sp - this->m_proj_parm.sa * cos(lp_lat) * 
-                            sin(lamt)) / sqrt(1. - this->m_par.es * sp * sp));
-                        tanph = log(tan(FORTPI + .5 * phidp));
-                        sd = sin(lamdp);
-                        sdsq = sd * sd;
-                        s = this->m_proj_parm.p22 * this->m_proj_parm.sa * cos(lamdp) * sqrt((1. + this->m_proj_parm.t * sdsq)
-                             / ((1. + this->m_proj_parm.w * sdsq) * (1. + this->m_proj_parm.q * sdsq)));
-                        d = sqrt(this->m_proj_parm.xj * this->m_proj_parm.xj + s * s);
-                        xy_x = this->m_proj_parm.b * lamdp + this->m_proj_parm.a2 * sin(2. * lamdp) + this->m_proj_parm.a4 *
-                            sin(lamdp * 4.) - tanph * s / d;
-                        xy_y = this->m_proj_parm.c1 * sd + this->m_proj_parm.c3 * sin(lamdp * 3.) + tanph * this->m_proj_parm.xj / d;
-                    } else
-                        xy_x = xy_y = HUGE_VAL;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    int nn;
-                    double lamt, sdsq, s, lamdp, phidp, sppsq, dd, sd, sl, fac, scl, sav, spp;
-                
-                    lamdp = xy_x / this->m_proj_parm.b;
-                    nn = 50;
-                    do {
-                        sav = lamdp;
-                        sd = sin(lamdp);
-                        sdsq = sd * sd;
-                        s = this->m_proj_parm.p22 * this->m_proj_parm.sa * cos(lamdp) * sqrt((1. + this->m_proj_parm.t * sdsq)
-                             / ((1. + this->m_proj_parm.w * sdsq) * (1. + this->m_proj_parm.q * sdsq)));
-                        lamdp = xy_x + xy_y * s / this->m_proj_parm.xj - this->m_proj_parm.a2 * sin(
-                            2. * lamdp) - this->m_proj_parm.a4 * sin(lamdp * 4.) - s / this->m_proj_parm.xj * (
-                            this->m_proj_parm.c1 * sin(lamdp) + this->m_proj_parm.c3 * sin(lamdp * 3.));
-                        lamdp /= this->m_proj_parm.b;
-                    } while (fabs(lamdp - sav) >= TOL && --nn);
-                    sl = sin(lamdp);
-                    fac = exp(sqrt(1. + s * s / this->m_proj_parm.xj / this->m_proj_parm.xj) * (xy_y - 
-                        this->m_proj_parm.c1 * sl - this->m_proj_parm.c3 * sin(lamdp * 3.)));
-                    phidp = 2. * (atan(fac) - FORTPI);
-                    dd = sl * sl;
-                    if (fabs(cos(lamdp)) < TOL)
-                        lamdp -= TOL;
-                    spp = sin(phidp);
-                    sppsq = spp * spp;
-                    lamt = atan(((1. - sppsq * this->m_par.rone_es) * tan(lamdp) * 
-                        this->m_proj_parm.ca - spp * this->m_proj_parm.sa * sqrt((1. + this->m_proj_parm.q * dd) * (
-                        1. - sppsq) - sppsq * this->m_proj_parm.u) / cos(lamdp)) / (1. - sppsq 
-                        * (1. + this->m_proj_parm.u)));
-                    sl = lamt >= 0. ? 1. : -1.;
-                    scl = cos(lamdp) >= 0. ? 1. : -1;
-                    lamt -= HALFPI * (1. - scl) * sl;
-                    lp_lon = lamt - this->m_proj_parm.p22 * lamdp;
-                    if (fabs(this->m_proj_parm.sa) < TOL)
-                        lp_lat = aasin(spp / sqrt(this->m_par.one_es * this->m_par.one_es + this->m_par.es * sppsq));
-                    else
-                        lp_lat = atan((tan(lamdp) * cos(lamt) - this->m_proj_parm.ca * sin(lamt)) /
-                            (this->m_par.one_es * this->m_proj_parm.sa));
-                }
-            };
-
-            // Space oblique for LANDSAT
-            template <typename Parameters>
-            void setup_lsat(Parameters& par, par_lsat& proj_parm)
-            {
-                int land, path;
-                double lam, alf, esc, ess;
-                land = pj_param(par.params, "ilsat").i;
-                if (land <= 0 || land > 5) throw proj_exception(-28);
-                path = pj_param(par.params, "ipath").i;
-                if (path <= 0 || path > (land <= 3 ? 251 : 233)) throw proj_exception(-29);
-                if (land <= 3) {
-                    par.lam0 = DEG_TO_RAD * 128.87 - TWOPI / 251. * path;
-                    proj_parm.p22 = 103.2669323;
-                    alf = DEG_TO_RAD * 99.092;
-                } else {
-                    par.lam0 = DEG_TO_RAD * 129.3 - TWOPI / 233. * path;
-                    proj_parm.p22 = 98.8841202;
-                    alf = DEG_TO_RAD * 98.2;
-                }
-                proj_parm.p22 /= 1440.;
-                proj_parm.sa = sin(alf);
-                proj_parm.ca = cos(alf);
-                if (fabs(proj_parm.ca) < 1e-9)
-                    proj_parm.ca = 1e-9;
-                esc = par.es * proj_parm.ca * proj_parm.ca;
-                ess = par.es * proj_parm.sa * proj_parm.sa;
-                proj_parm.w = (1. - esc) * par.rone_es;
-                proj_parm.w = proj_parm.w * proj_parm.w - 1.;
-                proj_parm.q = ess * par.rone_es;
-                proj_parm.t = ess * (2. - par.es) * par.rone_es * par.rone_es;
-                proj_parm.u = esc * par.rone_es;
-                proj_parm.xj = par.one_es * par.one_es * par.one_es;
-                proj_parm.rlm = PI * (1. / 248. + .5161290322580645);
-                proj_parm.rlm2 = proj_parm.rlm + TWOPI;
-                proj_parm.a2 = proj_parm.a4 = proj_parm.b = proj_parm.c1 = proj_parm.c3 = 0.;
-                seraz0(0., 1., par, proj_parm);
-                for (lam = 9.;
-             lam <= 81.0001;
-             lam += 18.)
-                    seraz0(lam, 4., par, proj_parm);
-                for (lam = 18;
-             lam <= 72.0001;
-             lam += 18.)
-                    seraz0(lam, 2., par, proj_parm);
-                seraz0(90., 1., par, proj_parm);
-                proj_parm.a2 /= 30.;
-                proj_parm.a4 /= 60.;
-                proj_parm.b /= 30.;
-                proj_parm.c1 /= 15.;
-                proj_parm.c3 /= 45.;
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-            }
-
-        }} // namespace detail::lsat
-    #endif // doxygen 
-
-    /*!
-        \brief Space oblique for LANDSAT projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - Ellipsoid
-         - lsat= path=
-        \par Example
-        \image html ex_lsat.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct lsat_ellipsoid : public detail::lsat::base_lsat_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline lsat_ellipsoid(const Parameters& par) : detail::lsat::base_lsat_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::lsat::setup_lsat(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class lsat_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<lsat_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void lsat_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("lsat", new lsat_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_LSAT_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/mbt_fps.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/mbt_fps.hpp
deleted file mode 100644
index 1353a4b..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/mbt_fps.hpp
+++ /dev/null
@@ -1,161 +0,0 @@
-#ifndef GGL_PROJECTIONS_MBT_FPS_HPP
-#define GGL_PROJECTIONS_MBT_FPS_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace mbt_fps{ 
-            static const int MAX_ITER = 10;
-            static const double LOOP_TOL = 1e-7;
-            static const double C1 = 0.45503;
-            static const double C2 = 1.36509;
-            static const double C3 = 1.41546;
-            static const double C_x = 0.22248;
-            static const double C_y = 1.44492;
-            static const double C1_2 = 0.33333333333333333333333333;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_mbt_fps_spheroid : public base_t_fi<base_mbt_fps_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_mbt_fps_spheroid(const Parameters& par)
-                    : base_t_fi<base_mbt_fps_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double k, V, t;
-                    int i;
-                
-                    k = C3 * sin(lp_lat);
-                    for (i = MAX_ITER; i ; --i) {
-                        t = lp_lat / C2;
-                        lp_lat -= V = (C1 * sin(t) + sin(lp_lat) - k) /
-                            (C1_2 * cos(t) + cos(lp_lat));
-                        if (fabs(V) < LOOP_TOL)
-                            break;
-                    }
-                    t = lp_lat / C2;
-                    xy_x = C_x * lp_lon * (1. + 3. * cos(lp_lat)/cos(t) );
-                    xy_y = C_y * sin(t);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double t;
-                
-                    lp_lat = C2 * (t = aasin(xy_y / C_y));
-                    lp_lon = xy_x / (C_x * (1. + 3. * cos(lp_lat)/cos(t)));
-                    lp_lat = aasin((C1 * sin(t) + sin(lp_lat)) / C3);
-                }
-            };
-
-            // McBryde-Thomas Flat-Pole Sine (No. 2)
-            template <typename Parameters>
-            void setup_mbt_fps(Parameters& par)
-            {
-                par.es = 0;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::mbt_fps
-    #endif // doxygen 
-
-    /*!
-        \brief McBryde-Thomas Flat-Pole Sine (No. 2) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-        \par Example
-        \image html ex_mbt_fps.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct mbt_fps_spheroid : public detail::mbt_fps::base_mbt_fps_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline mbt_fps_spheroid(const Parameters& par) : detail::mbt_fps::base_mbt_fps_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::mbt_fps::setup_mbt_fps(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class mbt_fps_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<mbt_fps_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void mbt_fps_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("mbt_fps", new mbt_fps_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_MBT_FPS_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/mbtfpp.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/mbtfpp.hpp
deleted file mode 100644
index ce34074..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/mbtfpp.hpp
+++ /dev/null
@@ -1,155 +0,0 @@
-#ifndef GGL_PROJECTIONS_MBTFPP_HPP
-#define GGL_PROJECTIONS_MBTFPP_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace mbtfpp{ 
-            static const double CS = .95257934441568037152;
-            static const double FXC = .92582009977255146156;
-            static const double FYC = 3.40168025708304504493;
-            static const double C23 = .66666666666666666666;
-            static const double C13 = .33333333333333333333;
-            static const double ONEEPS = 1.0000001;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_mbtfpp_spheroid : public base_t_fi<base_mbtfpp_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_mbtfpp_spheroid(const Parameters& par)
-                    : base_t_fi<base_mbtfpp_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    lp_lat = asin(CS * sin(lp_lat));
-                    xy_x = FXC * lp_lon * (2. * cos(C23 * lp_lat) - 1.);
-                    xy_y = FYC * sin(C13 * lp_lat);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = xy_y / FYC;
-                    if (fabs(lp_lat) >= 1.) {
-                        if (fabs(lp_lat) > ONEEPS)    throw proj_exception();
-                        else    lp_lat = (lp_lat < 0.) ? -HALFPI : HALFPI;
-                    } else
-                        lp_lat = asin(lp_lat);
-                    lp_lon = xy_x / ( FXC * (2. * cos(C23 * (lp_lat *= 3.)) - 1.) );
-                    if (fabs(lp_lat = sin(lp_lat) / CS) >= 1.) {
-                        if (fabs(lp_lat) > ONEEPS)    throw proj_exception();
-                        else    lp_lat = (lp_lat < 0.) ? -HALFPI : HALFPI;
-                    } else
-                        lp_lat = asin(lp_lat);
-                }
-            };
-
-            // McBride-Thomas Flat-Polar Parabolic
-            template <typename Parameters>
-            void setup_mbtfpp(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::mbtfpp
-    #endif // doxygen 
-
-    /*!
-        \brief McBride-Thomas Flat-Polar Parabolic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-        \par Example
-        \image html ex_mbtfpp.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct mbtfpp_spheroid : public detail::mbtfpp::base_mbtfpp_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline mbtfpp_spheroid(const Parameters& par) : detail::mbtfpp::base_mbtfpp_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::mbtfpp::setup_mbtfpp(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class mbtfpp_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<mbtfpp_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void mbtfpp_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("mbtfpp", new mbtfpp_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_MBTFPP_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/mbtfpq.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/mbtfpq.hpp
deleted file mode 100644
index 3cd7472..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/mbtfpq.hpp
+++ /dev/null
@@ -1,170 +0,0 @@
-#ifndef GGL_PROJECTIONS_MBTFPQ_HPP
-#define GGL_PROJECTIONS_MBTFPQ_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace mbtfpq{ 
-            static const int NITER = 20;
-            static const double EPS = 1e-7;
-            static const double ONETOL = 1.000001;
-            static const double C = 1.70710678118654752440;
-            static const double RC = 0.58578643762690495119;
-            static const double FYC = 1.87475828462269495505;
-            static const double RYC = 0.53340209679417701685;
-            static const double FXC = 0.31245971410378249250;
-            static const double RXC = 3.20041258076506210122;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_mbtfpq_spheroid : public base_t_fi<base_mbtfpq_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_mbtfpq_spheroid(const Parameters& par)
-                    : base_t_fi<base_mbtfpq_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double th1, c;
-                    int i;
-                
-                    c = C * sin(lp_lat);
-                    for (i = NITER; i; --i) {
-                        lp_lat -= th1 = (sin(.5*lp_lat) + sin(lp_lat) - c) /
-                            (.5*cos(.5*lp_lat)  + cos(lp_lat));
-                        if (fabs(th1) < EPS) break;
-                    }
-                    xy_x = FXC * lp_lon * (1.0 + 2. * cos(lp_lat)/cos(0.5 * lp_lat));
-                    xy_y = FYC * sin(0.5 * lp_lat);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double t;
-                
-                    lp_lat = RYC * xy_y;
-                    if (fabs(lp_lat) > 1.) {
-                        if (fabs(lp_lat) > ONETOL)    throw proj_exception();
-                        else if (lp_lat < 0.) { t = -1.; lp_lat = -PI; }
-                        else { t = 1.; lp_lat = PI; }
-                    } else
-                        lp_lat = 2. * asin(t = lp_lat);
-                    lp_lon = RXC * xy_x / (1. + 2. * cos(lp_lat)/cos(0.5 * lp_lat));
-                    lp_lat = RC * (t + sin(lp_lat));
-                    if (fabs(lp_lat) > 1.)
-                        if (fabs(lp_lat) > ONETOL)    throw proj_exception();
-                        else            lp_lat = lp_lat < 0. ? -HALFPI : HALFPI;
-                    else
-                        lp_lat = asin(lp_lat);
-                }
-            };
-
-            // McBryde-Thomas Flat-Polar Quartic
-            template <typename Parameters>
-            void setup_mbtfpq(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::mbtfpq
-    #endif // doxygen 
-
-    /*!
-        \brief McBryde-Thomas Flat-Polar Quartic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-        \par Example
-        \image html ex_mbtfpq.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct mbtfpq_spheroid : public detail::mbtfpq::base_mbtfpq_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline mbtfpq_spheroid(const Parameters& par) : detail::mbtfpq::base_mbtfpq_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::mbtfpq::setup_mbtfpq(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class mbtfpq_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<mbtfpq_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void mbtfpq_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("mbtfpq", new mbtfpq_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_MBTFPQ_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/merc.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/merc.hpp
deleted file mode 100644
index ec39a04..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/merc.hpp
+++ /dev/null
@@ -1,213 +0,0 @@
-#ifndef GGL_PROJECTIONS_MERC_HPP
-#define GGL_PROJECTIONS_MERC_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_msfn.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_tsfn.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_phi2.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace merc{ 
-            static const double EPS10 = 1.e-10;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_merc_ellipsoid : public base_t_fi<base_merc_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_merc_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_merc_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    if (fabs(fabs(lp_lat) - HALFPI) <= EPS10) throw proj_exception();;
-                    xy_x = this->m_par.k0 * lp_lon;
-                    xy_y = - this->m_par.k0 * log(pj_tsfn(lp_lat, sin(lp_lat), this->m_par.e));
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    if ((lp_lat = pj_phi2(exp(- xy_y / this->m_par.k0), this->m_par.e)) == HUGE_VAL) throw proj_exception();;
-                    lp_lon = xy_x / this->m_par.k0;
-                }
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_merc_spheroid : public base_t_fi<base_merc_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_merc_spheroid(const Parameters& par)
-                    : base_t_fi<base_merc_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    if (fabs(fabs(lp_lat) - HALFPI) <= EPS10) throw proj_exception();;
-                    xy_x = this->m_par.k0 * lp_lon;
-                    xy_y = this->m_par.k0 * log(tan(FORTPI + .5 * lp_lat));
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = HALFPI - 2. * atan(exp(-xy_y / this->m_par.k0));
-                    lp_lon = xy_x / this->m_par.k0;
-                }
-            };
-
-            // Mercator
-            template <typename Parameters>
-            void setup_merc(Parameters& par)
-            {
-                double phits=0.0;
-                int is_phits;
-                if( (is_phits = pj_param(par.params, "tlat_ts").i) ) {
-                    phits = fabs(pj_param(par.params, "rlat_ts").f);
-                    if (phits >= HALFPI) throw proj_exception(-24);
-                }
-                if (par.es) { /* ellipsoid */
-                    if (is_phits)
-                        par.k0 = pj_msfn(sin(phits), cos(phits), par.es);
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-                } else { /* sphere */
-                    if (is_phits)
-                        par.k0 = cos(phits);
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                }
-            }
-
-        }} // namespace detail::merc
-    #endif // doxygen 
-
-    /*!
-        \brief Mercator projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - Ellipsoid
-         - lat_ts=
-        \par Example
-        \image html ex_merc.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct merc_ellipsoid : public detail::merc::base_merc_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline merc_ellipsoid(const Parameters& par) : detail::merc::base_merc_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::merc::setup_merc(this->m_par);
-        }
-    };
-
-    /*!
-        \brief Mercator projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - Ellipsoid
-         - lat_ts=
-        \par Example
-        \image html ex_merc.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct merc_spheroid : public detail::merc::base_merc_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline merc_spheroid(const Parameters& par) : detail::merc::base_merc_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::merc::setup_merc(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class merc_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    if (par.es)
-                        return new base_v_fi<merc_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                    else
-                        return new base_v_fi<merc_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void merc_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("merc", new merc_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_MERC_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/mill.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/mill.hpp
deleted file mode 100644
index 419fbbe..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/mill.hpp
+++ /dev/null
@@ -1,138 +0,0 @@
-#ifndef GGL_PROJECTIONS_MILL_HPP
-#define GGL_PROJECTIONS_MILL_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace mill{ 
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_mill_spheroid : public base_t_fi<base_mill_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_mill_spheroid(const Parameters& par)
-                    : base_t_fi<base_mill_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = lp_lon;
-                    xy_y = log(tan(FORTPI + lp_lat * .4)) * 1.25;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lon = xy_x;
-                    lp_lat = 2.5 * (atan(exp(.8 * xy_y)) - FORTPI);
-                }
-            };
-
-            // Miller Cylindrical
-            template <typename Parameters>
-            void setup_mill(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::mill
-    #endif // doxygen 
-
-    /*!
-        \brief Miller Cylindrical projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-        \par Example
-        \image html ex_mill.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct mill_spheroid : public detail::mill::base_mill_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline mill_spheroid(const Parameters& par) : detail::mill::base_mill_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::mill::setup_mill(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class mill_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<mill_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void mill_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("mill", new mill_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_MILL_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/mod_ster.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/mod_ster.hpp
deleted file mode 100644
index ea1d7e9..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/mod_ster.hpp
+++ /dev/null
@@ -1,474 +0,0 @@
-#ifndef GGL_PROJECTIONS_MOD_STER_HPP
-#define GGL_PROJECTIONS_MOD_STER_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_zpoly1.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace mod_ster{ 
-            static const double EPSLN = 1e-10;
-
-            struct par_mod_ster
-            {
-                COMPLEX    *zcoeff;
-                double    cchio, schio;
-                int        n;
-            };
-            /* based upon Snyder and Linck, USGS-NMD */
-            
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_mod_ster_ellipsoid : public base_t_fi<base_mod_ster_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_mod_ster m_proj_parm;
-
-                inline base_mod_ster_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_mod_ster_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double sinlon, coslon, esphi, chi, schi, cchi, s;
-                    COMPLEX p;
-                
-                    sinlon = sin(lp_lon);
-                    coslon = cos(lp_lon);
-                    esphi = this->m_par.e * sin(lp_lat);
-                    chi = 2. * atan(tan((HALFPI + lp_lat) * .5) *
-                        pow((1. - esphi) / (1. + esphi), this->m_par.e * .5)) - HALFPI;
-                    schi = sin(chi);
-                    cchi = cos(chi);
-                    s = 2. / (1. + this->m_proj_parm.schio * schi + this->m_proj_parm.cchio * cchi * coslon);
-                    p.r = s * cchi * sinlon;
-                    p.i = s * (this->m_proj_parm.cchio * schi - this->m_proj_parm.schio * cchi * coslon);
-                    p = pj_zpoly1(p, this->m_proj_parm.zcoeff, this->m_proj_parm.n);
-                    xy_x = p.r;
-                    xy_y = p.i;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    int nn;
-                    COMPLEX p, fxy, fpxy, dp;
-                    double den, rh = 0, z, sinz = 0, cosz = 0, chi, phi = 0, dphi, esphi;
-                
-                    p.r = xy_x;
-                    p.i = xy_y;
-                    for (nn = 20; nn ;--nn) {
-                        fxy = pj_zpolyd1(p, this->m_proj_parm.zcoeff, this->m_proj_parm.n, &fpxy);
-                        fxy.r -= xy_x;
-                        fxy.i -= xy_y;
-                        den = fpxy.r * fpxy.r + fpxy.i * fpxy.i;
-                        dp.r = -(fxy.r * fpxy.r + fxy.i * fpxy.i) / den;
-                        dp.i = -(fxy.i * fpxy.r - fxy.r * fpxy.i) / den;
-                        p.r += dp.r;
-                        p.i += dp.i;
-                        if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN)
-                            break;
-                    }
-                    if (nn) {
-                        rh = boost::math::hypot(p.r, p.i);
-                        z = 2. * atan(.5 * rh);
-                        sinz = sin(z);
-                        cosz = cos(z);
-                        lp_lon = this->m_par.lam0;
-                        if (fabs(rh) <= EPSLN) {
-                            lp_lat = this->m_par.phi0;
-                            return;
-                        }
-                        chi = aasin(cosz * this->m_proj_parm.schio + p.i * sinz * this->m_proj_parm.cchio / rh);
-                        phi = chi;
-                        for (nn = 20; nn ;--nn) {
-                            esphi = this->m_par.e * sin(phi);
-                            dphi = 2. * atan(tan((HALFPI + chi) * .5) *
-                                pow((1. + esphi) / (1. - esphi), this->m_par.e * .5)) - HALFPI - phi;
-                            phi += dphi;
-                            if (fabs(dphi) <= EPSLN)
-                                break;
-                        }
-                    }
-                    if (nn) {
-                        lp_lat = phi;
-                        lp_lon = atan2(p.r * sinz, rh * this->m_proj_parm.cchio * cosz - p.i * 
-                            this->m_proj_parm.schio * sinz);
-                    } else
-                        lp_lon = lp_lat = HUGE_VAL;
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_mod_ster& proj_parm)  /* general initialization */
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                double esphi, chio;
-                if (par.es) {
-                    esphi = par.e * sin(par.phi0);
-                    chio = 2. * atan(tan((HALFPI + par.phi0) * .5) *
-                        pow((1. - esphi) / (1. + esphi), par.e * .5)) - HALFPI;
-                } else
-                    chio = par.phi0;
-                proj_parm.schio = sin(chio);
-                proj_parm.cchio = cos(chio);
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-            }
-
-
-            // Miller Oblated Stereographic
-            template <typename Parameters>
-            void setup_mil_os(Parameters& par, par_mod_ster& proj_parm)
-            {
-                static COMPLEX /* Miller Oblated Stereographic */
-            AB[] = {
-                {0.924500,    0.},
-                {0.,            0.},
-                {0.019430,    0.}
-            };
-                proj_parm.n = 2;
-                par.lam0 = DEG_TO_RAD * 20.;
-                par.phi0 = DEG_TO_RAD * 18.;
-                proj_parm.zcoeff = AB;
-                par.es = 0.;
-                setup(par, proj_parm);
-            }
-
-            // Lee Oblated Stereographic
-            template <typename Parameters>
-            void setup_lee_os(Parameters& par, par_mod_ster& proj_parm)
-            {
-                static COMPLEX /* Lee Oblated Stereographic */
-            AB[] = {
-                {0.721316,    0.},
-                {0.,            0.},
-                    {-0.0088162,     -0.00617325}
-            };
-                proj_parm.n = 2;
-                par.lam0 = DEG_TO_RAD * -165.;
-                par.phi0 = DEG_TO_RAD * -10.;
-                proj_parm.zcoeff = AB;
-                par.es = 0.;
-                setup(par, proj_parm);
-            }
-
-            // Mod. Stererographics of 48 U.S.
-            template <typename Parameters>
-            void setup_gs48(Parameters& par, par_mod_ster& proj_parm)
-            {
-                static COMPLEX /* 48 United States */
-            AB[] = {
-                {0.98879,    0.},
-                {0.,        0.},
-                {-0.050909,    0.},
-                {0.,        0.},
-                    {0.075528,    0.}
-            };
-                proj_parm.n = 4;
-                par.lam0 = DEG_TO_RAD * -96.;
-                par.phi0 = DEG_TO_RAD * -39.;
-                proj_parm.zcoeff = AB;
-                par.es = 0.;
-                par.a = 6370997.;
-                setup(par, proj_parm);
-            }
-
-            // Mod. Stererographics of Alaska
-            template <typename Parameters>
-            void setup_alsk(Parameters& par, par_mod_ster& proj_parm)
-            {
-                static COMPLEX
-            ABe[] = { /* Alaska ellipsoid */
-                {.9945303,    0.},
-                {.0052083,    -.0027404},
-                {.0072721,    .0048181},
-                {-.0151089,    -.1932526},
-                {.0642675,    -.1381226},
-                {.3582802,    -.2884586}},
-            ABs[] = { /* Alaska sphere */
-                {.9972523,    0.},
-                {.0052513,    -.0041175},
-                {.0074606,    .0048125},
-                {-.0153783,    -.1968253},
-                {.0636871,    -.1408027},
-                    {.3660976,    -.2937382}
-            };
-                proj_parm.n = 5;
-                par.lam0 = DEG_TO_RAD * -152.;
-                par.phi0 = DEG_TO_RAD * 64.;
-                if (par.es) { /* fixed ellipsoid/sphere */
-                    proj_parm.zcoeff = ABe;
-                    par.a = 6378206.4;
-                    par.e = sqrt(par.es = 0.00676866);
-                } else {
-                    proj_parm.zcoeff = ABs;
-                    par.a = 6370997.;
-                }
-                setup(par, proj_parm);
-            }
-
-            // Mod. Stererographics of 50 U.S.
-            template <typename Parameters>
-            void setup_gs50(Parameters& par, par_mod_ster& proj_parm)
-            {
-                static COMPLEX
-            ABe[] = { /* GS50 ellipsoid */
-                {.9827497,    0.},
-                {.0210669,    .0053804},
-                {-.1031415,    -.0571664},
-                {-.0323337,    -.0322847},
-                {.0502303,    .1211983},
-                {.0251805,    .0895678},
-                {-.0012315,    -.1416121},
-                {.0072202,    -.1317091},
-                {-.0194029,    .0759677},
-                    {-.0210072,    .0834037}
-            },
-            ABs[] = { /* GS50 sphere */
-                {.9842990,    0.},
-                {.0211642,    .0037608},
-                {-.1036018,    -.0575102},
-                {-.0329095,    -.0320119},
-                {.0499471,    .1223335},
-                {.0260460,    .0899805},
-                {.0007388,    -.1435792},
-                {.0075848,    -.1334108},
-                {-.0216473,    .0776645},
-                    {-.0225161,    .0853673}
-            };
-                proj_parm.n = 9;
-                par.lam0 = DEG_TO_RAD * -120.;
-                par.phi0 = DEG_TO_RAD * 45.;
-                if (par.es) { /* fixed ellipsoid/sphere */
-                    proj_parm.zcoeff = ABe;
-                    par.a = 6378206.4;
-                    par.e = sqrt(par.es = 0.00676866);
-                } else {
-                    proj_parm.zcoeff = ABs;
-                    par.a = 6370997.;
-                }
-                setup(par, proj_parm);
-            }
-
-        }} // namespace detail::mod_ster
-    #endif // doxygen 
-
-    /*!
-        \brief Miller Oblated Stereographic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azi(mod)
-        \par Example
-        \image html ex_mil_os.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct mil_os_ellipsoid : public detail::mod_ster::base_mod_ster_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline mil_os_ellipsoid(const Parameters& par) : detail::mod_ster::base_mod_ster_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::mod_ster::setup_mil_os(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Lee Oblated Stereographic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azi(mod)
-        \par Example
-        \image html ex_lee_os.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct lee_os_ellipsoid : public detail::mod_ster::base_mod_ster_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline lee_os_ellipsoid(const Parameters& par) : detail::mod_ster::base_mod_ster_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::mod_ster::setup_lee_os(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Mod. Stererographics of 48 U.S. projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azi(mod)
-        \par Example
-        \image html ex_gs48.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct gs48_ellipsoid : public detail::mod_ster::base_mod_ster_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline gs48_ellipsoid(const Parameters& par) : detail::mod_ster::base_mod_ster_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::mod_ster::setup_gs48(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Mod. Stererographics of Alaska projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azi(mod)
-        \par Example
-        \image html ex_alsk.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct alsk_ellipsoid : public detail::mod_ster::base_mod_ster_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline alsk_ellipsoid(const Parameters& par) : detail::mod_ster::base_mod_ster_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::mod_ster::setup_alsk(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Mod. Stererographics of 50 U.S. projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azi(mod)
-        \par Example
-        \image html ex_gs50.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct gs50_ellipsoid : public detail::mod_ster::base_mod_ster_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline gs50_ellipsoid(const Parameters& par) : detail::mod_ster::base_mod_ster_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::mod_ster::setup_gs50(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class mil_os_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<mil_os_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class lee_os_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<lee_os_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class gs48_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<gs48_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class alsk_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<alsk_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class gs50_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<gs50_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void mod_ster_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("mil_os", new mil_os_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("lee_os", new lee_os_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("gs48", new gs48_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("alsk", new alsk_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("gs50", new gs50_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_MOD_STER_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/moll.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/moll.hpp
deleted file mode 100644
index 9891cc5..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/moll.hpp
+++ /dev/null
@@ -1,262 +0,0 @@
-#ifndef GGL_PROJECTIONS_MOLL_HPP
-#define GGL_PROJECTIONS_MOLL_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace moll{ 
-            static const int MAX_ITER = 10;
-            static const double LOOP_TOL = 1e-7;
-
-            struct par_moll
-            {
-                double    C_x, C_y, C_p;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_moll_spheroid : public base_t_fi<base_moll_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_moll m_proj_parm;
-
-                inline base_moll_spheroid(const Parameters& par)
-                    : base_t_fi<base_moll_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double k, V;
-                    int i;
-                
-                    k = this->m_proj_parm.C_p * sin(lp_lat);
-                    for (i = MAX_ITER; i ; --i) {
-                        lp_lat -= V = (lp_lat + sin(lp_lat) - k) /
-                            (1. + cos(lp_lat));
-                        if (fabs(V) < LOOP_TOL)
-                            break;
-                    }
-                    if (!i)
-                        lp_lat = (lp_lat < 0.) ? -HALFPI : HALFPI;
-                    else
-                        lp_lat *= 0.5;
-                    xy_x = this->m_proj_parm.C_x * lp_lon * cos(lp_lat);
-                    xy_y = this->m_proj_parm.C_y * sin(lp_lat);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    
-                
-                    lp_lat = aasin(xy_y / this->m_proj_parm.C_y);
-                    lp_lon = xy_x / (this->m_proj_parm.C_x * cos(lp_lat));
-                    lp_lat += lp_lat;
-                    lp_lat = aasin((lp_lat + sin(lp_lat)) / this->m_proj_parm.C_p);
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_moll& proj_parm, double p) 
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                double r, sp, p2 = p + p;
-                par.es = 0;
-                sp = sin(p);
-                r = sqrt(TWOPI * sp / (p2 + sin(p2)));
-                proj_parm.C_x = 2. * r / PI;
-                proj_parm.C_y = r / sp;
-                proj_parm.C_p = p2 + sin(p2);
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-
-            // Mollweide
-            template <typename Parameters>
-            void setup_moll(Parameters& par, par_moll& proj_parm)
-            {
-                setup(par, proj_parm, HALFPI);
-            }
-
-            // Wagner IV
-            template <typename Parameters>
-            void setup_wag4(Parameters& par, par_moll& proj_parm)
-            {
-                setup(par, proj_parm, PI/3.);
-            }
-
-            // Wagner V
-            template <typename Parameters>
-            void setup_wag5(Parameters& par, par_moll& proj_parm)
-            {
-                par.es = 0;
-                proj_parm.C_x = 0.90977;
-                proj_parm.C_y = 1.65014;
-                proj_parm.C_p = 3.00896;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::moll
-    #endif // doxygen 
-
-    /*!
-        \brief Mollweide projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_moll.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct moll_spheroid : public detail::moll::base_moll_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline moll_spheroid(const Parameters& par) : detail::moll::base_moll_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::moll::setup_moll(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Wagner IV projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_wag4.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct wag4_spheroid : public detail::moll::base_moll_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline wag4_spheroid(const Parameters& par) : detail::moll::base_moll_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::moll::setup_wag4(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Wagner V projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_wag5.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct wag5_spheroid : public detail::moll::base_moll_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline wag5_spheroid(const Parameters& par) : detail::moll::base_moll_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::moll::setup_wag5(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class moll_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<moll_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class wag4_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<wag4_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class wag5_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<wag5_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void moll_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("moll", new moll_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("wag4", new wag4_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("wag5", new wag5_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_MOLL_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/nell.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/nell.hpp
deleted file mode 100644
index d6bd3ce..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/nell.hpp
+++ /dev/null
@@ -1,154 +0,0 @@
-#ifndef GGL_PROJECTIONS_NELL_HPP
-#define GGL_PROJECTIONS_NELL_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace nell{ 
-            static const int MAX_ITER = 10;
-            static const double LOOP_TOL = 1e-7;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_nell_spheroid : public base_t_fi<base_nell_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_nell_spheroid(const Parameters& par)
-                    : base_t_fi<base_nell_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double k, V;
-                    int i;
-                
-                    k = 2. * sin(lp_lat);
-                    V = lp_lat * lp_lat;
-                    lp_lat *= 1.00371 + V * (-0.0935382 + V * -0.011412);
-                    for (i = MAX_ITER; i ; --i) {
-                        lp_lat -= V = (lp_lat + sin(lp_lat) - k) /
-                            (1. + cos(lp_lat));
-                        if (fabs(V) < LOOP_TOL)
-                            break;
-                    }
-                    xy_x = 0.5 * lp_lon * (1. + cos(lp_lat));
-                    xy_y = lp_lat;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    
-                
-                    lp_lon = 2. * xy_x / (1. + cos(xy_y));
-                    lp_lat = aasin(0.5 * (xy_y + sin(xy_y)));
-                }
-            };
-
-            // Nell
-            template <typename Parameters>
-            void setup_nell(Parameters& par)
-            {
-                par.es = 0;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::nell
-    #endif // doxygen 
-
-    /*!
-        \brief Nell projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_nell.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct nell_spheroid : public detail::nell::base_nell_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline nell_spheroid(const Parameters& par) : detail::nell::base_nell_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::nell::setup_nell(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class nell_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<nell_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void nell_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("nell", new nell_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_NELL_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/nell_h.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/nell_h.hpp
deleted file mode 100644
index fb37607..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/nell_h.hpp
+++ /dev/null
@@ -1,153 +0,0 @@
-#ifndef GGL_PROJECTIONS_NELL_H_HPP
-#define GGL_PROJECTIONS_NELL_H_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace nell_h{ 
-            static const int NITER = 9;
-            static const double EPS = 1e-7;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_nell_h_spheroid : public base_t_fi<base_nell_h_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_nell_h_spheroid(const Parameters& par)
-                    : base_t_fi<base_nell_h_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = 0.5 * lp_lon * (1. + cos(lp_lat));
-                    xy_y = 2.0 * (lp_lat - tan(0.5 *lp_lat));
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double V, c, p;
-                    int i;
-                
-                    p = 0.5 * xy_y;
-                    for (i = NITER; i ; --i) {
-                        c = cos(0.5 * lp_lat);
-                        lp_lat -= V = (lp_lat - tan(lp_lat/2) - p)/(1. - 0.5/(c*c));
-                        if (fabs(V) < EPS)
-                            break;
-                    }
-                    if (!i) {
-                        lp_lat = p < 0. ? -HALFPI : HALFPI;
-                        lp_lon = 2. * xy_x;
-                    } else
-                        lp_lon = 2. * xy_x / (1. + cos(lp_lat));
-                }
-            };
-
-            // Nell-Hammer
-            template <typename Parameters>
-            void setup_nell_h(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::nell_h
-    #endif // doxygen 
-
-    /*!
-        \brief Nell-Hammer projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_nell_h.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct nell_h_spheroid : public detail::nell_h::base_nell_h_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline nell_h_spheroid(const Parameters& par) : detail::nell_h::base_nell_h_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::nell_h::setup_nell_h(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class nell_h_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<nell_h_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void nell_h_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("nell_h", new nell_h_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_NELL_H_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/nocol.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/nocol.hpp
deleted file mode 100644
index 682093d..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/nocol.hpp
+++ /dev/null
@@ -1,160 +0,0 @@
-#ifndef GGL_PROJECTIONS_NOCOL_HPP
-#define GGL_PROJECTIONS_NOCOL_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace nocol{ 
-            static const double EPS = 1e-10;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_nocol_spheroid : public base_t_f<base_nocol_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_nocol_spheroid(const Parameters& par)
-                    : base_t_f<base_nocol_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    if (fabs(lp_lon) < EPS) {
-                        xy_x = 0;
-                        xy_y = lp_lat;
-                    } else if (fabs(lp_lat) < EPS) {
-                        xy_x = lp_lon;
-                        xy_y = 0.;
-                    } else if (fabs(fabs(lp_lon) - HALFPI) < EPS) {
-                        xy_x = lp_lon * cos(lp_lat);
-                        xy_y = HALFPI * sin(lp_lat);
-                    } else if (fabs(fabs(lp_lat) - HALFPI) < EPS) {
-                        xy_x = 0;
-                        xy_y = lp_lat;
-                    } else {
-                        double tb, c, d, m, n, r2, sp;
-                
-                        tb = HALFPI / lp_lon - lp_lon / HALFPI;
-                        c = lp_lat / HALFPI;
-                        d = (1 - c * c)/((sp = sin(lp_lat)) - c);
-                        r2 = tb / d;
-                        r2 *= r2;
-                        m = (tb * sp / d - 0.5 * tb)/(1. + r2);
-                        n = (sp / r2 + 0.5 * d)/(1. + 1./r2);
-                        xy_x = cos(lp_lat);
-                        xy_x = sqrt(m * m + xy_x * xy_x / (1. + r2));
-                        xy_x = HALFPI * ( m + (lp_lon < 0. ? -xy_x : xy_x));
-                        xy_y = sqrt(n * n - (sp * sp / r2 + d * sp - 1.) /
-                            (1. + 1./r2));
-                        xy_y = HALFPI * ( n + (lp_lat < 0. ? xy_y : -xy_y ));
-                    }
-                }
-            };
-
-            // Nicolosi Globular
-            template <typename Parameters>
-            void setup_nicol(Parameters& par)
-            {
-                par.es = 0.;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::nocol
-    #endif // doxygen 
-
-    /*!
-        \brief Nicolosi Globular projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-        \par Example
-        \image html ex_nicol.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct nicol_spheroid : public detail::nocol::base_nocol_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline nicol_spheroid(const Parameters& par) : detail::nocol::base_nocol_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::nocol::setup_nicol(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class nicol_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<nicol_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void nocol_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("nicol", new nicol_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_NOCOL_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/nsper.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/nsper.hpp
deleted file mode 100644
index f064f3d..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/nsper.hpp
+++ /dev/null
@@ -1,317 +0,0 @@
-#ifndef GGL_PROJECTIONS_NSPER_HPP
-#define GGL_PROJECTIONS_NSPER_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace nsper{ 
-            static const double EPS10 = 1.e-10;
-            static const int N_POLE = 0;
-            static const int S_POLE = 1;
-            static const int EQUIT = 2;
-            static const int OBLIQ = 3;
-
-            struct par_nsper
-            {
-                double    height;
-                double    sinph0;
-                double    cosph0;
-                double    p;
-                double    rp;
-                double    pn1;
-                double    pfact;
-                double    h;
-                double    cg;
-                double    sg;
-                double    sw;
-                double    cw;
-                int        mode;
-                int        tilt;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_nsper_spheroid : public base_t_fi<base_nsper_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_nsper m_proj_parm;
-
-                inline base_nsper_spheroid(const Parameters& par)
-                    : base_t_fi<base_nsper_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double  coslam, cosphi, sinphi;
-                
-                    sinphi = sin(lp_lat);
-                    cosphi = cos(lp_lat);
-                    coslam = cos(lp_lon);
-                    switch (this->m_proj_parm.mode) {
-                    case OBLIQ:
-                        xy_y = this->m_proj_parm.sinph0 * sinphi + this->m_proj_parm.cosph0 * cosphi * coslam;
-                        break;
-                    case EQUIT:
-                        xy_y = cosphi * coslam;
-                        break;
-                    case S_POLE:
-                        xy_y = - sinphi;
-                        break;
-                    case N_POLE:
-                        xy_y = sinphi;
-                        break;
-                    }
-                    if (xy_y < this->m_proj_parm.rp) throw proj_exception();;
-                    xy_y = this->m_proj_parm.pn1 / (this->m_proj_parm.p - xy_y);
-                    xy_x = xy_y * cosphi * sin(lp_lon);
-                    switch (this->m_proj_parm.mode) {
-                    case OBLIQ:
-                        xy_y *= (this->m_proj_parm.cosph0 * sinphi -
-                           this->m_proj_parm.sinph0 * cosphi * coslam);
-                        break;
-                    case EQUIT:
-                        xy_y *= sinphi;
-                        break;
-                    case N_POLE:
-                        coslam = - coslam;
-                    case S_POLE:
-                        xy_y *= cosphi * coslam;
-                        break;
-                    }
-                    if (this->m_proj_parm.tilt) {
-                        double yt, ba;
-                
-                        yt = xy_y * this->m_proj_parm.cg + xy_x * this->m_proj_parm.sg;
-                        ba = 1. / (yt * this->m_proj_parm.sw * this->m_proj_parm.h + this->m_proj_parm.cw);
-                        xy_x = (xy_x * this->m_proj_parm.cg - xy_y * this->m_proj_parm.sg) * this->m_proj_parm.cw * ba;
-                        xy_y = yt * ba;
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double  rh, cosz, sinz;
-                
-                    if (this->m_proj_parm.tilt) {
-                        double bm, bq, yt;
-                
-                        yt = 1./(this->m_proj_parm.pn1 - xy_y * this->m_proj_parm.sw);
-                        bm = this->m_proj_parm.pn1 * xy_x * yt;
-                        bq = this->m_proj_parm.pn1 * xy_y * this->m_proj_parm.cw * yt;
-                        xy_x = bm * this->m_proj_parm.cg + bq * this->m_proj_parm.sg;
-                        xy_y = bq * this->m_proj_parm.cg - bm * this->m_proj_parm.sg;
-                    }
-                    rh = boost::math::hypot(xy_x, xy_y);
-                    if ((sinz = 1. - rh * rh * this->m_proj_parm.pfact) < 0.) throw proj_exception();;
-                    sinz = (this->m_proj_parm.p - sqrt(sinz)) / (this->m_proj_parm.pn1 / rh + rh / this->m_proj_parm.pn1);
-                    cosz = sqrt(1. - sinz * sinz);
-                    if (fabs(rh) <= EPS10) {
-                        lp_lon = 0.;
-                        lp_lat = this->m_par.phi0;
-                    } else {
-                        switch (this->m_proj_parm.mode) {
-                        case OBLIQ:
-                            lp_lat = asin(cosz * this->m_proj_parm.sinph0 + xy_y * sinz * this->m_proj_parm.cosph0 / rh);
-                            xy_y = (cosz - this->m_proj_parm.sinph0 * sin(lp_lat)) * rh;
-                            xy_x *= sinz * this->m_proj_parm.cosph0;
-                            break;
-                        case EQUIT:
-                            lp_lat = asin(xy_y * sinz / rh);
-                            xy_y = cosz * rh;
-                            xy_x *= sinz;
-                            break;
-                        case N_POLE:
-                            lp_lat = asin(cosz);
-                            xy_y = -xy_y;
-                            break;
-                        case S_POLE:
-                            lp_lat = - asin(cosz);
-                            break;
-                        }
-                        lp_lon = atan2(xy_x, xy_y);
-                    }
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_nsper& proj_parm) 
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                if ((proj_parm.height = pj_param(par.params, "dh").f) <= 0.) throw proj_exception(-30);
-                if (fabs(fabs(par.phi0) - HALFPI) < EPS10)
-                    proj_parm.mode = par.phi0 < 0. ? S_POLE : N_POLE;
-                else if (fabs(par.phi0) < EPS10)
-                    proj_parm.mode = EQUIT;
-                else {
-                    proj_parm.mode = OBLIQ;
-                    proj_parm.sinph0 = sin(par.phi0);
-                    proj_parm.cosph0 = cos(par.phi0);
-                }
-                proj_parm.pn1 = proj_parm.height / par.a;
-             /* normalize by radius */
-                proj_parm.p = 1. + proj_parm.pn1;
-                proj_parm.rp = 1. / proj_parm.p;
-                proj_parm.h = 1. / proj_parm.pn1;
-                proj_parm.pfact = (proj_parm.p + 1.) * proj_parm.h;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                par.es = 0.;
-            }
-
-
-            // Near-sided perspective
-            template <typename Parameters>
-            void setup_nsper(Parameters& par, par_nsper& proj_parm)
-            {
-                proj_parm.tilt = 0;
-                setup(par, proj_parm);
-            }
-
-            // Tilted perspective
-            template <typename Parameters>
-            void setup_tpers(Parameters& par, par_nsper& proj_parm)
-            {
-                double omega, gamma;
-                omega = pj_param(par.params, "dtilt").f * DEG_TO_RAD;
-                gamma = pj_param(par.params, "dazi").f * DEG_TO_RAD;
-                proj_parm.tilt = 1;
-                proj_parm.cg = cos(gamma);
-             proj_parm.sg = sin(gamma);
-                proj_parm.cw = cos(omega);
-             proj_parm.sw = sin(omega);
-                setup(par, proj_parm);
-            }
-
-        }} // namespace detail::nsper
-    #endif // doxygen 
-
-    /*!
-        \brief Near-sided perspective projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-         - h=
-        \par Example
-        \image html ex_nsper.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct nsper_spheroid : public detail::nsper::base_nsper_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline nsper_spheroid(const Parameters& par) : detail::nsper::base_nsper_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::nsper::setup_nsper(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Tilted perspective projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-         - tilt= azi= h=
-        \par Example
-        \image html ex_tpers.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct tpers_spheroid : public detail::nsper::base_nsper_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline tpers_spheroid(const Parameters& par) : detail::nsper::base_nsper_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::nsper::setup_tpers(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class nsper_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<nsper_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class tpers_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<tpers_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void nsper_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("nsper", new nsper_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("tpers", new tpers_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_NSPER_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/nzmg.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/nzmg.hpp
deleted file mode 100644
index 3de3508..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/nzmg.hpp
+++ /dev/null
@@ -1,196 +0,0 @@
-#ifndef GGL_PROJECTIONS_NZMG_HPP
-#define GGL_PROJECTIONS_NZMG_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace nzmg{ 
-            static const double EPSLN = 1e-10;
-            static const double SEC5_TO_RAD = 0.4848136811095359935899141023;
-            static const double RAD_TO_SEC5 = 2.062648062470963551564733573;
-            static const int Nbf = 5;
-            static const int Ntpsi = 9;
-            static const int Ntphi = 8;
-
-            
-            
-            
-            
-                static COMPLEX
-            bf[] = {
-                {.7557853228,    0.0},
-                {.249204646,    .003371507},
-                {-.001541739,    .041058560},
-                {-.10162907,    .01727609},
-                {-.26623489,    -.36249218},
-                {-.6870983,    -1.1651967} };
-                static double
-            tphi[] = { 1.5627014243, .5185406398, -.03333098, -.1052906, -.0368594,
-                .007317, .01220, .00394, -.0013 },
-            tpsi[] = { .6399175073, -.1358797613, .063294409, -.02526853, .0117879,
-                -.0055161, .0026906, -.001333, .00067, -.00034 };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_nzmg_ellipsoid : public base_t_fi<base_nzmg_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_nzmg_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_nzmg_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    COMPLEX p;
-                    double *C;
-                    int i;
-                
-                    lp_lat = (lp_lat - this->m_par.phi0) * RAD_TO_SEC5;
-                    for (p.r = *(C = tpsi + (i = Ntpsi)); i ; --i)
-                        p.r = *--C + lp_lat * p.r;
-                    p.r *= lp_lat;
-                    p.i = lp_lon;
-                    p = pj_zpoly1(p, bf, Nbf);
-                    xy_x = p.i;
-                    xy_y = p.r;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    int nn, i;
-                    COMPLEX p, f, fp, dp;
-                    double den, *C;
-                
-                    p.r = xy_y;
-                    p.i = xy_x;
-                    for (nn = 20; nn ;--nn) {
-                        f = pj_zpolyd1(p, bf, Nbf, &fp);
-                        f.r -= xy_y;
-                        f.i -= xy_x;
-                        den = fp.r * fp.r + fp.i * fp.i;
-                        p.r += dp.r = -(f.r * fp.r + f.i * fp.i) / den;
-                        p.i += dp.i = -(f.i * fp.r - f.r * fp.i) / den;
-                        if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN)
-                            break;
-                    }
-                    if (nn) {
-                        lp_lon = p.i;
-                        for (lp_lat = *(C = tphi + (i = Ntphi)); i ; --i)
-                            lp_lat = *--C + p.r * lp_lat;
-                        lp_lat = this->m_par.phi0 + p.r * lp_lat * SEC5_TO_RAD;
-                    } else
-                        lp_lon = lp_lat = HUGE_VAL;
-                }
-            };
-
-            // New Zealand Map Grid
-            template <typename Parameters>
-            void setup_nzmg(Parameters& par)
-            {
-                /* force to International major axis */
-                par.ra = 1. / (par.a = 6378388.0);
-                par.lam0 = DEG_TO_RAD * 173.;
-                par.phi0 = DEG_TO_RAD * -41.;
-                par.x0 = 2510000.;
-                par.y0 = 6023150.;
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-            }
-
-        }} // namespace detail::nzmg
-    #endif // doxygen 
-
-    /*!
-        \brief New Zealand Map Grid projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - fixed Earth
-        \par Example
-        \image html ex_nzmg.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct nzmg_ellipsoid : public detail::nzmg::base_nzmg_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline nzmg_ellipsoid(const Parameters& par) : detail::nzmg::base_nzmg_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::nzmg::setup_nzmg(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class nzmg_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<nzmg_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void nzmg_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("nzmg", new nzmg_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_NZMG_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/ob_tran.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/ob_tran.hpp
deleted file mode 100644
index d3383c8..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/ob_tran.hpp
+++ /dev/null
@@ -1,318 +0,0 @@
-#ifndef GGL_PROJECTIONS_OB_TRAN_HPP
-#define GGL_PROJECTIONS_OB_TRAN_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/shared_ptr.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-
-    template <typename Geographic, typename Cartesian, typename Parameters> class factory;
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace ob_tran{ 
-            static const double TOL = 1e-10;
-
-            template <typename Geographic, typename Cartesian>
-            struct par_ob_tran
-            {
-                boost::shared_ptr<projection<Geographic, Cartesian> > link;
-                double    lamp;
-                double    cphip, sphip;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_ob_tran_oblique : public base_t_fi<base_ob_tran_oblique<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_ob_tran<Geographic, Cartesian> m_proj_parm;
-
-                inline base_ob_tran_oblique(const Parameters& par)
-                    : base_t_fi<base_ob_tran_oblique<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double coslam, sinphi, cosphi;
-                
-                
-                
-                    coslam = cos(lp_lon);
-                    sinphi = sin(lp_lat);
-                    cosphi = cos(lp_lat);
-                    lp_lon = adjlon(aatan2(cosphi * sin(lp_lon), this->m_proj_parm.sphip * cosphi * coslam +
-                        this->m_proj_parm.cphip * sinphi) + this->m_proj_parm.lamp);
-                    lp_lat = aasin(this->m_proj_parm.sphip * sinphi - this->m_proj_parm.cphip * cosphi * coslam);
-                    m_proj_parm.link->fwd(lp_lon, lp_lat, xy_x, xy_y);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double coslam, sinphi, cosphi;
-                
-                    m_proj_parm.link->inv(xy_x, xy_y, lp_lon, lp_lat);
-                    if (lp_lon != HUGE_VAL) {
-                        coslam = cos(lp_lon -= this->m_proj_parm.lamp);
-                        sinphi = sin(lp_lat);
-                        cosphi = cos(lp_lat);
-                        lp_lat = aasin(this->m_proj_parm.sphip * sinphi + this->m_proj_parm.cphip * cosphi * coslam);
-                        lp_lon = aatan2(cosphi * sin(lp_lon), this->m_proj_parm.sphip * cosphi * coslam -
-                            this->m_proj_parm.cphip * sinphi);
-                    }
-                }
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_ob_tran_transverse : public base_t_fi<base_ob_tran_transverse<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_ob_tran<Geographic, Cartesian> m_proj_parm;
-
-                inline base_ob_tran_transverse(const Parameters& par)
-                    : base_t_fi<base_ob_tran_transverse<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double cosphi, coslam;
-                
-                
-                
-                    cosphi = cos(lp_lat);
-                    coslam = cos(lp_lon);
-                    lp_lon = adjlon(aatan2(cosphi * sin(lp_lon), sin(lp_lat)) + this->m_proj_parm.lamp);
-                    lp_lat = aasin(- cosphi * coslam);
-                    m_proj_parm.link->fwd(lp_lon, lp_lat, xy_x, xy_y);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double cosphi, t;
-                
-                    m_proj_parm.link->inv(xy_x, xy_y, lp_lon, lp_lat);
-                    if (lp_lon != HUGE_VAL) {
-                        cosphi = cos(lp_lat);
-                        t = lp_lon - this->m_proj_parm.lamp;
-                        lp_lon = aatan2(cosphi * sin(t), - sin(lp_lat));
-                        lp_lat = aasin(cosphi * cos(t));
-                    }
-                }
-            };
-
-            // General Oblique Transformation
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            double setup_ob_tran(Parameters& par, par_ob_tran<Geographic, Cartesian>& proj_parm, bool create = true)
-            {
-                int i;
-                double phip;
-            
-            
-                Parameters pj;
-                /* copy existing header into new */
-                par.es = 0.;
-             /* force to spherical */
-                pj.params = par.params;
-                pj.over = par.over;
-                pj.geoc = par.geoc;
-                pj.a = par.a;
-                pj.es = par.es;
-                pj.ra = par.ra;
-                pj.lam0 = par.lam0;
-                pj.phi0 = par.phi0;
-                pj.x0 = par.x0;
-                pj.y0 = par.y0;
-                pj.k0 = par.k0;
-                /* force spherical earth */
-                pj.one_es = pj.rone_es = 1.;
-                pj.es = pj.e = 0.;
-                pj.name = pj_param(par.params, "so_proj").s;
-            
-                factory<Geographic, Cartesian, Parameters> fac;
-                if (create)
-                {
-                    proj_parm.link.reset(fac.create_new(pj));
-                    if (! proj_parm.link.get()) throw proj_exception(-26);
-                }
-                if (pj_param(par.params, "to_alpha").i) {
-                    double lamc, phic, alpha;
-                    lamc    = pj_param(par.params, "ro_lon_c").f;
-                    phic    = pj_param(par.params, "ro_lat_c").f;
-                    alpha    = pj_param(par.params, "ro_alpha").f;
-            /*
-                    if (fabs(phic) <= TOL ||
-                        fabs(fabs(phic) - HALFPI) <= TOL ||
-                        fabs(fabs(alpha) - HALFPI) <= TOL)
-            */
-                    if (fabs(fabs(phic) - HALFPI) <= TOL)
-                        throw proj_exception(-32);
-                    proj_parm.lamp = lamc + aatan2(-cos(alpha), -sin(alpha) * sin(phic));
-                    phip = aasin(cos(phic) * sin(alpha));
-                } else if (pj_param(par.params, "to_lat_p").i) { /* specified new pole */
-                    proj_parm.lamp = pj_param(par.params, "ro_lon_p").f;
-                    phip = pj_param(par.params, "ro_lat_p").f;
-                } else { /* specified new "equator" points */
-                    double lam1, lam2, phi1, phi2, con;
-                    lam1 = pj_param(par.params, "ro_lon_1").f;
-                    phi1 = pj_param(par.params, "ro_lat_1").f;
-                    lam2 = pj_param(par.params, "ro_lon_2").f;
-                    phi2 = pj_param(par.params, "ro_lat_2").f;
-                    if (fabs(phi1 - phi2) <= TOL ||
-                        (con = fabs(phi1)) <= TOL ||
-                        fabs(con - HALFPI) <= TOL ||
-                        fabs(fabs(phi2) - HALFPI) <= TOL) throw proj_exception(-33);
-                    proj_parm.lamp = atan2(cos(phi1) * sin(phi2) * cos(lam1) -
-                        sin(phi1) * cos(phi2) * cos(lam2),
-                        sin(phi1) * cos(phi2) * sin(lam2) -
-                        cos(phi1) * sin(phi2) * sin(lam1));
-                    phip = atan(-cos(proj_parm.lamp - lam1) / tan(phi1));
-                }
-                if (fabs(phip) > TOL) { /* oblique */
-                    proj_parm.cphip = cos(phip);
-                    proj_parm.sphip = sin(phip);
-                // par.fwd = o_forward;
-                // par.inv = pj.inv ? o_inverse : 0;
-                } else { /* transverse */
-                // par.fwd = t_forward;
-                // par.inv = pj.inv ? t_inverse : 0;
-                }
-                boost::ignore_unused_variable_warning(i);
-                // return phip to choose model
-                return phip;
-            }
-
-        }} // namespace detail::ob_tran
-    #endif // doxygen 
-
-    /*!
-        \brief General Oblique Transformation projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - o_proj= plus parameters for projection
-         - o_lat_p= o_lon_p= (new pole) or
-         - o_alpha= o_lon_c= o_lat_c= or
-         - o_lon_1= o_lat_1= o_lon_2= o_lat_2=
-        \par Example
-        \image html ex_ob_tran.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct ob_tran_oblique : public detail::ob_tran::base_ob_tran_oblique<Geographic, Cartesian, Parameters>
-    {
-        inline ob_tran_oblique(const Parameters& par) : detail::ob_tran::base_ob_tran_oblique<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::ob_tran::setup_ob_tran(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief General Oblique Transformation projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - o_proj= plus parameters for projection
-         - o_lat_p= o_lon_p= (new pole) or
-         - o_alpha= o_lon_c= o_lat_c= or
-         - o_lon_1= o_lat_1= o_lon_2= o_lat_2=
-        \par Example
-        \image html ex_ob_tran.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct ob_tran_transverse : public detail::ob_tran::base_ob_tran_transverse<Geographic, Cartesian, Parameters>
-    {
-        inline ob_tran_transverse(const Parameters& par) : detail::ob_tran::base_ob_tran_transverse<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::ob_tran::setup_ob_tran(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class ob_tran_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    detail::ob_tran::par_ob_tran<Geographic, Cartesian> proj_parm;
-                    Parameters p = par;
-                    double phip = setup_ob_tran(p, proj_parm, false);
-                    if (fabs(phip) > detail::ob_tran::TOL)
-                        return new base_v_fi<ob_tran_oblique<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                    else
-                        return new base_v_fi<ob_tran_transverse<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void ob_tran_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("ob_tran", new ob_tran_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_OB_TRAN_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/ocea.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/ocea.hpp
deleted file mode 100644
index b3176f8..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/ocea.hpp
+++ /dev/null
@@ -1,189 +0,0 @@
-#ifndef GGL_PROJECTIONS_OCEA_HPP
-#define GGL_PROJECTIONS_OCEA_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace ocea{ 
-
-            struct par_ocea
-            {
-                double    rok;
-                double    rtk;
-                double    sinphi;
-                double    cosphi;
-                double    singam;
-                double    cosgam;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_ocea_spheroid : public base_t_fi<base_ocea_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_ocea m_proj_parm;
-
-                inline base_ocea_spheroid(const Parameters& par)
-                    : base_t_fi<base_ocea_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double t;
-                
-                    xy_y = sin(lp_lon);
-                /*
-                    xy_x = atan2((tan(lp_lat) * this->m_proj_parm.cosphi + this->m_proj_parm.sinphi * xy_y) , cos(lp_lon));
-                */
-                    t = cos(lp_lon);
-                    xy_x = atan((tan(lp_lat) * this->m_proj_parm.cosphi + this->m_proj_parm.sinphi * xy_y) / t);
-                    if (t < 0.)
-                        xy_x += PI;
-                    xy_x *= this->m_proj_parm.rtk;
-                    xy_y = this->m_proj_parm.rok * (this->m_proj_parm.sinphi * sin(lp_lat) - this->m_proj_parm.cosphi * cos(lp_lat) * xy_y);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double t, s;
-                
-                    xy_y /= this->m_proj_parm.rok;
-                    xy_x /= this->m_proj_parm.rtk;
-                    t = sqrt(1. - xy_y * xy_y);
-                    lp_lat = asin(xy_y * this->m_proj_parm.sinphi + t * this->m_proj_parm.cosphi * (s = sin(xy_x)));
-                    lp_lon = atan2(t * this->m_proj_parm.sinphi * s - xy_y * this->m_proj_parm.cosphi,
-                        t * cos(xy_x));
-                }
-            };
-
-            // Oblique Cylindrical Equal Area
-            template <typename Parameters>
-            void setup_ocea(Parameters& par, par_ocea& proj_parm)
-            {
-                double phi_0=0.0, phi_1, phi_2, lam_1, lam_2, lonz, alpha;
-                proj_parm.rok = par.a / par.k0;
-                proj_parm.rtk = par.a * par.k0;
-                if ( pj_param(par.params, "talpha").i) {
-                    alpha    = pj_param(par.params, "ralpha").f;
-                    lonz = pj_param(par.params, "rlonc").f;
-                    proj_parm.singam = atan(-cos(alpha)/(-sin(phi_0) * sin(alpha))) + lonz;
-                    proj_parm.sinphi = asin(cos(phi_0) * sin(alpha));
-                } else {
-                    phi_1 = pj_param(par.params, "rlat_1").f;
-                    phi_2 = pj_param(par.params, "rlat_2").f;
-                    lam_1 = pj_param(par.params, "rlon_1").f;
-                    lam_2 = pj_param(par.params, "rlon_2").f;
-                    proj_parm.singam = atan2(cos(phi_1) * sin(phi_2) * cos(lam_1) -
-                        sin(phi_1) * cos(phi_2) * cos(lam_2),
-                        sin(phi_1) * cos(phi_2) * sin(lam_2) -
-                        cos(phi_1) * sin(phi_2) * sin(lam_1) );
-                    proj_parm.sinphi = atan(-cos(proj_parm.singam - lam_1) / tan(phi_1));
-                }
-                par.lam0 = proj_parm.singam + HALFPI;
-                proj_parm.cosphi = cos(proj_parm.sinphi);
-                proj_parm.sinphi = sin(proj_parm.sinphi);
-                proj_parm.cosgam = cos(proj_parm.singam);
-                proj_parm.singam = sin(proj_parm.singam);
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                par.es = 0.;
-            }
-
-        }} // namespace detail::ocea
-    #endif // doxygen 
-
-    /*!
-        \brief Oblique Cylindrical Equal Area projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Sph lonc= alpha= or
-         - lat_1= lat_2= lon_1= lon_2=
-        \par Example
-        \image html ex_ocea.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct ocea_spheroid : public detail::ocea::base_ocea_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline ocea_spheroid(const Parameters& par) : detail::ocea::base_ocea_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::ocea::setup_ocea(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class ocea_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<ocea_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void ocea_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("ocea", new ocea_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_OCEA_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/oea.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/oea.hpp
deleted file mode 100644
index ff4ce22..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/oea.hpp
+++ /dev/null
@@ -1,181 +0,0 @@
-#ifndef GGL_PROJECTIONS_OEA_HPP
-#define GGL_PROJECTIONS_OEA_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace oea{ 
-
-            struct par_oea
-            {
-                double    theta;
-                double    m, n;
-                double    two_r_m, two_r_n, rm, rn, hm, hn;
-                double    cp0, sp0;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_oea_spheroid : public base_t_fi<base_oea_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_oea m_proj_parm;
-
-                inline base_oea_spheroid(const Parameters& par)
-                    : base_t_fi<base_oea_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double Az, M, N, cp, sp, cl, shz;
-                
-                    cp = cos(lp_lat);
-                    sp = sin(lp_lat);
-                    cl = cos(lp_lon);
-                    Az = aatan2(cp * sin(lp_lon), this->m_proj_parm.cp0 * sp - this->m_proj_parm.sp0 * cp * cl) + this->m_proj_parm.theta;
-                    shz = sin(0.5 * aacos(this->m_proj_parm.sp0 * sp + this->m_proj_parm.cp0 * cp * cl));
-                    M = aasin(shz * sin(Az));
-                    N = aasin(shz * cos(Az) * cos(M) / cos(M * this->m_proj_parm.two_r_m));
-                    xy_y = this->m_proj_parm.n * sin(N * this->m_proj_parm.two_r_n);
-                    xy_x = this->m_proj_parm.m * sin(M * this->m_proj_parm.two_r_m) * cos(N) / cos(N * this->m_proj_parm.two_r_n);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double N, M, xp, yp, z, Az, cz, sz, cAz;
-                
-                    N = this->m_proj_parm.hn * aasin(xy_y * this->m_proj_parm.rn);
-                    M = this->m_proj_parm.hm * aasin(xy_x * this->m_proj_parm.rm * cos(N * this->m_proj_parm.two_r_n) / cos(N));
-                    xp = 2. * sin(M);
-                    yp = 2. * sin(N) * cos(M * this->m_proj_parm.two_r_m) / cos(M);
-                    cAz = cos(Az = aatan2(xp, yp) - this->m_proj_parm.theta);
-                    z = 2. * aasin(0.5 * boost::math::hypot(xp, yp));
-                    sz = sin(z);
-                    cz = cos(z);
-                    lp_lat = aasin(this->m_proj_parm.sp0 * cz + this->m_proj_parm.cp0 * sz * cAz);
-                    lp_lon = aatan2(sz * sin(Az),
-                        this->m_proj_parm.cp0 * cz - this->m_proj_parm.sp0 * sz * cAz);
-                }
-            };
-
-            // Oblated Equal Area
-            template <typename Parameters>
-            void setup_oea(Parameters& par, par_oea& proj_parm)
-            {
-                if (((proj_parm.n = pj_param(par.params, "dn").f) <= 0.) ||
-                    ((proj_parm.m = pj_param(par.params, "dm").f) <= 0.))
-                    throw proj_exception(-39);
-                else {
-                    proj_parm.theta = pj_param(par.params, "rtheta").f;
-                    proj_parm.sp0 = sin(par.phi0);
-                    proj_parm.cp0 = cos(par.phi0);
-                    proj_parm.rn = 1./ proj_parm.n;
-                    proj_parm.rm = 1./ proj_parm.m;
-                    proj_parm.two_r_n = 2. * proj_parm.rn;
-                    proj_parm.two_r_m = 2. * proj_parm.rm;
-                    proj_parm.hm = 0.5 * proj_parm.m;
-                    proj_parm.hn = 0.5 * proj_parm.n;
-                // par.fwd = s_forward;
-                // par.inv = s_inverse;
-                    par.es = 0.;
-                }
-            }
-
-        }} // namespace detail::oea
-    #endif // doxygen 
-
-    /*!
-        \brief Oblated Equal Area projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - n= m= theta=
-        \par Example
-        \image html ex_oea.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct oea_spheroid : public detail::oea::base_oea_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline oea_spheroid(const Parameters& par) : detail::oea::base_oea_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::oea::setup_oea(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class oea_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<oea_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void oea_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("oea", new oea_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_OEA_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/omerc.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/omerc.hpp
deleted file mode 100644
index fba7f89..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/omerc.hpp
+++ /dev/null
@@ -1,294 +0,0 @@
-#ifndef GGL_PROJECTIONS_OMERC_HPP
-#define GGL_PROJECTIONS_OMERC_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_tsfn.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_phi2.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace omerc{ 
-            static const double TOL = 1.e-7;
-            static const double EPS = 1.e-10;
-
-                inline double TSFN0(double x) 
-                    {return tan(.5 * (HALFPI - (x))); }
-
-
-            struct par_omerc
-            {
-                double    alpha, lamc, lam1, phi1, lam2, phi2, Gamma, al, bl, el,
-                singam, cosgam, sinrot, cosrot, u_0;
-                int        ellips, rot;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_omerc_ellipsoid : public base_t_fi<base_omerc_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_omerc m_proj_parm;
-
-                inline base_omerc_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_omerc_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double  con, q, s, ul, us, vl, vs;
-                
-                    vl = sin(this->m_proj_parm.bl * lp_lon);
-                    if (fabs(fabs(lp_lat) - HALFPI) <= EPS) {
-                        ul = lp_lat < 0. ? -this->m_proj_parm.singam : this->m_proj_parm.singam;
-                        us = this->m_proj_parm.al * lp_lat / this->m_proj_parm.bl;
-                    } else {
-                        q = this->m_proj_parm.el / (this->m_proj_parm.ellips ? pow(pj_tsfn(lp_lat, sin(lp_lat), this->m_par.e), this->m_proj_parm.bl)
-                            : TSFN0(lp_lat));
-                        s = .5 * (q - 1. / q);
-                        ul = 2. * (s * this->m_proj_parm.singam - vl * this->m_proj_parm.cosgam) / (q + 1. / q);
-                        con = cos(this->m_proj_parm.bl * lp_lon);
-                        if (fabs(con) >= TOL) {
-                            us = this->m_proj_parm.al * atan((s * this->m_proj_parm.cosgam + vl * this->m_proj_parm.singam) / con) / this->m_proj_parm.bl;
-                            if (con < 0.)
-                                us += PI * this->m_proj_parm.al / this->m_proj_parm.bl;
-                        } else
-                            us = this->m_proj_parm.al * this->m_proj_parm.bl * lp_lon;
-                    }
-                    if (fabs(fabs(ul) - 1.) <= EPS) throw proj_exception();;
-                    vs = .5 * this->m_proj_parm.al * log((1. - ul) / (1. + ul)) / this->m_proj_parm.bl;
-                    us -= this->m_proj_parm.u_0;
-                    if (! this->m_proj_parm.rot) {
-                        xy_x = us;
-                        xy_y = vs;
-                    } else {
-                        xy_x = vs * this->m_proj_parm.cosrot + us * this->m_proj_parm.sinrot;
-                        xy_y = us * this->m_proj_parm.cosrot - vs * this->m_proj_parm.sinrot;
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double  q, s, ul, us, vl, vs;
-                
-                    if (! this->m_proj_parm.rot) {
-                        us = xy_x;
-                        vs = xy_y;
-                    } else {
-                        vs = xy_x * this->m_proj_parm.cosrot - xy_y * this->m_proj_parm.sinrot;
-                        us = xy_y * this->m_proj_parm.cosrot + xy_x * this->m_proj_parm.sinrot;
-                    }
-                    us += this->m_proj_parm.u_0;
-                    q = exp(- this->m_proj_parm.bl * vs / this->m_proj_parm.al);
-                    s = .5 * (q - 1. / q);
-                    vl = sin(this->m_proj_parm.bl * us / this->m_proj_parm.al);
-                    ul = 2. * (vl * this->m_proj_parm.cosgam + s * this->m_proj_parm.singam) / (q + 1. / q);
-                    if (fabs(fabs(ul) - 1.) < EPS) {
-                        lp_lon = 0.;
-                        lp_lat = ul < 0. ? -HALFPI : HALFPI;
-                    } else {
-                        lp_lat = this->m_proj_parm.el / sqrt((1. + ul) / (1. - ul));
-                        if (this->m_proj_parm.ellips) {
-                            if ((lp_lat = pj_phi2(pow(lp_lat, 1. / this->m_proj_parm.bl), this->m_par.e)) == HUGE_VAL)
-                                throw proj_exception();;
-                        } else
-                            lp_lat = HALFPI - 2. * atan(lp_lat);
-                        lp_lon = - atan2((s * this->m_proj_parm.cosgam -
-                            vl * this->m_proj_parm.singam), cos(this->m_proj_parm.bl * us / this->m_proj_parm.al)) / this->m_proj_parm.bl;
-                    }
-                }
-            };
-
-            // Oblique Mercator
-            template <typename Parameters>
-            void setup_omerc(Parameters& par, par_omerc& proj_parm)
-            {
-                double con, com, cosph0, d, f, h, l, sinph0, p, j;
-                int azi;
-                proj_parm.rot    = pj_param(par.params, "bno_rot").i == 0;
-                if( (azi    = pj_param(par.params, "talpha").i) != 0.0) {
-                    proj_parm.lamc    = pj_param(par.params, "rlonc").f;
-                    proj_parm.alpha    = pj_param(par.params, "ralpha").f;
-                    if ( fabs(proj_parm.alpha) <= TOL ||
-                        fabs(fabs(par.phi0) - HALFPI) <= TOL ||
-                        fabs(fabs(proj_parm.alpha) - HALFPI) <= TOL)
-                        throw proj_exception(-32);
-                } else {
-                    proj_parm.lam1    = pj_param(par.params, "rlon_1").f;
-                    proj_parm.phi1    = pj_param(par.params, "rlat_1").f;
-                    proj_parm.lam2    = pj_param(par.params, "rlon_2").f;
-                    proj_parm.phi2    = pj_param(par.params, "rlat_2").f;
-                    if (fabs(proj_parm.phi1 - proj_parm.phi2) <= TOL ||
-                        (con = fabs(proj_parm.phi1)) <= TOL ||
-                        fabs(con - HALFPI) <= TOL ||
-                        fabs(fabs(par.phi0) - HALFPI) <= TOL ||
-                        fabs(fabs(proj_parm.phi2) - HALFPI) <= TOL) throw proj_exception(-33);
-                }
-                com = (proj_parm.ellips = par.es > 0.) ? sqrt(par.one_es) : 1.;
-                if (fabs(par.phi0) > EPS) {
-                    sinph0 = sin(par.phi0);
-                    cosph0 = cos(par.phi0);
-                    if (proj_parm.ellips) {
-                        con = 1. - par.es * sinph0 * sinph0;
-                        proj_parm.bl = cosph0 * cosph0;
-                        proj_parm.bl = sqrt(1. + par.es * proj_parm.bl * proj_parm.bl / par.one_es);
-                        proj_parm.al = proj_parm.bl * par.k0 * com / con;
-                        d = proj_parm.bl * com / (cosph0 * sqrt(con));
-                    } else {
-                        proj_parm.bl = 1.;
-                        proj_parm.al = par.k0;
-                        d = 1. / cosph0;
-                    }
-                    if ((f = d * d - 1.) <= 0.)
-                        f = 0.;
-                    else {
-                        f = sqrt(f);
-                        if (par.phi0 < 0.)
-                            f = -f;
-                    }
-                    proj_parm.el = f += d;
-                    if (proj_parm.ellips)    proj_parm.el *= pow(pj_tsfn(par.phi0, sinph0, par.e), proj_parm.bl);
-                    else        proj_parm.el *= TSFN0(par.phi0);
-                } else {
-                    proj_parm.bl = 1. / com;
-                    proj_parm.al = par.k0;
-                    proj_parm.el = d = f = 1.;
-                }
-                if (azi) {
-                    proj_parm.Gamma = asin(sin(proj_parm.alpha) / d);
-                    par.lam0 = proj_parm.lamc - asin((.5 * (f - 1. / f)) *
-                       tan(proj_parm.Gamma)) / proj_parm.bl;
-                } else {
-                    if (proj_parm.ellips) {
-                        h = pow(pj_tsfn(proj_parm.phi1, sin(proj_parm.phi1), par.e), proj_parm.bl);
-                        l = pow(pj_tsfn(proj_parm.phi2, sin(proj_parm.phi2), par.e), proj_parm.bl);
-                    } else {
-                        h = TSFN0(proj_parm.phi1);
-                        l = TSFN0(proj_parm.phi2);
-                    }
-                    f = proj_parm.el / h;
-                    p = (l - h) / (l + h);
-                    j = proj_parm.el * proj_parm.el;
-                    j = (j - l * h) / (j + l * h);
-                    if ((con = proj_parm.lam1 - proj_parm.lam2) < -PI)
-                        proj_parm.lam2 -= TWOPI;
-                    else if (con > PI)
-                        proj_parm.lam2 += TWOPI;
-                    par.lam0 = adjlon(.5 * (proj_parm.lam1 + proj_parm.lam2) - atan(
-                       j * tan(.5 * proj_parm.bl * (proj_parm.lam1 - proj_parm.lam2)) / p) / proj_parm.bl);
-                    proj_parm.Gamma = atan(2. * sin(proj_parm.bl * adjlon(proj_parm.lam1 - par.lam0)) /
-                       (f - 1. / f));
-                    proj_parm.alpha = asin(d * sin(proj_parm.Gamma));
-                }
-                proj_parm.singam = sin(proj_parm.Gamma);
-                proj_parm.cosgam = cos(proj_parm.Gamma);
-                f = pj_param(par.params, "brot_conv").i ? proj_parm.Gamma : proj_parm.alpha;
-                proj_parm.sinrot = sin(f);
-                proj_parm.cosrot = cos(f);
-                proj_parm.u_0 = pj_param(par.params, "bno_uoff").i ? 0. :
-                    fabs(proj_parm.al * atan(sqrt(d * d - 1.) / proj_parm.cosrot) / proj_parm.bl);
-                if (par.phi0 < 0.)
-                    proj_parm.u_0 = - proj_parm.u_0;
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-            }
-
-        }} // namespace detail::omerc
-    #endif // doxygen 
-
-    /*!
-        \brief Oblique Mercator projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - Ellipsoid
-         - no_rot rot_conv no_uoff and
-         - alpha= lonc= or
-         - lon_1= lat_1= lon_2= lat_2=
-        \par Example
-        \image html ex_omerc.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct omerc_ellipsoid : public detail::omerc::base_omerc_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline omerc_ellipsoid(const Parameters& par) : detail::omerc::base_omerc_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::omerc::setup_omerc(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class omerc_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<omerc_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void omerc_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("omerc", new omerc_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_OMERC_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/ortho.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/ortho.hpp
deleted file mode 100644
index 2780c87..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/ortho.hpp
+++ /dev/null
@@ -1,219 +0,0 @@
-#ifndef GGL_PROJECTIONS_ORTHO_HPP
-#define GGL_PROJECTIONS_ORTHO_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace ortho{ 
-            static const double EPS10 = 1.e-10;
-            static const int N_POLE = 0;
-            static const int S_POLE = 1;
-            static const int EQUIT = 2;
-            static const int OBLIQ = 3;
-
-            struct par_ortho
-            {
-                double    sinph0;
-                double    cosph0;
-                int        mode;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_ortho_spheroid : public base_t_fi<base_ortho_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_ortho m_proj_parm;
-
-                inline base_ortho_spheroid(const Parameters& par)
-                    : base_t_fi<base_ortho_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double  coslam, cosphi, sinphi;
-                
-                    cosphi = cos(lp_lat);
-                    coslam = cos(lp_lon);
-                    switch (this->m_proj_parm.mode) {
-                    case EQUIT:
-                        if (cosphi * coslam < - EPS10) throw proj_exception();;
-                        xy_y = sin(lp_lat);
-                        break;
-                    case OBLIQ:
-                        if (this->m_proj_parm.sinph0 * (sinphi = sin(lp_lat)) +
-                           this->m_proj_parm.cosph0 * cosphi * coslam < - EPS10) throw proj_exception();;
-                        xy_y = this->m_proj_parm.cosph0 * sinphi - this->m_proj_parm.sinph0 * cosphi * coslam;
-                        break;
-                    case N_POLE:
-                        coslam = - coslam;
-                    case S_POLE:
-                        if (fabs(lp_lat - this->m_par.phi0) - EPS10 > HALFPI) throw proj_exception();;
-                        xy_y = cosphi * coslam;
-                        break;
-                    }
-                    xy_x = cosphi * sin(lp_lon);
-                            return;
-                }
-                
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double  rh, cosc, sinc;
-                
-                    if ((sinc = (rh = boost::math::hypot(xy_x, xy_y))) > 1.) {
-                        if ((sinc - 1.) > EPS10) throw proj_exception();;
-                        sinc = 1.;
-                    }
-                    cosc = sqrt(1. - sinc * sinc); /* in this range OK */
-                    if (fabs(rh) <= EPS10) {
-                        lp_lat = this->m_par.phi0;
-                        lp_lon = 0.0;
-                    } else {
-                        switch (this->m_proj_parm.mode) {
-                        case N_POLE:
-                            xy_y = -xy_y;
-                            lp_lat = acos(sinc);
-                            break;
-                        case S_POLE:
-                            lp_lat = - acos(sinc);
-                            break;
-                        case EQUIT:
-                            lp_lat = xy_y * sinc / rh;
-                            xy_x *= sinc;
-                            xy_y = cosc * rh;
-                            goto sinchk;
-                        case OBLIQ:
-                            lp_lat = cosc * this->m_proj_parm.sinph0 + xy_y * sinc * this->m_proj_parm.cosph0 /rh;
-                            xy_y = (cosc - this->m_proj_parm.sinph0 * lp_lat) * rh;
-                            xy_x *= sinc * this->m_proj_parm.cosph0;
-                        sinchk:
-                            if (fabs(lp_lat) >= 1.)
-                                lp_lat = lp_lat < 0. ? -HALFPI : HALFPI;
-                            else
-                                lp_lat = asin(lp_lat);
-                            break;
-                        }
-                        lp_lon = (xy_y == 0. && (this->m_proj_parm.mode == OBLIQ || this->m_proj_parm.mode == EQUIT))
-                             ? (xy_x == 0. ? 0. : xy_x < 0. ? -HALFPI : HALFPI)
-                                           : atan2(xy_x, xy_y);
-                    }
-                            return;
-                }
-                
-            };
-
-            // Orthographic
-            template <typename Parameters>
-            void setup_ortho(Parameters& par, par_ortho& proj_parm)
-            {
-                if (fabs(fabs(par.phi0) - HALFPI) <= EPS10)
-                    proj_parm.mode = par.phi0 < 0. ? S_POLE : N_POLE;
-                else if (fabs(par.phi0) > EPS10) {
-                    proj_parm.mode = OBLIQ;
-                    proj_parm.sinph0 = sin(par.phi0);
-                    proj_parm.cosph0 = cos(par.phi0);
-                } else
-                    proj_parm.mode = EQUIT;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                par.es = 0.;
-            }
-
-        }} // namespace detail::ortho
-    #endif // doxygen 
-
-    /*!
-        \brief Orthographic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-        \par Example
-        \image html ex_ortho.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct ortho_spheroid : public detail::ortho::base_ortho_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline ortho_spheroid(const Parameters& par) : detail::ortho::base_ortho_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::ortho::setup_ortho(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class ortho_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<ortho_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void ortho_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("ortho", new ortho_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_ORTHO_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/poly.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/poly.hpp
deleted file mode 100644
index b948699..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/poly.hpp
+++ /dev/null
@@ -1,266 +0,0 @@
-#ifndef GGL_PROJECTIONS_POLY_HPP
-#define GGL_PROJECTIONS_POLY_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_msfn.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_mlfn.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace poly{ 
-            static const double TOL = 1e-10;
-            static const double CONV = 1e-10;
-            static const int N_ITER = 10;
-            static const int I_ITER = 20;
-            static const double ITOL = 1.e-12;
-
-            struct par_poly
-            {
-                double ml0;
-                double en[EN_SIZE];
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_poly_ellipsoid : public base_t_fi<base_poly_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_poly m_proj_parm;
-
-                inline base_poly_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_poly_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double  ms, sp, cp;
-                
-                    if (fabs(lp_lat) <= TOL) { xy_x = lp_lon; xy_y = -this->m_proj_parm.ml0; }
-                    else {
-                        sp = sin(lp_lat);
-                        ms = fabs(cp = cos(lp_lat)) > TOL ? pj_msfn(sp, cp, this->m_par.es) / sp : 0.;
-                        xy_x = ms * sin(lp_lon *= sp);
-                        xy_y = (pj_mlfn(lp_lat, sp, cp, this->m_proj_parm.en) - this->m_proj_parm.ml0) + ms * (1. - cos(lp_lon));
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    xy_y += this->m_proj_parm.ml0;
-                    if (fabs(xy_y) <= TOL) { lp_lon = xy_x; lp_lat = 0.; }
-                    else {
-                        double r, c, sp, cp, s2ph, ml, mlb, mlp, dPhi;
-                        int i;
-                
-                        r = xy_y * xy_y + xy_x * xy_x;
-                        for (lp_lat = xy_y, i = I_ITER; i ; --i) {
-                            sp = sin(lp_lat);
-                            s2ph = sp * ( cp = cos(lp_lat));
-                            if (fabs(cp) < ITOL)
-                                throw proj_exception();;
-                            c = sp * (mlp = sqrt(1. - this->m_par.es * sp * sp)) / cp;
-                            ml = pj_mlfn(lp_lat, sp, cp, this->m_proj_parm.en);
-                            mlb = ml * ml + r;
-                            mlp = this->m_par.one_es / (mlp * mlp * mlp);
-                            lp_lat += ( dPhi =
-                                ( ml + ml + c * mlb - 2. * xy_y * (c * ml + 1.) ) / (
-                                this->m_par.es * s2ph * (mlb - 2. * xy_y * ml) / c +
-                                2.* (xy_y - ml) * (c * mlp - 1. / s2ph) - mlp - mlp ));
-                            if (fabs(dPhi) <= ITOL)
-                                break;
-                        }
-                        if (!i)
-                            throw proj_exception();;
-                        c = sin(lp_lat);
-                        lp_lon = asin(xy_x * tan(lp_lat) * sqrt(1. - this->m_par.es * c * c)) / sin(lp_lat);
-                    }
-                }
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_poly_spheroid : public base_t_fi<base_poly_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_poly m_proj_parm;
-
-                inline base_poly_spheroid(const Parameters& par)
-                    : base_t_fi<base_poly_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double  cot, E;
-                
-                    if (fabs(lp_lat) <= TOL) { xy_x = lp_lon; xy_y = this->m_proj_parm.ml0; }
-                    else {
-                        cot = 1. / tan(lp_lat);
-                        xy_x = sin(E = lp_lon * sin(lp_lat)) * cot;
-                        xy_y = lp_lat - this->m_par.phi0 + cot * (1. - cos(E));
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double B, dphi, tp;
-                    int i;
-                
-                    if (fabs(xy_y = this->m_par.phi0 + xy_y) <= TOL) { lp_lon = xy_x; lp_lat = 0.; }
-                    else {
-                        lp_lat = xy_y;
-                        B = xy_x * xy_x + xy_y * xy_y;
-                        i = N_ITER;
-                        do {
-                            tp = tan(lp_lat);
-                            lp_lat -= (dphi = (xy_y * (lp_lat * tp + 1.) - lp_lat -
-                                .5 * ( lp_lat * lp_lat + B) * tp) /
-                                ((lp_lat - xy_y) / tp - 1.));
-                        } while (fabs(dphi) > CONV && --i);
-                        if (! i) throw proj_exception();;
-                        lp_lon = asin(xy_x * tan(lp_lat)) / sin(lp_lat);
-                    }
-                }
-            };
-
-            // Polyconic (American)
-            template <typename Parameters>
-            void setup_poly(Parameters& par, par_poly& proj_parm)
-            {
-                if (par.es) {
-                    pj_enfn(par.es, proj_parm.en);
-                    proj_parm.ml0 = pj_mlfn(par.phi0, sin(par.phi0), cos(par.phi0), proj_parm.en);
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-                } else {
-                    proj_parm.ml0 = -par.phi0;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                }
-            }
-
-        }} // namespace detail::poly
-    #endif // doxygen 
-
-    /*!
-        \brief Polyconic (American) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - Ellipsoid
-        \par Example
-        \image html ex_poly.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct poly_ellipsoid : public detail::poly::base_poly_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline poly_ellipsoid(const Parameters& par) : detail::poly::base_poly_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::poly::setup_poly(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Polyconic (American) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - Ellipsoid
-        \par Example
-        \image html ex_poly.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct poly_spheroid : public detail::poly::base_poly_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline poly_spheroid(const Parameters& par) : detail::poly::base_poly_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::poly::setup_poly(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class poly_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    if (par.es)
-                        return new base_v_fi<poly_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                    else
-                        return new base_v_fi<poly_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void poly_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("poly", new poly_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_POLY_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp2.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp2.hpp
deleted file mode 100644
index 90c48e4..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp2.hpp
+++ /dev/null
@@ -1,163 +0,0 @@
-#ifndef GGL_PROJECTIONS_PUTP2_HPP
-#define GGL_PROJECTIONS_PUTP2_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace putp2{ 
-            static const double C_x = 1.89490;
-            static const double C_y = 1.71848;
-            static const double C_p = 0.6141848493043784;
-            static const double EPS = 1e-10;
-            static const int NITER = 10;
-            static const double PI_DIV_3 = 1.0471975511965977;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_putp2_spheroid : public base_t_fi<base_putp2_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_putp2_spheroid(const Parameters& par)
-                    : base_t_fi<base_putp2_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double p, c, s, V;
-                    int i;
-                
-                    p = C_p * sin(lp_lat);
-                    s = lp_lat * lp_lat;
-                    lp_lat *= 0.615709 + s * ( 0.00909953 + s * 0.0046292 );
-                    for (i = NITER; i ; --i) {
-                        c = cos(lp_lat);
-                        s = sin(lp_lat);
-                        lp_lat -= V = (lp_lat + s * (c - 1.) - p) /
-                            (1. + c * (c - 1.) - s * s);
-                        if (fabs(V) < EPS)
-                            break;
-                    }
-                    if (!i)
-                        lp_lat = lp_lat < 0 ? - PI_DIV_3 : PI_DIV_3;
-                    xy_x = C_x * lp_lon * (cos(lp_lat) - 0.5);
-                    xy_y = C_y * sin(lp_lat);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double c;
-                
-                    lp_lat = aasin(xy_y / C_y);
-                    lp_lon = xy_x / (C_x * ((c = cos(lp_lat)) - 0.5));
-                    lp_lat = aasin((lp_lat + sin(lp_lat) * (c - 1.)) / C_p);
-                }
-            };
-
-            // Putnins P2
-            template <typename Parameters>
-            void setup_putp2(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::putp2
-    #endif // doxygen 
-
-    /*!
-        \brief Putnins P2 projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_putp2.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct putp2_spheroid : public detail::putp2::base_putp2_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline putp2_spheroid(const Parameters& par) : detail::putp2::base_putp2_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::putp2::setup_putp2(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class putp2_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<putp2_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void putp2_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("putp2", new putp2_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_PUTP2_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp3.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp3.hpp
deleted file mode 100644
index 8d9b186..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp3.hpp
+++ /dev/null
@@ -1,197 +0,0 @@
-#ifndef GGL_PROJECTIONS_PUTP3_HPP
-#define GGL_PROJECTIONS_PUTP3_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace putp3{ 
-            static const double C = 0.79788456;
-            static const double RPISQ = 0.1013211836;
-
-            struct par_putp3
-            {
-                double    A;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_putp3_spheroid : public base_t_fi<base_putp3_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_putp3 m_proj_parm;
-
-                inline base_putp3_spheroid(const Parameters& par)
-                    : base_t_fi<base_putp3_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = C * lp_lon * (1. - this->m_proj_parm.A * lp_lat * lp_lat);
-                    xy_y = C * lp_lat;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = xy_y / C;
-                    lp_lon = xy_x / (C * (1. - this->m_proj_parm.A * lp_lat * lp_lat));
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_putp3& proj_parm) 
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-
-            // Putnins P3
-            template <typename Parameters>
-            void setup_putp3(Parameters& par, par_putp3& proj_parm)
-            {
-                proj_parm.A = 4. * RPISQ;
-                setup(par, proj_parm);
-            }
-
-            // Putnins P3'
-            template <typename Parameters>
-            void setup_putp3p(Parameters& par, par_putp3& proj_parm)
-            {
-                proj_parm.A = 2. * RPISQ;
-                setup(par, proj_parm);
-            }
-
-        }} // namespace detail::putp3
-    #endif // doxygen 
-
-    /*!
-        \brief Putnins P3 projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_putp3.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct putp3_spheroid : public detail::putp3::base_putp3_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline putp3_spheroid(const Parameters& par) : detail::putp3::base_putp3_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::putp3::setup_putp3(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Putnins P3' projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - no inverse
-         - Spheroid
-        \par Example
-        \image html ex_putp3p.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct putp3p_spheroid : public detail::putp3::base_putp3_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline putp3p_spheroid(const Parameters& par) : detail::putp3::base_putp3_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::putp3::setup_putp3p(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class putp3_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<putp3_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class putp3p_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<putp3p_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void putp3_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("putp3", new putp3_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("putp3p", new putp3p_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_PUTP3_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp4p.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp4p.hpp
deleted file mode 100644
index 7f56343..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp4p.hpp
+++ /dev/null
@@ -1,201 +0,0 @@
-#ifndef GGL_PROJECTIONS_PUTP4P_HPP
-#define GGL_PROJECTIONS_PUTP4P_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace putp4p{ 
-
-            struct par_putp4p
-            {
-                double    C_x, C_y;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_putp4p_spheroid : public base_t_fi<base_putp4p_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_putp4p m_proj_parm;
-
-                inline base_putp4p_spheroid(const Parameters& par)
-                    : base_t_fi<base_putp4p_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    lp_lat = aasin(0.883883476 * sin(lp_lat));
-                    xy_x = this->m_proj_parm.C_x * lp_lon * cos(lp_lat);
-                    xy_x /= cos(lp_lat *= 0.333333333333333);
-                    xy_y = this->m_proj_parm.C_y * sin(lp_lat);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = aasin(xy_y / this->m_proj_parm.C_y);
-                    lp_lon = xy_x * cos(lp_lat) / this->m_proj_parm.C_x;
-                    lp_lat *= 3.;
-                    lp_lon /= cos(lp_lat);
-                    lp_lat = aasin(1.13137085 * sin(lp_lat));
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_putp4p& proj_parm) 
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-
-            // Putnins P4'
-            template <typename Parameters>
-            void setup_putp4p(Parameters& par, par_putp4p& proj_parm)
-            {
-                proj_parm.C_x = 0.874038744;
-                proj_parm.C_y = 3.883251825;
-                setup(par, proj_parm);
-            }
-
-            // Werenskiold I
-            template <typename Parameters>
-            void setup_weren(Parameters& par, par_putp4p& proj_parm)
-            {
-                proj_parm.C_x = 1.;
-                proj_parm.C_y = 4.442882938;
-                setup(par, proj_parm);
-            }
-
-        }} // namespace detail::putp4p
-    #endif // doxygen 
-
-    /*!
-        \brief Putnins P4' projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_putp4p.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct putp4p_spheroid : public detail::putp4p::base_putp4p_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline putp4p_spheroid(const Parameters& par) : detail::putp4p::base_putp4p_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::putp4p::setup_putp4p(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Werenskiold I projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_weren.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct weren_spheroid : public detail::putp4p::base_putp4p_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline weren_spheroid(const Parameters& par) : detail::putp4p::base_putp4p_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::putp4p::setup_weren(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class putp4p_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<putp4p_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class weren_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<weren_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void putp4p_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("putp4p", new putp4p_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("weren", new weren_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_PUTP4P_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp5.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp5.hpp
deleted file mode 100644
index d2b581e..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp5.hpp
+++ /dev/null
@@ -1,198 +0,0 @@
-#ifndef GGL_PROJECTIONS_PUTP5_HPP
-#define GGL_PROJECTIONS_PUTP5_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace putp5{ 
-            static const double C = 1.01346;
-            static const double D = 1.2158542;
-
-            struct par_putp5
-            {
-                double    A, B;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_putp5_spheroid : public base_t_fi<base_putp5_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_putp5 m_proj_parm;
-
-                inline base_putp5_spheroid(const Parameters& par)
-                    : base_t_fi<base_putp5_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = C * lp_lon * (this->m_proj_parm.A - this->m_proj_parm.B * sqrt(1. + D * lp_lat * lp_lat));
-                    xy_y = C * lp_lat;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = xy_y / C;
-                    lp_lon = xy_x / (C * (this->m_proj_parm.A - this->m_proj_parm.B * sqrt(1. + D * lp_lat * lp_lat)));
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_putp5& proj_parm) 
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-
-            // Putnins P5
-            template <typename Parameters>
-            void setup_putp5(Parameters& par, par_putp5& proj_parm)
-            {
-                proj_parm.A = 2.;
-                proj_parm.B = 1.;
-                setup(par, proj_parm);
-            }
-
-            // Putnins P5'
-            template <typename Parameters>
-            void setup_putp5p(Parameters& par, par_putp5& proj_parm)
-            {
-                proj_parm.A = 1.5;
-                proj_parm.B = 0.5;
-                setup(par, proj_parm);
-            }
-
-        }} // namespace detail::putp5
-    #endif // doxygen 
-
-    /*!
-        \brief Putnins P5 projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_putp5.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct putp5_spheroid : public detail::putp5::base_putp5_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline putp5_spheroid(const Parameters& par) : detail::putp5::base_putp5_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::putp5::setup_putp5(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Putnins P5' projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_putp5p.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct putp5p_spheroid : public detail::putp5::base_putp5_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline putp5p_spheroid(const Parameters& par) : detail::putp5::base_putp5_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::putp5::setup_putp5p(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class putp5_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<putp5_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class putp5p_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<putp5p_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void putp5_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("putp5", new putp5_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("putp5p", new putp5p_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_PUTP5_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp6.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp6.hpp
deleted file mode 100644
index 6effe46..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/putp6.hpp
+++ /dev/null
@@ -1,223 +0,0 @@
-#ifndef GGL_PROJECTIONS_PUTP6_HPP
-#define GGL_PROJECTIONS_PUTP6_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace putp6{ 
-            static const double EPS = 1e-10;
-            static const int NITER = 10;
-            static const double CON_POLE = 1.732050807568877;
-
-            struct par_putp6
-            {
-                double C_x, C_y, A, B, D;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_putp6_spheroid : public base_t_fi<base_putp6_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_putp6 m_proj_parm;
-
-                inline base_putp6_spheroid(const Parameters& par)
-                    : base_t_fi<base_putp6_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double p, r, V;
-                    int i;
-                
-                    p = this->m_proj_parm.B * sin(lp_lat);
-                    lp_lat *=  1.10265779;
-                    for (i = NITER; i ; --i) {
-                        r = sqrt(1. + lp_lat * lp_lat);
-                        lp_lat -= V = ( (this->m_proj_parm.A - r) * lp_lat - log(lp_lat + r) - p ) /
-                            (this->m_proj_parm.A - 2. * r);
-                        if (fabs(V) < EPS)
-                            break;
-                    }
-                    if (!i)
-                        lp_lat = p < 0. ? -CON_POLE : CON_POLE;
-                    xy_x = this->m_proj_parm.C_x * lp_lon * (this->m_proj_parm.D - sqrt(1. + lp_lat * lp_lat));
-                    xy_y = this->m_proj_parm.C_y * lp_lat;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double r;
-                
-                    lp_lat = xy_y / this->m_proj_parm.C_y;
-                    r = sqrt(1. + lp_lat * lp_lat);
-                    lp_lon = xy_x / (this->m_proj_parm.C_x * (this->m_proj_parm.D - r));
-                    lp_lat = aasin( ( (this->m_proj_parm.A - r) * lp_lat - log(lp_lat + r) ) / this->m_proj_parm.B);
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_putp6& proj_parm) 
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-
-            // Putnins P6
-            template <typename Parameters>
-            void setup_putp6(Parameters& par, par_putp6& proj_parm)
-            {
-                proj_parm.C_x = 1.01346;
-                proj_parm.C_y = 0.91910;
-                proj_parm.A   = 4.;
-                proj_parm.B   = 2.1471437182129378784;
-                proj_parm.D   = 2.;
-                setup(par, proj_parm);
-            }
-
-            // Putnins P6'
-            template <typename Parameters>
-            void setup_putp6p(Parameters& par, par_putp6& proj_parm)
-            {
-                proj_parm.C_x = 0.44329;
-                proj_parm.C_y = 0.80404;
-                proj_parm.A   = 6.;
-                proj_parm.B   = 5.61125;
-                proj_parm.D   = 3.;
-                setup(par, proj_parm);
-            }
-
-        }} // namespace detail::putp6
-    #endif // doxygen 
-
-    /*!
-        \brief Putnins P6 projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_putp6.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct putp6_spheroid : public detail::putp6::base_putp6_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline putp6_spheroid(const Parameters& par) : detail::putp6::base_putp6_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::putp6::setup_putp6(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Putnins P6' projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_putp6p.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct putp6p_spheroid : public detail::putp6::base_putp6_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline putp6p_spheroid(const Parameters& par) : detail::putp6::base_putp6_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::putp6::setup_putp6p(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class putp6_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<putp6_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class putp6p_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<putp6p_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void putp6_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("putp6", new putp6_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("putp6p", new putp6p_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_PUTP6_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/robin.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/robin.hpp
deleted file mode 100644
index a8f488a..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/robin.hpp
+++ /dev/null
@@ -1,232 +0,0 @@
-#ifndef GGL_PROJECTIONS_ROBIN_HPP
-#define GGL_PROJECTIONS_ROBIN_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/function_overloads.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace robin{ 
-            static const double FXC = 0.8487;
-            static const double FYC = 1.3523;
-            static const double C1 = 11.45915590261646417544;
-            static const double RC1 = 0.08726646259971647884;
-            static const int NODES = 18;
-            static const double ONEEPS = 1.000001;
-            static const double EPS = 1e-8;
-
-            /* note: following terms based upon 5 deg. intervals in degrees. */
-            static struct COEFS {
-                double c0, c1, c2, c3;
-            } X[] = {
-            {1,    -5.67239e-12,    -7.15511e-05,    3.11028e-06},
-            {0.9986,    -0.000482241,    -2.4897e-05,    -1.33094e-06},
-            {0.9954,    -0.000831031,    -4.4861e-05,    -9.86588e-07},
-            {0.99,    -0.00135363,    -5.96598e-05,    3.67749e-06},
-            {0.9822,    -0.00167442,    -4.4975e-06,    -5.72394e-06},
-            {0.973,    -0.00214869,    -9.03565e-05,    1.88767e-08},
-            {0.96,    -0.00305084,    -9.00732e-05,    1.64869e-06},
-            {0.9427,    -0.00382792,    -6.53428e-05,    -2.61493e-06},
-            {0.9216,    -0.00467747,    -0.000104566,    4.8122e-06},
-            {0.8962,    -0.00536222,    -3.23834e-05,    -5.43445e-06},
-            {0.8679,    -0.00609364,    -0.0001139,    3.32521e-06},
-            {0.835,    -0.00698325,    -6.40219e-05,    9.34582e-07},
-            {0.7986,    -0.00755337,    -5.00038e-05,    9.35532e-07},
-            {0.7597,    -0.00798325,    -3.59716e-05,    -2.27604e-06},
-            {0.7186,    -0.00851366,    -7.0112e-05,    -8.63072e-06},
-            {0.6732,    -0.00986209,    -0.000199572,    1.91978e-05},
-            {0.6213,    -0.010418,    8.83948e-05,    6.24031e-06},
-            {0.5722,    -0.00906601,    0.000181999,    6.24033e-06},
-            {0.5322, 0.,0.,0.  }},
-            Y[] = {
-            {0,    0.0124,    3.72529e-10,    1.15484e-09},
-            {0.062,    0.0124001,    1.76951e-08,    -5.92321e-09},
-            {0.124,    0.0123998,    -7.09668e-08,    2.25753e-08},
-            {0.186,    0.0124008,    2.66917e-07,    -8.44523e-08},
-            {0.248,    0.0123971,    -9.99682e-07,    3.15569e-07},
-            {0.31,    0.0124108,    3.73349e-06,    -1.1779e-06},
-            {0.372,    0.0123598,    -1.3935e-05,    4.39588e-06},
-            {0.434,    0.0125501,    5.20034e-05,    -1.00051e-05},
-            {0.4968,    0.0123198,    -9.80735e-05,    9.22397e-06},
-            {0.5571,    0.0120308,    4.02857e-05,    -5.2901e-06},
-            {0.6176,    0.0120369,    -3.90662e-05,    7.36117e-07},
-            {0.6769,    0.0117015,    -2.80246e-05,    -8.54283e-07},
-            {0.7346,    0.0113572,    -4.08389e-05,    -5.18524e-07},
-            {0.7903,    0.0109099,    -4.86169e-05,    -1.0718e-06},
-            {0.8435,    0.0103433,    -6.46934e-05,    5.36384e-09},
-            {0.8936,    0.00969679,    -6.46129e-05,    -8.54894e-06},
-            {0.9394,    0.00840949,    -0.000192847,    -4.21023e-06},
-            {0.9761,    0.00616525,    -0.000256001,    -4.21021e-06},
-            {1., 0.,0.,0 }};
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_robin_spheroid : public base_t_fi<base_robin_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_robin_spheroid(const Parameters& par)
-                    : base_t_fi<base_robin_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline double  V(COEFS const& C, double z) const
-                { return (C.c0 + z * (C.c1 + z * (C.c2 + z * C.c3))); }
-                inline double DV(COEFS const& C, double z) const
-                { return (C.c1 + z * (C.c2 + C.c2 + z * 3. * C.c3)); }
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    int i;
-                    double dphi;
-                
-                    i = int_floor((dphi = fabs(lp_lat)) * C1);
-                    if (i >= NODES) i = NODES - 1;
-                    dphi = RAD_TO_DEG * (dphi - RC1 * i);
-                    xy_x = V(X[i], dphi) * FXC * lp_lon;
-                    xy_y = V(Y[i], dphi) * FYC;
-                    if (lp_lat < 0.) xy_y = -xy_y;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    int i;
-                    double t, t1;
-                    struct COEFS T;
-                
-                    lp_lon = xy_x / FXC;
-                    lp_lat = fabs(xy_y / FYC);
-                    if (lp_lat >= 1.) { /* simple pathologic cases */
-                        if (lp_lat > ONEEPS) throw proj_exception();
-                        else {
-                            lp_lat = xy_y < 0. ? -HALFPI : HALFPI;
-                            lp_lon /= X[NODES].c0;
-                        }
-                    } else { /* general problem */
-                        /* in Y space, reduce to table interval */
-                        for (i = int_floor(lp_lat * NODES);;) {
-                            if (Y[i].c0 > lp_lat) --i;
-                            else if (Y[i+1].c0 <= lp_lat) ++i;
-                            else break;
-                        }
-                        T = Y[i];
-                        /* first guess, linear interp */
-                        t = 5. * (lp_lat - T.c0)/(Y[i+1].c0 - T.c0);
-                        /* make into root */
-                        T.c0 -= lp_lat;
-                        for (;;) { /* Newton-Raphson reduction */
-                            t -= t1 = V(T,t) / DV(T,t);
-                            if (fabs(t1) < EPS)
-                                break;
-                        }
-                        lp_lat = (5 * i + t) * DEG_TO_RAD;
-                        if (xy_y < 0.) lp_lat = -lp_lat;
-                        lp_lon /= V(X[i], t);
-                    }
-                }
-            };
-
-            // Robinson
-            template <typename Parameters>
-            void setup_robin(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::robin
-    #endif // doxygen 
-
-    /*!
-        \brief Robinson projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_robin.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct robin_spheroid : public detail::robin::base_robin_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline robin_spheroid(const Parameters& par) : detail::robin::base_robin_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::robin::setup_robin(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class robin_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<robin_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void robin_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("robin", new robin_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_ROBIN_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/rouss.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/rouss.hpp
deleted file mode 100644
index 3841909..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/rouss.hpp
+++ /dev/null
@@ -1,211 +0,0 @@
-#ifndef GGL_PROJECTIONS_ROUSS_HPP
-#define GGL_PROJECTIONS_ROUSS_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/proj_mdist.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace rouss{ 
-
-            struct par_rouss
-            {
-                double s0;
-                double A1, A2, A3, A4, A5, A6;
-                double B1, B2, B3, B4, B5, B6, B7, B8;
-                double C1, C2, C3, C4, C5, C6, C7, C8;
-                double D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11;
-                MDIST en;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_rouss_ellipsoid : public base_t_fi<base_rouss_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_rouss m_proj_parm;
-
-                inline base_rouss_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_rouss_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double s, al, cp, sp, al2, s2;
-                    
-                    cp = cos(lp_lat);
-                    sp = sin(lp_lat);
-                    s = proj_mdist(lp_lat, sp, cp,  this->m_proj_parm.en) - this->m_proj_parm.s0;
-                    s2 = s * s;
-                    al = lp_lon * cp / sqrt(1. - this->m_par.es * sp * sp);
-                    al2 = al * al;
-                    xy_x = this->m_par.k0 * al*(1.+s2*(this->m_proj_parm.A1+s2*this->m_proj_parm.A4)-al2*(this->m_proj_parm.A2+s*this->m_proj_parm.A3+s2*this->m_proj_parm.A5
-                                +al2*this->m_proj_parm.A6));
-                    xy_y = this->m_par.k0 * (al2*(this->m_proj_parm.B1+al2*this->m_proj_parm.B4)+
-                        s*(1.+al2*(this->m_proj_parm.B3-al2*this->m_proj_parm.B6)+s2*(this->m_proj_parm.B2+s2*this->m_proj_parm.B8)+
-                        s*al2*(this->m_proj_parm.B5+s*this->m_proj_parm.B7)));
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double s, al, x = xy_x / this->m_par.k0, y = xy_y / this->m_par.k0, x2, y2;;
-                
-                    x2 = x * x;
-                    y2 = y * y;
-                    al = x*(1.-this->m_proj_parm.C1*y2+x2*(this->m_proj_parm.C2+this->m_proj_parm.C3*y-this->m_proj_parm.C4*x2+this->m_proj_parm.C5*y2-this->m_proj_parm.C7*x2*y)
-                        +y2*(this->m_proj_parm.C6*y2-this->m_proj_parm.C8*x2*y));
-                    s = this->m_proj_parm.s0 + y*(1.+y2*(-this->m_proj_parm.D2+this->m_proj_parm.D8*y2))+
-                        x2*(-this->m_proj_parm.D1+y*(-this->m_proj_parm.D3+y*(-this->m_proj_parm.D5+y*(-this->m_proj_parm.D7+y*this->m_proj_parm.D11)))+
-                        x2*(this->m_proj_parm.D4+y*(this->m_proj_parm.D6+y*this->m_proj_parm.D10)-x2*this->m_proj_parm.D9));
-                    lp_lat=proj_inv_mdist(s, this->m_proj_parm.en);
-                    s = sin(lp_lat);
-                    lp_lon=al * sqrt(1. - this->m_par.es * s * s)/cos(lp_lat);
-                }
-            };
-
-            // Roussilhe Stereographic
-            template <typename Parameters>
-            void setup_rouss(Parameters& par, par_rouss& proj_parm)
-            {
-                double N0, es2, t, t2, R_R0_2, R_R0_4;
-                proj_mdist_ini(par.es, proj_parm.en);
-            
-                es2 = sin(par.phi0);
-                proj_parm.s0 = proj_mdist(par.phi0, es2, cos(par.phi0), proj_parm.en);
-                t = 1. - (es2 = par.es * es2 * es2);
-                N0 = 1./sqrt(t);
-                R_R0_2 = t * t / par.one_es;
-                R_R0_4 = R_R0_2 * R_R0_2;
-                t = tan(par.phi0);
-                t2 = t * t;
-                proj_parm.C1 = proj_parm.A1 = R_R0_2 / 4.;
-                proj_parm.C2 = proj_parm.A2 = R_R0_2 * (2 * t2 - 1. - 2. * es2) / 12.;
-                proj_parm.A3 = R_R0_2 * t * (1. + 4. * t2)/ ( 12. * N0);
-                proj_parm.A4 = R_R0_4 / 24.;
-                proj_parm.A5 = R_R0_4 * ( -1. + t2 * (11. + 12. * t2))/24.;
-                proj_parm.A6 = R_R0_4 * ( -2. + t2 * (11. - 2. * t2))/240.;
-                proj_parm.B1 = t / (2. * N0);
-                proj_parm.B2 = R_R0_2 / 12.;
-                proj_parm.B3 = R_R0_2 * (1. + 2. * t2 - 2. * es2)/4.;
-                proj_parm.B4 = R_R0_2 * t * (2. - t2)/(24. * N0);
-                proj_parm.B5 = R_R0_2 * t * (5. + 4.* t2)/(8. * N0);
-                proj_parm.B6 = R_R0_4 * (-2. + t2 * (-5. + 6. * t2))/48.;
-                proj_parm.B7 = R_R0_4 * (5. + t2 * (19. + 12. * t2))/24.;
-                proj_parm.B8 = R_R0_4 / 120.;
-                proj_parm.C3 = R_R0_2 * t * (1. + t2)/(3. * N0);
-                proj_parm.C4 = R_R0_4 * (-3. + t2 * (34. + 22. * t2))/240.;
-                proj_parm.C5 = R_R0_4 * (4. + t2 * (13. + 12. * t2))/24.;
-                proj_parm.C6 = R_R0_4 / 16.;
-                proj_parm.C7 = R_R0_4 * t * (11. + t2 * (33. + t2 * 16.))/(48. * N0);
-                proj_parm.C8 = R_R0_4 * t * (1. + t2 * 4.)/(36. * N0);
-                proj_parm.D1 = t / (2. * N0);
-                proj_parm.D2 = R_R0_2 / 12.;
-                proj_parm.D3 = R_R0_2 * (2 * t2 + 1. - 2. * es2) / 4.;
-                proj_parm.D4 = R_R0_2 * t * (1. + t2)/(8. * N0);
-                proj_parm.D5 = R_R0_2 * t * (1. + t2 * 2.)/(4. * N0);
-                proj_parm.D6 = R_R0_4 * (1. + t2 * (6. + t2 * 6.))/16.;
-                proj_parm.D7 = R_R0_4 * t2 * (3. + t2 * 4.)/8.;
-                proj_parm.D8 = R_R0_4 / 80.;
-                proj_parm.D9 = R_R0_4 * t * (-21. + t2 * (178. - t2 * 26.))/720.;
-                proj_parm.D10 = R_R0_4 * t * (29. + t2 * (86. + t2 * 48.))/(96. * N0);
-                proj_parm.D11 = R_R0_4 * t * (37. + t2 * 44.)/(96. * N0);
-                // par.fwd = e_forward;
-                // par.inv = e_inverse;
-            }
-
-        }} // namespace detail::rouss
-    #endif // doxygen 
-
-    /*!
-        \brief Roussilhe Stereographic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Ellps
-        \par Example
-        \image html ex_rouss.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct rouss_ellipsoid : public detail::rouss::base_rouss_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline rouss_ellipsoid(const Parameters& par) : detail::rouss::base_rouss_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::rouss::setup_rouss(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class rouss_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<rouss_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void rouss_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("rouss", new rouss_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_ROUSS_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/rpoly.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/rpoly.hpp
deleted file mode 100644
index 9f51abb..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/rpoly.hpp
+++ /dev/null
@@ -1,158 +0,0 @@
-#ifndef GGL_PROJECTIONS_RPOLY_HPP
-#define GGL_PROJECTIONS_RPOLY_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace rpoly{ 
-            static const double EPS = 1e-9;
-
-            struct par_rpoly
-            {
-                double    phi1;
-                double    fxa;
-                double    fxb;
-                int        mode;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_rpoly_spheroid : public base_t_f<base_rpoly_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_rpoly m_proj_parm;
-
-                inline base_rpoly_spheroid(const Parameters& par)
-                    : base_t_f<base_rpoly_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double fa;
-                
-                    if (this->m_proj_parm.mode)
-                        fa = tan(lp_lon * this->m_proj_parm.fxb) * this->m_proj_parm.fxa;
-                    else
-                        fa = 0.5 * lp_lon;
-                    if (fabs(lp_lat) < EPS) {
-                        xy_x = fa + fa;
-                        xy_y = - this->m_par.phi0;
-                    } else {
-                        xy_y = 1. / tan(lp_lat);
-                        xy_x = sin(fa = 2. * atan(fa * sin(lp_lat))) * xy_y;
-                        xy_y = lp_lat - this->m_par.phi0 + (1. - cos(fa)) * xy_y;
-                    }
-                }
-            };
-
-            // Rectangular Polyconic
-            template <typename Parameters>
-            void setup_rpoly(Parameters& par, par_rpoly& proj_parm)
-            {
-                if ((proj_parm.mode = (proj_parm.phi1 = fabs(pj_param(par.params, "rlat_ts").f)) > EPS)) {
-                    proj_parm.fxb = 0.5 * sin(proj_parm.phi1);
-                    proj_parm.fxa = 0.5 / proj_parm.fxb;
-                }
-                par.es = 0.;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::rpoly
-    #endif // doxygen 
-
-    /*!
-        \brief Rectangular Polyconic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - no inverse
-         - lat_ts=
-        \par Example
-        \image html ex_rpoly.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct rpoly_spheroid : public detail::rpoly::base_rpoly_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline rpoly_spheroid(const Parameters& par) : detail::rpoly::base_rpoly_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::rpoly::setup_rpoly(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class rpoly_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<rpoly_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void rpoly_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("rpoly", new rpoly_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_RPOLY_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/sconics.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/sconics.hpp
deleted file mode 100644
index cfc78ce..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/sconics.hpp
+++ /dev/null
@@ -1,512 +0,0 @@
-#ifndef GGL_PROJECTIONS_SCONICS_HPP
-#define GGL_PROJECTIONS_SCONICS_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace sconics{
-            static const int EULER = 0;
-            static const int MURD1 = 1;
-            static const int MURD2 = 2;
-            static const int MURD3 = 3;
-            static const int PCONIC = 4;
-            static const int TISSOT = 5;
-            static const int VITK1 = 6;
-            static const double EPS10 = 1.e-10;
-            static const double EPS = 1e-10;
-
-            struct par_sconics
-            {
-                double    n;
-                double    rho_c;
-                double    rho_0;
-                double    sig;
-                double    c1, c2;
-                int        type;
-            };
-            /* get common factors for simple conics */
-            template <typename Parameters>
-                inline int
-            phi12(Parameters& par, par_sconics& proj_parm, double *del) {
-                double p1, p2;
-                int err = 0;
-
-                if (!pj_param(par.params, "tlat_1").i ||
-                    !pj_param(par.params, "tlat_2").i) {
-                    err = -41;
-                } else {
-                    p1 = pj_param(par.params, "rlat_1").f;
-                    p2 = pj_param(par.params, "rlat_2").f;
-                    *del = 0.5 * (p2 - p1);
-                    proj_parm.sig = 0.5 * (p2 + p1);
-                    err = (fabs(*del) < EPS || fabs(proj_parm.sig) < EPS) ? -42 : 0;
-                    *del = *del;
-                }
-                return err;
-            }
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_sconics_spheroid : public base_t_fi<base_sconics_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_sconics m_proj_parm;
-
-                inline base_sconics_spheroid(const Parameters& par)
-                    : base_t_fi<base_sconics_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double rho;
-
-                    switch (this->m_proj_parm.type) {
-                    case MURD2:
-                        rho = this->m_proj_parm.rho_c + tan(this->m_proj_parm.sig - lp_lat);
-                        break;
-                    case PCONIC:
-                        rho = this->m_proj_parm.c2 * (this->m_proj_parm.c1 - tan(lp_lat - this->m_proj_parm.sig));
-                        break;
-                    default:
-                        rho = this->m_proj_parm.rho_c - lp_lat;
-                        break;
-                    }
-                    xy_x = rho * sin( lp_lon *= this->m_proj_parm.n );
-                    xy_y = this->m_proj_parm.rho_0 - rho * cos(lp_lon);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double rho;
-
-                    rho = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.rho_0 - xy_y);
-                    if (this->m_proj_parm.n < 0.) {
-                        rho = - rho;
-                        xy_x = - xy_x;
-                        xy_y = - xy_y;
-                    }
-                    lp_lon = atan2(xy_x, xy_y) / this->m_proj_parm.n;
-                    switch (this->m_proj_parm.type) {
-                    case PCONIC:
-                        lp_lat = atan(this->m_proj_parm.c1 - rho / this->m_proj_parm.c2) + this->m_proj_parm.sig;
-                        break;
-                    case MURD2:
-                        lp_lat = this->m_proj_parm.sig - atan(rho - this->m_proj_parm.rho_c);
-                        break;
-                    default:
-                        lp_lat = this->m_proj_parm.rho_c - rho;
-                    }
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_sconics& proj_parm)
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                double del, cs;
-                int i;
-                if( (i = phi12(par, proj_parm, &del)) )
-                    throw proj_exception(i);
-                switch (proj_parm.type) {
-                case TISSOT:
-                    proj_parm.n = sin(proj_parm.sig);
-                    cs = cos(del);
-                    proj_parm.rho_c = proj_parm.n / cs + cs / proj_parm.n;
-                    proj_parm.rho_0 = sqrt((proj_parm.rho_c - 2 * sin(par.phi0))/proj_parm.n);
-                    break;
-                case MURD1:
-                    proj_parm.rho_c = sin(del)/(del * tan(proj_parm.sig)) + proj_parm.sig;
-                    proj_parm.rho_0 = proj_parm.rho_c - par.phi0;
-                    proj_parm.n = sin(proj_parm.sig);
-                    break;
-                case MURD2:
-                    proj_parm.rho_c = (cs = sqrt(cos(del))) / tan(proj_parm.sig);
-                    proj_parm.rho_0 = proj_parm.rho_c + tan(proj_parm.sig - par.phi0);
-                    proj_parm.n = sin(proj_parm.sig) * cs;
-                    break;
-                case MURD3:
-                    proj_parm.rho_c = del / (tan(proj_parm.sig) * tan(del)) + proj_parm.sig;
-                    proj_parm.rho_0 = proj_parm.rho_c - par.phi0;
-                    proj_parm.n = sin(proj_parm.sig) * sin(del) * tan(del) / (del * del);
-                    break;
-                case EULER:
-                    proj_parm.n = sin(proj_parm.sig) * sin(del) / del;
-                    del *= 0.5;
-                    proj_parm.rho_c = del / (tan(del) * tan(proj_parm.sig)) + proj_parm.sig;
-
-                    proj_parm.rho_0 = proj_parm.rho_c - par.phi0;
-                    break;
-                case PCONIC:
-                    proj_parm.n = sin(proj_parm.sig);
-                    proj_parm.c2 = cos(del);
-                    proj_parm.c1 = 1./tan(proj_parm.sig);
-                    if (fabs(del = par.phi0 - proj_parm.sig) - EPS10 >= HALFPI)
-                        throw proj_exception(-43);
-                    proj_parm.rho_0 = proj_parm.c2 * (proj_parm.c1 - tan(del));
-                    break;
-                case VITK1:
-                    proj_parm.n = (cs = tan(del)) * sin(proj_parm.sig) / del;
-                    proj_parm.rho_c = del / (cs * tan(proj_parm.sig)) + proj_parm.sig;
-                    proj_parm.rho_0 = proj_parm.rho_c - par.phi0;
-                    break;
-                }
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                par.es = 0;
-            }
-
-
-            // Tissot
-            template <typename Parameters>
-            void setup_tissot(Parameters& par, par_sconics& proj_parm)
-            {
-                proj_parm.type = TISSOT;
-                setup(par, proj_parm);
-            }
-
-            // Murdoch I
-            template <typename Parameters>
-            void setup_murd1(Parameters& par, par_sconics& proj_parm)
-            {
-                proj_parm.type = MURD1;
-                setup(par, proj_parm);
-            }
-
-            // Murdoch II
-            template <typename Parameters>
-            void setup_murd2(Parameters& par, par_sconics& proj_parm)
-            {
-                proj_parm.type = MURD2;
-                setup(par, proj_parm);
-            }
-
-            // Murdoch III
-            template <typename Parameters>
-            void setup_murd3(Parameters& par, par_sconics& proj_parm)
-            {
-                proj_parm.type = MURD3;
-                setup(par, proj_parm);
-            }
-
-            // Euler
-            template <typename Parameters>
-            void setup_euler(Parameters& par, par_sconics& proj_parm)
-            {
-                proj_parm.type = EULER;
-                setup(par, proj_parm);
-            }
-
-            // Perspective Conic
-            template <typename Parameters>
-            void setup_pconic(Parameters& par, par_sconics& proj_parm)
-            {
-                proj_parm.type = PCONIC;
-                setup(par, proj_parm);
-            }
-
-            // Vitkovsky I
-            template <typename Parameters>
-            void setup_vitk1(Parameters& par, par_sconics& proj_parm)
-            {
-                proj_parm.type = VITK1;
-                setup(par, proj_parm);
-            }
-
-        }} // namespace detail::sconics
-    #endif // doxygen
-
-    /*!
-        \brief Tissot projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - lat_1= and lat_2=
-        \par Example
-        \image html ex_tissot.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct tissot_spheroid : public detail::sconics::base_sconics_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline tissot_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::sconics::setup_tissot(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Murdoch I projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - lat_1= and lat_2=
-        \par Example
-        \image html ex_murd1.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct murd1_spheroid : public detail::sconics::base_sconics_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline murd1_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::sconics::setup_murd1(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Murdoch II projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - lat_1= and lat_2=
-        \par Example
-        \image html ex_murd2.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct murd2_spheroid : public detail::sconics::base_sconics_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline murd2_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::sconics::setup_murd2(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Murdoch III projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - lat_1= and lat_2=
-        \par Example
-        \image html ex_murd3.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct murd3_spheroid : public detail::sconics::base_sconics_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline murd3_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::sconics::setup_murd3(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Euler projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - lat_1= and lat_2=
-        \par Example
-        \image html ex_euler.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct euler_spheroid : public detail::sconics::base_sconics_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline euler_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::sconics::setup_euler(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Perspective Conic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - lat_1= and lat_2=
-        \par Example
-        \image html ex_pconic.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct pconic_spheroid : public detail::sconics::base_sconics_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline pconic_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::sconics::setup_pconic(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Vitkovsky I projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Conic
-         - Spheroid
-         - lat_1= and lat_2=
-        \par Example
-        \image html ex_vitk1.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct vitk1_spheroid : public detail::sconics::base_sconics_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline vitk1_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::sconics::setup_vitk1(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class tissot_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<tissot_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class murd1_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<murd1_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class murd2_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<murd2_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class murd3_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<murd3_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class euler_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<euler_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class pconic_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<pconic_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class vitk1_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<vitk1_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void sconics_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("tissot", new tissot_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("murd1", new murd1_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("murd2", new murd2_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("murd3", new murd3_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("euler", new euler_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("pconic", new pconic_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("vitk1", new vitk1_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_SCONICS_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/somerc.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/somerc.hpp
deleted file mode 100644
index 139c9a9..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/somerc.hpp
+++ /dev/null
@@ -1,188 +0,0 @@
-#ifndef GGL_PROJECTIONS_SOMERC_HPP
-#define GGL_PROJECTIONS_SOMERC_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace somerc{ 
-            static const double EPS = 1.e-10;
-            static const int NITER = 6;
-
-            struct par_somerc
-            {
-                double    K, c, hlf_e, kR, cosp0, sinp0;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_somerc_ellipsoid : public base_t_fi<base_somerc_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_somerc m_proj_parm;
-
-                inline base_somerc_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_somerc_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double phip, lamp, phipp, lampp, sp, cp;
-                
-                    sp = this->m_par.e * sin(lp_lat);
-                    phip = 2.* atan( exp( this->m_proj_parm.c * (
-                        log(tan(FORTPI + 0.5 * lp_lat)) - this->m_proj_parm.hlf_e * log((1. + sp)/(1. - sp)))
-                        + this->m_proj_parm.K)) - HALFPI;
-                    lamp = this->m_proj_parm.c * lp_lon;
-                    cp = cos(phip);
-                    phipp = aasin(this->m_proj_parm.cosp0 * sin(phip) - this->m_proj_parm.sinp0 * cp * cos(lamp));
-                    lampp = aasin(cp * sin(lamp) / cos(phipp));
-                    xy_x = this->m_proj_parm.kR * lampp;
-                    xy_y = this->m_proj_parm.kR * log(tan(FORTPI + 0.5 * phipp));
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double phip, lamp, phipp, lampp, cp, esp, con, delp;
-                    int i;
-                
-                    phipp = 2. * (atan(exp(xy_y / this->m_proj_parm.kR)) - FORTPI);
-                    lampp = xy_x / this->m_proj_parm.kR;
-                    cp = cos(phipp);
-                    phip = aasin(this->m_proj_parm.cosp0 * sin(phipp) + this->m_proj_parm.sinp0 * cp * cos(lampp));
-                    lamp = aasin(cp * sin(lampp) / cos(phip));
-                    con = (this->m_proj_parm.K - log(tan(FORTPI + 0.5 * phip)))/this->m_proj_parm.c;
-                    for (i = NITER; i ; --i) {
-                        esp = this->m_par.e * sin(phip);
-                        delp = (con + log(tan(FORTPI + 0.5 * phip)) - this->m_proj_parm.hlf_e *
-                            log((1. + esp)/(1. - esp)) ) *
-                            (1. - esp * esp) * cos(phip) * this->m_par.rone_es;
-                        phip -= delp;
-                        if (fabs(delp) < EPS)
-                            break;
-                    }
-                    if (i) {
-                        lp_lat = phip;
-                        lp_lon = lamp / this->m_proj_parm.c;
-                    } else
-                        throw proj_exception();
-                }
-            };
-
-            // Swiss. Obl. Mercator
-            template <typename Parameters>
-            void setup_somerc(Parameters& par, par_somerc& proj_parm)
-            {
-                double cp, phip0, sp;
-                proj_parm.hlf_e = 0.5 * par.e;
-                cp = cos(par.phi0);
-                cp *= cp;
-                proj_parm.c = sqrt(1 + par.es * cp * cp * par.rone_es);
-                sp = sin(par.phi0);
-                proj_parm.cosp0 = cos( phip0 = aasin(proj_parm.sinp0 = sp / proj_parm.c) );
-                sp *= par.e;
-                proj_parm.K = log(tan(FORTPI + 0.5 * phip0)) - proj_parm.c * (
-                    log(tan(FORTPI + 0.5 * par.phi0)) - proj_parm.hlf_e *
-                    log((1. + sp) / (1. - sp)));
-                proj_parm.kR = par.k0 * sqrt(par.one_es) / (1. - sp * sp);
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-            }
-
-        }} // namespace detail::somerc
-    #endif // doxygen 
-
-    /*!
-        \brief Swiss. Obl. Mercator projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Ellipsoid
-         - For CH1903
-        \par Example
-        \image html ex_somerc.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct somerc_ellipsoid : public detail::somerc::base_somerc_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline somerc_ellipsoid(const Parameters& par) : detail::somerc::base_somerc_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::somerc::setup_somerc(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class somerc_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<somerc_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void somerc_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("somerc", new somerc_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_SOMERC_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/stere.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/stere.hpp
deleted file mode 100644
index 77395aa..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/stere.hpp
+++ /dev/null
@@ -1,451 +0,0 @@
-#ifndef GGL_PROJECTIONS_STERE_HPP
-#define GGL_PROJECTIONS_STERE_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_tsfn.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace stere{ 
-            static const double EPS10 = 1.e-10;
-            static const double TOL = 1.e-8;
-            static const int NITER = 8;
-            static const double CONV = 1.e-10;
-            static const int S_POLE = 0;
-            static const int N_POLE = 1;
-            static const int OBLIQ = 2;
-            static const int EQUIT = 3;
-
-            struct par_stere
-            {
-                double phits;
-                double sinX1;
-                double cosX1;
-                double akm1;
-                int    mode;
-            };
-                inline double
-            ssfn_(double phit, double sinphi, double eccen) {
-                sinphi *= eccen;
-                return (tan (.5 * (HALFPI + phit)) *
-                   pow((1. - sinphi) / (1. + sinphi), .5 * eccen));
-            }
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_stere_ellipsoid : public base_t_fi<base_stere_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_stere m_proj_parm;
-
-                inline base_stere_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_stere_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double coslam, sinlam, sinX=0.0, cosX=0.0, X, A, sinphi;
-                
-                    coslam = cos(lp_lon);
-                    sinlam = sin(lp_lon);
-                    sinphi = sin(lp_lat);
-                    if (this->m_proj_parm.mode == OBLIQ || this->m_proj_parm.mode == EQUIT) {
-                        sinX = sin(X = 2. * atan(ssfn_(lp_lat, sinphi, this->m_par.e)) - HALFPI);
-                        cosX = cos(X);
-                    }
-                    switch (this->m_proj_parm.mode) {
-                    case OBLIQ:
-                        A = this->m_proj_parm.akm1 / (this->m_proj_parm.cosX1 * (1. + this->m_proj_parm.sinX1 * sinX +
-                           this->m_proj_parm.cosX1 * cosX * coslam));
-                        xy_y = A * (this->m_proj_parm.cosX1 * sinX - this->m_proj_parm.sinX1 * cosX * coslam);
-                        goto xmul;
-                    case EQUIT:
-                        A = 2. * this->m_proj_parm.akm1 / (1. + cosX * coslam);
-                        xy_y = A * sinX;
-                xmul:
-                        xy_x = A * cosX;
-                        break;
-                    case S_POLE:
-                        lp_lat = -lp_lat;
-                        coslam = - coslam;
-                        sinphi = -sinphi;
-                    case N_POLE:
-                        xy_x = this->m_proj_parm.akm1 * pj_tsfn(lp_lat, sinphi, this->m_par.e);
-                        xy_y = - xy_x * coslam;
-                        break;
-                    }
-                    xy_x = xy_x * sinlam;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double cosphi, sinphi, tp=0.0, phi_l=0.0, rho, halfe=0.0, halfpi=0.0;
-                    int i;
-                
-                    rho = boost::math::hypot(xy_x, xy_y);
-                    switch (this->m_proj_parm.mode) {
-                    case OBLIQ:
-                    case EQUIT:
-                        cosphi = cos( tp = 2. * atan2(rho * this->m_proj_parm.cosX1 , this->m_proj_parm.akm1) );
-                        sinphi = sin(tp);
-                                if( rho == 0.0 )
-                            phi_l = asin(cosphi * this->m_proj_parm.sinX1);
-                                else
-                            phi_l = asin(cosphi * this->m_proj_parm.sinX1 + (xy_y * sinphi * this->m_proj_parm.cosX1 / rho));
-                
-                        tp = tan(.5 * (HALFPI + phi_l));
-                        xy_x *= sinphi;
-                        xy_y = rho * this->m_proj_parm.cosX1 * cosphi - xy_y * this->m_proj_parm.sinX1* sinphi;
-                        halfpi = HALFPI;
-                        halfe = .5 * this->m_par.e;
-                        break;
-                    case N_POLE:
-                        xy_y = -xy_y;
-                    case S_POLE:
-                        phi_l = HALFPI - 2. * atan(tp = - rho / this->m_proj_parm.akm1);
-                        halfpi = -HALFPI;
-                        halfe = -.5 * this->m_par.e;
-                        break;
-                    }
-                    for (i = NITER; i--; phi_l = lp_lat) {
-                        sinphi = this->m_par.e * sin(phi_l);
-                        lp_lat = 2. * atan(tp * pow((1.+sinphi)/(1.-sinphi),
-                           halfe)) - halfpi;
-                        if (fabs(phi_l - lp_lat) < CONV) {
-                            if (this->m_proj_parm.mode == S_POLE)
-                                lp_lat = -lp_lat;
-                            lp_lon = (xy_x == 0. && xy_y == 0.) ? 0. : atan2(xy_x, xy_y);
-                            return;
-                        }
-                    }
-                    throw proj_exception();;
-                }
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_stere_spheroid : public base_t_fi<base_stere_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_stere m_proj_parm;
-
-                inline base_stere_spheroid(const Parameters& par)
-                    : base_t_fi<base_stere_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double  sinphi, cosphi, coslam, sinlam;
-                
-                    sinphi = sin(lp_lat);
-                    cosphi = cos(lp_lat);
-                    coslam = cos(lp_lon);
-                    sinlam = sin(lp_lon);
-                    switch (this->m_proj_parm.mode) {
-                    case EQUIT:
-                        xy_y = 1. + cosphi * coslam;
-                        goto oblcon;
-                    case OBLIQ:
-                        xy_y = 1. + this->m_proj_parm.sinX1 * sinphi + this->m_proj_parm.cosX1 * cosphi * coslam;
-                oblcon:
-                        if (xy_y <= EPS10) throw proj_exception();;
-                        xy_x = (xy_y = this->m_proj_parm.akm1 / xy_y) * cosphi * sinlam;
-                        xy_y *= (this->m_proj_parm.mode == EQUIT) ? sinphi :
-                           this->m_proj_parm.cosX1 * sinphi - this->m_proj_parm.sinX1 * cosphi * coslam;
-                        break;
-                    case N_POLE:
-                        coslam = - coslam;
-                        lp_lat = - lp_lat;
-                    case S_POLE:
-                        if (fabs(lp_lat - HALFPI) < TOL) throw proj_exception();;
-                        xy_x = sinlam * ( xy_y = this->m_proj_parm.akm1 * tan(FORTPI + .5 * lp_lat) );
-                        xy_y *= coslam;
-                        break;
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double  c, rh, sinc, cosc;
-                
-                    sinc = sin(c = 2. * atan((rh = boost::math::hypot(xy_x, xy_y)) / this->m_proj_parm.akm1));
-                    cosc = cos(c);
-                    lp_lon = 0.;
-                    switch (this->m_proj_parm.mode) {
-                    case EQUIT:
-                        if (fabs(rh) <= EPS10)
-                            lp_lat = 0.;
-                        else
-                            lp_lat = asin(xy_y * sinc / rh);
-                        if (cosc != 0. || xy_x != 0.)
-                            lp_lon = atan2(xy_x * sinc, cosc * rh);
-                        break;
-                    case OBLIQ:
-                        if (fabs(rh) <= EPS10)
-                            lp_lat = this->m_par.phi0;
-                        else
-                            lp_lat = asin(cosc * this->m_proj_parm.sinX1 + xy_y * sinc * this->m_proj_parm.cosX1 / rh);
-                        if ((c = cosc - this->m_proj_parm.sinX1 * sin(lp_lat)) != 0. || xy_x != 0.)
-                            lp_lon = atan2(xy_x * sinc * this->m_proj_parm.cosX1, c * rh);
-                        break;
-                    case N_POLE:
-                        xy_y = -xy_y;
-                    case S_POLE:
-                        if (fabs(rh) <= EPS10)
-                            lp_lat = this->m_par.phi0;
-                        else
-                            lp_lat = asin(this->m_proj_parm.mode == S_POLE ? - cosc : cosc);
-                        lp_lon = (xy_x == 0. && xy_y == 0.) ? 0. : atan2(xy_x, xy_y);
-                        break;
-                    }
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_stere& proj_parm)  /* general initialization */
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                double t;
-                if (fabs((t = fabs(par.phi0)) - HALFPI) < EPS10)
-                    proj_parm.mode = par.phi0 < 0. ? S_POLE : N_POLE;
-                else
-                    proj_parm.mode = t > EPS10 ? OBLIQ : EQUIT;
-                proj_parm.phits = fabs(proj_parm.phits);
-                if (par.es) {
-                    double X;
-                    switch (proj_parm.mode) {
-                    case N_POLE:
-                    case S_POLE:
-                        if (fabs(proj_parm.phits - HALFPI) < EPS10)
-                            proj_parm.akm1 = 2. * par.k0 /
-                               sqrt(pow(1+par.e,1+par.e)*pow(1-par.e,1-par.e));
-                        else {
-                            proj_parm.akm1 = cos(proj_parm.phits) /
-                               pj_tsfn(proj_parm.phits, t = sin(proj_parm.phits), par.e);
-                            t *= par.e;
-                            proj_parm.akm1 /= sqrt(1. - t * t);
-                        }
-                        break;
-                    case EQUIT:
-                        proj_parm.akm1 = 2. * par.k0;
-                        break;
-                    case OBLIQ:
-                        t = sin(par.phi0);
-                        X = 2. * atan(ssfn_(par.phi0, t, par.e)) - HALFPI;
-                        t *= par.e;
-                        proj_parm.akm1 = 2. * par.k0 * cos(par.phi0) / sqrt(1. - t * t);
-                        proj_parm.sinX1 = sin(X);
-                        proj_parm.cosX1 = cos(X);
-                        break;
-                    }
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-                } else {
-                    switch (proj_parm.mode) {
-                    case OBLIQ:
-                        proj_parm.sinX1 = sin(par.phi0);
-                        proj_parm.cosX1 = cos(par.phi0);
-                    case EQUIT:
-                        proj_parm.akm1 = 2. * par.k0;
-                        break;
-                    case S_POLE:
-                    case N_POLE:
-                        proj_parm.akm1 = fabs(proj_parm.phits - HALFPI) >= EPS10 ?
-                           cos(proj_parm.phits) / tan(FORTPI - .5 * proj_parm.phits) :
-                           2. * par.k0 ;
-                        break;
-                    }
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                }
-            }
-
-
-            // Stereographic
-            template <typename Parameters>
-            void setup_stere(Parameters& par, par_stere& proj_parm)
-            {
-                proj_parm.phits = pj_param(par.params, "tlat_ts").i ?
-                    proj_parm.phits = pj_param(par.params, "rlat_ts").f : HALFPI;
-                setup(par, proj_parm);
-            }
-
-            // Universal Polar Stereographic
-            template <typename Parameters>
-            void setup_ups(Parameters& par, par_stere& proj_parm)
-            {
-                /* International Ellipsoid */
-                par.phi0 = pj_param(par.params, "bsouth").i ? - HALFPI: HALFPI;
-                if (!par.es) throw proj_exception(-34);
-                par.k0 = .994;
-                par.x0 = 2000000.;
-                par.y0 = 2000000.;
-                proj_parm.phits = HALFPI;
-                par.lam0 = 0.;
-                setup(par, proj_parm);
-            }
-
-        }} // namespace detail::stere
-    #endif // doxygen 
-
-    /*!
-        \brief Stereographic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-         - Ellipsoid
-         - lat_ts=
-        \par Example
-        \image html ex_stere.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct stere_ellipsoid : public detail::stere::base_stere_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline stere_ellipsoid(const Parameters& par) : detail::stere::base_stere_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::stere::setup_stere(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Universal Polar Stereographic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-         - Ellipsoid
-         - south
-        \par Example
-        \image html ex_ups.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct ups_ellipsoid : public detail::stere::base_stere_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline ups_ellipsoid(const Parameters& par) : detail::stere::base_stere_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::stere::setup_ups(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Stereographic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-         - Ellipsoid
-         - lat_ts=
-        \par Example
-        \image html ex_stere.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct stere_spheroid : public detail::stere::base_stere_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline stere_spheroid(const Parameters& par) : detail::stere::base_stere_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::stere::setup_stere(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class stere_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    if (par.es)
-                        return new base_v_fi<stere_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                    else
-                        return new base_v_fi<stere_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class ups_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<ups_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void stere_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("stere", new stere_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("ups", new ups_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_STERE_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/sterea.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/sterea.hpp
deleted file mode 100644
index ad86c1c..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/sterea.hpp
+++ /dev/null
@@ -1,381 +0,0 @@
-#ifndef GGL_PROJECTIONS_STEREA_HPP
-#define GGL_PROJECTIONS_STEREA_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_gauss.hpp>
-
-#include <ggl/extensions/gis/projections/epsg_traits.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace sterea{ 
-            static const double DEL_TOL = 1.e-14;
-            static const int MAX_ITER = 10;
-
-            struct par_sterea
-            {
-                double phic0;
-                double cosc0, sinc0;
-                double R2;
-                gauss::GAUSS en;
-            };
-            
-            
-            
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_sterea_ellipsoid : public base_t_fi<base_sterea_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_sterea m_proj_parm;
-
-                inline base_sterea_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_sterea_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double cosc, sinc, cosl, k;
-                
-                    detail::gauss::gauss(m_proj_parm.en, lp_lon, lp_lat);
-                    sinc = sin(lp_lat);
-                    cosc = cos(lp_lat);
-                    cosl = cos(lp_lon);
-                    k = this->m_par.k0 * this->m_proj_parm.R2 / (1. + this->m_proj_parm.sinc0 * sinc + this->m_proj_parm.cosc0 * cosc * cosl);
-                    xy_x = k * cosc * sin(lp_lon);
-                    xy_y = k * (this->m_proj_parm.cosc0 * sinc - this->m_proj_parm.sinc0 * cosc * cosl);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double rho, c, sinc, cosc;
-                
-                    xy_x /= this->m_par.k0;
-                    xy_y /= this->m_par.k0;
-                    if((rho = boost::math::hypot(xy_x, xy_y))) {
-                        c = 2. * atan2(rho, this->m_proj_parm.R2);
-                        sinc = sin(c);
-                        cosc = cos(c);
-                        lp_lat = asin(cosc * this->m_proj_parm.sinc0 + xy_y * sinc * this->m_proj_parm.cosc0 / rho);
-                        lp_lon = atan2(xy_x * sinc, rho * this->m_proj_parm.cosc0 * cosc -
-                            xy_y * this->m_proj_parm.sinc0 * sinc);
-                    } else {
-                        lp_lat = this->m_proj_parm.phic0;
-                        lp_lon = 0.;
-                    }
-                    detail::gauss::inv_gauss(m_proj_parm.en, lp_lon, lp_lat);
-                }
-            };
-
-            // Oblique Stereographic Alternative
-            template <typename Parameters>
-            void setup_sterea(Parameters& par, par_sterea& proj_parm)
-            {
-                double R;
-                proj_parm.en = detail::gauss::gauss_ini(par.e, par.phi0, proj_parm.phic0, R);
-                proj_parm.sinc0 = sin(proj_parm.phic0);
-                proj_parm.cosc0 = cos(proj_parm.phic0);
-                proj_parm.R2 = 2. * R;
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-            }
-
-        }} // namespace detail::sterea
-    #endif // doxygen 
-
-    /*!
-        \brief Oblique Stereographic Alternative projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Azimuthal
-         - Spheroid
-         - Ellipsoid
-        \par Example
-        \image html ex_sterea.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct sterea_ellipsoid : public detail::sterea::base_sterea_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline sterea_ellipsoid(const Parameters& par) : detail::sterea::base_sterea_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::sterea::setup_sterea(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class sterea_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<sterea_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void sterea_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("sterea", new sterea_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    // Create EPSG specializations
-    // (Proof of Concept, only for some)
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2036, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2171, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2172, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2173, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2174, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2200, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2290, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2291, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2292, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2953, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2954, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3120, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<3328, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<22780, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<28991, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<28992, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<31600, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<31700, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef sterea_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +units=m";
-        }
-    };
-
-
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_STEREA_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/sts.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/sts.hpp
deleted file mode 100644
index 77ce71d..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/sts.hpp
+++ /dev/null
@@ -1,294 +0,0 @@
-#ifndef GGL_PROJECTIONS_STS_HPP
-#define GGL_PROJECTIONS_STS_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace sts{ 
-
-            struct par_sts
-            {
-                double C_x, C_y, C_p;
-                int tan_mode;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_sts_spheroid : public base_t_fi<base_sts_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_sts m_proj_parm;
-
-                inline base_sts_spheroid(const Parameters& par)
-                    : base_t_fi<base_sts_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double c;
-                
-                    xy_x = this->m_proj_parm.C_x * lp_lon * cos(lp_lat);
-                    xy_y = this->m_proj_parm.C_y;
-                    lp_lat *= this->m_proj_parm.C_p;
-                    c = cos(lp_lat);
-                    if (this->m_proj_parm.tan_mode) {
-                        xy_x *= c * c;
-                        xy_y *= tan(lp_lat);
-                    } else {
-                        xy_x /= c;
-                        xy_y *= sin(lp_lat);
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double c;
-                    
-                    xy_y /= this->m_proj_parm.C_y;
-                    c = cos(lp_lat = this->m_proj_parm.tan_mode ? atan(xy_y) : aasin(xy_y));
-                    lp_lat /= this->m_proj_parm.C_p;
-                    lp_lon = xy_x / (this->m_proj_parm.C_x * cos(lp_lat));
-                    if (this->m_proj_parm.tan_mode)
-                        lp_lon /= c * c;
-                    else
-                        lp_lon *= c;
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_sts& proj_parm, double p, double q, int mode) 
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                proj_parm.C_x = q / p;
-                proj_parm.C_y = p;
-                proj_parm.C_p = 1/ q;
-                proj_parm.tan_mode = mode;
-            }
-
-
-            // Kavraisky V
-            template <typename Parameters>
-            void setup_kav5(Parameters& par, par_sts& proj_parm)
-            {
-                setup(par, proj_parm, 1.50488, 1.35439, 0);
-            }
-
-            // Quartic Authalic
-            template <typename Parameters>
-            void setup_qua_aut(Parameters& par, par_sts& proj_parm)
-            {
-                setup(par, proj_parm, 2., 2., 0);
-            }
-
-            // McBryde-Thomas Flat-Polar Sine (No. 1)
-            template <typename Parameters>
-            void setup_mbt_s(Parameters& par, par_sts& proj_parm)
-            {
-                setup(par, proj_parm, 1.48875, 1.36509, 0);
-            }
-
-            // Foucaut
-            template <typename Parameters>
-            void setup_fouc(Parameters& par, par_sts& proj_parm)
-            {
-                setup(par, proj_parm, 2., 2., 1);
-            }
-
-        }} // namespace detail::sts
-    #endif // doxygen 
-
-    /*!
-        \brief Kavraisky V projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_kav5.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct kav5_spheroid : public detail::sts::base_sts_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline kav5_spheroid(const Parameters& par) : detail::sts::base_sts_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::sts::setup_kav5(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Quartic Authalic projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_qua_aut.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct qua_aut_spheroid : public detail::sts::base_sts_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline qua_aut_spheroid(const Parameters& par) : detail::sts::base_sts_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::sts::setup_qua_aut(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief McBryde-Thomas Flat-Polar Sine (No. 1) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_mbt_s.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct mbt_s_spheroid : public detail::sts::base_sts_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline mbt_s_spheroid(const Parameters& par) : detail::sts::base_sts_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::sts::setup_mbt_s(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Foucaut projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_fouc.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct fouc_spheroid : public detail::sts::base_sts_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline fouc_spheroid(const Parameters& par) : detail::sts::base_sts_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::sts::setup_fouc(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class kav5_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<kav5_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class qua_aut_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<qua_aut_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class mbt_s_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<mbt_s_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class fouc_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<fouc_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void sts_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("kav5", new kav5_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("qua_aut", new qua_aut_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("mbt_s", new mbt_s_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("fouc", new fouc_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_STS_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/tcc.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/tcc.hpp
deleted file mode 100644
index ee87c2d..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/tcc.hpp
+++ /dev/null
@@ -1,142 +0,0 @@
-#ifndef GGL_PROJECTIONS_TCC_HPP
-#define GGL_PROJECTIONS_TCC_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace tcc{ 
-            static const double EPS10 = 1.e-10;
-
-            struct par_tcc
-            {
-                double ap;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_tcc_spheroid : public base_t_f<base_tcc_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_tcc m_proj_parm;
-
-                inline base_tcc_spheroid(const Parameters& par)
-                    : base_t_f<base_tcc_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double b, bt;
-                
-                    b = cos(lp_lat) * sin(lp_lon);
-                    if ((bt = 1. - b * b) < EPS10) throw proj_exception();;
-                    xy_x = b / sqrt(bt);
-                    xy_y = atan2(tan(lp_lat) , cos(lp_lon));
-                }
-            };
-
-            // Transverse Central Cylindrical
-            template <typename Parameters>
-            void setup_tcc(Parameters& par, par_tcc& proj_parm)
-            {
-                par.es = 0.;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::tcc
-    #endif // doxygen 
-
-    /*!
-        \brief Transverse Central Cylindrical projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - no inverse
-        \par Example
-        \image html ex_tcc.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct tcc_spheroid : public detail::tcc::base_tcc_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline tcc_spheroid(const Parameters& par) : detail::tcc::base_tcc_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::tcc::setup_tcc(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class tcc_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<tcc_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void tcc_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("tcc", new tcc_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_TCC_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/tcea.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/tcea.hpp
deleted file mode 100644
index 7d878a2..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/tcea.hpp
+++ /dev/null
@@ -1,149 +0,0 @@
-#ifndef GGL_PROJECTIONS_TCEA_HPP
-#define GGL_PROJECTIONS_TCEA_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace tcea{ 
-
-            struct par_tcea
-            {
-                double rk0;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_tcea_spheroid : public base_t_fi<base_tcea_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_tcea m_proj_parm;
-
-                inline base_tcea_spheroid(const Parameters& par)
-                    : base_t_fi<base_tcea_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = this->m_proj_parm.rk0 * cos(lp_lat) * sin(lp_lon);
-                    xy_y = this->m_par.k0 * (atan2(tan(lp_lat), cos(lp_lon)) - this->m_par.phi0);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double t;
-                
-                    xy_y = xy_y * this->m_proj_parm.rk0 + this->m_par.phi0;
-                    xy_x *= this->m_par.k0;
-                    t = sqrt(1. - xy_x * xy_x);
-                    lp_lat = asin(t * sin(xy_y));
-                    lp_lon = atan2(xy_x, t * cos(xy_y));
-                }
-            };
-
-            // Transverse Cylindrical Equal Area
-            template <typename Parameters>
-            void setup_tcea(Parameters& par, par_tcea& proj_parm)
-            {
-                proj_parm.rk0 = 1 / par.k0;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                par.es = 0.;
-            }
-
-        }} // namespace detail::tcea
-    #endif // doxygen 
-
-    /*!
-        \brief Transverse Cylindrical Equal Area projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-        \par Example
-        \image html ex_tcea.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct tcea_spheroid : public detail::tcea::base_tcea_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline tcea_spheroid(const Parameters& par) : detail::tcea::base_tcea_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::tcea::setup_tcea(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class tcea_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<tcea_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void tcea_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("tcea", new tcea_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_TCEA_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/tmerc.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/tmerc.hpp
deleted file mode 100644
index 7cc8ec1..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/tmerc.hpp
+++ /dev/null
@@ -1,458 +0,0 @@
-#ifndef GGL_PROJECTIONS_TMERC_HPP
-#define GGL_PROJECTIONS_TMERC_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-#include <ggl/extensions/gis/projections/impl/function_overloads.hpp>
-#include <ggl/extensions/gis/projections/impl/pj_mlfn.hpp>
-
-#include <ggl/extensions/gis/projections/epsg_traits.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace tmerc{ 
-            static const double EPS10 = 1.e-10;
-            static const double FC1 = 1.;
-            static const double FC2 = .5;
-            static const double FC3 = .16666666666666666666;
-            static const double FC4 = .08333333333333333333;
-            static const double FC5 = .05;
-            static const double FC6 = .03333333333333333333;
-            static const double FC7 = .02380952380952380952;
-            static const double FC8 = .01785714285714285714;
-
-            struct par_tmerc
-            {
-                double    esp;
-                double    ml0;
-                double    en[EN_SIZE];
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_tmerc_ellipsoid : public base_t_fi<base_tmerc_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_tmerc m_proj_parm;
-
-                inline base_tmerc_ellipsoid(const Parameters& par)
-                    : base_t_fi<base_tmerc_ellipsoid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double al, als, n, cosphi, sinphi, t;
-                
-                        /*
-                         * Fail if our longitude is more than 90 degrees from the 
-                         * central meridian since the results are essentially garbage. 
-                         * Is error -20 really an appropriate return value?
-                         * 
-                         *  http://trac.osgeo.org/proj/ticket/5
-                         */
-                        if( lp_lon < -HALFPI || lp_lon > HALFPI )
-                        {
-                            xy_x = HUGE_VAL;
-                            xy_y = HUGE_VAL;
-                            throw proj_exception(  -14);
-                            return;
-                        }
-                
-                    sinphi = sin(lp_lat); cosphi = cos(lp_lat);
-                    t = fabs(cosphi) > 1e-10 ? sinphi/cosphi : 0.;
-                    t *= t;
-                    al = cosphi * lp_lon;
-                    als = al * al;
-                    al /= sqrt(1. - this->m_par.es * sinphi * sinphi);
-                    n = this->m_proj_parm.esp * cosphi * cosphi;
-                    xy_x = this->m_par.k0 * al * (FC1 +
-                        FC3 * als * (1. - t + n +
-                        FC5 * als * (5. + t * (t - 18.) + n * (14. - 58. * t)
-                        + FC7 * als * (61. + t * ( t * (179. - t) - 479. ) )
-                        )));
-                    xy_y = this->m_par.k0 * (pj_mlfn(lp_lat, sinphi, cosphi, this->m_proj_parm.en) - this->m_proj_parm.ml0 +
-                        sinphi * al * lp_lon * FC2 * ( 1. +
-                        FC4 * als * (5. - t + n * (9. + 4. * n) +
-                        FC6 * als * (61. + t * (t - 58.) + n * (270. - 330 * t)
-                        + FC8 * als * (1385. + t * ( t * (543. - t) - 3111.) )
-                        ))));
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double n, con, cosphi, d, ds, sinphi, t;
-                
-                    lp_lat = pj_inv_mlfn(this->m_proj_parm.ml0 + xy_y / this->m_par.k0, this->m_par.es, this->m_proj_parm.en);
-                    if (fabs(lp_lat) >= HALFPI) {
-                        lp_lat = xy_y < 0. ? -HALFPI : HALFPI;
-                        lp_lon = 0.;
-                    } else {
-                        sinphi = sin(lp_lat);
-                        cosphi = cos(lp_lat);
-                        t = fabs(cosphi) > 1e-10 ? sinphi/cosphi : 0.;
-                        n = this->m_proj_parm.esp * cosphi * cosphi;
-                        d = xy_x * sqrt(con = 1. - this->m_par.es * sinphi * sinphi) / this->m_par.k0;
-                        con *= t;
-                        t *= t;
-                        ds = d * d;
-                        lp_lat -= (con * ds / (1.-this->m_par.es)) * FC2 * (1. -
-                            ds * FC4 * (5. + t * (3. - 9. *  n) + n * (1. - 4 * n) -
-                            ds * FC6 * (61. + t * (90. - 252. * n +
-                                45. * t) + 46. * n
-                           - ds * FC8 * (1385. + t * (3633. + t * (4095. + 1574. * t)) )
-                            )));
-                        lp_lon = d*(FC1 -
-                            ds*FC3*( 1. + 2.*t + n -
-                            ds*FC5*(5. + t*(28. + 24.*t + 8.*n) + 6.*n
-                           - ds * FC7 * (61. + t * (662. + t * (1320. + 720. * t)) )
-                        ))) / cosphi;
-                    }
-                }
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_tmerc_spheroid : public base_t_fi<base_tmerc_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_tmerc m_proj_parm;
-
-                inline base_tmerc_spheroid(const Parameters& par)
-                    : base_t_fi<base_tmerc_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double b, cosphi;
-                
-                        /*
-                         * Fail if our longitude is more than 90 degrees from the 
-                         * central meridian since the results are essentially garbage. 
-                         * Is error -20 really an appropriate return value?
-                         * 
-                         *  http://trac.osgeo.org/proj/ticket/5
-                         */
-                        if( lp_lon < -HALFPI || lp_lon > HALFPI )
-                        {
-                            xy_x = HUGE_VAL;
-                            xy_y = HUGE_VAL;
-                            throw proj_exception(  -14);
-                            return;
-                        }
-                
-                    b = (cosphi = cos(lp_lat)) * sin(lp_lon);
-                    if (fabs(fabs(b) - 1.) <= EPS10) throw proj_exception();;
-                    xy_x = this->m_proj_parm.ml0 * log((1. + b) / (1. - b));
-                    if ((b = fabs( xy_y = cosphi * cos(lp_lon) / sqrt(1. - b * b) )) >= 1.) {
-                        if ((b - 1.) > EPS10) throw proj_exception();
-                        else xy_y = 0.;
-                    } else
-                        xy_y = acos(xy_y);
-                    if (lp_lat < 0.) xy_y = -xy_y;
-                    xy_y = this->m_proj_parm.esp * (xy_y - this->m_par.phi0);
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double h, g;
-                
-                    h = exp(xy_x / this->m_proj_parm.esp);
-                    g = .5 * (h - 1. / h);
-                    h = cos(this->m_par.phi0 + xy_y / this->m_proj_parm.esp);
-                    lp_lat = asin(sqrt((1. - h * h) / (1. + g * g)));
-                    if (xy_y < 0.) lp_lat = -lp_lat;
-                    lp_lon = (g || h) ? atan2(g, h) : 0.;
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_tmerc& proj_parm)  /* general initialization */
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                if (par.es) {
-                    pj_enfn(par.es, proj_parm.en);
-            
-                    proj_parm.ml0 = pj_mlfn(par.phi0, sin(par.phi0), cos(par.phi0), proj_parm.en);
-                    proj_parm.esp = par.es / (1. - par.es);
-                // par.inv = e_inverse;
-                // par.fwd = e_forward;
-                } else {
-                    proj_parm.esp = par.k0;
-                    proj_parm.ml0 = .5 * proj_parm.esp;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                }
-            }
-
-
-            // Transverse Mercator
-            template <typename Parameters>
-            void setup_tmerc(Parameters& par, par_tmerc& proj_parm)
-            {
-                setup(par, proj_parm);
-            }
-
-            // Universal Transverse Mercator (UTM)
-            template <typename Parameters>
-            void setup_utm(Parameters& par, par_tmerc& proj_parm)
-            {
-                int zone;
-                if (!par.es) throw proj_exception(-34);
-                par.y0 = pj_param(par.params, "bsouth").i ? 10000000. : 0.;
-                par.x0 = 500000.;
-                if (pj_param(par.params, "tzone").i) /* zone input ? */
-                    if ((zone = pj_param(par.params, "izone").i) > 0 && zone <= 60)
-                        --zone;
-                    else
-                        throw proj_exception(-35);
-                else /* nearest central meridian input */
-                    if ((zone = int_floor((adjlon(par.lam0) + PI) * 30. / PI)) < 0)
-                        zone = 0;
-                    else if (zone >= 60)
-                        zone = 59;
-                par.lam0 = (zone + .5) * PI / 30. - PI;
-                par.k0 = 0.9996;
-                par.phi0 = 0.;
-                setup(par, proj_parm);
-            }
-
-        }} // namespace detail::tmerc
-    #endif // doxygen 
-
-    /*!
-        \brief Transverse Mercator projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - Ellipsoid
-        \par Example
-        \image html ex_tmerc.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct tmerc_ellipsoid : public detail::tmerc::base_tmerc_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline tmerc_ellipsoid(const Parameters& par) : detail::tmerc::base_tmerc_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::tmerc::setup_tmerc(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Universal Transverse Mercator (UTM) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - zone= south
-        \par Example
-        \image html ex_utm.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct utm_ellipsoid : public detail::tmerc::base_tmerc_ellipsoid<Geographic, Cartesian, Parameters>
-    {
-        inline utm_ellipsoid(const Parameters& par) : detail::tmerc::base_tmerc_ellipsoid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::tmerc::setup_utm(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Transverse Mercator projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Cylindrical
-         - Spheroid
-         - Ellipsoid
-        \par Example
-        \image html ex_tmerc.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct tmerc_spheroid : public detail::tmerc::base_tmerc_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline tmerc_spheroid(const Parameters& par) : detail::tmerc::base_tmerc_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::tmerc::setup_tmerc(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class tmerc_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    if (par.es)
-                        return new base_v_fi<tmerc_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                    else
-                        return new base_v_fi<tmerc_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class utm_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<utm_ellipsoid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void tmerc_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("tmerc", new tmerc_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("utm", new utm_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    // Create EPSG specializations
-    // (Proof of Concept, only for some)
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2000, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef tmerc_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2001, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef tmerc_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2002, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef tmerc_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2003, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef tmerc_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<2039, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef tmerc_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<29118, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef utm_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=utm +zone=18 +ellps=GRS67 +units=m";
-        }
-    };
-
-
-    template<typename LatLongRadian, typename Cartesian, typename Parameters>
-    struct epsg_traits<29119, LatLongRadian, Cartesian, Parameters>
-    {
-        typedef utm_ellipsoid<LatLongRadian, Cartesian, Parameters> type;
-        static inline std::string par()
-        {
-            return "+proj=utm +zone=19 +ellps=GRS67 +units=m";
-        }
-    };
-
-
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_TMERC_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/tpeqd.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/tpeqd.hpp
deleted file mode 100644
index 38d1920..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/tpeqd.hpp
+++ /dev/null
@@ -1,198 +0,0 @@
-#ifndef GGL_PROJECTIONS_TPEQD_HPP
-#define GGL_PROJECTIONS_TPEQD_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace tpeqd{ 
-
-            struct par_tpeqd
-            {
-                double cp1, sp1, cp2, sp2, ccs, cs, sc, r2z0, z02, dlam2;
-                double hz0, thz0, rhshz0, ca, sa, lp, lamc;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_tpeqd_spheroid : public base_t_fi<base_tpeqd_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_tpeqd m_proj_parm;
-
-                inline base_tpeqd_spheroid(const Parameters& par)
-                    : base_t_fi<base_tpeqd_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double t, z1, z2, dl1, dl2, sp, cp;
-                
-                    sp = sin(lp_lat);
-                    cp = cos(lp_lat);
-                    z1 = aacos(this->m_proj_parm.sp1 * sp + this->m_proj_parm.cp1 * cp * cos(dl1 = lp_lon + this->m_proj_parm.dlam2));
-                    z2 = aacos(this->m_proj_parm.sp2 * sp + this->m_proj_parm.cp2 * cp * cos(dl2 = lp_lon - this->m_proj_parm.dlam2));
-                    z1 *= z1;
-                    z2 *= z2;
-                    xy_x = this->m_proj_parm.r2z0 * (t = z1 - z2);
-                    t = this->m_proj_parm.z02 - t;
-                    xy_y = this->m_proj_parm.r2z0 * asqrt(4. * this->m_proj_parm.z02 * z2 - t * t);
-                    if ((this->m_proj_parm.ccs * sp - cp * (this->m_proj_parm.cs * sin(dl1) - this->m_proj_parm.sc * sin(dl2))) < 0.)
-                        xy_y = -xy_y;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double cz1, cz2, s, d, cp, sp;
-                
-                    cz1 = cos(boost::math::hypot(xy_y, xy_x + this->m_proj_parm.hz0));
-                    cz2 = cos(boost::math::hypot(xy_y, xy_x - this->m_proj_parm.hz0));
-                    s = cz1 + cz2;
-                    d = cz1 - cz2;
-                    lp_lon = - atan2(d, (s * this->m_proj_parm.thz0));
-                    lp_lat = aacos(boost::math::hypot(this->m_proj_parm.thz0 * s, d) * this->m_proj_parm.rhshz0);
-                    if ( xy_y < 0. )
-                        lp_lat = - lp_lat;
-                    /* lam--phi now in system relative to P1--P2 base equator */
-                    sp = sin(lp_lat);
-                    cp = cos(lp_lat);
-                    lp_lat = aasin(this->m_proj_parm.sa * sp + this->m_proj_parm.ca * cp * (s = cos(lp_lon -= this->m_proj_parm.lp)));
-                    lp_lon = atan2(cp * sin(lp_lon), this->m_proj_parm.sa * cp * s - this->m_proj_parm.ca * sp) + this->m_proj_parm.lamc;
-                }
-            };
-
-            // Two Point Equidistant
-            template <typename Parameters>
-            void setup_tpeqd(Parameters& par, par_tpeqd& proj_parm)
-            {
-                double lam_1, lam_2, phi_1, phi_2, A12, pp;
-                /* get control point locations */
-                phi_1 = pj_param(par.params, "rlat_1").f;
-                lam_1 = pj_param(par.params, "rlon_1").f;
-                phi_2 = pj_param(par.params, "rlat_2").f;
-                lam_2 = pj_param(par.params, "rlon_2").f;
-                if (phi_1 == phi_2 && lam_1 == lam_2) throw proj_exception(-25);
-                par.lam0 = adjlon(0.5 * (lam_1 + lam_2));
-                proj_parm.dlam2 = adjlon(lam_2 - lam_1);
-                proj_parm.cp1 = cos(phi_1);
-                proj_parm.cp2 = cos(phi_2);
-                proj_parm.sp1 = sin(phi_1);
-                proj_parm.sp2 = sin(phi_2);
-                proj_parm.cs = proj_parm.cp1 * proj_parm.sp2;
-                proj_parm.sc = proj_parm.sp1 * proj_parm.cp2;
-                proj_parm.ccs = proj_parm.cp1 * proj_parm.cp2 * sin(proj_parm.dlam2);
-                proj_parm.z02 = aacos(proj_parm.sp1 * proj_parm.sp2 + proj_parm.cp1 * proj_parm.cp2 * cos(proj_parm.dlam2));
-                proj_parm.hz0 = .5 * proj_parm.z02;
-                A12 = atan2(proj_parm.cp2 * sin(proj_parm.dlam2),
-                    proj_parm.cp1 * proj_parm.sp2 - proj_parm.sp1 * proj_parm.cp2 * cos(proj_parm.dlam2));
-                proj_parm.ca = cos(pp = aasin(proj_parm.cp1 * sin(A12)));
-                proj_parm.sa = sin(pp);
-                proj_parm.lp = adjlon(atan2(proj_parm.cp1 * cos(A12), proj_parm.sp1) - proj_parm.hz0);
-                proj_parm.dlam2 *= .5;
-                proj_parm.lamc = HALFPI - atan2(sin(A12) * proj_parm.sp1, cos(A12)) - proj_parm.dlam2;
-                proj_parm.thz0 = tan(proj_parm.hz0);
-                proj_parm.rhshz0 = .5 / sin(proj_parm.hz0);
-                proj_parm.r2z0 = 0.5 / proj_parm.z02;
-                proj_parm.z02 *= proj_parm.z02;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-                par.es = 0.;
-            }
-
-        }} // namespace detail::tpeqd
-    #endif // doxygen 
-
-    /*!
-        \brief Two Point Equidistant projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - lat_1= lon_1= lat_2= lon_2=
-        \par Example
-        \image html ex_tpeqd.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct tpeqd_spheroid : public detail::tpeqd::base_tpeqd_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline tpeqd_spheroid(const Parameters& par) : detail::tpeqd::base_tpeqd_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::tpeqd::setup_tpeqd(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class tpeqd_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<tpeqd_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void tpeqd_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("tpeqd", new tpeqd_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_TPEQD_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/urm5.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/urm5.hpp
deleted file mode 100644
index e019cae..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/urm5.hpp
+++ /dev/null
@@ -1,149 +0,0 @@
-#ifndef GGL_PROJECTIONS_URM5_HPP
-#define GGL_PROJECTIONS_URM5_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace urm5{ 
-
-            struct par_urm5
-            {
-                double m, rmn, q3, n;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_urm5_spheroid : public base_t_f<base_urm5_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_urm5 m_proj_parm;
-
-                inline base_urm5_spheroid(const Parameters& par)
-                    : base_t_f<base_urm5_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double t;
-                
-                    t = lp_lat = aasin(this->m_proj_parm.n * sin(lp_lat));
-                    xy_x = this->m_proj_parm.m * lp_lon * cos(lp_lat);
-                    t *= t;
-                    xy_y = lp_lat * (1. + t * this->m_proj_parm.q3) * this->m_proj_parm.rmn;
-                }
-            };
-
-            // Urmaev V
-            template <typename Parameters>
-            void setup_urm5(Parameters& par, par_urm5& proj_parm)
-            {
-                double alpha, t;
-                proj_parm.n = pj_param(par.params, "dn").f;
-                proj_parm.q3 = pj_param(par.params, "dq").f / 3.;
-                alpha = pj_param(par.params, "ralpha").f;
-                t = proj_parm.n * sin(alpha);
-                proj_parm.m = cos(alpha) / sqrt(1. - t * t);
-                proj_parm.rmn = 1. / (proj_parm.m * proj_parm.n);
-                par.es = 0.;
-                // par.inv = 0;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::urm5
-    #endif // doxygen 
-
-    /*!
-        \brief Urmaev V projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-         - n= q= alphi=
-        \par Example
-        \image html ex_urm5.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct urm5_spheroid : public detail::urm5::base_urm5_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline urm5_spheroid(const Parameters& par) : detail::urm5::base_urm5_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::urm5::setup_urm5(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class urm5_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<urm5_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void urm5_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("urm5", new urm5_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_URM5_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/urmfps.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/urmfps.hpp
deleted file mode 100644
index 3dd5a37..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/urmfps.hpp
+++ /dev/null
@@ -1,205 +0,0 @@
-#ifndef GGL_PROJECTIONS_URMFPS_HPP
-#define GGL_PROJECTIONS_URMFPS_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/concept_check.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace urmfps{ 
-            static const double C_x = 0.8773826753;
-            static const double Cy = 1.139753528477;
-
-            struct par_urmfps
-            {
-                double    n, C_y;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_urmfps_spheroid : public base_t_fi<base_urmfps_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_urmfps m_proj_parm;
-
-                inline base_urmfps_spheroid(const Parameters& par)
-                    : base_t_fi<base_urmfps_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    lp_lat = aasin(this->m_proj_parm.n * sin(lp_lat));
-                    xy_x = C_x * lp_lon * cos(lp_lat);
-                    xy_y = this->m_proj_parm.C_y * lp_lat;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    xy_y /= this->m_proj_parm.C_y;
-                    lp_lat = aasin(sin(xy_y) / this->m_proj_parm.n);
-                    lp_lon = xy_x / (C_x * cos(xy_y));
-                }
-            };
-
-            template <typename Parameters>
-            void setup(Parameters& par, par_urmfps& proj_parm) 
-            {
-                boost::ignore_unused_variable_warning(par);
-                boost::ignore_unused_variable_warning(proj_parm);
-                proj_parm.C_y = Cy / proj_parm.n;
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-
-            // Urmaev Flat-Polar Sinusoidal
-            template <typename Parameters>
-            void setup_urmfps(Parameters& par, par_urmfps& proj_parm)
-            {
-                if (pj_param(par.params, "tn").i) {
-                    proj_parm.n = pj_param(par.params, "dn").f;
-                    if (proj_parm.n <= 0. || proj_parm.n > 1.)
-                        throw proj_exception(-40);
-                } else
-                    throw proj_exception(-40);
-                setup(par, proj_parm);
-            }
-
-            // Wagner I (Kavraisky VI)
-            template <typename Parameters>
-            void setup_wag1(Parameters& par, par_urmfps& proj_parm)
-            {
-                proj_parm.n = 0.8660254037844386467637231707;
-                setup(par, proj_parm);
-            }
-
-        }} // namespace detail::urmfps
-    #endif // doxygen 
-
-    /*!
-        \brief Urmaev Flat-Polar Sinusoidal projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-         - n=
-        \par Example
-        \image html ex_urmfps.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct urmfps_spheroid : public detail::urmfps::base_urmfps_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline urmfps_spheroid(const Parameters& par) : detail::urmfps::base_urmfps_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::urmfps::setup_urmfps(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief Wagner I (Kavraisky VI) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_wag1.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct wag1_spheroid : public detail::urmfps::base_urmfps_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline wag1_spheroid(const Parameters& par) : detail::urmfps::base_urmfps_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::urmfps::setup_wag1(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class urmfps_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<urmfps_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class wag1_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<wag1_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void urmfps_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("urmfps", new urmfps_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("wag1", new wag1_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_URMFPS_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/vandg.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/vandg.hpp
deleted file mode 100644
index 4812ef3..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/vandg.hpp
+++ /dev/null
@@ -1,201 +0,0 @@
-#ifndef GGL_PROJECTIONS_VANDG_HPP
-#define GGL_PROJECTIONS_VANDG_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace vandg{ 
-            static const double TOL = 1.e-10;
-            static const double THIRD = .33333333333333333333;
-            static const double TWO_THRD = .66666666666666666666;
-            static const double C2_27 = .07407407407407407407;
-            static const double PI4_3 = 4.18879020478639098458;
-            static const double PISQ = 9.86960440108935861869;
-            static const double TPISQ = 19.73920880217871723738;
-            static const double HPISQ = 4.93480220054467930934;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_vandg_spheroid : public base_t_fi<base_vandg_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_vandg_spheroid(const Parameters& par)
-                    : base_t_fi<base_vandg_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double  al, al2, g, g2, p2;
-                
-                    p2 = fabs(lp_lat / HALFPI);
-                    if ((p2 - TOL) > 1.) throw proj_exception();;
-                    if (p2 > 1.)
-                        p2 = 1.;
-                    if (fabs(lp_lat) <= TOL) {
-                        xy_x = lp_lon;
-                        xy_y = 0.;
-                    } else if (fabs(lp_lon) <= TOL || fabs(p2 - 1.) < TOL) {
-                        xy_x = 0.;
-                        xy_y = PI * tan(.5 * asin(p2));
-                        if (lp_lat < 0.) xy_y = -xy_y;
-                    } else {
-                        al = .5 * fabs(PI / lp_lon - lp_lon / PI);
-                        al2 = al * al;
-                        g = sqrt(1. - p2 * p2);
-                        g = g / (p2 + g - 1.);
-                        g2 = g * g;
-                        p2 = g * (2. / p2 - 1.);
-                        p2 = p2 * p2;
-                        xy_x = g - p2; g = p2 + al2;
-                        xy_x = PI * (al * xy_x + sqrt(al2 * xy_x * xy_x - g * (g2 - p2))) / g;
-                        if (lp_lon < 0.) xy_x = -xy_x;
-                        xy_y = fabs(xy_x / PI);
-                        xy_y = 1. - xy_y * (xy_y + 2. * al);
-                        if (xy_y < -TOL) throw proj_exception();;
-                        if (xy_y < 0.)    xy_y = 0.;
-                        else        xy_y = sqrt(xy_y) * (lp_lat < 0. ? -PI : PI);
-                    }
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    double t, c0, c1, c2, c3, al, r2, r, m, d, ay, x2, y2;
-                
-                    x2 = xy_x * xy_x;
-                    if ((ay = fabs(xy_y)) < TOL) {
-                        lp_lat = 0.;
-                        t = x2 * x2 + TPISQ * (x2 + HPISQ);
-                        lp_lon = fabs(xy_x) <= TOL ? 0. :
-                           .5 * (x2 - PISQ + sqrt(t)) / xy_x;
-                            return;
-                    }
-                    y2 = xy_y * xy_y;
-                    r = x2 + y2;    r2 = r * r;
-                    c1 = - PI * ay * (r + PISQ);
-                    c3 = r2 + TWOPI * (ay * r + PI * (y2 + PI * (ay + HALFPI)));
-                    c2 = c1 + PISQ * (r - 3. *  y2);
-                    c0 = PI * ay;
-                    c2 /= c3;
-                    al = c1 / c3 - THIRD * c2 * c2;
-                    m = 2. * sqrt(-THIRD * al);
-                    d = C2_27 * c2 * c2 * c2 + (c0 * c0 - THIRD * c2 * c1) / c3;
-                    if (((t = fabs(d = 3. * d / (al * m))) - TOL) <= 1.) {
-                        d = t > 1. ? (d > 0. ? 0. : PI) : acos(d);
-                        lp_lat = PI * (m * cos(d * THIRD + PI4_3) - THIRD * c2);
-                        if (xy_y < 0.) lp_lat = -lp_lat;
-                        t = r2 + TPISQ * (x2 - y2 + HPISQ);
-                        lp_lon = fabs(xy_x) <= TOL ? 0. :
-                           .5 * (r - PISQ + (t <= 0. ? 0. : sqrt(t))) / xy_x;
-                    } else
-                        throw proj_exception();;
-                }
-            };
-
-            // van der Grinten (I)
-            template <typename Parameters>
-            void setup_vandg(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::vandg
-    #endif // doxygen 
-
-    /*!
-        \brief van der Grinten (I) projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-        \par Example
-        \image html ex_vandg.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct vandg_spheroid : public detail::vandg::base_vandg_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline vandg_spheroid(const Parameters& par) : detail::vandg::base_vandg_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::vandg::setup_vandg(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class vandg_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<vandg_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void vandg_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("vandg", new vandg_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_VANDG_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/vandg2.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/vandg2.hpp
deleted file mode 100644
index ea3c149..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/vandg2.hpp
+++ /dev/null
@@ -1,205 +0,0 @@
-#ifndef GGL_PROJECTIONS_VANDG2_HPP
-#define GGL_PROJECTIONS_VANDG2_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace vandg2{ 
-            static const double TOL = 1e-10;
-            static const double TWORPI = 0.63661977236758134308;
-
-            struct par_vandg2
-            {
-                int    vdg3;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_vandg2_spheroid : public base_t_f<base_vandg2_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_vandg2 m_proj_parm;
-
-                inline base_vandg2_spheroid(const Parameters& par)
-                    : base_t_f<base_vandg2_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double x1, at, bt, ct;
-                
-                    bt = fabs(TWORPI * lp_lat);
-                    if ((ct = 1. - bt * bt) < 0.)
-                        ct = 0.;
-                    else
-                        ct = sqrt(ct);
-                    if (fabs(lp_lon) < TOL) {
-                        xy_x = 0.;
-                        xy_y = PI * (lp_lat < 0. ? -bt : bt) / (1. + ct);
-                    } else {
-                        at = 0.5 * fabs(PI / lp_lon - lp_lon / PI);
-                        if (this->m_proj_parm.vdg3) {
-                            x1 = bt / (1. + ct);
-                            xy_x = PI * (sqrt(at * at + 1. - x1 * x1) - at);
-                            xy_y = PI * x1;
-                        } else {
-                            x1 = (ct * sqrt(1. + at * at) - at * ct * ct) /
-                                (1. + at * at * bt * bt);
-                            xy_x = PI * x1;
-                            xy_y = PI * sqrt(1. - x1 * (x1 + 2. * at) + TOL);
-                        }
-                        if ( lp_lon < 0.) xy_x = -xy_x;
-                        if ( lp_lat < 0.) xy_y = -xy_y;
-                    }
-                }
-            };
-
-            // van der Grinten II
-            template <typename Parameters>
-            void setup_vandg2(Parameters& par, par_vandg2& proj_parm)
-            {
-                proj_parm.vdg3 = 0;
-                // par.inv = 0;
-                // par.fwd = s_forward;
-            }
-
-            // van der Grinten III
-            template <typename Parameters>
-            void setup_vandg3(Parameters& par, par_vandg2& proj_parm)
-            {
-                proj_parm.vdg3 = 1;
-                par.es = 0.;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::vandg2
-    #endif // doxygen 
-
-    /*!
-        \brief van der Grinten II projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-        \par Example
-        \image html ex_vandg2.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct vandg2_spheroid : public detail::vandg2::base_vandg2_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline vandg2_spheroid(const Parameters& par) : detail::vandg2::base_vandg2_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::vandg2::setup_vandg2(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    /*!
-        \brief van der Grinten III projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-        \par Example
-        \image html ex_vandg3.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct vandg3_spheroid : public detail::vandg2::base_vandg2_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline vandg3_spheroid(const Parameters& par) : detail::vandg2::base_vandg2_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::vandg2::setup_vandg3(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class vandg2_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<vandg2_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class vandg3_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<vandg3_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void vandg2_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("vandg2", new vandg2_entry<Geographic, Cartesian, Parameters>);
-            factory.add_to_factory("vandg3", new vandg3_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_VANDG2_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/vandg4.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/vandg4.hpp
deleted file mode 100644
index d4a7ca0..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/vandg4.hpp
+++ /dev/null
@@ -1,163 +0,0 @@
-#ifndef GGL_PROJECTIONS_VANDG4_HPP
-#define GGL_PROJECTIONS_VANDG4_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace vandg4{ 
-            static const double TOL = 1e-10;
-            static const double TWORPI = 0.63661977236758134308;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_vandg4_spheroid : public base_t_f<base_vandg4_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_vandg4_spheroid(const Parameters& par)
-                    : base_t_f<base_vandg4_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double x1, t, bt, ct, ft, bt2, ct2, dt, dt2;
-                
-                    if (fabs(lp_lat) < TOL) {
-                        xy_x = lp_lon;
-                        xy_y = 0.;
-                    } else if (fabs(lp_lon) < TOL || fabs(fabs(lp_lat) - HALFPI) < TOL) {
-                        xy_x = 0.;
-                        xy_y = lp_lat;
-                    } else {
-                        bt = fabs(TWORPI * lp_lat);
-                        bt2 = bt * bt;
-                        ct = 0.5 * (bt * (8. - bt * (2. + bt2)) - 5.)
-                            / (bt2 * (bt - 1.));
-                        ct2 = ct * ct;
-                        dt = TWORPI * lp_lon;
-                        dt = dt + 1. / dt;
-                        dt = sqrt(dt * dt - 4.);
-                        if ((fabs(lp_lon) - HALFPI) < 0.) dt = -dt;
-                        dt2 = dt * dt;
-                        x1 = bt + ct; x1 *= x1;
-                        t = bt + 3.*ct;
-                        ft = x1 * (bt2 + ct2 * dt2 - 1.) + (1.-bt2) * (
-                            bt2 * (t * t + 4. * ct2) +
-                            ct2 * (12. * bt * ct + 4. * ct2) );
-                        x1 = (dt*(x1 + ct2 - 1.) + 2.*sqrt(ft)) /
-                            (4.* x1 + dt2);
-                        xy_x = HALFPI * x1;
-                        xy_y = HALFPI * sqrt(1. + dt * fabs(x1) - x1 * x1);
-                        if (lp_lon < 0.) xy_x = -xy_x;
-                        if (lp_lat < 0.) xy_y = -xy_y;
-                    }
-                }
-            };
-
-            // van der Grinten IV
-            template <typename Parameters>
-            void setup_vandg4(Parameters& par)
-            {
-                par.es = 0.;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::vandg4
-    #endif // doxygen 
-
-    /*!
-        \brief van der Grinten IV projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-        \par Example
-        \image html ex_vandg4.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct vandg4_spheroid : public detail::vandg4::base_vandg4_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline vandg4_spheroid(const Parameters& par) : detail::vandg4::base_vandg4_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::vandg4::setup_vandg4(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class vandg4_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<vandg4_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void vandg4_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("vandg4", new vandg4_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_VANDG4_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/wag2.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/wag2.hpp
deleted file mode 100644
index 56dfedd..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/wag2.hpp
+++ /dev/null
@@ -1,144 +0,0 @@
-#ifndef GGL_PROJECTIONS_WAG2_HPP
-#define GGL_PROJECTIONS_WAG2_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace wag2{ 
-            static const double C_x = 0.92483;
-            static const double C_y = 1.38725;
-            static const double C_p1 = 0.88022;
-            static const double C_p2 = 0.88550;
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_wag2_spheroid : public base_t_fi<base_wag2_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_wag2_spheroid(const Parameters& par)
-                    : base_t_fi<base_wag2_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    lp_lat = aasin(C_p1 * sin(C_p2 * lp_lat));
-                    xy_x = C_x * lp_lon * cos(lp_lat);
-                    xy_y = C_y * lp_lat;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = xy_y / C_y;
-                    lp_lon = xy_x / (C_x * cos(lp_lat));
-                    lp_lat = aasin(sin(lp_lat) / C_p1) / C_p2;
-                }
-            };
-
-            // Wagner II
-            template <typename Parameters>
-            void setup_wag2(Parameters& par)
-            {
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::wag2
-    #endif // doxygen 
-
-    /*!
-        \brief Wagner II projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-        \par Example
-        \image html ex_wag2.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct wag2_spheroid : public detail::wag2::base_wag2_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline wag2_spheroid(const Parameters& par) : detail::wag2::base_wag2_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::wag2::setup_wag2(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class wag2_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<wag2_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void wag2_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("wag2", new wag2_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_WAG2_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/wag3.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/wag3.hpp
deleted file mode 100644
index da04506..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/wag3.hpp
+++ /dev/null
@@ -1,148 +0,0 @@
-#ifndef GGL_PROJECTIONS_WAG3_HPP
-#define GGL_PROJECTIONS_WAG3_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace wag3{ 
-            static const double TWOTHIRD = 0.6666666666666666666667;
-
-            struct par_wag3
-            {
-                double    C_x;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_wag3_spheroid : public base_t_fi<base_wag3_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_wag3 m_proj_parm;
-
-                inline base_wag3_spheroid(const Parameters& par)
-                    : base_t_fi<base_wag3_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = this->m_proj_parm.C_x * lp_lon * cos(TWOTHIRD * lp_lat);
-                    xy_y = lp_lat;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = xy_y;
-                    lp_lon = xy_x / (this->m_proj_parm.C_x * cos(TWOTHIRD * lp_lat));
-                }
-            };
-
-            // Wagner III
-            template <typename Parameters>
-            void setup_wag3(Parameters& par, par_wag3& proj_parm)
-            {
-                double ts;
-                ts = pj_param(par.params, "rlat_ts").f;
-                proj_parm.C_x = cos(ts) / cos(2.*ts/3.);
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::wag3
-    #endif // doxygen 
-
-    /*!
-        \brief Wagner III projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-         - lat_ts=
-        \par Example
-        \image html ex_wag3.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct wag3_spheroid : public detail::wag3::base_wag3_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline wag3_spheroid(const Parameters& par) : detail::wag3::base_wag3_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::wag3::setup_wag3(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class wag3_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<wag3_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void wag3_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("wag3", new wag3_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_WAG3_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/wag7.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/wag7.hpp
deleted file mode 100644
index e17ec3b..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/wag7.hpp
+++ /dev/null
@@ -1,137 +0,0 @@
-#ifndef GGL_PROJECTIONS_WAG7_HPP
-#define GGL_PROJECTIONS_WAG7_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace wag7{ 
-
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_wag7_spheroid : public base_t_f<base_wag7_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-
-                inline base_wag7_spheroid(const Parameters& par)
-                    : base_t_f<base_wag7_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double theta, ct, D;
-                
-                    theta = asin(xy_y = 0.90630778703664996 * sin(lp_lat));
-                    xy_x = 2.66723 * (ct = cos(theta)) * sin(lp_lon /= 3.);
-                    xy_y *= 1.24104 * (D = 1/(sqrt(0.5 * (1 + ct * cos(lp_lon)))));
-                    xy_x *= D;
-                }
-            };
-
-            // Wagner VII
-            template <typename Parameters>
-            void setup_wag7(Parameters& par)
-            {
-                // par.fwd = s_forward;
-                // par.inv = 0;
-                par.es = 0.;
-            }
-
-        }} // namespace detail::wag7
-    #endif // doxygen 
-
-    /*!
-        \brief Wagner VII projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Miscellaneous
-         - Spheroid
-         - no inverse
-        \par Example
-        \image html ex_wag7.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct wag7_spheroid : public detail::wag7::base_wag7_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline wag7_spheroid(const Parameters& par) : detail::wag7::base_wag7_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::wag7::setup_wag7(this->m_par);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class wag7_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<wag7_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void wag7_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("wag7", new wag7_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_WAG7_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/wink1.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/wink1.hpp
deleted file mode 100644
index 9b0f262..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/wink1.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-#ifndef GGL_PROJECTIONS_WINK1_HPP
-#define GGL_PROJECTIONS_WINK1_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace wink1{ 
-
-            struct par_wink1
-            {
-                double    cosphi1;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_wink1_spheroid : public base_t_fi<base_wink1_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_wink1 m_proj_parm;
-
-                inline base_wink1_spheroid(const Parameters& par)
-                    : base_t_fi<base_wink1_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    xy_x = .5 * lp_lon * (this->m_proj_parm.cosphi1 + cos(lp_lat));
-                    xy_y = lp_lat;
-                }
-
-                inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
-                {
-                    lp_lat = xy_y;
-                    lp_lon = 2. * xy_x / (this->m_proj_parm.cosphi1 + cos(lp_lat));
-                }
-            };
-
-            // Winkel I
-            template <typename Parameters>
-            void setup_wink1(Parameters& par, par_wink1& proj_parm)
-            {
-                proj_parm.cosphi1 = cos(pj_param(par.params, "rlat_ts").f);
-                par.es = 0.;
-                // par.inv = s_inverse;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::wink1
-    #endif // doxygen 
-
-    /*!
-        \brief Winkel I projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-         - lat_ts=
-        \par Example
-        \image html ex_wink1.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct wink1_spheroid : public detail::wink1::base_wink1_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline wink1_spheroid(const Parameters& par) : detail::wink1::base_wink1_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::wink1::setup_wink1(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class wink1_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_fi<wink1_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void wink1_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("wink1", new wink1_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_WINK1_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/proj/wink2.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/proj/wink2.hpp
deleted file mode 100644
index 44f54e7..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/proj/wink2.hpp
+++ /dev/null
@@ -1,159 +0,0 @@
-#ifndef GGL_PROJECTIONS_WINK2_HPP
-#define GGL_PROJECTIONS_WINK2_HPP
-
-// Generic Geometry Library - projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright Barend Gehrels (1995-2009), Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande (2008-2009)
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
- 
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <ggl/extensions/gis/projections/impl/base_static.hpp>
-#include <ggl/extensions/gis/projections/impl/base_dynamic.hpp>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-#include <ggl/extensions/gis/projections/impl/factory_entry.hpp>
-
-namespace ggl { namespace projection
-{
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail { namespace wink2{ 
-            static const int MAX_ITER = 10;
-            static const double LOOP_TOL = 1e-7;
-            static const double TWO_D_PI = 0.636619772367581343;
-
-            struct par_wink2
-            {
-                double    cosphi1;
-            };
-
-            // template class, using CRTP to implement forward/inverse
-            template <typename Geographic, typename Cartesian, typename Parameters>
-            struct base_wink2_spheroid : public base_t_f<base_wink2_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>
-            {
-
-                 typedef double geographic_type;
-                 typedef double cartesian_type;
-
-                par_wink2 m_proj_parm;
-
-                inline base_wink2_spheroid(const Parameters& par)
-                    : base_t_f<base_wink2_spheroid<Geographic, Cartesian, Parameters>,
-                     Geographic, Cartesian, Parameters>(*this, par) {}
-
-                inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
-                {
-                    double k, V;
-                    int i;
-                
-                    xy_y = lp_lat * TWO_D_PI;
-                    k = PI * sin(lp_lat);
-                    lp_lat *= 1.8;
-                    for (i = MAX_ITER; i ; --i) {
-                        lp_lat -= V = (lp_lat + sin(lp_lat) - k) /
-                            (1. + cos(lp_lat));
-                        if (fabs(V) < LOOP_TOL)
-                            break;
-                    }
-                    if (!i)
-                        lp_lat = (lp_lat < 0.) ? -HALFPI : HALFPI;
-                    else
-                        lp_lat *= 0.5;
-                    xy_x = 0.5 * lp_lon * (cos(lp_lat) + this->m_proj_parm.cosphi1);
-                    xy_y = FORTPI * (sin(lp_lat) + xy_y);
-                }
-            };
-
-            // Winkel II
-            template <typename Parameters>
-            void setup_wink2(Parameters& par, par_wink2& proj_parm)
-            {
-                proj_parm.cosphi1 = cos(pj_param(par.params, "rlat_1").f);
-                par.es = 0.;
-                // par.inv = 0;
-                // par.fwd = s_forward;
-            }
-
-        }} // namespace detail::wink2
-    #endif // doxygen 
-
-    /*!
-        \brief Winkel II projection
-        \ingroup projections
-        \tparam Geographic latlong point type
-        \tparam Cartesian xy point type
-        \tparam Parameters parameter type
-        \par Projection characteristics
-         - Pseudocylindrical
-         - Spheroid
-         - no inverse
-         - lat_1=
-        \par Example
-        \image html ex_wink2.gif
-    */
-    template <typename Geographic, typename Cartesian, typename Parameters = parameters>
-    struct wink2_spheroid : public detail::wink2::base_wink2_spheroid<Geographic, Cartesian, Parameters>
-    {
-        inline wink2_spheroid(const Parameters& par) : detail::wink2::base_wink2_spheroid<Geographic, Cartesian, Parameters>(par)
-        {
-            detail::wink2::setup_wink2(this->m_par, this->m_proj_parm);
-        }
-    };
-
-    #ifndef DOXYGEN_NO_DETAIL
-    namespace detail
-    {
-
-        // Factory entry(s)
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        class wink2_entry : public detail::factory_entry<Geographic, Cartesian, Parameters>
-        {
-            public :
-                virtual projection<Geographic, Cartesian>* create_new(const Parameters& par) const
-                {
-                    return new base_v_f<wink2_spheroid<Geographic, Cartesian, Parameters>, Geographic, Cartesian, Parameters>(par);
-                }
-        };
-
-        template <typename Geographic, typename Cartesian, typename Parameters>
-        inline void wink2_init(detail::base_factory<Geographic, Cartesian, Parameters>& factory)
-        {
-            factory.add_to_factory("wink2", new wink2_entry<Geographic, Cartesian, Parameters>);
-        }
-
-    } // namespace detail 
-    #endif // doxygen
-
-}} // namespace ggl::projection
-
-#endif // GGL_PROJECTIONS_WINK2_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/project_inverse_transformer.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/project_inverse_transformer.hpp
deleted file mode 100644
index d374b0f..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/project_inverse_transformer.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGY_PROJECT_INVERSE_TRANSFORMER_HPP
-#define GGL_STRATEGY_PROJECT_INVERSE_TRANSFORMER_HPP
-
-
-#include <boost/shared_ptr.hpp>
-
-#include <ggl/core/coordinate_dimension.hpp>
-#include <ggl/extensions/gis/projections/factory.hpp>
-#include <ggl/extensions/gis/projections/parameters.hpp>
-#include <ggl/util/copy.hpp>
-
-
-namespace ggl { namespace projection
-{
-
-
-/*!
-    \brief Transformation strategy to do transform using a Map Projection
-    \ingroup transform
-    \tparam Cartesian first point type
-    \tparam LatLong second point type
- */
-template <typename Cartesian, typename LatLong>
-struct project_inverse_transformer
-{
-    typedef boost::shared_ptr<projection<LatLong, Cartesian> > projection_ptr;
-
-    projection_ptr m_prj;
-
-    /// Constructor using a shared-pointer-to-projection_ptr
-    inline project_inverse_transformer(projection_ptr& prj)
-        : m_prj(prj)
-    {}
-
-    /// Constructor using a string
-    inline project_inverse_transformer(const std::string& par)
-    {
-        factory<LatLong, Cartesian, parameters> fac;
-        m_prj.reset(fac.create_new(init(par)));
-    }
-
-    /// Constructor using Parameters
-    template <typename Parameters>
-    inline project_inverse_transformer(const Parameters& par)
-    {
-        factory<LatLong, Cartesian, Parameters> fac;
-        m_prj.reset(fac.create_new(par));
-    }
-
-    /// Transform operator
-    inline bool operator()(const Cartesian& p1, LatLong& p2) const
-    {
-        // Latlong (LL -> XY) will be projected, rest will be copied.
-        // So first copy third or higher dimensions
-        ggl::detail::copy::copy_coordinates<Cartesian, LatLong, 2,
-                ggl::dimension<Cartesian>::value> ::copy(p1, p2);
-        return m_prj->inverse(p1, p2);
-    }
-
-};
-
-}} // namespace ggl::projection
-
-
-#endif // GGL_STRATEGY_PROJECT_INVERSE_TRANSFORMER_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/project_transformer.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/project_transformer.hpp
deleted file mode 100644
index 7e4aa9c..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/project_transformer.hpp
+++ /dev/null
@@ -1,63 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGY_PROJECT_TRANSFORMER_HPP
-#define GGL_STRATEGY_PROJECT_TRANSFORMER_HPP
-
-
-#include <boost/shared_ptr.hpp>
-
-#include <ggl/extensions/gis/projections/factory.hpp>
-#include <ggl/extensions/gis/projections/parameters.hpp>
-
-
-
-namespace ggl { namespace projection
-{
-/*!
-    \brief Transformation strategy to do transform using a Map Projection
-    \ingroup transform
-    \tparam LatLong first point type
-    \tparam Cartesian second point type
-
-    See also \link p03_projmap_example.cpp the projmap example \endlink
-    where this last one plus a transformation using a projection are used.
-
- */
-template <typename LatLong, typename Cartesian>
-struct project_transformer
-{
-    typedef boost::shared_ptr<projection<LatLong, Cartesian> > projection_ptr;
-
-    projection_ptr m_prj;
-
-    inline project_transformer(projection_ptr& prj)
-        : m_prj(prj)
-    {}
-
-    inline project_transformer(const std::string& par)
-    {
-        factory<LatLong, Cartesian, parameters> fac;
-        m_prj.reset(fac.create_new(init(par)));
-    }
-
-    inline bool operator()(const LatLong& p1, Cartesian& p2) const
-    {
-        // Latlong (LatLong -> Cartesian) will be projected, rest will be copied.
-        // So first copy third or higher dimensions
-        ggl::detail::copy::copy_coordinates<LatLong, Cartesian, 2,
-                ggl::dimension<Cartesian>::value> ::copy(p1, p2);
-        return m_prj->forward(p1, p2);
-    }
-
-};
-
-}} // namespace ggl::projection
-
-
-#endif // GGL_STRATEGY_PROJECT_TRANSFORMER_HPP
diff --git a/include/builtin-ggl/ggl/extensions/gis/projections/projection.hpp b/include/builtin-ggl/ggl/extensions/gis/projections/projection.hpp
deleted file mode 100644
index dd608ee..0000000
--- a/include/builtin-ggl/ggl/extensions/gis/projections/projection.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef _PROJECTIONS_PROJECTION_HPP
-#define _PROJECTIONS_PROJECTION_HPP
-
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#include <string>
-#include <ggl/extensions/gis/projections/impl/projects.hpp>
-
-namespace ggl { namespace projection
-{
-
-/*!
-    \brief projection virtual base class
-    \details class containing virtual methods
-    \ingroup projection
-    \tparam LL latlong point type
-    \tparam XY xy point type
-*/
-
-template <typename LL, typename XY>
-class projection
-{
-    protected :
-        // see comment above
-        //typedef typename ggl::coordinate_type<LL>::type LL_T;
-        //typedef typename ggl::coordinate_type<XY>::type XY_T;
-        typedef double LL_T;
-        typedef double XY_T;
-
-    public :
-        /// Forward projection, from Latitude-Longitude to Cartesian
-        virtual bool forward(const LL& lp, XY& xy) const = 0;
-
-        /// Inverse projection, from Cartesian to Latitude-Longitude
-        virtual bool inverse(const XY& xy, LL& lp) const = 0;
-
-        /// Forward projection using lon / lat and x / y separately
-        virtual void fwd(LL_T& lp_lon, LL_T& lp_lat, XY_T& xy_x, XY_T& xy_y) const = 0;
-
-        /// Inverse projection using x / y and lon / lat
-        virtual void inv(XY_T& xy_x, XY_T& xy_y, LL_T& lp_lon, LL_T& lp_lat) const = 0;
-
-        /// Returns name of projection
-        virtual std::string name() const = 0;
-
-        /// Returns parameters of projection
-        virtual parameters params() const = 0;
-
-        virtual ~projection() {}
-
-};
-
-}}
-
-
-
-#endif
-
diff --git a/include/builtin-ggl/ggl/extensions/index/rtree/helpers.hpp b/include/builtin-ggl/ggl/extensions/index/rtree/helpers.hpp
deleted file mode 100644
index 7d57e7a..0000000
--- a/include/builtin-ggl/ggl/extensions/index/rtree/helpers.hpp
+++ /dev/null
@@ -1,68 +0,0 @@
-// Generic Geometry Library
-//
-// Boost.SpatialIndex - geometry helper functions
-//
-// Copyright 2008 Federico J. Fernandez.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GGL_INDEX_RTREE_HELPERS_HPP
-#define GGL_GGL_INDEX_RTREE_HELPERS_HPP
-
-#include <ggl/algorithms/area.hpp>
-#include <ggl/algorithms/disjoint.hpp>
-#include <ggl/core/point_type.hpp>
-
-namespace ggl { namespace index { 
-
-/**
- * \brief Given two boxes, returns the minimal box that contains them
- */
-// TODO: use ggl::combine
-template <typename Box>
-inline Box enlarge_box(Box const& b1, Box const& b2)
-{
-    // TODO: mloskot - Refactor to readable form. Fix VC++8.0 min/max warnings:
-    //  warning C4002: too many actual parameters for macro 'min
-
-    typedef typename ggl::point_type<Box>::type point_type;
-
-    point_type pmin(
-        ggl::get<min_corner, 0>(b1) < ggl::get<min_corner, 0>(b2)
-            ? ggl::get<min_corner, 0>(b1) : ggl::get<min_corner, 0>(b2),
-        ggl::get<min_corner, 1>(b1) < ggl::get<min_corner, 1>(b2)
-            ? ggl::get<min_corner, 1>(b1) : ggl::get<min_corner, 1>(b2));
-
-    point_type pmax(
-        ggl::get<max_corner, 0>(b1) > ggl::get<max_corner, 0>(b2)
-            ? ggl::get<max_corner, 0>(b1) : ggl::get<max_corner, 0>(b2),
-        ggl::get<max_corner, 1>(b1) > ggl::get<max_corner, 1>(b2)
-            ? ggl::get<max_corner, 1>(b1) : ggl::get<max_corner, 1>(b2));
-
-    return Box(pmin, pmax);
-}
-
-/**
- * \brief Compute the area of the union of b1 and b2
- */
-template <typename Box>
-inline double compute_union_area(Box const& b1, Box const& b2)
-{
-    Box enlarged_box = enlarge_box(b1, b2);
-    return ggl::area(enlarged_box);
-}
-
-/**
- * \brief Checks if boxes intersects
- */
-// TODO: move to ggl::intersects
-template <typename Box>
-inline bool is_overlapping(Box const& b1, Box const& b2)
-{
-    return ! ggl::disjoint(b1, b2);
-}
-
-}} // namespace ggl::index
-
-#endif // GGL_GGL_INDEX_RTREE_HELPERS_HPP
diff --git a/include/builtin-ggl/ggl/extensions/index/rtree/rtree.hpp b/include/builtin-ggl/ggl/extensions/index/rtree/rtree.hpp
deleted file mode 100644
index 05da912..0000000
--- a/include/builtin-ggl/ggl/extensions/index/rtree/rtree.hpp
+++ /dev/null
@@ -1,769 +0,0 @@
-// Generic Geometry Library
-//
-// Boost.SpatialIndex - rtree implementation
-//
-// Copyright 2008 Federico J. Fernandez.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_INDEX_RTREE_RTREE_HPP
-#define GGL_EXTENSIONS_INDEX_RTREE_RTREE_HPP
-
-#include <cstddef>
-#include <iostream> // TODO: Remove if print() is removed
-#include <stdexcept>
-#include <utility>
-#include <vector>
-
-#include <boost/concept_check.hpp>
-#include <boost/shared_ptr.hpp>
-
-#include <ggl/algorithms/area.hpp>
-
-#include <ggl/extensions/index/rtree/rtree_node.hpp>
-#include <ggl/extensions/index/rtree/rtree_leaf.hpp>
-
-namespace ggl { namespace index {
-
-template <typename Box, typename Value >
-class rtree
-{
-public:
-
-    typedef boost::shared_ptr<rtree_node<Box, Value> > node_pointer;
-    typedef boost::shared_ptr<rtree_leaf<Box, Value> > leaf_pointer;
-
-    /**
-     * \brief Creates a rtree with 'maximum' elements per node and 'minimum'.
-     */
-    rtree(unsigned int const& maximum, unsigned int const& minimum)
-        : m_count(0)
-        , m_min_elems_per_node(minimum)
-        , m_max_elems_per_node(maximum)
-        , m_root(new rtree_node<Box, Value>(node_pointer(), 1))
-    {
-    }
-
-    /**
-     * \brief Creates a rtree with maximum elements per node
-     *        and minimum (box is ignored).
-     */
-    rtree(Box const& box, unsigned int const& maximum, unsigned int const& minimum)
-        : m_count(0)
-        , m_min_elems_per_node(minimum)
-        , m_max_elems_per_node(maximum)
-        , m_root(new rtree_node<Box, Value>(node_pointer(), 1))
-    {
-        boost::ignore_unused_variable_warning(box);
-    }
-
-    /**
-     * \brief destructor (virtual because we have virtual functions)
-     */
-    virtual ~rtree() {}
-
-
-    /**
-     * \brief Remove elements inside the 'box'
-     */
-    inline void remove(Box const& box)
-    {
-        try
-        {
-            node_pointer leaf(choose_exact_leaf(box));
-            typename rtree_leaf<Box, Value>::leaf_map q_leaves;
-
-            leaf->remove(box);
-
-            if (leaf->elements() < m_min_elems_per_node && elements() > m_min_elems_per_node)
-            {
-                q_leaves = leaf->get_leaves();
-
-                // we remove the leaf_node in the parent node because now it's empty
-                leaf->get_parent()->remove(leaf->get_parent()->get_box(leaf));
-            }
-
-            typename rtree_node<Box, Value>::node_map q_nodes;
-            condense_tree(leaf, q_nodes);
-
-            std::vector<std::pair<Box, Value> > s;
-            for (typename rtree_node<Box, Value>::node_map::const_iterator it = q_nodes.begin();
-                 it != q_nodes.end(); ++it)
-            {
-                typename rtree_leaf<Box, Value>::leaf_map leaves = it->second->get_leaves();
-
-                // reinserting leaves from nodes
-                for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator itl = leaves.begin();
-                     itl != leaves.end(); ++itl)
-                {
-                    s.push_back(*itl);
-                }
-            }
-
-            for (typename std::vector<std::pair<Box, Value> >::const_iterator it = s.begin(); it != s.end(); ++it)
-            {
-                m_count--;
-                insert(it->first, it->second);
-            }
-
-            // if the root has only one child and the child is not a leaf,
-            // make it the root
-            if (m_root->elements() == 1)
-            {
-                if (!m_root->first_element()->is_leaf())
-                {
-                    m_root = m_root->first_element();
-                }
-            }
-            // reinserting leaves
-            for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator it = q_leaves.begin();
-                 it != q_leaves.end(); ++it)
-            {
-                m_count--;
-                insert(it->first, it->second);
-            }
-
-            m_count--;
-        }
-        catch(std::logic_error & e)
-        {
-            // TODO: mloskot - replace with ggl exception
-
-            // not found
-            std::cerr << e.what() << std::endl;
-            return;
-        }
-    }
-
-    /**
-     * \brief Remove element inside the box with value
-     */
-    void remove(Box const& box, Value const& value)
-    {
-        try
-        {
-            node_pointer leaf;
-
-            // find possible leaves
-            typedef typename std::vector<node_pointer > node_type;
-            node_type nodes;
-            m_root->find_leaves(box, nodes);
-
-            // refine the result
-            for (typename node_type::const_iterator it = nodes.begin(); it != nodes.end(); ++it)
-            {
-                leaf = *it;
-                try
-                {
-                    leaf->remove(value);
-                    break;
-                } catch (...)
-                {
-                    leaf = node_pointer();
-                }
-            }
-
-            if (!leaf)
-                return;
-
-            typename rtree_leaf < Box, Value >::leaf_map q_leaves;
-
-            if (leaf->elements() < m_min_elems_per_node && elements() > m_min_elems_per_node)
-            {
-                q_leaves = leaf->get_leaves();
-
-                // we remove the leaf_node in the parent node because now it's empty
-                leaf->get_parent()->remove(leaf->get_parent()->get_box(leaf));
-            }
-
-            typename rtree_node<Box, Value>::node_map q_nodes;
-            condense_tree(leaf, q_nodes);
-
-            std::vector<std::pair<Box, Value> > s;
-            for (typename rtree_node<Box, Value>::node_map::const_iterator it = q_nodes.begin();
-                 it != q_nodes.end(); ++it)
-            {
-                typename rtree_leaf<Box, Value>::leaf_map leaves = it->second->get_leaves();
-
-                // reinserting leaves from nodes
-                for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator itl = leaves.begin();
-                     itl != leaves.end(); ++itl)
-                {
-                    s.push_back(*itl);
-                }
-            }
-
-            for (typename std::vector<std::pair<Box, Value> >::const_iterator it = s.begin(); it != s.end(); ++it)
-            {
-                m_count--;
-                insert(it->first, it->second);
-            }
-
-            // if the root has only one child and the child is not a leaf,
-            // make it the root
-            if (m_root->elements() == 1)
-            {
-                if (!m_root->first_element()->is_leaf())
-                {
-                    m_root = m_root->first_element();
-                }
-            }
-
-            // reinserting leaves
-            for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator it = q_leaves.begin();
-                 it != q_leaves.end(); ++it)
-            {
-                m_count--;
-                insert(it->first, it->second);
-            }
-
-            m_count--;
-
-        }
-        catch(std::logic_error & e)
-        {
-            // TODO: mloskot - ggl exception
-
-            // not found
-            std::cerr << e.what() << std::endl;
-            return;
-        }
-    }
-
-    /**
-     * \brief Returns the number of elements.
-     */
-    inline unsigned int elements() const
-    {
-        return m_count;
-    }
-
-
-    /**
-     * \brief Inserts an element with 'box' as key with value.
-     */
-    inline void insert(Box const& box, Value const& value)
-    {
-        m_count++;
-
-        node_pointer leaf(choose_corresponding_leaf(box));
-
-        // check if the selected leaf is full to do the split if necessary
-        if (leaf->elements() >= m_max_elems_per_node)
-        {
-            leaf->insert(box, value);
-
-            // split!
-            node_pointer n1(new rtree_leaf<Box, Value>(leaf->get_parent()));
-            node_pointer n2(new rtree_leaf<Box, Value>(leaf->get_parent()));
-
-            split_node(leaf, n1, n2);
-            adjust_tree(leaf, n1, n2);
-        }
-        else
-        {
-            leaf->insert(box, value);
-            adjust_tree(leaf);
-        }
-    }
-
-
-    /**
-     * \brief Returns all the values inside 'box'
-     */
-    inline std::deque<Value> find(Box const& box) const
-    {
-        std::deque<Value> result;
-        m_root->find(box, result, false);
-        return result;
-    }
-
-    /**
-     * \brief Print Rtree (mainly for debug)
-     */
-    inline void print()
-    {
-        std::cerr << "===================================" << std::endl;
-        std::cerr << " Min/Max: " << m_min_elems_per_node << " / " << m_max_elems_per_node << std::endl;
-        std::cerr << "Leaves: " << m_root->get_leaves().size() << std::endl;
-        m_root->print();
-        std::cerr << "===================================" << std::endl;
-    }
-
-private:
-
-    /// number of elements
-    unsigned int m_count;
-
-    /// minimum number of elements per node
-    unsigned int m_min_elems_per_node;
-
-    /// maximum number of elements per node
-    unsigned int m_max_elems_per_node;
-
-    /// tree root
-    node_pointer m_root;
-
-    /**
-     * \brief Reorganize the tree after a removal. It tries to
-     *        join nodes with less elements than m.
-     */
-    void condense_tree(node_pointer const& leaf,
-        typename rtree_node<Box, Value>::node_map& q_nodes)
-    {
-        if (leaf.get() == m_root.get())
-        {
-            // if it's the root we are done
-            return;
-        }
-
-        node_pointer parent = leaf->get_parent();
-        parent->adjust_box(leaf);
-
-        if (parent->elements() < m_min_elems_per_node)
-        {
-            if (parent.get() == m_root.get())
-            {
-                // if the parent is underfull and it's the root we just exit
-                return;
-            }
-
-            // get the nodes that we should reinsert
-            typename rtree_node<Box, Value>::node_map this_nodes = parent->get_nodes();
-            for(typename rtree_node<Box, Value>::node_map::const_iterator it = this_nodes.begin();
-                it != this_nodes.end(); ++it)
-            {
-                q_nodes.push_back(*it);
-            }
-
-            // we remove the node in the parent node because now it should be
-            // re inserted
-            parent->get_parent()->remove(parent->get_parent()->get_box(parent));
-        }
-
-        condense_tree(parent, q_nodes);
-    }
-
-    /**
-     * \brief After an insertion splits nodes with more than 'maximum' elements.
-     */
-    inline void adjust_tree(node_pointer& node)
-    {
-        if (node.get() == m_root.get())
-        {
-            // we finished the adjust
-            return;
-        }
-
-        // as there are no splits just adjust the box of the parent and go on
-        node_pointer parent = node->get_parent();
-        parent->adjust_box(node);
-        adjust_tree(parent);
-    }
-
-    /**
-     * \brief After an insertion splits nodes with more than maximum elements
-     *        (recursive step with subtrees 'n1' and 'n2' to be joined).
-     */
-    void adjust_tree(node_pointer& leaf, node_pointer& n1, node_pointer& n2)
-    {
-        // check if we are in the root and do the split
-        if (leaf.get() == m_root.get())
-        {
-            node_pointer new_root(new rtree_node<Box,Value>(node_pointer (), leaf->get_level() + 1));
-            new_root->add_node(n1->compute_box(), n1);
-            new_root->add_node(n2->compute_box(), n2);
-
-            n1->set_parent(new_root);
-            n2->set_parent(new_root);
-
-            n1->update_parent(n1);
-            n2->update_parent(n2);
-
-            m_root = new_root;
-            return;
-        }
-
-        node_pointer parent = leaf->get_parent();
-
-        parent->replace_node(leaf, n1);
-        parent->add_node(n2->compute_box(), n2);
-
-        // if parent is full, split and readjust
-        if (parent->elements() > m_max_elems_per_node)
-        {
-            node_pointer p1(new rtree_node<Box, Value>(parent->get_parent(), parent->get_level()));
-            node_pointer p2(new rtree_node<Box, Value>(parent->get_parent(), parent->get_level()));
-
-            split_node(parent, p1, p2);
-            adjust_tree(parent, p1, p2);
-        }
-        else
-        {
-            adjust_tree(parent);
-        }
-    }
-
-    /**
-     * \brief Splits 'n' in 'n1' and 'n2'
-     */
-    void split_node(node_pointer const& n, node_pointer& n1, node_pointer& n2) const
-    {
-        unsigned int seed1 = 0;
-        unsigned int seed2 = 0;
-        std::vector<Box> boxes = n->get_boxes();
-
-        n1->set_parent(n->get_parent());
-        n2->set_parent(n->get_parent());
-
-        linear_pick_seeds(n, seed1, seed2);
-
-        if (n->is_leaf())
-        {
-            n1->add_value(boxes[seed1], n->get_value(seed1));
-            n2->add_value(boxes[seed2], n->get_value(seed2));
-        }
-        else
-        {
-            n1->add_node(boxes[seed1], n->get_node(seed1));
-            n2->add_node(boxes[seed2], n->get_node(seed2));
-        }
-
-        unsigned int index = 0;
-
-        if (n->is_leaf())
-        {
-            // TODO: mloskot - add assert(node.size() >= 2); or similar
-
-            typename rtree_leaf<Box, Value>::leaf_map nodes = n->get_leaves();
-            unsigned int remaining = nodes.size() - 2;
-
-            for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator it = nodes.begin();
-                 it != nodes.end(); ++it, index++)
-            {
-                if (index != seed1 && index != seed2)
-                {
-                    if (n1->elements() + remaining == m_min_elems_per_node)
-                    {
-                        n1->add_value(it->first, it->second);
-                        continue;
-                    }
-                    if (n2->elements() + remaining == m_min_elems_per_node)
-                    {
-                        n2->add_value(it->first, it->second);
-                        continue;
-                    }
-
-                    remaining--;
-
-                    /// current boxes of each group
-                    Box b1, b2;
-
-                    /// enlarged boxes of each group
-                    Box eb1, eb2;
-                    b1 = n1->compute_box();
-                    b2 = n2->compute_box();
-
-                    /// areas
-                    double b1_area, b2_area;
-                    double eb1_area, eb2_area;
-                    b1_area = ggl::area(b1);
-                    b2_area = ggl::area(b2);
-                    eb1_area = compute_union_area(b1, it->first);
-                    eb2_area = compute_union_area(b2, it->first);
-
-                    if (eb1_area - b1_area > eb2_area - b2_area)
-                    {
-                        n2->add_value(it->first, it->second);
-                    }
-                    if (eb1_area - b1_area < eb2_area - b2_area)
-                    {
-                        n1->add_value(it->first, it->second);
-                    }
-                    if (eb1_area - b1_area == eb2_area - b2_area)
-                    {
-                        if (b1_area < b2_area)
-                        {
-                            n1->add_value(it->first, it->second);
-                        }
-                        if (b1_area > b2_area)
-                        {
-                            n2->add_value(it->first, it->second);
-                        }
-                        if (b1_area == b2_area)
-                        {
-                            if (n1->elements() > n2->elements())
-                            {
-                                n2->add_value(it->first, it->second);
-                            }
-                            else
-                            {
-                                n1->add_value(it->first, it->second);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        else
-        {
-            // TODO: mloskot - add assert(node.size() >= 2); or similar
-
-            typename rtree_node<Box, Value>::node_map nodes = n->get_nodes();
-            unsigned int remaining = nodes.size() - 2;
-            for(typename rtree_node<Box, Value>::node_map::const_iterator it = nodes.begin();
-                it != nodes.end(); ++it, index++)
-            {
-
-                if (index != seed1 && index != seed2)
-                {
-
-                    if (n1->elements() + remaining == m_min_elems_per_node)
-                    {
-                        n1->add_node(it->first, it->second);
-                        continue;
-                    }
-                    if (n2->elements() + remaining == m_min_elems_per_node)
-                    {
-                        n2->add_node(it->first, it->second);
-                        continue;
-                    }
-
-                    remaining--;
-
-                    /// current boxes of each group
-                    Box b1, b2;
-
-                    /// enlarged boxes of each group
-                    Box eb1, eb2;
-                    b1 = n1->compute_box();
-                    b2 = n2->compute_box();
-
-                    /// areas
-                    double b1_area, b2_area;
-                    double eb1_area, eb2_area;
-                    b1_area = ggl::area(b1);
-                    b2_area = ggl::area(b2);
-
-                    eb1_area = compute_union_area(b1, it->first);
-                    eb2_area = compute_union_area(b2, it->first);
-
-                    if (eb1_area - b1_area > eb2_area - b2_area)
-                    {
-                        n2->add_node(it->first, it->second);
-                    }
-                    if (eb1_area - b1_area < eb2_area - b2_area)
-                    {
-                        n1->add_node(it->first, it->second);
-                    }
-                    if (eb1_area - b1_area == eb2_area - b2_area)
-                    {
-                        if (b1_area < b2_area)
-                        {
-                            n1->add_node(it->first, it->second);
-                        }
-                        if (b1_area > b2_area)
-                        {
-                            n2->add_node(it->first, it->second);
-                        }
-                        if (b1_area == b2_area)
-                        {
-                            if (n1->elements() > n2->elements())
-                            {
-                                n2->add_node(it->first, it->second);
-                            }
-                            else
-                            {
-                                n1->add_node(it->first, it->second);
-                            }
-                        }
-                    }
-
-                }
-            }
-        }
-    }
-
-    /**
-     * \brief Choose initial values for the split algorithm (linear version)
-     */
-    void linear_pick_seeds(node_pointer const& n, unsigned int &seed1, unsigned int &seed2) const
-    {
-        // get boxes from the node
-        std::vector<Box>boxes = n->get_boxes();
-        if (boxes.size() == 0)
-        {
-            // TODO: mloskot - throw ggl exception
-            throw std::logic_error("Empty Node trying to Pick Seeds");
-        }
-
-        // only two dim for now
-        // unsigned int dimensions =
-        //   ggl::point_traits<Point>::coordinate_count;
-
-        // find the first two elements
-        double separation_x, separation_y;
-        unsigned int first_x, second_x;
-        unsigned int first_y, second_y;
-        find_normalized_separations<0u>(boxes, separation_x, first_x, second_x);
-        find_normalized_separations<1u>(boxes, separation_y, first_y, second_y);
-
-        if (separation_x > separation_y)
-        {
-            seed1 = first_x;
-            seed2 = second_x;
-        }
-        else
-        {
-            seed1 = first_y;
-            seed2 = second_y;
-        }
-    }
-
-    /**
-     * \brief Find distances between possible initial values for the
-     *        pick_seeds algorithm.
-     */
-    template <std::size_t D>
-    void find_normalized_separations(const std::vector<Box>& boxes, double &separation,
-        unsigned int &first, unsigned int &second) const
-    {
-        if (boxes.size() < 2)
-        {
-            throw std::logic_error("At least two boxes needed to split");
-        }
-
-        // find the lowest high
-        typename std::vector<Box>::const_iterator it = boxes.begin();
-        double lowest_high = ggl::get<max_corner, D>(*it);
-        unsigned int lowest_high_index = 0;
-        unsigned int index = 1;
-        ++it;
-        for(; it != boxes.end(); ++it)
-        {
-            if (ggl::get<max_corner, D>(*it) < lowest_high)
-            {
-                lowest_high = ggl::get<max_corner, D>(*it);
-                lowest_high_index = index;
-            }
-            index++;
-        }
-
-        // find the highest low
-        double highest_low = 0;
-        unsigned int highest_low_index = 0;
-        if (lowest_high_index == 0)
-        {
-            highest_low = ggl::get<min_corner, D>(boxes[1]);
-            highest_low_index = 1;
-        }
-        else
-        {
-            highest_low = ggl::get<min_corner, D>(boxes[0]);
-            highest_low_index = 0;
-        }
-
-        index = 0;
-        for (typename std::vector<Box>::const_iterator it = boxes.begin();
-             it != boxes.end(); ++it, index++)
-        {
-            if (ggl::get<min_corner, D>(*it) >= highest_low && index != lowest_high_index)
-            {
-                highest_low = ggl::get<min_corner, D>(*it);
-                highest_low_index = index;
-            }
-        }
-
-        // find the lowest low
-        it = boxes.begin();
-        double lowest_low = ggl::get<min_corner, D>(*it);
-        ++it;
-        for(; it != boxes.end(); ++it)
-        {
-            if (ggl::get<min_corner, D>(*it) < lowest_low)
-            {
-                lowest_low = ggl::get<min_corner, D>(*it);
-            }
-        }
-
-        // find the highest high
-        it = boxes.begin();
-        double highest_high = ggl::get<max_corner, D>(*it);
-        ++it;
-        for(; it != boxes.end(); ++it)
-        {
-            if (ggl::get<max_corner, D>(*it) > highest_high)
-            {
-                highest_high = ggl::get<max_corner, D>(*it);
-            }
-        }
-
-        double const width = highest_high - lowest_low;
-
-        separation = (highest_low - lowest_high) / width;
-        first = highest_low_index;
-        second = lowest_high_index;
-    }
-
-    /**
-     * \brief Choose one of the possible leaves to make an insertion
-     */
-    inline node_pointer choose_corresponding_leaf(Box const& e)
-    {
-        node_pointer node = m_root;
-
-        // if the tree is empty add an initial leaf
-        if (m_root->elements() == 0)
-        {
-            leaf_pointer new_leaf(new rtree_leaf<Box, Value>(m_root));
-            m_root->add_leaf_node(Box (), new_leaf);
-
-            return new_leaf;
-        }
-
-        while (!node->is_leaf())
-        {
-            /// traverse node's map to see which node we should select
-            node = node->choose_node(e);
-        }
-        return node;
-    }
-
-    /**
-     * \brief Choose the exact leaf where an insertion should be done
-     */
-    node_pointer choose_exact_leaf(Box const&e) const
-    {
-        // find possible leaves
-        typedef typename std::vector<node_pointer> node_type;
-        node_type nodes;
-        m_root->find_leaves(e, nodes);
-
-        // refine the result
-        for (typename node_type::const_iterator it = nodes.begin(); it != nodes.end(); ++it)
-        {
-            typedef std::vector<std::pair<Box, Value> > leaves_type;
-            leaves_type leaves = (*it)->get_leaves();
-
-            for (typename leaves_type::const_iterator itl = leaves.begin();
-                 itl != leaves.end(); ++itl)
-            {
-
-                if (itl->first.max_corner() == e.max_corner()
-                    && itl->first.min_corner() == e.min_corner())
-                {
-                    return *it;
-                }
-            }
-        }
-
-        // TODO: mloskot - ggl exception
-        throw std::logic_error("Leaf not found");
-    }
-};
-
-}} // namespace ggl::index
-
-#endif // GGL_EXTENSIONS_INDEX_RTREE_RTREE_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/index/rtree/rtree_leaf.hpp b/include/builtin-ggl/ggl/extensions/index/rtree/rtree_leaf.hpp
deleted file mode 100644
index a166977..0000000
--- a/include/builtin-ggl/ggl/extensions/index/rtree/rtree_leaf.hpp
+++ /dev/null
@@ -1,252 +0,0 @@
-// Generic Geometry Library
-//
-// Boost.SpatialIndex - rtree leaf implementation
-//
-// Copyright 2008 Federico J. Fernandez.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_INDEX_RTREE_RTREE_LEAF_HPP
-#define GGL_EXTENSIONS_INDEX_RTREE_RTREE_LEAF_HPP
-
-#include <deque>
-#include <iostream> // TODO: Remove if print() is removed
-#include <stdexcept>
-#include <utility>
-#include <vector>
-
-#include <boost/shared_ptr.hpp>
-
-#include <ggl/algorithms/area.hpp>
-#include <ggl/algorithms/assign.hpp>
-#include <ggl/algorithms/combine.hpp>
-
-#include <ggl/extensions/index/rtree/rtree_node.hpp>
-
-namespace ggl { namespace index {
-
-template <typename Box, typename Value >
-class rtree_leaf : public rtree_node<Box, Value>
-{
-public:
-
-    /// container type for the leaves
-    typedef boost::shared_ptr<rtree_node<Box, Value> > node_pointer;
-    typedef std::vector<std::pair<Box, Value> > leaf_map;
-
-    /**
-     * \brief Creates an empty leaf
-     */
-    inline rtree_leaf()
-    {
-    }
-
-    /**
-     * \brief Creates a new leaf, with 'parent' as parent
-     */
-    inline rtree_leaf(node_pointer const& parent)
-        : rtree_node<Box, Value> (parent, 0)
-    {
-    }
-
-    /**
-     * \brief Search for elements in 'box' in the Rtree. Add them to 'result'.
-     *        If exact_match is true only return the elements having as
-     *        key the 'box'. Otherwise return everything inside 'box'.
-     */
-    virtual void find(Box const& box, std::deque<Value>& result, const bool exact_match)
-    {
-        for (typename leaf_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            if (exact_match)
-            {
-                if (ggl::equals(it->first, box))
-                {
-                    result.push_back(it->second);
-                }
-            }
-            else
-            {
-                if (is_overlapping(it->first, box))
-                {
-                    result.push_back(it->second);
-                }
-            }
-        }
-    }
-
-    /**
-     * \brief Compute bounding box for this leaf
-     */
-    virtual Box compute_box() const
-    {
-        if (m_nodes.empty())
-        {
-            return Box ();
-        }
-
-        Box r;
-        ggl::assign_inverse(r);
-        for(typename leaf_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
-        {
-            ggl::combine(r, it->first);
-        }
-        return r;
-    }
-
-    /**
-     * \brief True if we are a leaf
-     */
-    virtual bool is_leaf() const
-    {
-        return true;
-    }
-
-    /**
-     * \brief Number of elements in the tree
-     */
-    virtual unsigned int elements() const
-    {
-        return m_nodes.size();
-    }
-
-    /**
-     * \brief Insert a new element, with key 'box' and value 'v'
-     */
-    virtual void insert(Box const& box, Value const& v)
-    {
-        m_nodes.push_back(std::make_pair(box, v));
-    }
-
-    /**
-     * \brief Proyect leaves of this node.
-     */
-    virtual std::vector< std::pair<Box, Value> > get_leaves() const
-    {
-        return m_nodes;
-    }
-
-    /**
-     * \brief Add a new child (node) to this node
-     */
-    virtual void add_node(Box const&, node_pointer const&)
-    {
-        // TODO: mloskot - define & use GGL exception
-        throw std::logic_error("Can't add node to leaf node.");
-    }
-
-    /**
-     * \brief Add a new leaf to this node
-     */
-    virtual void add_value(Box const& box, Value const& v)
-    {
-        m_nodes.push_back(std::make_pair(box, v));
-    }
-
-
-    /**
-     * \brief Proyect value in position 'index' in the nodes container
-     */
-    virtual Value get_value(unsigned int index) const
-    {
-        return m_nodes[index].second;
-    }
-
-    /**
-     * \brief Box projector for leaf
-     */
-    virtual Box get_box(unsigned int index) const
-    {
-        return m_nodes[index].first;
-    }
-
-    /**
-     * \brief Remove value with key 'box' in this leaf
-     */
-    virtual void remove(Box const& box)
-    {
-
-        for (typename leaf_map::iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            if (ggl::equals(it->first, box))
-            {
-                m_nodes.erase(it);
-                return;
-            }
-        }
-
-        // TODO: mloskot - use GGL exception
-        throw std::logic_error("Node not found.");
-    }
-
-    /**
-     * \brief Remove value in this leaf
-     */
-    virtual void remove(const Value &v)
-    {
-        for (typename leaf_map::iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            if (it->second == v)
-            {
-                m_nodes.erase(it);
-                return;
-            }
-        }
-
-        // TODO: mloskot - use GGL exception
-        throw std::logic_error("Node not found.");
-    }
-
-    /**
-    * \brief Proyect boxes from this node
-    */
-    virtual std::vector<Box> get_boxes() const
-    {
-        std::vector<Box> result;
-        for (typename leaf_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            result.push_back(it->first);
-        }
-
-        return result;
-    }
-
-    /**
-    * \brief Print leaf (mainly for debug)
-    */
-    virtual void print() const
-    {
-        std::cerr << "\t" << " --> Leaf --------" << std::endl;
-        std::cerr << "\t" << "  Size: " << m_nodes.size() << std::endl;
-        for (typename leaf_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            std::cerr << "\t" << "  | ";
-            std::cerr << "( " << ggl::get<min_corner, 0>
-                (it->first) << " , " << ggl::get<min_corner, 1>
-                (it->first) << " ) x ";
-            std::cerr << "( " << ggl::get<max_corner, 0>
-                (it->first) << " , " << ggl::get<max_corner, 1>
-                (it->first) << " )";
-            std::cerr << " -> ";
-            std::cerr << it->second;
-            std::cerr << " | " << std::endl;;
-        }
-        std::cerr << "\t" << " --< Leaf --------" << std::endl;
-    }
-
-private:
-
-    /// leaves of this node
-    leaf_map m_nodes;
-};
-
-}} // namespace ggl::index
-
-#endif // GGL_EXTENSIONS_INDEX_RTREE_RTREE_LEAF_HPP
-
diff --git a/include/builtin-ggl/ggl/extensions/index/rtree/rtree_node.hpp b/include/builtin-ggl/ggl/extensions/index/rtree/rtree_node.hpp
deleted file mode 100644
index 25bcd53..0000000
--- a/include/builtin-ggl/ggl/extensions/index/rtree/rtree_node.hpp
+++ /dev/null
@@ -1,488 +0,0 @@
-// Generic Geometry Library
-//
-// Boost.SpatialIndex - rtree node implementation
-//
-// Copyright 2008 Federico J. Fernandez.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_EXTENSIONS_INDEX_RTREE_RTREE_NODE_HPP
-#define GGL_EXTENSIONS_INDEX_RTREE_RTREE_NODE_HPP
-
-#include <deque>
-#include <iostream> // TODO: Remove if print() is removed
-#include <stdexcept>
-#include <utility>
-#include <vector>
-
-#include <boost/shared_ptr.hpp>
-
-#include <ggl/algorithms/area.hpp>
-#include <ggl/algorithms/assign.hpp>
-#include <ggl/algorithms/combine.hpp>
-#include <ggl/algorithms/equals.hpp>
-
-#include <ggl/extensions/index/rtree/helpers.hpp>
-
-namespace ggl { namespace index {
-
-/// forward declaration
-template <typename Box, typename Value>
-class rtree_leaf;
-
-template <typename Box, typename Value>
-class rtree_node
-{
-public:
-
-    typedef boost::shared_ptr<rtree_node<Box, Value> > node_pointer;
-    typedef boost::shared_ptr<rtree_leaf<Box, Value> > leaf_pointer;
-
-    /// type for the node map
-    typedef std::vector<std::pair<Box, node_pointer > > node_map;
-
-    /**
-     * \brief Creates a default node (needed for the containers)
-     */
-    rtree_node()
-    {
-    }
-
-    /**
-     * \brief Creates a node with 'parent' as parent and 'level' as its level
-     */
-    rtree_node(node_pointer const& parent, unsigned int const& level)
-        : m_parent(parent), m_level(level)
-    {
-    }
-
-    /**
-     * \brief destructor (virtual because we have virtual functions)
-     */
-    virtual ~rtree_node()
-    {
-    }
-
-    /**
-     * \brief Level projector
-     */
-    virtual unsigned int get_level() const
-    {
-        return m_level;
-    }
-
-    /**
-     * \brief Number of elements in the subtree
-     */
-    virtual unsigned int elements() const
-    {
-        return m_nodes.size();
-    }
-
-    /**
-     * \brief Project first element, to replace root in case of condensing
-     */
-    inline node_pointer first_element() const
-    {
-        if (0 == m_nodes.size())
-        {
-            // TODO: mloskot - define & use GGL exception
-            throw std::logic_error("first_element in empty node");
-        }
-        return m_nodes.begin()->second;
-    }
-
-    /**
-     * \brief True if it is a leaf node
-     */
-    virtual bool is_leaf() const
-    {
-        return false;
-    }
-
-    /**
-     * \brief Proyector for the 'i' node
-     */
-    node_pointer get_node(unsigned int index)
-    {
-        return m_nodes[index].second;
-    }
-
-    /**
-     * \brief Search for elements in 'box' in the Rtree. Add them to 'result'.
-     *        If exact_match is true only return the elements having as
-     *        key the box 'box'. Otherwise return everything inside 'box'.
-     */
-    virtual void find(Box const& box, std::deque<Value>& result, bool const exact_match)
-    {
-        for (typename node_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            if (is_overlapping(it->first, box))
-            {
-                it->second->find(box, result, exact_match);
-            }
-        }
-    }
-
-    /**
-     * \brief Return in 'result' all the leaves inside 'box'
-     */
-    void find_leaves(Box const& box, typename std::vector<node_pointer>& result) const
-    {
-        for (typename node_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            if (is_overlapping(it->first, box))
-            {
-                if (it->second->is_leaf())
-                {
-                    result.push_back(it->second);
-                }
-                else
-                {
-                    it->second->find_leaves(box, result);
-                }
-            }
-        }
-    }
-
-    /**
-    * \brief Compute bounding box for this node
-    */
-    virtual Box compute_box() const
-    {
-        if (m_nodes.empty())
-        {
-            return Box();
-        }
-
-        Box result;
-        ggl::assign_inverse(result);
-        for(typename node_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
-        {
-            ggl::combine(result, it->first);
-        }
-
-        return result;
-    }
-
-    /**
-     * \brief Insert a value (not allowed for a node, only on leaves)
-     */
-    virtual void insert(Box const&, Value const&)
-    {
-        // TODO: mloskot - define & use GGL exception
-        throw std::logic_error("Insert in node!");
-    }
-
-    /**
-     * \brief Get the envelopes of a node
-     */
-    virtual std::vector<Box> get_boxes() const
-    {
-        std::vector<Box> result;
-        for(typename node_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
-        {
-            result.push_back(it->first);
-        }
-        return result;
-    }
-
-    /**
-     * \brief Recompute the bounding box
-     */
-    void adjust_box(node_pointer const& node)
-    {
-        unsigned int index = 0;
-        for (typename node_map::iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it, index++)
-        {
-            if (it->second.get() == node.get())
-            {
-                m_nodes[index] = std::make_pair(node->compute_box(), node);
-                return;
-            }
-        }
-    }
-
-    /**
-     * \brief Remove elements inside the 'box'
-     */
-    virtual void remove(Box const& box)
-    {
-        for (typename node_map::iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            if (ggl::equals(it->first, box))
-            {
-                m_nodes.erase(it);
-                return;
-            }
-        }
-    }
-
-    /**
-     * \brief Remove value in this leaf
-     */
-    virtual void remove(Value const&)
-    {
-        // TODO: mloskot - define & use GGL exception
-        throw std::logic_error("Can't remove a non-leaf node by value.");
-    }
-
-    /**
-     * \brief Replace the node in the m_nodes vector and recompute the box
-     */
-    void replace_node(node_pointer const& leaf, node_pointer& new_leaf)
-    {
-        unsigned int index = 0;
-        for(typename node_map::iterator it = m_nodes.begin(); it != m_nodes.end(); ++it, index++)
-        {
-            if (it->second.get() == leaf.get())
-            {
-                m_nodes[index] = std::make_pair(new_leaf->compute_box(), new_leaf);
-                new_leaf->update_parent(new_leaf);
-                return;
-            }
-        }
-
-        // TODO: mloskot - define & use GGL exception
-        throw std::logic_error("Node not found.");
-    }
-
-    /**
-     * \brief Add a child to this node
-     */
-    virtual void add_node(Box const& box, node_pointer const& node)
-    {
-        m_nodes.push_back(std::make_pair(box, node));
-        node->update_parent(node);
-    }
-
-    /**
-     * \brief add a value (not allowed in nodes, only on leaves)
-     */
-    virtual void add_value(Box const&, Value const&)
-    {
-        // TODO: mloskot - define & use GGL exception
-        throw std::logic_error("Can't add value to non-leaf node.");
-    }
-
-    /**
-     * \brief Add a child leaf to this node
-     */
-    inline void add_leaf_node(Box const& box, leaf_pointer const& leaf)
-    {
-        m_nodes.push_back(std::make_pair(box, leaf));
-    }
-
-    /**
-     * \brief Choose a node suitable for adding 'box'
-     */
-    node_pointer choose_node(Box const& box)
-    {
-        if (m_nodes.size() == 0)
-        {
-            // TODO: mloskot - define & use GGL exception
-            throw std::logic_error("Empty node trying to choose the least enlargement node.");
-        }
-
-        bool first = true;
-        double min_area = 0;
-        double min_diff_area = 0;
-        node_pointer chosen_node;
-
-        // check for the least enlargement
-        for (typename node_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
-        {
-            double const diff_area = compute_union_area(box, it->first) - ggl::area(it->first);
-
-            if (first)
-            {
-                // it's the first time, we keep the first
-                min_diff_area = diff_area;
-                min_area = ggl::area(it->first);
-                chosen_node = it->second;
-
-                first = false;
-            }
-            else
-            {
-                if (diff_area < min_diff_area)
-                {
-                    min_diff_area = diff_area;
-                    min_area = ggl::area(it->first);
-                    chosen_node = it->second;
-                }
-                else
-                {
-                    if (diff_area == min_diff_area)
-                    {
-                        if (ggl::area(it->first) < min_area)
-                        {
-                            min_diff_area = diff_area;
-                            min_area = ggl::area(it->first);
-                            chosen_node = it->second;
-                        }
-                    }
-                }
-            }
-        }
-
-        return chosen_node;
-    }
-
-    /**
-     * \brief Empty the node
-     */
-    virtual void empty_nodes()
-    {
-        m_nodes.clear();
-    }
-
-    /**
-     * \brief Projector for parent
-     */
-    inline node_pointer get_parent() const
-    {
-        return m_parent;
-    }
-
-    /**
-     * \brief Update the parent of all the childs
-     */
-    void update_parent(node_pointer const& node)
-    {
-        for (typename node_map::iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
-        {
-            it->second->set_parent(node);
-        }
-    }
-
-    /**
-     * \brief Set parent
-     */
-    void set_parent(node_pointer const& node)
-    {
-        m_parent = node;
-    }
-
-    /**
-     * \brief Value projector for leaf_node (not allowed for non-leaf nodes)
-     */
-    virtual Value get_value(unsigned int) const
-    {
-        // TODO: mloskot - define & use GGL exception
-        throw std::logic_error("No values in a non-leaf node.");
-    }
-
-    /**
-     * \brief Box projector for node 'index'
-     */
-    virtual Box get_box(unsigned int index) const
-    {
-        return m_nodes[index].first;
-    }
-
-    /**
-     * \brief Box projector for node pointed by 'leaf'
-     */
-    virtual Box get_box(node_pointer const& leaf) const
-    {
-        for (typename node_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            if (it->second.get() == leaf.get())
-            {
-                return it->first;
-            }
-        }
-
-        // TODO: mloskot - define & use GGL exception
-        throw std::logic_error("Node not found");
-    }
-
-    /**
-     * \brief Children projector
-     */
-    node_map get_nodes() const
-    {
-        return m_nodes;
-    }
-
-    /**
-    * \brief Get leaves for a node
-    */
-    virtual std::vector<std::pair<Box, Value> > get_leaves() const
-    {
-        typedef std::vector<std::pair<Box, Value> > leaf_type;
-        leaf_type leaf;
-
-        for (typename node_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            leaf_type this_leaves = it->second->get_leaves();
-
-            for (typename leaf_type::iterator it_leaf = this_leaves.begin();
-                it_leaf != this_leaves.end(); ++it_leaf)
-            {
-                leaf.push_back(*it_leaf);
-            }
-        }
-
-        return leaf;
-    }
-
-    /**
-     * \brief Print Rtree subtree (mainly for debug)
-     */
-    virtual void print() const
-    {
-        std::cerr << " --> Node --------" << std::endl;
-        std::cerr << "  Address: " << this << std::endl;
-        std::cerr << "  Level: " << m_level << std::endl;
-        std::cerr << "  Size: " << m_nodes.size() << std::endl;
-        std::cerr << "  | ";
-        for(typename node_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
-        {
-            if (this != it->second->get_parent().get())
-            {
-                std::cerr << "ERROR - " << this << " is not  " << it->second->get_parent().get() << " ";
-            }
-
-            std::cerr << "( " << ggl::get<min_corner, 0>(it->first) << " , "
-                << ggl::get<min_corner, 1>(it->first) << " ) x ";
-            std::cerr << "( " << ggl::get<max_corner, 0>(it->first) << " , "
-                << ggl::get<max_corner, 1>(it->first) << " )";
-            std::cerr << " | ";
-        }
-        std::cerr << std::endl;
-        std::cerr << " --< Node --------" << std::endl;
-
-        // print child nodes
-        std::cerr << " Children: " << std::endl;
-        for (typename node_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            it->second->print();
-        }
-    }
-
-private:
-
-    /// parent node
-    node_pointer m_parent;
-
-    /// level of this node
-    // TODO: mloskot - Why not std::size_t or node_map::size_type, same with member functions?
-    unsigned int m_level;
-
-    /// child nodes
-    node_map m_nodes;
-};
-
-}} // namespace ggl::index
-
-#endif // GGL_EXTENSIONS_INDEX_RTREE_RTREE_NODE_HPP
diff --git a/include/builtin-ggl/ggl/extensions/io/svg/write_svg.hpp b/include/builtin-ggl/ggl/extensions/io/svg/write_svg.hpp
deleted file mode 100644
index e78fde1..0000000
--- a/include/builtin-ggl/ggl/extensions/io/svg/write_svg.hpp
+++ /dev/null
@@ -1,263 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_IO_SVG_WRITE_SVG_HPP
-#define GGL_IO_SVG_WRITE_SVG_HPP
-
-#include <iostream>
-#include <string>
-
-#include <boost/concept/assert.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/core/ring_type.hpp>
-
-/*!
-\defgroup svg x Extension svg: Stream SVG (Scalable Vector Graphics)
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace svg {
-
-
-template <typename Point>
-struct svg_point
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os,
-                Point const& p, std::string const& style, int size)
-    {
-        os << "<circle cx=\"" << p.x()
-            << "\" cy=\"" << p.y()
-            << "\" r=\"" << (size < 0 ? 5 : size)
-            << "\" style=\"" << style << "\"/>";
-    }
-
-    private:
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point>) );
-};
-
-
-template <typename Box>
-struct svg_box
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os,
-                Box const& box, std::string const& style, int size)
-    {
-        int x = ggl::get<ggl::min_corner, 0>(box);
-        int y = ggl::get<ggl::min_corner, 1>(box);
-        int width = std::abs(ggl::get<ggl::max_corner, 0>(box) - x);
-        int height = std::abs(ggl::get<ggl::max_corner, 1>(box) - y);
-
-        os << "<rect x=\"" << x << "\" y=\"" << y
-            << "\" width=\"" << width << "\" height=\"" << height
-            << "\" style=\"" << style << "\"/>";
-    }
-
-    private:
-        typedef typename ggl::point_type<Box>::type point_type;
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<point_type>) );
-};
-
-
-/*!
-\brief Stream ranges as SVG
-\note policy is used to select type (polyline/polygon)
-*/
-template <typename Range, typename Policy>
-struct svg_range
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os,
-        Range const& range, std::string const& style, int size)
-    {
-        typedef typename boost::range_const_iterator<Range>::type iterator;
-
-        bool first = true;
-
-        os << "<" << Policy::prefix() << " points=\"";
-
-        for (iterator it = boost::begin(range);
-            it != boost::end(range);
-            ++it, first = false)
-        {
-            os << (first ? "" : " " ) << it->x() << "," << it->y();
-        }
-        os << "\" style=\"" << style << Policy::style() << "\"/>";
-    }
-
-    private:
-        typedef typename boost::range_value<Range>::type point;
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<point>) );
-};
-
-
-
-template <typename Polygon>
-struct svg_poly
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os,
-        Polygon const& polygon, std::string const& style, int size)
-    {
-        typedef typename ggl::ring_type<Polygon>::type ring_type;
-        typedef typename boost::range_const_iterator<ring_type>::type iterator_type;
-
-        bool first = true;
-        os << "<g fill-rule=\"evenodd\"><path d=\"";
-
-        ring_type const& ring = ggl::exterior_ring(polygon);
-        for (iterator_type it = boost::begin(ring);
-            it != boost::end(ring);
-            ++it, first = false)
-        {
-            os << (first ? "M" : " L") << " " << it->x() << "," << it->y();
-        }
-
-        // Inner rings:
-        {
-            typedef typename boost::range_const_iterator
-                <
-                    typename ggl::interior_type<Polygon>::type
-                >::type ring_iterator_type;
-            for (ring_iterator_type rit = boost::begin(interior_rings(polygon));
-                 rit != boost::end(interior_rings(polygon));
-                 ++rit)
-            {
-                first = true;
-                for (iterator_type it = boost::begin(*rit);
-                    it != boost::end(*rit);
-                    ++it, first = false)
-                {
-                    os << (first ? "M" : " L") << " " << it->x() << "," << it->y();
-                }
-            }
-        }
-        os << " z \" style=\"" << style << "\"/></g>";
-
-    }
-
-    private:
-        BOOST_CONCEPT_ASSERT
-            (
-                (concept::ConstPoint<typename point_type<Polygon>::type>)
-            );
-};
-
-
-
-struct prefix_linestring
-{
-    static inline const char* prefix() { return "polyline"; }
-    static inline const char* style() { return ";fill:none"; }
-};
-
-
-struct prefix_ring
-{
-    static inline const char* prefix() { return "polygon"; }
-    static inline const char* style() { return ""; }
-};
-
-
-
-}} // namespace detail::svg
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-/*!
-\brief Dispatching base struct for SVG streaming, specialized below per geometry type
-\details Specializations should implement a static method "stream" to stream a geometry
-The static method should have the signature:
-
-template <typename Char, typename Traits>
-static inline void apply(std::basic_ostream<Char, Traits>& os, const G& geometry)
-*/
-template <typename GeometryTag, typename Geometry>
-struct svg {};
-
-template <typename Point>
-struct svg<point_tag, Point> : detail::svg::svg_point<Point> {};
-
-template <typename Box>
-struct svg<box_tag, Box> : detail::svg::svg_box<Box> {};
-
-template <typename Linestring>
-struct svg<linestring_tag, Linestring>
-    : detail::svg::svg_range<Linestring, detail::svg::prefix_linestring> {};
-
-template <typename Ring>
-struct svg<ring_tag, Ring>
-    : detail::svg::svg_range<Ring, detail::svg::prefix_ring> {};
-
-template <typename Polygon>
-struct svg<polygon_tag, Polygon>
-    : detail::svg::svg_poly<Polygon> {};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief Generic geometry template manipulator class, takes corresponding output class from traits class
-\ingroup svg
-\details Stream manipulator, streams geometry classes as Virtual Earth shape
-*/
-template <typename G>
-class svg_manipulator
-{
-public:
-
-    inline svg_manipulator(G const& g, std::string const& style, int size)
-        : m_geometry(g)
-        , m_style(style)
-        , m_size(size)
-    {}
-
-    template <typename Char, typename Traits>
-    inline friend std::basic_ostream<Char, Traits>& operator<<(
-                    std::basic_ostream<Char, Traits>& os, svg_manipulator const& m)
-    {
-        dispatch::svg
-            <
-                typename tag<G>::type, G
-            >::apply(os, m.m_geometry, m.m_style, m.m_size);
-        os.flush();
-        return os;
-    }
-
-private:
-    G const& m_geometry;
-    std::string const& m_style;
-    int m_size;
-};
-
-/*!
-\brief Main svg function to stream geometries as SVG
-\ingroup svg
-*/
-template <typename Geometry>
-inline svg_manipulator<Geometry> svg(Geometry const& t, std::string const& style, int size = -1)
-{
-    return svg_manipulator<Geometry>(t, style, size);
-}
-
-} // namespace ggl
-
-#endif // GGL_IO_SVG_WRITE_SVG_HPP
diff --git a/include/builtin-ggl/ggl/extensions/io/svg/write_svg_multi.hpp b/include/builtin-ggl/ggl/extensions/io/svg/write_svg_multi.hpp
deleted file mode 100644
index 2e9030f..0000000
--- a/include/builtin-ggl/ggl/extensions/io/svg/write_svg_multi.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_IO_SVG_WRITE_SVG_MULTI_HPP
-#define GGL_IO_SVG_WRITE_SVG_MULTI_HPP
-
-
-#include <ggl/extensions/io/svg/write_svg.hpp>
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace svg {
-
-
-template <typename MultiGeometry, typename Policy>
-struct svg_multi
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os,
-        MultiGeometry const& multi, std::string const& style, int size)
-    {
-        for (typename boost::range_const_iterator<MultiGeometry>::type
-                    it = boost::begin(multi);
-            it != boost::end(multi);
-            ++it)
-        {
-            Policy::apply(os, *it, style, size);
-        }
-
-    }
-
-};
-
-
-
-}} // namespace detail::svg
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-
-template <typename MultiPolygon>
-struct svg<multi_polygon_tag, MultiPolygon>
-    : detail::svg::svg_multi
-        <
-            MultiPolygon,
-            detail::svg::svg_poly
-                <
-                    typename boost::range_value<MultiPolygon>::type
-                >
-
-        >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-} // namespace ggl
-
-#endif // GGL_IO_SVG_WRITE_SVG_MULTI_HPP
diff --git a/include/builtin-ggl/ggl/geometries/adapted/boost_array_as_linestring.hpp b/include/builtin-ggl/ggl/geometries/adapted/boost_array_as_linestring.hpp
deleted file mode 100644
index 973e875..0000000
--- a/include/builtin-ggl/ggl/geometries/adapted/boost_array_as_linestring.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_ADAPTED_BOOST_ARRAY_AS_LINESTRING_HPP
-#define GGL_ADAPTED_BOOST_ARRAY_AS_LINESTRING_HPP
-
-
-#ifdef _GEOMETRY_ADAPTED_BOOST_ARRAY_RANGE_TAG_DEFINED
-#error Include only one headerfile to register tag for adapted boost::array
-#endif
-
-#define GGL_ADAPTED_BOOST_ARRAY_RANGE_TAG_DEFINED
-
-
-#include <boost/array.hpp>
-
-namespace ggl
-{
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-    template <typename T, size_t N>
-    struct tag< boost::array<T, N> >
-    {
-        typedef linestring_tag type;
-    };
-
-}
-#endif
-}
-
-
-#endif
diff --git a/include/builtin-ggl/ggl/geometries/adapted/boost_array_as_ring.hpp b/include/builtin-ggl/ggl/geometries/adapted/boost_array_as_ring.hpp
deleted file mode 100644
index 155828c..0000000
--- a/include/builtin-ggl/ggl/geometries/adapted/boost_array_as_ring.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_ADAPTED_BOOST_ARRAY_AS_RING_HPP
-#define GGL_ADAPTED_BOOST_ARRAY_AS_RING_HPP
-
-
-#ifdef _GEOMETRY_ADAPTED_BOOST_ARRAY_RANGE_TAG_DEFINED
-#error Include only one headerfile to register tag for adapted boost::array
-#endif
-
-#define GGL_ADAPTED_BOOST_ARRAY_RANGE_TAG_DEFINED
-
-
-#include <boost/array.hpp>
-
-namespace ggl
-{
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-    template <typename T, size_t N>
-    struct tag< boost::array<T, N> >
-    {
-        typedef ring_tag type;
-    };
-
-}
-#endif
-}
-
-
-#endif
diff --git a/include/builtin-ggl/ggl/geometries/adapted/c_array.hpp b/include/builtin-ggl/ggl/geometries/adapted/c_array.hpp
deleted file mode 100644
index 9d130d7..0000000
--- a/include/builtin-ggl/ggl/geometries/adapted/c_array.hpp
+++ /dev/null
@@ -1,88 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRIES_ADAPTED_C_ARRAY_HPP
-#define GGL_GEOMETRIES_ADAPTED_C_ARRAY_HPP
-
-#include <cstddef>
-
-#include <boost/type_traits/is_arithmetic.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/cs.hpp>
-#include <ggl/core/coordinate_dimension.hpp>
-#include <ggl/core/coordinate_type.hpp>
-#include <ggl/core/tags.hpp>
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-// Create class and specialization to indicate the tag
-// for normal cases and the case that the type of the c-array is arithmetic
-template <bool>
-struct c_array_tag
-{
-    typedef geometry_not_recognized_tag type;
-};
-
-template <>
-struct c_array_tag<true>
-{
-    typedef point_tag type;
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-// Assign the point-tag, preventing arrays of points getting a point-tag
-template <typename T, std::size_t N>
-struct tag<T[N]> : detail::c_array_tag<boost::is_arithmetic<T>::value> {};
-
-template <typename T, std::size_t N>
-struct coordinate_type<T[N]>
-{
-    typedef T type;
-};
-
-template <typename T, std::size_t N>
-struct dimension<T[N]>: boost::mpl::int_<N> {};
-
-template <typename T, std::size_t N>
-struct access<T[N]>
-{
-    template <std::size_t I>
-    static inline T get(const T p[N])
-    {
-        return p[I];
-    }
-
-    template <std::size_t I>
-    static inline void set(T p[N], const T& value)
-    {
-        p[I] = value;
-    }
-};
-
-// The library user has
-// 1) either to specify the coordinate system
-// 2) or include <ggl/geometries/adapted/c_array_ at .hpp> where @=cartesian,geographic,...
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRIES_ADAPTED_C_ARRAY_HPP
diff --git a/include/builtin-ggl/ggl/geometries/adapted/c_array_cartesian.hpp b/include/builtin-ggl/ggl/geometries/adapted/c_array_cartesian.hpp
deleted file mode 100644
index 7648dc2..0000000
--- a/include/builtin-ggl/ggl/geometries/adapted/c_array_cartesian.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_ADAPTED_C_ARRAY_CARTESIAN_HPP
-#define GGL_ADAPTED_C_ARRAY_CARTESIAN_HPP
-
-#ifdef _GEOMETRY_ADAPTED_C_ARRAY_COORDINATE_SYSTEM_DEFINED
-#error Include only one headerfile to register coordinate coordinate_system for adapted c array
-#endif
-
-#define GGL_ADAPTED_C_ARRAY_COORDINATE_SYSTEM_DEFINED
-
-
-#include <ggl/geometries/adapted/c_array.hpp>
-
-
-namespace ggl
-{
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-    template <typename T, int N>
-    struct coordinate_system<T[N]>
-    { typedef cs::cartesian type; };
-
-}
-#endif
-}
-
-
-#endif
diff --git a/include/builtin-ggl/ggl/geometries/adapted/c_array_geographic.hpp b/include/builtin-ggl/ggl/geometries/adapted/c_array_geographic.hpp
deleted file mode 100644
index cb4ddd2..0000000
--- a/include/builtin-ggl/ggl/geometries/adapted/c_array_geographic.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_ADAPTED_C_ARRAY_GEOGRAPHIC_HPP
-#define GGL_ADAPTED_C_ARRAY_GEOGRAPHIC_HPP
-
-#ifdef _GEOMETRY_ADAPTED_C_ARRAY_COORDINATE_SYSTEM_DEFINED
-#error Include only one headerfile to register coordinate coordinate_system for adapted c array
-#endif
-
-#define GGL_ADAPTED_C_ARRAY_COORDINATE_SYSTEM_DEFINED
-
-#include <ggl/geometries/adapted/c_array.hpp>
-
-namespace ggl
-{
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-    template <typename T, int N>
-    struct coordinate_system<T[N]>
-    { typedef cs::geographic type; };
-
-}
-#endif
-}
-
-
-#endif
diff --git a/include/builtin-ggl/ggl/geometries/adapted/std_as_linestring.hpp b/include/builtin-ggl/ggl/geometries/adapted/std_as_linestring.hpp
deleted file mode 100644
index e5f3b17..0000000
--- a/include/builtin-ggl/ggl/geometries/adapted/std_as_linestring.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_ADAPTED_STD_AS_LINESTRING_HPP
-#define GGL_ADAPTED_STD_AS_LINESTRING_HPP
-
-
-#ifdef _GEOMETRY_ADAPTED_STD_RANGE_TAG_DEFINED
-#error Include only one headerfile to register tag for adapted std:: containers or iterator pair
-#endif
-
-#define GGL_ADAPTED_STD_RANGE_TAG_DEFINED
-
-
-#include <vector>
-#include <deque>
-#include <list>
-#include <utility>
-
-
-namespace ggl
-{
-#ifndef DOXYGEN_NO_DETAIL
-namespace util
-{
-    struct std_as_linestring
-    {
-        typedef linestring_tag type;
-    };
-
-}
-#endif
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-    // specialization for an iterator pair (read only)
-    template <typename P> struct tag< std::pair<P, P> > : util::std_as_linestring {};
-
-    // Indicate that std::library is not used to add things to std::pair.
-    // Don't implement anything else -> adding points or clearing not possible
-    template <typename P> struct use_std< std::pair<P, P> > : boost::mpl::false_ {};
-
-    // specializations for a std:: containers: vector, deque, list
-    template <typename P> struct tag< std::vector<P> > : util::std_as_linestring {};
-    template <typename P> struct tag< std::deque<P> > : util::std_as_linestring {};
-    template <typename P> struct tag< std::list<P> > : util::std_as_linestring {};
-
-}
-#endif
-}
-
-
-#endif
diff --git a/include/builtin-ggl/ggl/geometries/adapted/std_as_ring.hpp b/include/builtin-ggl/ggl/geometries/adapted/std_as_ring.hpp
deleted file mode 100644
index d8ad3d7..0000000
--- a/include/builtin-ggl/ggl/geometries/adapted/std_as_ring.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_ADAPTED_STD_AS_RING_HPP
-#define GGL_ADAPTED_STD_AS_RING_HPP
-
-
-#ifdef _GEOMETRY_ADAPTED_STD_RANGE_TAG_DEFINED
-#error Include only one headerfile to register tag for adapted std:: containers or iterator pair
-#endif
-
-#define GGL_ADAPTED_STD_RANGE_TAG_DEFINED
-
-
-#include <vector>
-#include <deque>
-#include <list>
-#include <utility>
-
-namespace ggl
-{
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-    // specialization for an iterator pair
-    template <typename T> struct tag< std::pair<T, T> > { typedef ring_tag type; };
-
-    // specialization for a std:: containers: vector, deque, list
-    template <typename T> struct tag< std::vector<T> > { typedef ring_tag type; };
-    template <typename T> struct tag< std::deque<T> > { typedef ring_tag type; };
-    template <typename T> struct tag< std::list<T> > { typedef ring_tag type; };
-}
-#endif
-}
-
-
-#endif
diff --git a/include/builtin-ggl/ggl/geometries/adapted/tuple.hpp b/include/builtin-ggl/ggl/geometries/adapted/tuple.hpp
deleted file mode 100644
index 97c1b25..0000000
--- a/include/builtin-ggl/ggl/geometries/adapted/tuple.hpp
+++ /dev/null
@@ -1,100 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRIES_ADAPTED_TUPLE_HPP
-#define GGL_GEOMETRIES_ADAPTED_TUPLE_HPP
-
-#include <boost/tuple/tuple.hpp>
-
-#include <ggl/core/coordinate_dimension.hpp>
-#include <ggl/core/coordinate_type.hpp>
-#include <ggl/core/point_type.hpp>
-#include <ggl/core/tags.hpp>
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-// boost::tuple, 2D
-template <typename T>
-struct coordinate_type<boost::tuple<T, T> >
-{
-    typedef T type;
-};
-
-template <typename T>
-struct dimension<boost::tuple<T, T> > : boost::mpl::int_<2> {};
-
-template <typename T>
-struct access<boost::tuple<T, T> >
-{
-    template <int I>
-    static inline T get(const boost::tuple<T, T>& p)
-    {
-        return p.get<I>();
-    }
-
-    template <int I>
-    static inline void set(boost::tuple<T, T>& p, const T& value)
-    {
-        p.get<I>() = value;
-    }
-};
-
-template <typename T>
-struct tag<boost::tuple<T, T> >
-{
-    typedef point_tag type;
-};
-
-// boost::tuple, 3D
-template <typename T>
-struct coordinate_type<boost::tuple<T, T, T> >
-{
-    typedef T type;
-};
-
-template <typename T>
-struct dimension<boost::tuple<T, T, T> > : boost::mpl::int_<3> {};
-
-template <typename T>
-struct access<boost::tuple<T, T, T> >
-{
-    template <int I>
-    static inline T get(const boost::tuple<T, T, T>& p)
-    {
-        return p.get<I>();
-    }
-
-    template <int I>
-    static inline void set(boost::tuple<T, T, T>& p, const T& value)
-    {
-        p.get<I>() = value;
-    }
-};
-
-template <typename T>
-struct tag<boost::tuple<T, T, T> >
-{
-    typedef point_tag type;
-};
-
-// The library user has
-// 1) either to specify the coordinate system using a traits class
-// 2) or include <ggl/geometries/adapted/tuple_ at .hpp> where @=cartesian,geographic,...
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRIES_ADAPTED_TUPLE_HPP
-
diff --git a/include/builtin-ggl/ggl/geometries/adapted/tuple_cartesian.hpp b/include/builtin-ggl/ggl/geometries/adapted/tuple_cartesian.hpp
deleted file mode 100644
index d0ce00d..0000000
--- a/include/builtin-ggl/ggl/geometries/adapted/tuple_cartesian.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_ADAPTED_TUPLE_CARTESIAN_HPP
-#define GGL_ADAPTED_TUPLE_CARTESIAN_HPP
-
-#ifdef _GEOMETRY_ADAPTED_TUPLE_COORDINATE_SYSTEM_DEFINED
-#error Include only one headerfile to register coordinate coordinate_system for adapted tuple
-#endif
-
-#define GGL_ADAPTED_TUPLE_COORDINATE_SYSTEM_DEFINED
-
-
-#include <ggl/geometries/adapted/tuple.hpp>
-
-
-namespace ggl
-{
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-    template <typename T>
-    struct coordinate_system<boost::tuple<T, T> >
-    { typedef cs::cartesian type; };
-
-    template <typename T>
-    struct coordinate_system<boost::tuple<T, T, T> >
-    { typedef cs::cartesian type; };
-
-}
-#endif
-}
-
-
-#endif
diff --git a/include/builtin-ggl/ggl/geometries/adapted/tuple_geographic.hpp b/include/builtin-ggl/ggl/geometries/adapted/tuple_geographic.hpp
deleted file mode 100644
index 379d5b9..0000000
--- a/include/builtin-ggl/ggl/geometries/adapted/tuple_geographic.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_ADAPTED_TUPLE_GEOGRAPHIC_HPP
-#define GGL_ADAPTED_TUPLE_GEOGRAPHIC_HPP
-
-#ifdef _GEOMETRY_ADAPTED_TUPLE_COORDINATE_SYSTEM_DEFINED
-#error Include only one headerfile to register coordinate coordinate_system for adapted tuple
-#endif
-
-#define GGL_ADAPTED_TUPLE_COORDINATE_SYSTEM_DEFINED
-
-
-#include <ggl/geometries/adapted/tuple.hpp>
-
-
-namespace ggl
-{
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-    template <typename T>
-    struct coordinate_system<boost::tuple<T, T> >
-    { typedef cs::geographic<degree> type; };
-
-    template <typename T>
-    struct coordinate_system<boost::tuple<T, T, T> >
-    { typedef cs::geographic<degree> type; };
-
-}
-#endif
-}
-
-
-#endif
diff --git a/include/builtin-ggl/ggl/geometries/box.hpp b/include/builtin-ggl/ggl/geometries/box.hpp
deleted file mode 100644
index eecf748..0000000
--- a/include/builtin-ggl/ggl/geometries/box.hpp
+++ /dev/null
@@ -1,110 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRIES_BOX_HPP
-#define GGL_GEOMETRIES_BOX_HPP
-
-#include <cstddef>
-
-#include <ggl/algorithms/assign.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/util/copy.hpp>
-
-namespace ggl
-{
-
-/*!
-    \brief Class box: defines a box made of two describing points
-    \ingroup Geometry
-    \details Box is always described by a min_corner() and a max_corner() point. If another
-    rectangle is used, use linear_ring or polygon.
-    \note Boxes are for selections and for calculating the envelope of geometries. Not all algorithms
-    are implemented for box. Boxes are also used in Spatial Indexes.
-    \tparam P point type. The box takes a point type as template parameter.
-    The point type can be any point type.
-    It can be 2D but can also be 3D or more dimensional.
-    The box can also take a latlong point type as template parameter.
- */
-
-template<typename P>
-class box
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<P>) );
-
-public:
-
-    inline box() {}
-
-    /*!
-        \brief Constructor taking the minimum corner point and the maximum corner point
-    */
-    inline box(P const& min_corner, P const& max_corner)
-    {
-        copy_coordinates(min_corner, m_min_corner);
-        copy_coordinates(max_corner, m_max_corner);
-    }
-
-    inline P const& min_corner() const { return m_min_corner; }
-    inline P const& max_corner() const { return m_max_corner; }
-
-    inline P& min_corner() { return m_min_corner; }
-    inline P& max_corner() { return m_max_corner; }
-
-private:
-
-    P m_min_corner;
-    P m_max_corner;
-};
-
-
-// Traits specializations for box above
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename P>
-struct tag< box<P> >
-{
-    typedef box_tag type;
-};
-
-template <typename P>
-struct point_type<box<P> >
-{
-    typedef P type;
-};
-
-template <typename P, std::size_t C, std::size_t D>
-struct indexed_access<box<P>, C, D>
-{
-    typedef box<P> box_type;
-
-    static inline typename ggl::coordinate_type<box_type>::type get(box_type const& b)
-    {
-        return (C == min_corner ? ggl::get<D>(b.min_corner()) : ggl::get<D>(b.max_corner()));
-    }
-
-    static inline void set(box_type& b, typename ggl::coordinate_type<box_type>::type const& value)
-    {
-        if (C == min_corner)
-        {
-            ggl::set<D>(b.min_corner(), value);
-        }
-        else
-        {
-            ggl::set<D>(b.max_corner(), value);
-        }
-    }
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRIES_BOX_HPP
diff --git a/include/builtin-ggl/ggl/geometries/cartesian2d.hpp b/include/builtin-ggl/ggl/geometries/cartesian2d.hpp
deleted file mode 100644
index cc630aa..0000000
--- a/include/builtin-ggl/ggl/geometries/cartesian2d.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRIES_CARTESIAN2D_HPP
-#define GGL_GEOMETRIES_CARTESIAN2D_HPP
-
-// Predeclare common Cartesian 2D points for convenience
-
-#include <ggl/geometries/geometries.hpp>
-
-namespace ggl
-{
-
-typedef point_xy<double, cs::cartesian> point_2d;
-typedef linestring<point_2d> linestring_2d;
-typedef linear_ring<point_2d> ring_2d;
-typedef polygon<point_2d> polygon_2d;
-typedef box<point_2d> box_2d;
-typedef segment<point_2d> segment_2d;
-typedef nsphere<point_2d, double> circle;
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRIES_CARTESIAN2D_HPP
diff --git a/include/builtin-ggl/ggl/geometries/cartesian3d.hpp b/include/builtin-ggl/ggl/geometries/cartesian3d.hpp
deleted file mode 100644
index 701e3d7..0000000
--- a/include/builtin-ggl/ggl/geometries/cartesian3d.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_CARTESIAN3D_HPP
-#define GGL_CARTESIAN3D_HPP
-
-// Predeclare common Cartesian 3D points for convenience
-
-#include <ggl/geometries/geometries.hpp>
-
-namespace ggl
-{
-typedef point<double, 3, cs::cartesian> point_3d;
-typedef linestring<point_3d> linestring_3d;
-typedef linear_ring<point_3d> ring_3d;
-typedef polygon<point_3d> polygon_3d;
-typedef box<point_3d> box_3d;
-
-typedef nsphere<point_3d, double> sphere;
-}
-
-
-#endif // GGL_CARTESIAN3D_HPP
diff --git a/include/builtin-ggl/ggl/geometries/geometries.hpp b/include/builtin-ggl/ggl/geometries/geometries.hpp
deleted file mode 100644
index 4818835..0000000
--- a/include/builtin-ggl/ggl/geometries/geometries.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRIES_HPP
-#define GGL_GEOMETRIES_HPP
-
-#include <ggl/geometries/adapted/c_array.hpp>
-#include <ggl/geometries/adapted/tuple.hpp>
-
-#include <ggl/geometries/point.hpp>
-#include <ggl/geometries/point_xy.hpp>
-#include <ggl/geometries/linear_ring.hpp>
-#include <ggl/geometries/linestring.hpp>
-#include <ggl/geometries/polygon.hpp>
-
-#include <ggl/geometries/box.hpp>
-#include <ggl/geometries/nsphere.hpp>
-#include <ggl/geometries/segment.hpp>
-
-#endif // GGL_GEOMETRIES_HPP
diff --git a/include/builtin-ggl/ggl/geometries/linear_ring.hpp b/include/builtin-ggl/ggl/geometries/linear_ring.hpp
deleted file mode 100644
index 79b4278..0000000
--- a/include/builtin-ggl/ggl/geometries/linear_ring.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRIES_LINEAR_RING_HPP
-#define GGL_GEOMETRIES_LINEAR_RING_HPP
-
-#include <memory>
-#include <vector>
-
-#include <boost/concept/assert.hpp>
-
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-#include <ggl/core/concepts/point_concept.hpp>
-
-
-namespace ggl
-{
-
-/*!
-    \brief A linear_ring (linear linear_ring) is a closed line which should not be selfintersecting
-    \ingroup Geometry
-    \tparam P point type
-    \tparam V optional container type, for example std::vector, std::list, std::deque
-    \tparam A optional container-allocator-type
-*/
-template
-<
-    typename P,
-    template<typename, typename> class V = std::vector,
-    template<typename> class A = std::allocator
->
-class linear_ring : public V<P, A<P> >
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<P>) );
-};
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
-    typename P,
-    template<typename, typename> class V,
-    template<typename> class A
->
-struct tag< linear_ring<P, V, A> >
-{
-    typedef ring_tag type;
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRIES_LINEAR_RING_HPP
diff --git a/include/builtin-ggl/ggl/geometries/linestring.hpp b/include/builtin-ggl/ggl/geometries/linestring.hpp
deleted file mode 100644
index b17fb92..0000000
--- a/include/builtin-ggl/ggl/geometries/linestring.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRIES_LINESTRING_HPP
-#define GGL_GEOMETRIES_LINESTRING_HPP
-
-#include <memory>
-#include <vector>
-
-#include <boost/concept/assert.hpp>
-#include <boost/range/functions.hpp>
-
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-#include <ggl/core/concepts/point_concept.hpp>
-
-
-namespace ggl
-{
-
-/*!
-    \brief A linestring (named so by OGC) is a collection (default a vector) of points.
-    \ingroup Geometry
-    \tparam P point type
-    \tparam V optional container type, for example std::vector, std::list, std::deque
-    \tparam A optional container-allocator-type
-    (see http://accu.org/index.php/journals/427#ftn.d0e249 )
-    \par Concepts:
-    All algorithms work on ranges, based on a container with point types fulfilling
-    the point concepts. They will take linestring, but also vector, std::pair, or other containers.
-*/
-template
-<
-    typename P,
-    template<typename,typename> class V = std::vector,
-    template<typename> class A = std::allocator
->
-class linestring : public V<P, A<P> >
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<P>) );
-};
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
-    typename P,
-    template<typename,typename> class V,
-    template<typename> class A
->
-struct tag<linestring<P, V, A> >
-{
-    typedef linestring_tag type;
-};
-} // namespace traits
-
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRIES_LINESTRING_HPP
diff --git a/include/builtin-ggl/ggl/geometries/nsphere.hpp b/include/builtin-ggl/ggl/geometries/nsphere.hpp
deleted file mode 100644
index 2a8c1ab..0000000
--- a/include/builtin-ggl/ggl/geometries/nsphere.hpp
+++ /dev/null
@@ -1,130 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRIES_NSPHERE_HPP
-#define GGL_GEOMETRIES_NSPHERE_HPP
-
-#include <cstddef>
-
-#include <ggl/algorithms/assign.hpp>
-#include <ggl/core/concepts/nsphere_concept.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/util/copy.hpp>
-
-namespace ggl
-{
-
-/*!
-    \brief Class nsphere: defines a circle or a sphere: a point with radius
-    \ingroup Geometry
-    \details The name nsphere is quite funny but the best description of the class. It can be a circle (2D),
-    a sphere (3D), or higher (hypersphere) or lower. According to Wikipedia this name is the most appropriate.
-    It was mentioned on the Boost list.
-    An alternative is the more fancy name "sphercle" but that might be a bit too much an invention.
-    \note Circle is currently used for selections, for example polygon_in_circle. Currently not all
-    algorithms are implemented for n-spheres.
-    \tparam P point type of the center
-    \tparam T number type of the radius
- */
-template <typename P, typename T>
-class nsphere
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<P>) );
-
-public:
-
-    typedef T radius_type;
-    typedef typename coordinate_type<P>::type coordinate_type;
-
-    nsphere()
-        : m_radius(0)
-    {
-        detail::assign::assign_value(m_center, coordinate_type());
-    }
-
-    nsphere(P const& center, T const& radius)
-        : m_radius(radius)
-    {
-        copy_coordinates(center, m_center);
-    }
-
-    inline P const& center() const { return m_center; }
-    inline T const& radius() const { return m_radius; }
-
-    inline void radius(T const& r) { m_radius = r; }
-    inline P& center() { return m_center; }
-
-private:
-
-    P m_center;
-    T m_radius;
-};
-
-// Traits specializations for n-sphere above
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename P, typename T>
-struct tag< nsphere<P, T> >
-{
-    typedef nsphere_tag type;
-};
-
-template <typename P, typename T>
-struct point_type<nsphere<P, T> >
-{
-    typedef P type;
-};
-
-template <typename P, typename T>
-struct radius_type<nsphere<P, T> >
-{
-    typedef T type;
-};
-
-template <typename P, typename T>
-struct access<nsphere<P, T> >
-{
-    typedef nsphere<P, T> nsphere_type;
-
-    template <std::size_t D>
-    static inline typename ggl::coordinate_type<nsphere_type>::type get(nsphere_type const& s)
-    {
-        return ggl::get<D>(s.center());
-    }
-
-    template <std::size_t D>
-    static inline void set(nsphere_type& s, typename ggl::coordinate_type<nsphere_type>::type const& value)
-    {
-        ggl::set<D>(s.center(), value);
-    }
-};
-
-template <typename P, typename T>
-struct radius_access<nsphere<P, T>, T, 0>
-{
-    typedef nsphere<P, T> nsphere_type;
-
-    static inline T get(nsphere_type const& s)
-    {
-        return s.radius();
-    }
-
-    static inline void set(nsphere_type& s, T const& value)
-    {
-        s.radius(value);
-    }
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRIES_NSPHERE_HPP
diff --git a/include/builtin-ggl/ggl/geometries/point.hpp b/include/builtin-ggl/ggl/geometries/point.hpp
deleted file mode 100644
index 20d26a9..0000000
--- a/include/builtin-ggl/ggl/geometries/point.hpp
+++ /dev/null
@@ -1,125 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRIES_POINT_HPP
-#define GGL_GEOMETRIES_POINT_HPP
-
-#include <cstddef>
-
-#include <boost/mpl/int.hpp>
-#include <boost/static_assert.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/coordinate_type.hpp>
-#include <ggl/core/coordinate_system.hpp>
-#include <ggl/core/coordinate_dimension.hpp>
-#include <ggl/util/math.hpp>
-
-namespace ggl
-{
-
-/*!
-    \brief Basic point class, having coordinates defined in a neutral way
-    \ingroup Geometry
-    \tparam T numeric type, for example double, float, int
-    \tparam D coordinate dimension as number of coordinates, for example 2
-    \tparam C coordinate system, for example cs::cartesian
-*/
-template<typename T, std::size_t D, typename C>
-class point
-{
-public:
-
-    // Concept typedefs and members
-    typedef T coordinate_type;
-    typedef C coordinate_system;
-
-    static const std::size_t coordinate_count = D;
-
-    /// Default constructor, no initialization at all
-    inline point()
-    {}
-
-    /// Constructs with one, or optionally two or three values
-    inline point(T const& v0, T const& v1 = 0, T const& v2 = 0)
-    {
-        if (D >= 1) m_values[0] = v0;
-        if (D >= 2) m_values[1] = v1;
-        if (D >= 3) m_values[2] = v2;
-    }
-
-
-    /// Compile time access to coordinate values
-    template <std::size_t K>
-    inline T const& get() const
-    {
-        BOOST_STATIC_ASSERT(K < D);
-        return m_values[K];
-    }
-
-    template <std::size_t K>
-    inline void set(T value)
-    {
-        BOOST_STATIC_ASSERT(K < D);
-        m_values[K] = value;
-    }
-
-
-private:
-
-    T m_values[D];
-};
-
-
-// Adapt the point to the concept
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-template <typename T, std::size_t D, typename C>
-struct tag<point<T, D, C> >
-{
-    typedef point_tag type;
-};
-
-template<typename T, std::size_t D, typename C>
-struct coordinate_type<point<T, D, C> >
-{
-    typedef T type;
-};
-
-template<typename T, std::size_t D, typename C>
-struct coordinate_system<point<T, D, C> >
-{
-    typedef C type;
-};
-
-template<typename T, std::size_t D, typename C>
-struct dimension<point<T, D, C> > : boost::mpl::int_<D> {};
-
-template<typename T, std::size_t D, typename C>
-struct access<point<T, D, C> >
-{
-    template <std::size_t I>
-    static inline T get(point<T, D, C> const& p)
-    {
-        return p.template get<I>();
-    }
-
-    template <std::size_t I>
-    static inline void set(point<T, D, C>& p, T const& value)
-    {
-        p.template set<I>(value);
-    }
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRIES_POINT_HPP
diff --git a/include/builtin-ggl/ggl/geometries/point_xy.hpp b/include/builtin-ggl/ggl/geometries/point_xy.hpp
deleted file mode 100644
index 08e263b..0000000
--- a/include/builtin-ggl/ggl/geometries/point_xy.hpp
+++ /dev/null
@@ -1,109 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRIES_POINT_XY_HPP
-#define GGL_GEOMETRIES_POINT_XY_HPP
-
-#include <cstddef>
-
-#include <boost/mpl/int.hpp>
-
-#include <ggl/core/cs.hpp>
-#include <ggl/geometries/point.hpp>
-
-namespace ggl
-{
-
-/*!
-    \brief 2D point in Cartesian coordinate system
-    \ingroup Geometry
-    \tparam T numeric type, arguments can be, for example, double, float, int
-*/
-template<typename T, typename C = cs::cartesian>
-class point_xy : public point<T, 2, C>
-{
-public:
-
-    /// Default constructor, does not initialize anything
-    inline point_xy() : point<T, 2, C>() {}
-
-    /// Constructor with x/y values
-    inline point_xy(T const& x, T const& y) : point<T, 2, C>(x, y) {}
-
-    /// Get x-value
-    inline T const& x() const
-    { return this->template get<0>(); }
-
-    /// Get y-value
-    inline T const& y() const
-    { return this->template get<1>(); }
-
-    /// Set x-value
-    inline void x(T const& v)
-    { this->template set<0>(v); }
-
-    /// Set y-value
-    inline void y(T const& v)
-    { this->template set<1>(v); }
-
-    /// Compare two points
-    inline bool operator<(point_xy const& other) const
-    {
-        return math::equals(x(), other.x()) ? y() < other.y() : x() < other.x();
-    }
-
-};
-
-// Adapt the point_xy to the concept
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename T, typename C>
-struct tag<point_xy<T, C> >
-{
-    typedef point_tag type;
-};
-
-template<typename T, typename C>
-struct coordinate_type<point_xy<T, C> >
-{
-    typedef T type;
-};
-
-template<typename T, typename C>
-struct coordinate_system<point_xy<T, C> >
-{
-    typedef C type;
-};
-
-template<typename T, typename C>
-struct dimension<point_xy<T, C> > : boost::mpl::int_<2> {};
-
-template<typename T, typename C>
-struct access<point_xy<T, C> >
-{
-    template <std::size_t I>
-    static inline T get(point_xy<T, C> const& p)
-    {
-        return p.template get<I>();
-    }
-
-    template <std::size_t I>
-    static inline void set(point_xy<T, C>& p, T const& value)
-    {
-        p.template set<I>(value);
-    }
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRIES_POINT_XY_HPP
diff --git a/include/builtin-ggl/ggl/geometries/polygon.hpp b/include/builtin-ggl/ggl/geometries/polygon.hpp
deleted file mode 100644
index 27fd4b0..0000000
--- a/include/builtin-ggl/ggl/geometries/polygon.hpp
+++ /dev/null
@@ -1,179 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRIES_POLYGON_HPP
-#define GGL_GEOMETRIES_POLYGON_HPP
-
-#include <memory>
-#include <vector>
-
-#include <boost/concept/assert.hpp>
-
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/core/point_type.hpp>
-#include <ggl/core/ring_type.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/geometries/linear_ring.hpp>
-
-namespace ggl
-{
-
-/*!
-    \brief The \b polygon contains an outer ring and zero or more inner rings.
-    \ingroup Geometry
-    \tparam P point type
-    \tparam PointList optional container type for points, for example std::vector, std::list, std::deque
-    \tparam RingList optional container type for inner rings, for example std::vector, std::list, std::deque
-    \tparam PointAlloc container-allocator-type
-    \tparam RingAlloc container-allocator-type
-    \note The container collecting the points in the rings can be different from the
-    container collecting the inner rings. They all default to vector.
-*/
-template
-<
-    typename Point,
-    template<typename, typename> class PointList = std::vector,
-    template<typename, typename> class RingList = std::vector,
-    template<typename> class PointAlloc = std::allocator,
-    template<typename> class RingAlloc = std::allocator
->
-class polygon
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<Point>) );
-
-public:
-
-    // Member types
-    typedef Point point_type;
-    typedef linear_ring<Point, PointList, PointAlloc> ring_type;
-    typedef RingList<ring_type , RingAlloc<ring_type > > inner_container_type;
-
-    inline ring_type const& outer() const { return m_outer; }
-    inline inner_container_type const& inners() const { return m_inners; }
-
-    inline ring_type& outer() { return m_outer; }
-    inline inner_container_type & inners() { return m_inners; }
-
-    /// Utility method, clears outer and inner rings
-    inline void clear()
-    {
-        m_outer.clear();
-        m_inners.clear();
-    }
-
-private:
-
-    ring_type m_outer;
-    inner_container_type m_inners;
-};
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
-    typename Point,
-    template<typename, typename> class PointList,
-    template<typename, typename> class RingList,
-    template<typename> class PointAlloc,
-    template<typename> class RingAlloc
->
-struct tag<polygon<Point, PointList, RingList, PointAlloc, RingAlloc> >
-{
-    typedef polygon_tag type;
-};
-
-template
-<
-    typename Point,
-    template<typename, typename> class PointList,
-    template<typename, typename> class RingList,
-    template<typename> class PointAlloc,
-    template<typename> class RingAlloc
->
-struct ring_type<polygon<Point, PointList, RingList, PointAlloc, RingAlloc> >
-{
-    typedef typename polygon
-        <
-            Point, PointList, RingList, PointAlloc, RingAlloc
-        >::ring_type type;
-};
-
-template
-<
-    typename Point,
-    template<typename, typename> class PointList,
-    template<typename, typename> class RingList,
-    template<typename> class PointAlloc,
-    template<typename> class RingAlloc
->
-struct interior_type< polygon<Point, PointList, RingList, PointAlloc, RingAlloc> >
-{
-    typedef typename polygon
-        <
-            Point, PointList, RingList, PointAlloc, RingAlloc
-        >::inner_container_type type;
-};
-
-template
-<
-    typename Point,
-    template<typename, typename> class PointList,
-    template<typename, typename> class RingList,
-    template<typename> class PointAlloc,
-    template<typename> class RingAlloc
->
-struct exterior_ring< polygon<Point, PointList, RingList, PointAlloc, RingAlloc> >
-{
-    typedef polygon<Point, PointList, RingList, PointAlloc, RingAlloc> polygon_type;
-
-    static inline typename polygon_type::ring_type& get(polygon_type& p)
-    {
-        return p.outer();
-    }
-
-    static inline typename polygon_type::ring_type const & get(polygon_type const& p)
-    {
-        return p.outer();
-    }
-};
-
-template
-<
-    typename Point,
-    template<typename, typename> class PointList,
-    template<typename, typename> class RingList,
-    template<typename> class PointAlloc,
-    template<typename> class RingAlloc
->
-struct interior_rings< polygon<Point, PointList, RingList, PointAlloc, RingAlloc> >
-{
-    typedef polygon<Point, PointList, RingList, PointAlloc, RingAlloc> polygon_type;
-
-    static inline typename polygon_type::inner_container_type& get(
-                    polygon_type& p)
-    {
-        return p.inners();
-    }
-
-    static inline typename polygon_type::inner_container_type const& get(
-                    polygon_type const& p)
-    {
-        return p.inners();
-    }
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRIES_POLYGON_HPP
diff --git a/include/builtin-ggl/ggl/geometries/register/box.hpp b/include/builtin-ggl/ggl/geometries/register/box.hpp
deleted file mode 100644
index cd66a24..0000000
--- a/include/builtin-ggl/ggl/geometries/register/box.hpp
+++ /dev/null
@@ -1,106 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_GEOMETRIES_REGISTER_BOX_HPP
-#define GGL_GEOMETRIES_REGISTER_BOX_HPP
-
-
-#ifndef DOXYGEN_NO_SPECIALIZATIONS
-
-// box based on point
-#define GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS(Box, Point, MinCorner, MaxCorner) \
-template <size_t C, size_t D> \
-struct indexed_access<Box, C, D> \
-{ \
-    static inline typename coordinate_type<Point>::type get(const Box& b) \
-    { \
-        return C == min_corner ? ggl::get<D>(b. MinCorner) : ggl::get<D>(b. MaxCorner); \
-    } \
-    static inline void set(Box& b, const typename coordinate_type<Point>::type& value) \
-    { \
-        if (C == min_corner) ggl::set<D>(b. MinCorner, value); else ggl::set<D>(b. MaxCorner, value); \
-    } \
-};
-
-
-#define GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS_TEMPLATIZED(Box, MinCorner, MaxCorner) \
-template <typename P, size_t C, size_t D> \
-struct indexed_access<Box<P>, C, D> \
-{ \
-    static inline typename coordinate_type<P>::type get(const Box<P>& b) \
-    { \
-        return C == min_corner ? ggl::get<D>(b. MinCorner) : ggl::get<D>(b. MaxCorner); \
-    } \
-    static inline void set(Box<P>& b, const typename coordinate_type<P>::type& value) \
-    { \
-        if (C == min_corner) ggl::set<D>(b. MinCorner, value); else ggl::set<D>(b. MaxCorner, value); \
-    } \
-};
-
-
-#define GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS_4VALUES(Box, Point, Left, Bottom, Right, Top) \
-template <size_t C, size_t D> \
-struct indexed_access<Box, C, D> \
-{ \
-    static inline typename coordinate_type<Point>::type get(const Box& b) \
-    { \
-        return C == min_corner && D == 0 ? b. Left \
-            : C == min_corner && D == 1 ? b. Bottom \
-            : C == max_corner && D == 0 ? b. Right \
-            : C == max_corner && D == 1 ? b. Top \
-            : 0; \
-    } \
-    static inline void set(Box& b, const typename coordinate_type<Point>::type& value) \
-    { \
-        if (C == min_corner && D == 0) b. Left = value; \
-        else if (C == min_corner && D == 1) b. Bottom = value; \
-        else if (C == max_corner && D == 0) b. Right = value; \
-        else if (C == max_corner && D == 1) b. Top = value; \
-    } \
-};
-
-
-
-#define GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS(Box, PointType) \
-    template<> struct tag<Box > { typedef box_tag type; }; \
-    template<> struct point_type<Box > { typedef PointType type; };
-
-#define GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS_TEMPLATIZED(Box) \
-    template<typename P> struct tag<Box<P> > { typedef box_tag type; }; \
-    template<typename P> struct point_type<Box<P> > { typedef P type; };
-
-#endif // DOXYGEN_NO_SPECIALIZATIONS
-
-
-
-#define GEOMETRY_REGISTER_BOX(Box, PointType, MinCorner, MaxCorner) \
-namespace ggl { namespace traits {  \
-    GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS(Box, PointType) \
-    GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS(Box, PointType, MinCorner, MaxCorner) \
-}}
-
-
-#define GEOMETRY_REGISTER_BOX_TEMPLATIZED(Box, MinCorner, MaxCorner) \
-namespace ggl { namespace traits {  \
-    GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS_TEMPLATIZED(Box) \
-    GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS_TEMPLATIZED(Box, MinCorner, MaxCorner) \
-}}
-
-#define GEOMETRY_REGISTER_BOX_2D_4VALUES(Box, PointType, Left, Bottom, Right, Top) \
-namespace ggl { namespace traits {  \
-    GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS(Box, PointType) \
-    GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS_4VALUES(Box, PointType, Left, Bottom, Right, Top) \
-}}
-
-
-
-// CONST versions are for boxes probably not that common. Leave this for the moment.
-
-
-#endif // GGL_GEOMETRIES_REGISTER_BOX_HPP
diff --git a/include/builtin-ggl/ggl/geometries/register/linestring.hpp b/include/builtin-ggl/ggl/geometries/register/linestring.hpp
deleted file mode 100644
index 5540cf0..0000000
--- a/include/builtin-ggl/ggl/geometries/register/linestring.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_GEOMETRIES_REGISTER_LINESTRING_HPP
-#define GGL_GEOMETRIES_REGISTER_LINESTRING_HPP
-
-
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-
-#define GEOMETRY_REGISTER_LINESTRING(Linestring) \
-namespace ggl { namespace traits {  \
-    template<> struct tag<Linestring> { typedef linestring_tag type; }; \
-}}
-
-
-
-#endif // GGL_GEOMETRIES_REGISTER_LINESTRING_HPP
diff --git a/include/builtin-ggl/ggl/geometries/register/point.hpp b/include/builtin-ggl/ggl/geometries/register/point.hpp
deleted file mode 100644
index 608dce2..0000000
--- a/include/builtin-ggl/ggl/geometries/register/point.hpp
+++ /dev/null
@@ -1,154 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_GEOMETRIES_REGISTER_POINT_HPP
-#define GGL_GEOMETRIES_REGISTER_POINT_HPP
-
-
-
-// This file implements a "macro party", nevertheless very useful for registration of custom geometry types
-
-#ifndef DOXYGEN_NO_SPECIALIZATIONS
-
-// Starting point, specialize basic traits necessary to register a point
-// (the 'accessor' is technically not specialization but definition, specialized in another macro)
-#define GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, Dim, CoordinateType, CoordinateSystem) \
-    template<> struct tag<Point> { typedef point_tag type; }; \
-    template<> struct dimension<Point> : boost::mpl::int_<Dim> {}; \
-    template<> struct coordinate_type<Point> { typedef CoordinateType type; }; \
-    template<> struct coordinate_system<Point> { typedef CoordinateSystem type; }; \
-    template<int I> struct Point##accessor {};
-
-
-// Non Const version
-#define GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, CoordinateType) \
-    template<> struct access<Point> { \
-         template <int I> \
-        static inline CoordinateType get(const Point& p) { return Point##accessor<I>::get(p); } \
-        template <int I> \
-        static inline void set(Point& p, const CoordinateType& value) { Point##accessor<I>::set(p, value); } \
-    };
-
-// Const version
-#define GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, CoordinateType) \
-    template<> struct access<Point> { \
-         template <int I> \
-        static inline CoordinateType get(const Point& p) { return Point##accessor<I>::get(p); } \
-    };
-
-
-
-
-// Specialize the point-specific-accessor class, declared below, per dimension
-#define GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR(Point, Dim, CoordinateType, Get, Set) \
-    template<> struct Point##accessor< Dim > \
-    { \
-        static inline CoordinateType get(const Point& p) { return  p. Get; } \
-        static inline void set(Point& p, const CoordinateType& value) { p. Set = value; } \
-    };
-
-
-// Const version
-#define GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR_CONST(Point, Dim, CoordinateType, Get) \
-    template<> struct Point##accessor< Dim > \
-    { \
-        static inline CoordinateType get(const Point& p) { return  p. Get; } \
-    };
-
-
-// Get/set version
-#define GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR_GET_SET(Point, Dim, CoordinateType, Get, Set) \
-    template<> struct Point##accessor< Dim > \
-    { \
-        static inline CoordinateType get(const Point& p) { return  p. Get (); } \
-        static inline void set(Point& p, const CoordinateType& value) { p. Set ( value ); } \
-    };
-
-
-
-#define GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_2D(Point, CoordinateType, Get0, Get1, Set0, Set1) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR(Point, 0, CoordinateType, Get0, Set0) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR(Point, 1, CoordinateType, Get1, Set1)
-
-#define GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_3D(Point, CoordinateType, Get0, Get1, Get2, Set0, Set1, Set2) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR(Point, 0, CoordinateType, Get0, Set0) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR(Point, 1, CoordinateType, Get1, Set1) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR(Point, 2, CoordinateType, Get2, Set2)
-
-// Const versions
-#define GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST_2D(Point, CoordinateType, Get0, Get1) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR_CONST(Point, 0, CoordinateType, Get0) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR_CONST(Point, 1, CoordinateType, Get1)
-
-#define GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST_3D(Point, CoordinateType, Get0, Get1, Get2) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR_CONST(Point, 0, CoordinateType, Get0) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR_CONST(Point, 1, CoordinateType, Get1) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR_CONST(Point, 2, CoordinateType, Get2)
-
-#endif // DOXYGEN_NO_SPECIALIZATIONS
-
-
-
-// Library user macro to register a custom 2D point
-#define GEOMETRY_REGISTER_POINT_2D(Point, CoordinateType, CoordinateSystem, Field0, Field1) \
-namespace ggl { namespace traits {  \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 2, CoordinateType, CoordinateSystem) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, CoordinateType) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_2D(Point, CoordinateType, Field0, Field1, Field0, Field1) \
-}}
-
-// Library user macro to register a custom 3D point
-#define GEOMETRY_REGISTER_POINT_3D(Point, CoordinateType, CoordinateSystem, Field0, Field1, Field2) \
-namespace ggl { namespace traits {  \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 3, CoordinateType, CoordinateSystem) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, CoordinateType) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_3D(Point, CoordinateType, Field0, Field1, Field2, Field0, Field1, Field2) \
-}}
-
-
-
-// Library user macro to register a custom 2D point (CONST version)
-#define GEOMETRY_REGISTER_POINT_2D_CONST(Point, CoordinateType, CoordinateSystem, Field0, Field1) \
-namespace ggl { namespace traits {  \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 2, CoordinateType, CoordinateSystem) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, CoordinateType) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST_2D(Point, CoordinateType, Field0, Field1) \
-}}
-
-// Library user macro to register a custom 3D point (CONST version)
-#define GEOMETRY_REGISTER_POINT_3D_CONST(Point, CoordinateType, CoordinateSystem, Field0, Field1, Field2) \
-namespace ggl { namespace traits {  \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 3, CoordinateType, CoordinateSystem) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, CoordinateType) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST_3D(Point, CoordinateType, Field0, Field1, Field2) \
-}}
-
-
-// Library user macro to register a custom 2D point (having separate get/set methods)
-#define GEOMETRY_REGISTER_POINT_2D_GET_SET(Point, CoordinateType, CoordinateSystem, Get0, Get1, Set0, Set1) \
-namespace ggl { namespace traits {  \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 2, CoordinateType, CoordinateSystem) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, CoordinateType) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR_GET_SET(Point, 0, CoordinateType, Get0, Set0) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR_GET_SET(Point, 1, CoordinateType, Get1, Set1) \
-}}
-
-
-// Library user macro to register a custom 3D point (having separate get/set methods)
-#define GEOMETRY_REGISTER_POINT_3D_GET_SET(Point, CoordinateType, CoordinateSystem, Get0, Get1, Get2, Set0, Set1, Set2) \
-namespace ggl { namespace traits {  \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 3, CoordinateType, CoordinateSystem) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, CoordinateType) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR_GET_SET(Point, 0, CoordinateType, Get0, Set0) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR_GET_SET(Point, 1, CoordinateType, Get1, Set1) \
-    GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESSOR_GET_SET(Point, 2, CoordinateType, Get2, Set2) \
-}}
-
-
-#endif // GGL_GEOMETRIES_REGISTER_POINT_HPP
diff --git a/include/builtin-ggl/ggl/geometries/register/register_box.hpp b/include/builtin-ggl/ggl/geometries/register/register_box.hpp
deleted file mode 100644
index 9d627cf..0000000
--- a/include/builtin-ggl/ggl/geometries/register/register_box.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_GEOMETRIES_REGISTER_REGISTER_BOX_HPP
-#define GGL_GEOMETRIES_REGISTER_REGISTER_BOX_HPP
-
-#include <ggl/geometries/register/box.hpp>
-
-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
-#  pragma message ("Warning: This header is deprecated. Please use: ggl/geometries/register/box.hpp")
-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
-#  warning "This header is deprecated. Please use: ggl/geometries/register/box.hpp")
-#endif
-
-
-#endif // GGL_GEOMETRIES_REGISTER_REGISTER_BOX_HPP
diff --git a/include/builtin-ggl/ggl/geometries/register/register_point.hpp b/include/builtin-ggl/ggl/geometries/register/register_point.hpp
deleted file mode 100644
index 522ff11..0000000
--- a/include/builtin-ggl/ggl/geometries/register/register_point.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_GEOMETRIES_REGISTER_REGISTER_POINT_HPP
-#define GGL_GEOMETRIES_REGISTER_REGISTER_POINT_HPP
-
-#include <ggl/geometries/register/point.hpp>
-
-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
-#  pragma message ("Warning: This header is deprecated. Please use: ggl/geometries/register/point.hpp")
-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
-#  warning "This header is deprecated. Please use: ggl/geometries/register/point.hpp")
-#endif
-
-
-#endif // GGL_GEOMETRIES_REGISTER_REGISTER_POINT_HPP
diff --git a/include/builtin-ggl/ggl/geometries/register/ring.hpp b/include/builtin-ggl/ggl/geometries/register/ring.hpp
deleted file mode 100644
index 9a6c7ee..0000000
--- a/include/builtin-ggl/ggl/geometries/register/ring.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_GEOMETRIES_REGISTER_RING_HPP
-#define GGL_GEOMETRIES_REGISTER_RING_HPP
-
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-#define GEOMETRY_REGISTER_RING(Ring) \
-namespace ggl { namespace traits {  \
-    template<> struct tag<Ring> { typedef ring_tag type; }; \
-}}
-
-
-#define GEOMETRY_REGISTER_RING_TEMPLATIZED(Ring) \
-namespace ggl { namespace traits {  \
-    template<typename P> struct tag< Ring<P> > { typedef ring_tag type; }; \
-}}
-
-
-#endif // GGL_GEOMETRIES_REGISTER_RING_HPP
diff --git a/include/builtin-ggl/ggl/geometries/segment.hpp b/include/builtin-ggl/ggl/geometries/segment.hpp
deleted file mode 100644
index 2d9cc7b..0000000
--- a/include/builtin-ggl/ggl/geometries/segment.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRIES_SEGMENT_HPP
-#define GGL_GEOMETRIES_SEGMENT_HPP
-
-#include <cstddef>
-
-#include <boost/concept/assert.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_const.hpp>
-
-#include <ggl/core/concepts/point_concept.hpp>
-
-namespace ggl
-{
-
-/*!
-\brief Class segment: small containing two (templatized) point references
-\ingroup Geometry
-\details From Wikipedia: In geometry, a line segment is a part of a line that is bounded
- by two distinct end points, and contains every point on the line between its end points.
-\note The structure is like std::pair, and can often be used interchangeable.
-So points are public available. We cannot derive from std::pair<P&, P&> because of
-reference assignments. Points are not const and might be changed by the algorithm
-(used in intersection_linestring).
-\tparam P point type of the segment
-*/
-template<typename P>
-struct segment
-{
-private:
-
-    BOOST_CONCEPT_ASSERT( (typename boost::mpl::if_
-        <
-            boost::is_const<P>,
-            concept::ConstPoint<P>,
-            concept::Point<P>
-        >
-    ) );
-
-public:
-
-    typedef P point_type;
-
-    P& first;
-    P& second;
-
-    inline segment(P& p1, P& p2)
-        : first(p1), second(p2)
-    {}
-};
-
-// Traits specializations for segment above
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename P>
-struct tag< segment<P> >
-{
-    typedef segment_tag type;
-};
-
-template <typename P>
-struct point_type<segment<P> >
-{
-    typedef P type;
-};
-
-template <typename P, std::size_t I, std::size_t D>
-struct indexed_access<segment<P>, I, D>
-{
-    typedef segment<P> segment_type;
-    typedef typename ggl::coordinate_type<segment_type>::type coordinate_type;
-
-    static inline coordinate_type get(segment_type const& s)
-    {
-        return (I == 0 ? ggl::get<D>(s.first) : ggl::get<D>(s.second));
-    }
-
-    static inline void set(segment_type& s, coordinate_type const& value)
-    {
-        if (I == 0)
-        {
-            ggl::set<D>(s.first, value);
-        }
-        else
-        {
-            ggl::set<D>(s.second, value);
-        }
-    }
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRIES_SEGMENT_HPP
diff --git a/include/builtin-ggl/ggl/ggl.hpp b/include/builtin-ggl/ggl/ggl.hpp
deleted file mode 100644
index b6cfa46..0000000
--- a/include/builtin-ggl/ggl/ggl.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GGL_HPP
-#define GGL_GGL_HPP
-
-// Shortcut to include all header files
-
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/core/concepts/ring_concept.hpp>
-#include <ggl/core/concepts/linestring_concept.hpp>
-#include <ggl/core/concepts/polygon_concept.hpp>
-
-#include <ggl/core/concepts/box_concept.hpp>
-#include <ggl/core/concepts/nsphere_concept.hpp>
-#include <ggl/core/concepts/segment_concept.hpp>
-
-#include <ggl/core/cs.hpp>
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/radian_access.hpp>
-#include <ggl/core/topological_dimension.hpp>
-
-#include <ggl/core/replace_point_type.hpp>
-
-#include <ggl/arithmetic/arithmetic.hpp>
-#include <ggl/arithmetic/dot_product.hpp>
-
-#include <ggl/strategies/strategies.hpp>
-
-#include <ggl/algorithms/append.hpp>
-#include <ggl/algorithms/area.hpp>
-#include <ggl/algorithms/assign.hpp>
-#include <ggl/algorithms/buffer.hpp>
-#include <ggl/algorithms/centroid.hpp>
-#include <ggl/algorithms/clear.hpp>
-#include <ggl/algorithms/convert.hpp>
-#include <ggl/algorithms/convex_hull.hpp>
-#include <ggl/algorithms/correct.hpp>
-#include <ggl/algorithms/distance.hpp>
-#include <ggl/algorithms/envelope.hpp>
-#include <ggl/algorithms/for_each.hpp>
-#include <ggl/algorithms/intermediate.hpp>
-#include <ggl/algorithms/intersection.hpp>
-#include <ggl/algorithms/intersects.hpp>
-#include <ggl/algorithms/length.hpp>
-#include <ggl/algorithms/make.hpp>
-#include <ggl/algorithms/num_points.hpp>
-#include <ggl/algorithms/perimeter.hpp>
-#include <ggl/algorithms/sectionalize.hpp>
-#include <ggl/algorithms/selected.hpp>
-#include <ggl/algorithms/simplify.hpp>
-#include <ggl/algorithms/transform.hpp>
-#include <ggl/algorithms/within.hpp>
-
-
-#include <ggl/util/copy.hpp>
-#include <ggl/util/for_each_coordinate.hpp>
-#include <ggl/util/loop.hpp>
-#include <ggl/util/math.hpp>
-#include <ggl/util/select_most_precise.hpp>
-#include <ggl/util/select_coordinate_type.hpp>
-#include <ggl/util/write_dsv.hpp>
-
-#endif // GGL_GGL_HPP
diff --git a/include/builtin-ggl/ggl/iterators/base.hpp b/include/builtin-ggl/ggl/iterators/base.hpp
deleted file mode 100644
index 170f8a7..0000000
--- a/include/builtin-ggl/ggl/iterators/base.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ITERATORS_BASE_HPP
-#define GGL_ITERATORS_BASE_HPP
-
-#include <boost/iterator.hpp>
-#include <boost/iterator/iterator_adaptor.hpp>
-#include <boost/iterator/iterator_categories.hpp>
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace ggl { namespace detail { namespace iterators {
-
-template <typename T, typename Iterator>
-struct iterator_base :
-    public  boost::iterator_adaptor
-    <
-        T,
-        Iterator,
-        boost::use_default,
-        typename boost::mpl::if_
-        <
-            boost::is_convertible
-            <
-                typename boost::iterator_traversal<Iterator>::type,
-                boost::random_access_traversal_tag
-            >,
-            boost::bidirectional_traversal_tag,
-            boost::use_default
-        >::type
-    >
-{
-    // Define operator cast to Iterator to be able to write things like Iterator it = myit++
-    inline operator Iterator() const
-    {
-        return this->base();
-    }
-
-    /*inline bool operator==(const Iterator& other) const
-    {
-        return this->base() == other;
-    }
-    inline bool operator!=(const Iterator& other) const
-    {
-        return ! operator==(other);
-    }*/
-};
-
-}}} // namespace ggl::detail::iterators
-#endif
-
-
-#endif // GGL_ITERATORS_BASE_HPP
diff --git a/include/builtin-ggl/ggl/iterators/circular_iterator.hpp b/include/builtin-ggl/ggl/iterators/circular_iterator.hpp
deleted file mode 100644
index 001e44c..0000000
--- a/include/builtin-ggl/ggl/iterators/circular_iterator.hpp
+++ /dev/null
@@ -1,92 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ITERATORS_CIRCULAR_ITERATOR_HPP
-#define GGL_ITERATORS_CIRCULAR_ITERATOR_HPP
-
-#include <boost/iterator.hpp>
-#include <boost/iterator/iterator_adaptor.hpp>
-#include <boost/iterator/iterator_categories.hpp>
-
-#include <ggl/iterators/base.hpp>
-
-namespace ggl
-{
-
-/*!
-    \brief Iterator which goes circular through a range, starting at a point, ending at that point
-    \tparam Iterator iterator on which this class is based on
-    \ingroup iterators
-*/
-template <typename Iterator>
-struct circular_iterator :
-    public detail::iterators::iterator_base
-    <
-        circular_iterator<Iterator>,
-        Iterator
-    >
-{
-    friend class boost::iterator_core_access;
-
-    explicit inline circular_iterator(Iterator begin, Iterator end, Iterator start)
-        : m_begin(begin)
-        , m_end(end)
-        , m_start(start)
-    {
-        this->base_reference() = start;
-    }
-
-    // Constructor to indicate the end of a range, to enable e.g. std::copy
-    explicit inline circular_iterator(Iterator end)
-        : m_begin(end)
-        , m_end(end)
-        , m_start(end)
-    {
-        this->base_reference() = end;
-    }
-
-    /// Navigate to a certain position, should be in [start .. end], it at end
-    /// it will circle again.
-    inline void moveto(Iterator it)
-    {
-        this->base_reference() = it;
-        check_end();
-    }
-
-private:
-
-    inline void increment()
-    {
-        if (this->base() != m_end)
-        {
-            (this->base_reference())++;
-            check_end();
-        }
-    }
-
-    inline void check_end()
-    {
-        if (this->base() == this->m_end)
-        {
-            this->base_reference() = this->m_begin;
-        }
-
-        if (this->base() == m_start)
-        {
-            this->base_reference() = this->m_end;
-        }
-    }
-
-    Iterator m_begin;
-    Iterator m_end;
-    Iterator m_start;
-};
-
-} // namespace ggl
-
-#endif // GGL_ITERATORS_CIRCULAR_ITERATOR_HPP
diff --git a/include/builtin-ggl/ggl/iterators/ever_circling_iterator.hpp b/include/builtin-ggl/ggl/iterators/ever_circling_iterator.hpp
deleted file mode 100644
index b20d01a..0000000
--- a/include/builtin-ggl/ggl/iterators/ever_circling_iterator.hpp
+++ /dev/null
@@ -1,86 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ITERATORS_EVER_CIRCLING_ITERATOR_HPP
-#define GGL_ITERATORS_EVER_CIRCLING_ITERATOR_HPP
-
-#include <boost/iterator.hpp>
-#include <boost/iterator/iterator_adaptor.hpp>
-#include <boost/iterator/iterator_categories.hpp>
-
-#include <ggl/iterators/base.hpp>
-
-namespace ggl
-{
-
-/*!
-    \brief Iterator which ever circles through a range
-    \tparam Iterator iterator on which this class is based on
-    \ingroup iterators
-    \details If the iterator arrives at range.end() it restarts from the
-     beginning. So it has to be stopped in another way.
-    Don't call for(....; it++) because it will turn in an endless loop
-    \note Name inspired on David Bowie's
-    "Chant Of The Ever Circling Skeletal Family"
-*/
-template <typename Iterator>
-struct ever_circling_iterator :
-    public detail::iterators::iterator_base
-    <
-        ever_circling_iterator<Iterator>,
-        Iterator
-    >
-{
-    friend class boost::iterator_core_access;
-
-    explicit inline ever_circling_iterator(Iterator begin, Iterator end)
-      : m_begin(begin)
-      , m_end(end)
-    {
-        this->base_reference() = begin;
-    }
-
-    explicit inline ever_circling_iterator(Iterator begin, Iterator end, Iterator start)
-      : m_begin(begin)
-      , m_end(end)
-    {
-        this->base_reference() = start;
-    }
-
-    /// Navigate to a certain position, should be in [start .. end], it at end
-    /// it will circle again.
-    inline void moveto(Iterator it)
-    {
-        this->base_reference() = it;
-        check_end();
-    }
-
-private:
-
-    inline void increment()
-    {
-        (this->base_reference())++;
-        check_end();
-    }
-
-    inline void check_end()
-    {
-        if (this->base() == this->m_end)
-        {
-            this->base_reference() = this->m_begin;
-        }
-    }
-
-    Iterator m_begin;
-    Iterator m_end;
-};
-
-
-} // namespace ggl
-
-#endif // GGL_ITERATORS_EVER_CIRCLING_ITERATOR_HPP
diff --git a/include/builtin-ggl/ggl/iterators/point_const_iterator.hpp b/include/builtin-ggl/ggl/iterators/point_const_iterator.hpp
deleted file mode 100644
index 5e1f0dc..0000000
--- a/include/builtin-ggl/ggl/iterators/point_const_iterator.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_ITERATORS_POINT_CONST_ITERATOR_HPP
-#define GGL_ITERATORS_POINT_CONST_ITERATOR_HPP
-
-
-#include <boost/type_traits/remove_const.hpp>
-
-
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-
-#include <boost/range/metafunctions.hpp>
-
-namespace ggl
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Tag, typename Geometry>
-struct point_const_iterator
-{
-    // The default: meta-forward this to boost
-    // This enables calling this function using std::vector as well, even if they
-    // are not registered.
-    // It also requires less specializations
-    typedef typename boost::range_const_iterator<Geometry>::type type;
-};
-
-
-template <typename Polygon>
-struct point_const_iterator<polygon_tag, Polygon>
-{
-    typedef typename boost::range_const_iterator
-        <
-            typename ring_type<Polygon>::type
-        >::type type;
-};
-
-
-
-
-} // namespace dispatch
-#endif
-
-
-/*!
-    \brief Meta-function which defines point-const-iterator type
-    \ingroup iterators
-*/
-template <typename Geometry>
-struct point_const_iterator
-{
-    typedef typename boost::remove_const<Geometry>::type ncg;
-    typedef typename dispatch::point_const_iterator<
-        typename tag<Geometry>::type, ncg>::type type;
-};
-
-
-
-
-}
-
-
-#endif // GGL_ITERATORS_POINT_CONST_ITERATOR_HPP
diff --git a/include/builtin-ggl/ggl/iterators/section_iterators.hpp b/include/builtin-ggl/ggl/iterators/section_iterators.hpp
deleted file mode 100644
index 0d6956c..0000000
--- a/include/builtin-ggl/ggl/iterators/section_iterators.hpp
+++ /dev/null
@@ -1,217 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ITERATORS_SECTION_ITERATORS_HPP
-#define GGL_ITERATORS_SECTION_ITERATORS_HPP
-
-#include <iterator>
-
-#include <ggl/core/access.hpp>
-#include <ggl/iterators/base.hpp>
-#include <ggl/algorithms/overlaps.hpp>
-
-
-// FILE WILL BE SPLITTED
-
-namespace ggl
-{
-namespace detail
-{
-    template <size_t D, typename P, typename B>
-    inline bool exceeding(short int dir, const P& point, const B& box)
-    {
-        return (dir == 1  && get<D>(point) > get<1, D>(box))
-            || (dir == -1 && get<D>(point) < get<0, D>(box));
-    }
-
-    template <size_t D, typename P, typename B>
-    inline bool preceding(short int dir, const P& point, const B& box)
-    {
-        return (dir == 1  && get<D>(point) < get<0, D>(box))
-            || (dir == -1 && get<D>(point) > get<1, D>(box));
-    }
-}
-
-
-// Iterator walking through ring/sections, delivering only those points of the ring
-// which are inside the specified box (using the sections)
-template<typename G, typename S, typename B, size_t D>
-struct section_iterator : public detail::iterators::iterator_base<
-                    section_iterator<G, S, B, D>,
-                    typename boost::range_const_iterator<G>::type
-                >
-{
-    friend class boost::iterator_core_access;
-
-    inline section_iterator(const G& ring, const S& sections, const B& box)
-        : m_ring(ring)
-        , m_sections(sections)
-        , m_box(box)
-        , m_section_iterator(boost::begin(m_sections))
-    {
-        stay_within_box();
-    }
-
-
-    private :
-
-        inline void increment()
-        {
-            (this->base_reference())++;
-
-            // If end or exceeding specified box, go to next section
-            if (this->base() == m_end
-                    || detail::exceeding<D>(m_section_iterator->directions[0], *this->base(), m_box))
-            {
-                m_section_iterator++;
-                stay_within_box();
-            }
-
-        }
-
-        // Check if iterator is still in box and if not, go to the next section and advance until it is in box
-        void stay_within_box()
-        {
-            // Find section having overlap with specified box
-            while (m_section_iterator != boost::end(m_sections)
-                    && ! overlaps(m_section_iterator->bounding_box, m_box))
-            {
-                m_section_iterator++;
-            }
-            if (m_section_iterator != boost::end(m_sections))
-            {
-                this->base_reference() = boost::begin(m_ring) + m_section_iterator->begin_index;
-                m_end = boost::begin(m_ring) + m_section_iterator->end_index + 1;
-
-                // While not yet at box, advance
-                while(this->base() != m_end
-                    && detail::preceding<D>(m_section_iterator->directions[0], *this->base(), m_box))
-                {
-                    ++(this->base_reference());
-                }
-
-                if (this->base() == m_end)
-                {
-                    // This should actually not occur because of bbox check, but to be sure
-                    m_section_iterator++;
-                    stay_within_box();
-                }
-            }
-            else
-            {
-                this->base_reference() = boost::end(m_ring);
-                m_end = boost::end(m_ring);
-            }
-        }
-
-
-        typedef typename boost::range_const_iterator<G>::type IT;
-        typedef typename boost::range_const_iterator<S>::type SIT;
-
-        const G& m_ring;
-        const S& m_sections;
-        const B& m_box;
-
-        IT m_end;
-        SIT m_section_iterator;
-};
-
-
-// Iterator walking through ring/sections, delivering only those points of the ring
-// which are inside the specified box (using the sections)
-template<typename G, typename SEC, typename B, size_t D>
-struct one_section_segment_iterator : public detail::iterators::iterator_base<
-                one_section_segment_iterator<G, SEC, B, D>
-                , typename boost::range_const_iterator<G>::type>
-{
-    friend class boost::iterator_core_access;
-    typedef typename boost::range_const_iterator<G>::type normal_iterator;
-
-    inline one_section_segment_iterator(const G& ring, const SEC& section, const B& box)
-        : m_box(&box)
-        , m_dir(section.directions[0])
-    {
-        init(section, ring);
-    }
-
-    inline one_section_segment_iterator(normal_iterator end)
-        : m_section_end(end)
-        , m_ring_end(end)
-        , m_box(NULL)
-        , m_dir(0)
-    {
-        this->base_reference() = end;
-    }
-
-
-    private :
-
-        inline void increment()
-        {
-            m_previous = (this->base_reference())++;
-
-            if (this->base() == m_section_end
-                || detail::exceeding<D>(m_dir, *m_previous, *m_box))
-            {
-                this->base_reference() = m_ring_end;
-            }
-        }
-
-        // Check if iterator is still in box and if not, go to the next section and advance until it is in box
-        void init(const SEC& section, const G& ring)
-        {
-            //this->base_reference();
-            m_section_end = boost::begin(ring) + section.end_index + 1;
-            m_ring_end = boost::end(ring);
-
-            this->base_reference() = boost::begin(ring) + section.begin_index;
-
-            /* Performance, TO BE CHECKED!
-            normal_iterator next = boost::begin(ring) + section.begin_index;
-            if (next != m_section_end && next != m_ring_end)
-            {
-
-                // While (not end and) not yet at box, advance
-                normal_iterator it = next++;
-                while(next != m_section_end && next != m_ring_end
-                        && detail::preceding<D>(m_dir, *next, *m_box))
-                {
-                    it = next++;
-                }
-
-
-                if (it == m_section_end)
-                {
-                    this->base_reference() = m_ring_end;
-                }
-                else
-                {
-                    this->base_reference() = it;
-                }
-            }
-            else
-            {
-                this->base_reference() = m_ring_end;
-            }
-            */
-
-            m_previous = this->base();
-        }
-
-
-        const B* m_box;
-        short int m_dir;
-
-        normal_iterator m_previous;
-        normal_iterator m_section_end;
-        normal_iterator m_ring_end;
-};
-
-} // namespace ggl
-
-#endif // GGL_ITERATORS_SECTION_ITERATORS_HPP
diff --git a/include/builtin-ggl/ggl/iterators/segment_iterator.hpp b/include/builtin-ggl/ggl/iterators/segment_iterator.hpp
deleted file mode 100644
index 5618f72..0000000
--- a/include/builtin-ggl/ggl/iterators/segment_iterator.hpp
+++ /dev/null
@@ -1,139 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Mateusz Loskot 2009, mateusz at loskot.net
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_ITERATORS_SEGMENT_ITERATOR_HPP
-#define GGL_ITERATORS_SEGMENT_ITERATOR_HPP
-
-// TODO: This is very experimental version of input iterator
-// reading collection of points as segments - proof of concept.
-// --mloskot
-
-// TODO: Move to boost::iterator_adaptor
-
-#include <iterator>
-
-#include <boost/assert.hpp>
-#include <boost/iterator.hpp>
-#include <boost/iterator/iterator_adaptor.hpp>
-#include <boost/iterator/iterator_categories.hpp>
-
-#include <ggl/algorithms/equals.hpp>
-#include <ggl/geometries/segment.hpp>
-
-namespace ggl
-{
-
-template <typename Base, typename Point>
-struct segment_iterator
-{
-    typedef Base base_type;
-    typedef Point point_type;
-    typedef typename ggl::segment<Point> segment_type;
-
-    typedef std::input_iterator_tag iterator_category;
-    typedef typename std::iterator_traits<Base>::difference_type difference_type;
-    typedef segment_type value_type;
-    typedef segment_type* pointer;
-    typedef segment_type& reference;
-
-    explicit segment_iterator(Base const& end)
-        : m_segment(p1 , p2)
-        , m_prev(end)
-        , m_it(end)
-        , m_end(end)
-    {
-        BOOST_ASSERT(ggl::equals(point_type(), m_segment.first));
-        BOOST_ASSERT(ggl::equals(point_type(), m_segment.second));
-    }
-
-    segment_iterator(Base const& it, Base const& end)
-        : m_segment(p1 , p2)
-        , m_prev(it)
-        , m_it(it)
-        , m_end(end)
-    {
-        if (m_it != m_end)
-        {
-            BOOST_ASSERT(m_prev != m_end);
-            ++m_it;
-        }
-    }
-
-    reference operator*()
-    {
-        BOOST_ASSERT(m_it != m_end && m_prev != m_end);
-
-        p1 = *m_prev;
-        p2 = *m_it;
-
-        return m_segment;
-    }
-
-    pointer operator->()
-    {
-        return &(operator*());
-    }
-
-    segment_iterator& operator++()
-    {
-        ++m_prev;
-        ++m_it;
-        return *this;
-    }
-
-    segment_iterator operator++(int)
-    {
-        segment_iterator it(*this);
-        ++(*this);
-        return it;
-    }
-
-    Base const& base() const { return m_it; }
-
-private:
-
-    point_type p1;
-    point_type p2;
-    segment_type m_segment;
-
-    Base m_prev;
-    Base m_it;
-    Base m_end;
-};
-
-template <typename Base, typename Point>
-bool operator==(segment_iterator<Base, Point> const& lhs,
-                segment_iterator<Base, Point> const& rhs)
-{
-    return (lhs.base() == rhs.base());
-}
-
-template <typename Base, typename Point>
-bool operator!=(segment_iterator<Base, Point> const& lhs,
-                segment_iterator<Base, Point> const& rhs)
-{
-    return (lhs.base() != rhs.base());
-}
-
-template <typename C>
-segment_iterator
-<
-    typename C::iterator,
-    typename C::value_type
->
-make_segment_iterator(C& c)
-{
-    typedef typename C::iterator base_iterator;
-    typedef typename C::value_type point_type;
-    return segment_iterator<base_iterator, point_type>(c.begin(), c.end());
-}
-
-} // namespace ggl
-
-#endif // GGL_ITERATORS_SEGMENT_ITERATOR_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/area.hpp b/include/builtin-ggl/ggl/multi/algorithms/area.hpp
deleted file mode 100644
index b41ad8e..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/area.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_ALGORITHMS_AREA_HPP
-#define GGL_MULTI_ALGORITHMS_AREA_HPP
-
-#include <ggl/algorithms/area.hpp>
-#include <ggl/multi/core/point_type.hpp>
-#include <ggl/multi/algorithms/detail/multi_sum.hpp>
-
-namespace ggl {
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-    template <typename MultiGeometry, typename Strategy>
-    struct area<multi_polygon_tag, MultiGeometry, Strategy>
-        : detail::multi_sum<double, MultiGeometry, Strategy,
-            detail::area::polygon_area<
-                typename boost::range_value<MultiGeometry>::type, Strategy> >
-    {};
-
-
-} // namespace dispatch
-#endif
-
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_ALGORITHMS_AREA_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/centroid.hpp b/include/builtin-ggl/ggl/multi/algorithms/centroid.hpp
deleted file mode 100644
index 6556fc8..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/centroid.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_ALGORITHMS_CENTROID_HPP
-#define GGL_MULTI_ALGORITHMS_CENTROID_HPP
-
-#include <ggl/algorithms/centroid.hpp>
-#include <ggl/multi/core/point_type.hpp>
-#include <ggl/multi/algorithms/detail/multi_sum.hpp>
-
-namespace ggl {
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace centroid {
-
-template<typename MultiPolygon, typename Point, typename Strategy>
-struct centroid_multi_polygon
-{
-    static inline void apply(MultiPolygon const& multi, Point& c, Strategy const& strategy)
-    {
-        typedef typename boost::range_const_iterator<MultiPolygon>::type iterator;
-
-        typename Strategy::state_type state;
-
-        for (iterator it = boost::begin(multi); it != boost::end(multi); ++it)
-        {
-// TODO: make THIS the building block!
-            typedef typename boost::range_value<MultiPolygon>::type polygon_type;
-            polygon_type const& poly = *it;
-            if (ring_ok(exterior_ring(poly), c))
-            {
-
-                loop(exterior_ring(poly), strategy, state);
-
-                typedef typename boost::range_const_iterator
-                    <
-                        typename interior_type<polygon_type>::type
-                    >::type iterator_type;
-
-                for (iterator_type it = boost::begin(interior_rings(poly));
-                     it != boost::end(interior_rings(poly));
-                     ++it)
-                {
-                    loop(*it, strategy, state);
-                }
-            }
-        }
-        state.centroid(c);
-    }
-};
-
-
-
-}} // namespace detail::centroid
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-    template <typename MultiPolygon, typename Point, typename Strategy>
-    struct centroid<multi_polygon_tag, MultiPolygon, Point, Strategy>
-        : detail::centroid::centroid_multi_polygon<MultiPolygon, Point, Strategy>
-    {};
-
-
-} // namespace dispatch
-#endif
-
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_ALGORITHMS_CENTROID_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/convex_hull.hpp b/include/builtin-ggl/ggl/multi/algorithms/convex_hull.hpp
deleted file mode 100644
index e6f029c..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/convex_hull.hpp
+++ /dev/null
@@ -1,95 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_ALGORITHMS_CONVEX_HULL_HPP
-#define GGL_MULTI_ALGORITHMS_CONVEX_HULL_HPP
-
-
-#include <ggl/util/as_range.hpp>
-
-#include <ggl/multi/core/tags.hpp>
-#include <ggl/multi/core/is_multi.hpp>
-#include <ggl/multi/core/point_type.hpp>
-
-#include <ggl/algorithms/convex_hull.hpp>
-
-
-namespace ggl {
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace convex_hull {
-
-
-template <typename MultiGeometry, typename OutputIterator>
-struct convex_hull_multi
-{
-    static inline OutputIterator apply(MultiGeometry const& multi,
-            OutputIterator out)
-    {
-        using namespace boost;
-
-        typedef typename point_type<MultiGeometry>::type point;
-        typename strategy_convex_hull
-            <
-                typename cs_tag<point>::type,
-                point
-            >::type strategy;
-
-        typedef typename range_const_iterator<MultiGeometry>::type iterator;
-        typedef typename range_value<MultiGeometry>::type single;
-        for(iterator it = begin(multi); it != end(multi); ++it)
-        {
-            strategy.add_range(as_range
-                    <typename as_range_type<single>::type>(*it));
-        }
-        strategy.handle_input();
-
-        strategy.get(out);
-        return out;
-    }
-};
-
-
-}} // namespace detail::convex_hull
-
-#endif
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-// Specialize for multi's
-template
-<
-    typename MultiTag,
-    typename MultiGeometry,
-    typename OutputIterator
->
-struct convex_hull<MultiTag, true, MultiGeometry, OutputIterator>
-    : detail::convex_hull::convex_hull_multi<MultiGeometry, OutputIterator> 
-{};
-
-
-// Specialize more for point
-template <typename MultiPoint, typename OutputIterator>
-struct convex_hull<multi_point_tag, true, MultiPoint, OutputIterator>
-    : detail::convex_hull::hull<MultiPoint, OutputIterator> 
-{};
-
-
-} // namespace dispatch
-#endif
-
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_ALGORITHMS_CONVEX_HULL_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/correct.hpp b/include/builtin-ggl/ggl/multi/algorithms/correct.hpp
deleted file mode 100644
index 26adf59..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/correct.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_CORRECT_HPP
-#define GGL_MULTI_CORRECT_HPP
-
-#include <vector>
-
-#include <ggl/algorithms/correct.hpp>
-
-
-//FIX ME it is not yet adapted to tag-dispatching
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-    namespace correct
-    {
-        // correct a multi-polygon
-        template <typename O>
-        inline void correct_multi_polygon(O& o)
-        {
-            for (typename O::iterator it = o.begin(); it != o.end(); it++)
-            {
-                correct_polygon(*it);
-            }
-        }
-    }
-}
-#endif
-
-template<typename Y,
-        template<typename,typename> class V, template<typename> class A>
-void correct(multi_polygon<Y, V, A>& mp)
-{
-    detail::correct::correct_multi_polygon(mp);
-}
-
-
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_CORRECT_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/detail/modify_with_predicate.hpp b/include/builtin-ggl/ggl/multi/algorithms/detail/modify_with_predicate.hpp
deleted file mode 100644
index 3382702..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/detail/modify_with_predicate.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_ALGORITHMS_DETAIL_MODIFY_WITH_PREDICATE_HPP
-#define GGL_MULTI_ALGORITHMS_DETAIL_MODIFY_WITH_PREDICATE_HPP
-
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-
-namespace ggl {
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail {
-
-template <typename MultiGeometry, typename Predicate, typename Policy>
-struct multi_modify_with_predicate
-{
-    static inline void apply(MultiGeometry& multi, Predicate const& predicate)
-    {
-        typedef typename boost::range_iterator<MultiGeometry>::type iterator_type;
-        for (iterator_type it = boost::begin(multi);
-            it != boost::end(multi);
-            ++it)
-        {
-            Policy::apply(*it, predicate);
-        }
-    }
-};
-
-
-} // namespace detail
-#endif
-
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_ALGORITHMS_DETAIL_MODIFY_WITH_PREDICATE_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/detail/multi_sum.hpp b/include/builtin-ggl/ggl/multi/algorithms/detail/multi_sum.hpp
deleted file mode 100644
index c56b56d..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/detail/multi_sum.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_SUM_HPP
-#define GGL_MULTI_SUM_HPP
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-namespace ggl
-{
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template
-<
-    typename T,
-    typename MultiGeometry,
-    typename Strategy,
-    typename Policy
->
-struct multi_sum
-{
-    static inline T apply(MultiGeometry const& geometry, Strategy const& strategy)
-    {
-        typedef typename boost::range_const_iterator
-            <
-                MultiGeometry
-            >::type iterator_type;
-        T sum = T();
-        for (iterator_type it = boost::begin(geometry);
-            it != boost::end(geometry);
-            ++it)
-        {
-            sum += Policy::apply(*it, strategy);
-        }
-        return sum;
-    }
-};
-
-
-} // namespace detail
-#endif
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_SUM_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/distance.hpp b/include/builtin-ggl/ggl/multi/algorithms/distance.hpp
deleted file mode 100644
index 21ecb62..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/distance.hpp
+++ /dev/null
@@ -1,121 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_ALGORITHMS_DISTANCE_HPP
-#define GGL_MULTI_ALGORITHMS_DISTANCE_HPP
-
-
-#include <boost/numeric/conversion/bounds.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/multi/core/tags.hpp>
-#include <ggl/multi/core/is_multi.hpp>
-#include <ggl/multi/core/geometry_id.hpp>
-#include <ggl/multi/core/point_type.hpp>
-
-#include <ggl/algorithms/distance.hpp>
-
-
-namespace ggl {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance {
-
-
-template<typename Geometry, typename MultiGeometry, typename Strategy>
-struct distance_single_to_multi
-{
-    typedef typename Strategy::return_type return_type;
-    static inline return_type apply(Geometry const& geometry,
-                MultiGeometry const& multi,
-                Strategy const& strategy)
-    {
-        using namespace boost;
-
-        return_type mindist = make_distance_result<return_type>(
-                        numeric::bounds<typename select_coordinate_type<Geometry, MultiGeometry>::type>::highest());
-        typedef typename range_const_iterator<MultiGeometry>::type iterator;
-        for(iterator it = begin(multi); it != end(multi); ++it)
-        {
-            return_type dist = ggl::distance(geometry, *it);
-            if (dist < mindist)
-            {
-                mindist = dist;
-            }
-        }
-
-        return mindist;
-    }
-};
-
-template<typename Multi1, typename Multi2, typename Strategy>
-struct distance_multi_to_multi
-{
-    typedef typename Strategy::return_type return_type;
-
-    static inline return_type apply(Multi1 const& multi1,
-                Multi2 const& multi2, Strategy const& strategy)
-    {
-        using namespace boost;
-
-        return_type mindist
-            = make_distance_result<return_type>(
-                numeric::bounds<typename select_coordinate_type<Multi1,
-                            Multi2>::type>::highest());
-
-        for(typename range_const_iterator<Multi1>::type it = begin(multi1);
-                it != end(multi1);
-                ++it)
-        {
-            return_type dist = distance_single_to_multi
-                <
-                    typename range_value<Multi1>::type,
-                    Multi2,
-                    Strategy
-                >::apply(*it, multi2, strategy);
-            if (dist < mindist)
-            {
-                mindist = dist;
-            }
-        }
-
-        return mindist;
-    }
-};
-
-
-}} // namespace detail::distance
-#endif
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename GeometryTag1, typename GeometryTag2,
-        typename G1, typename G2, typename Strategy>
-struct distance<GeometryTag1, GeometryTag2, G1, G2, strategy_tag_distance_point_point, Strategy, false, true>
-    : detail::distance::distance_single_to_multi<G1, G2, Strategy>
-{};
-
-template <typename GeometryTag1, typename GeometryTag2,
-        typename G1, typename G2, typename Strategy>
-struct distance<GeometryTag1, GeometryTag2, G1, G2, strategy_tag_distance_point_point, Strategy, true, true>
-    : detail::distance::distance_multi_to_multi<G1, G2, Strategy>
-{};
-
-} // namespace dispatch
-#endif
-
-
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_ALGORITHMS_DISTANCE_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/envelope.hpp b/include/builtin-ggl/ggl/multi/algorithms/envelope.hpp
deleted file mode 100644
index b1fe962..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/envelope.hpp
+++ /dev/null
@@ -1,98 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_ENVELOPE_HPP
-#define GGL_MULTI_ENVELOPE_HPP
-
-#include <vector>
-
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/algorithms/envelope.hpp>
-
-#include <ggl/multi/core/point_type.hpp>
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-
-namespace detail { namespace envelope {
-
-
-template<typename MultiLinestring, typename Box, typename Strategy>
-struct envelope_multi_linestring
-{
-    static inline void apply(MultiLinestring const& mp, Box& mbr, Strategy const& strategy)
-    {
-        typename Strategy::state_type state(mbr);
-        for (typename boost::range_const_iterator<MultiLinestring>::type
-                    it = mp.begin();
-            it != mp.end();
-            ++it)
-        {
-            envelope_range_state(*it, strategy, state);
-        }
-    }
-};
-
-
-// version for multi_polygon: outer linear_ring's of all polygons
-template<typename MultiPolygon, typename Box, typename Strategy>
-struct envelope_multi_polygon
-{
-    static inline void apply(MultiPolygon const& mp, Box& mbr, Strategy const& strategy)
-    {
-        typename Strategy::state_type state(mbr);
-        for (typename boost::range_const_iterator<MultiPolygon>::type
-                    it = mp.begin();
-            it != mp.end();
-            ++it)
-        {
-            envelope_range_state(exterior_ring(*it), strategy, state);
-        }
-    }
-};
-
-
-}} // namespace detail::envelope
-
-#endif
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename M, typename B, typename S>
-struct envelope<multi_point_tag, box_tag, M, B, S>
-    : detail::envelope::envelope_range<M, B, S>
-{};
-
-template <typename M, typename B, typename S>
-struct envelope<multi_linestring_tag, box_tag, M, B, S>
-    : detail::envelope::envelope_multi_linestring<M, B, S>
-{};
-
-
-template <typename M, typename B, typename S>
-struct envelope<multi_polygon_tag, box_tag, M, B, S>
-    : detail::envelope::envelope_multi_polygon<M, B, S>
-{};
-
-
-} // namespace dispatch
-#endif
-
-
-
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_ENVELOPE_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/foreach.hpp b/include/builtin-ggl/ggl/multi/algorithms/foreach.hpp
deleted file mode 100644
index f37f91d..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/foreach.hpp
+++ /dev/null
@@ -1,222 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_FOREACH_HPP
-#define GGL_MULTI_FOREACH_HPP
-
-#include <vector>
-
-#include <ggl/algorithms/for_each.hpp>
-
-FIX ME it is not yet adapted to tag-dispatching
-
-
-namespace ggl
-{
-
-template<typename MP, typename F>
-inline F for_each_point_multi_point(MP& mp, F f)
-{
-    return (for_each_point_container(mp, f));
-}
-
-template<typename ML, typename F>
-inline F for_each_point_multi_linestring(ML& ml, F f)
-{
-    for (typename ML::iterator it = ml.begin(); it != ml.end(); it++)
-    {
-        f = for_each_point_linestring(*it, f);
-    }
-    return (f);
-}
-
-template<typename MY, typename F>
-inline F for_each_point_multi_polygon(MY& mp, F f)
-{
-    for (typename MY::iterator it = mp.begin(); it != mp.end(); it++)
-    {
-        f = for_each_point_polygon(*it, f);
-    }
-    return (f);
-}
-
-
-
-
-template<typename MP, typename F>
-inline F for_each_point_multi_point(const MP& mp, F f)
-{
-    return (for_each_point_container(mp, f));
-}
-
-
-template<typename ML, typename F>
-inline F for_each_point_multi_linestring(const ML& ml, F f)
-{
-    for (typename ML::const_iterator it = ml.begin(); it != ml.end(); it++)
-    {
-        f = for_each_point_linestring(*it, f);
-    }
-    return (f);
-}
-
-template<typename MY, typename F>
-inline F for_each_point_multi_polygon(const MY& mp, F f)
-{
-    for (typename MY::const_iterator it = mp.begin(); it != mp.end(); it++)
-    {
-        f = for_each_point_polygon(*it, f);
-    }
-    return (f);
-}
-
-
-
-template<typename ML, typename F>
-inline F for_each_segment_multi_linestring(ML& ml, F f)
-{
-    for (typename ML::iterator it = ml.begin(); it != ml.end(); it++)
-    {
-        f = for_each_segment_linestring(*it, f);
-    }
-    return (f);
-}
-
-template<typename MY, typename F>
-inline F for_each_segment_multi_polygon(MY& mp, F f)
-{
-    for (typename MY::iterator it = mp.begin(); it != mp.end(); it++)
-    {
-        f = for_each_segment_polygon(*it, f);
-    }
-    return (f);
-}
-
-
-
-
-
-
-template<typename ML, typename F>
-inline F for_each_segment_multi_linestring(const ML& ml, F f)
-{
-    for (typename ML::const_iterator it = ml.begin(); it != ml.end(); it++)
-    {
-        f = for_each_segment_linestring(*it, f);
-    }
-    return (f);
-}
-
-template<typename MY, typename F>
-inline F for_each_segment_multi_polygon(const MY& mp, F f)
-{
-    for (typename MY::const_iterator it = mp.begin(); it != mp.end(); it++)
-    {
-        f = for_each_segment_polygon(*it, f);
-    }
-    return (f);
-}
-
-
-
-
-
-
-template<typename P,
-        template<typename,typename> class V, template<typename> class A,
-        typename F>
-inline F for_each_point(multi_point<P, V, A>& mp, F f)
-{
-    return (for_each_point_multi_point(mp, f));
-}
-
-template<typename L,
-        template<typename,typename> class V, template<typename> class A,
-        typename F>
-inline F for_each_point(multi_linestring<L, V, A>& ml, F f)
-{
-    return (for_each_point_multi_linestring(ml, f));
-}
-
-template<typename Y,
-        template<typename,typename> class V, template<typename> class A,
-        typename F>
-inline F for_each_point(multi_polygon<Y, V, A>& mp, F f)
-{
-    return (for_each_point_multi_polygon(mp, f));
-}
-
-
-
-
-template<typename P,
-        template<typename,typename> class V, template<typename> class A,
-        typename F>
-inline F for_each_point(const multi_point<P, V, A>& mp, F f)
-{
-    return (for_each_point_multi_point(mp, f));
-}
-
-template<typename L,
-        template<typename,typename> class V, template<typename> class A,
-        typename F>
-inline F for_each_point(const multi_linestring<L, V, A>& ml, F f)
-{
-    return (for_each_point_multi_linestring(ml, f));
-}
-
-
-template<typename Y,
-        template<typename,typename> class V, template<typename> class A,
-        typename F>
-inline F for_each_point(const multi_polygon<Y, V, A>& mp, F f)
-{
-    return (for_each_point_multi_polygon(mp, f));
-}
-
-
-
-
-template<typename L,
-        template<typename,typename> class V, template<typename> class A,
-        typename F>
-inline F for_each_segment(multi_linestring<L, V, A>& ml, F f)
-{
-    return (for_each_segment_multi_linestring(ml, f));
-}
-
-template<typename Y,
-        template<typename,typename> class V, template<typename> class A,
-        typename F>
-inline F for_each_segment(multi_polygon<Y, V, A>& mp, F f)
-{
-    return (for_each_segment_multi_polygon(mp, f));
-}
-
-
-
-
-template<typename L,
-        template<typename,typename> class V, template<typename> class A,
-        typename F>
-inline F for_each_segment(const multi_linestring<L, V, A>& ml, F f)
-{
-    return (for_each_segment_multi_linestring(ml, f));
-}
-
-template<typename Y,
-        template<typename,typename> class V, template<typename> class A,
-        typename F>
-inline F for_each_segment(const multi_polygon<Y, V, A>& mp, F f)
-{
-    return (for_each_segment_multi_polygon(mp, f));
-}
-} // namespace ggl
-
-
-#endif // GGL_MULTI_FOREACH_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/get_section.hpp b/include/builtin-ggl/ggl/multi/algorithms/get_section.hpp
deleted file mode 100644
index 80823f6..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/get_section.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_ALGORITHMS_GET_SECTION_HPP
-#define GGL_MULTI_ALGORITHMS_GET_SECTION_HPP
-
-
-#include <boost/concept/requires.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/multi/core/tags.hpp>
-
-#include <ggl/algorithms/get_section.hpp>
-
-
-
-namespace ggl
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename MultiPolygon, typename Section>
-struct get_section<multi_polygon_tag, MultiPolygon, Section>
-{
-    typedef typename ggl::point_const_iterator<MultiPolygon>::type iterator_type;
-
-    static inline void apply(MultiPolygon const& multi_polygon, Section const& section,
-                iterator_type& begin, iterator_type& end)
-    {
-        BOOST_ASSERT(section.multi_index >= 0 && section.multi_index < boost::size(multi_polygon));
-
-        get_section<polygon_tag, typename boost::range_value<MultiPolygon>::type, Section>
-            ::apply(multi_polygon[section.multi_index], section, begin, end);
-
-    }
-};
-
-
-} // namespace dispatch
-#endif
-
-
-
-
-} // namespace ggl
-
-#endif // GGL_MULTI_ALGORITHMS_GET_SECTION_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/intersection.hpp b/include/builtin-ggl/ggl/multi/algorithms/intersection.hpp
deleted file mode 100644
index a271a35..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/intersection.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_ALGORITHMS_INTERSECTION_HPP
-#define GGL_MULTI_ALGORITHMS_INTERSECTION_HPP
-
-#include <vector>
-
-#include <ggl/algorithms/intersection.hpp>
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
-    typename MultiPolygon1, typename MultiPolygon2,
-    typename OutputIterator, typename GeometryOut
->
-struct intersection
-    <
-        multi_polygon_tag, multi_polygon_tag, polygon_tag,
-        MultiPolygon1, MultiPolygon2,
-        OutputIterator, GeometryOut
-    >
-{
-    // todo: implement this
-};
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_ALGORITHMS_INTERSECTION_HPP
-
diff --git a/include/builtin-ggl/ggl/multi/algorithms/length.hpp b/include/builtin-ggl/ggl/multi/algorithms/length.hpp
deleted file mode 100644
index 916e56e..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/length.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_LENGTH_HPP
-#define GGL_MULTI_LENGTH_HPP
-
-#include <ggl/algorithms/length.hpp>
-#include <ggl/multi/algorithms/detail/multi_sum.hpp>
-
-namespace ggl
-{
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-    template <typename MG, typename S>
-    struct length<multi_linestring_tag, MG, S>
-            : detail::multi_sum<double, MG, S,
-                    detail::length::range_length<typename boost::range_value<MG>::type, S> > {};
-
-} // namespace dispatch
-#endif
-
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_LENGTH_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/num_points.hpp b/include/builtin-ggl/ggl/multi/algorithms/num_points.hpp
deleted file mode 100644
index 9b86b9d..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/num_points.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_MULTI_ALGORITHMS_NUM_POINTS_HPP
-#define GGL_MULTI_ALGORITHMS_NUM_POINTS_HPP
-
-
-#include <ggl/multi/core/tags.hpp>
-#include <ggl/algorithms/num_points.hpp>
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace num_points {
-
-
-template <typename MultiGeometry>
-struct multi_count
-{
-    static inline size_t apply(MultiGeometry const& geometry)
-    {
-        typedef typename boost::range_value<MultiGeometry>::type geometry_type;
-        typedef typename boost::remove_const<geometry_type>::type ncg;
-        typedef typename boost::range_const_iterator
-            <
-                MultiGeometry
-            >::type iterator_type;
-
-        size_t n = 0;
-        for (iterator_type it = boost::begin(geometry);
-            it != boost::end(geometry);
-            ++it)
-        {
-            n += dispatch::num_points<typename tag<ncg>::type,
-                ggl::is_linear<ncg>::value, ncg>::apply(*it);
-        }
-        return n;
-    }
-};
-
-
-}} // namespace detail::num_points
-#endif
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-
-template <typename Geometry>
-struct num_points<multi_point_tag, false, Geometry>
-    : detail::num_points::multi_count<Geometry> {};
-
-template <typename Geometry>
-struct num_points<multi_linestring_tag, false, Geometry>
-    : detail::num_points::multi_count<Geometry> {};
-
-template <typename Geometry>
-struct num_points<multi_polygon_tag, false, Geometry>
-    : detail::num_points::multi_count<Geometry> {};
-
-
-} // namespace dispatch
-#endif
-
-
-}
-
-
-#endif // GGL_MULTI_ALGORITHMS_NUM_POINTS_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/overlay/copy_segments.hpp b/include/builtin-ggl/ggl/multi/algorithms/overlay/copy_segments.hpp
deleted file mode 100644
index fe956a2..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/overlay/copy_segments.hpp
+++ /dev/null
@@ -1,92 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_ALGORITHMS_OVERLAY_COPY_SEGMENTS_HPP
-#define GGL_MULTI_ALGORITHMS_OVERLAY_COPY_SEGMENTS_HPP
-
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/overlay/copy_segments.hpp>
-
-#include <ggl/multi/core/ring_type.hpp>
-#include <ggl/multi/core/tags.hpp>
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace copy_segments {
-
-
-template
-<
-    typename MultiGeometry,
-    typename SegmentIdentifier,
-    typename RangeOut,
-    typename Policy
->
-struct copy_segments_multi
-{
-    static inline void apply(MultiGeometry const& multi_geometry,
-            SegmentIdentifier const& seg_id, int to_index,
-            RangeOut& current_output)
-    {
-
-        BOOST_ASSERT
-            (
-                seg_id.multi_index >= 0
-                && seg_id.multi_index < boost::size(multi_geometry)
-            );
-
-        // Call the single-version
-        Policy::apply(multi_geometry[seg_id.multi_index],
-                    seg_id, to_index, current_output);
-    }
-};
-
-
-}} // namespace detail::copy_segments
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-
-
-template <typename MultiPolygon, typename SegmentIdentifier, typename RangeOut>
-struct copy_segments<multi_polygon_tag, MultiPolygon, SegmentIdentifier, RangeOut>
-    : detail::copy_segments::copy_segments_multi
-        <
-            MultiPolygon,
-            SegmentIdentifier,
-            RangeOut,
-            detail::copy_segments::copy_segments_polygon
-                <
-                    typename boost::range_value<MultiPolygon>::type,
-                    SegmentIdentifier,
-                    RangeOut
-                >
-        >
-{};
-
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-} // namespace ggl
-
-#endif // GGL_MULTI_ALGORITHMS_OVERLAY_COPY_SEGMENTS_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/overlay/get_intersection_points.hpp b/include/builtin-ggl/ggl/multi/algorithms/overlay/get_intersection_points.hpp
deleted file mode 100644
index 75f94b1..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/overlay/get_intersection_points.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_ALGORITHMS_GET_INTERSECTION_POINTS_HPP
-#define GGL_MULTI_ALGORITHMS_GET_INTERSECTION_POINTS_HPP
-
-#include <ggl/multi/core/is_multi.hpp>
-
-#include <ggl/multi/algorithms/distance.hpp>
-#include <ggl/multi/algorithms/get_section.hpp>
-#include <ggl/multi/algorithms/sectionalize.hpp>
-
-#include <ggl/multi/iterators/point_const_iterator.hpp>
-
-#include <ggl/algorithms/overlay/get_intersection_points.hpp>
-
-
-
-namespace ggl
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
-    typename MultiTag1,
-    typename MultiTag2,
-    typename MultiGeometry1,
-    typename MultiGeometry2,
-    typename IntersectionPoints
->
-struct get_intersection_points
-    <
-        MultiTag1, MultiTag2,
-        true, true,
-        MultiGeometry1, MultiGeometry2,
-        IntersectionPoints
-    >
-    : detail::get_intersection_points::get_ips_generic
-        <
-            MultiGeometry1,
-            MultiGeometry2,
-            IntersectionPoints
-        >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-} // namespace ggl
-
-#endif // GGL_MULTI_ALGORITHMS_GET_INTERSECTION_POINTS_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/perimeter.hpp b/include/builtin-ggl/ggl/multi/algorithms/perimeter.hpp
deleted file mode 100644
index f0ab17a..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/perimeter.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_PERIMETER_HPP
-#define GGL_MULTI_PERIMETER_HPP
-
-#include <ggl/algorithms/perimeter.hpp>
-#include <ggl/multi/algorithms/detail/multi_sum.hpp>
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-    template <typename MG, typename S>
-    struct perimeter<multi_polygon_tag, MG, S>
-            : detail::multi_sum<double, MG, S,
-                    detail::perimeter::polygon_perimeter<typename boost::range_value<MG>::type, S> > {};
-
-} // namespace dispatch
-#endif
-
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_PERIMETER_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/remove_holes_if.hpp b/include/builtin-ggl/ggl/multi/algorithms/remove_holes_if.hpp
deleted file mode 100644
index 1d912bb..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/remove_holes_if.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_ALGORITHMS_REMOVE_HOLES_IF_HPP
-#define GGL_MULTI_ALGORITHMS_REMOVE_HOLES_IF_HPP
-
-#include <ggl/algorithms/remove_holes_if.hpp>
-#include <ggl/multi/algorithms/detail/modify_with_predicate.hpp>
-
-namespace ggl {
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-    template <typename MultiPolygon, typename Predicate>
-    struct remove_holes_if<multi_polygon_tag, MultiPolygon, Predicate>
-        : detail::multi_modify_with_predicate
-            <
-                MultiPolygon,
-                Predicate,
-                detail::remove_holes_if::polygon_remove_holes_if
-                    <
-                        typename boost::range_value<MultiPolygon>::type, Predicate
-                    >
-            >
-    {};
-
-
-} // namespace dispatch
-#endif
-
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_ALGORITHMS_REMOVE_HOLES_IF_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/sectionalize.hpp b/include/builtin-ggl/ggl/multi/algorithms/sectionalize.hpp
deleted file mode 100644
index 89f8342..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/sectionalize.hpp
+++ /dev/null
@@ -1,86 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_ALGORITHMS_SECTIONALIZE_HPP
-#define GGL_MULTI_ALGORITHMS_SECTIONALIZE_HPP
-
-#include <cstddef>
-#include <vector>
-
-#include <boost/concept/requires.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/sectionalize.hpp>
-
-
-
-namespace ggl
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace sectionalize {
-
-
-template <typename MultiGeometry, typename Sections, std::size_t DimensionCount, typename Policy>
-struct sectionalize_multi
-{
-    static inline void apply(MultiGeometry const& multi, Sections& sections)
-    {
-        int multi_index = 0;
-        for (typename boost::range_const_iterator<MultiGeometry>::type
-                    it = boost::begin(multi);
-            it != boost::end(multi);
-            ++it, ++multi_index)
-        {
-            Policy::apply(*it, sections, multi_index);
-        }
-    }
-};
-
-
-
-
-}} // namespace detail::sectionalize
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename MultiPolygon, typename Sections, std::size_t DimensionCount, std::size_t MaxCount>
-struct sectionalize<multi_polygon_tag, MultiPolygon, Sections, DimensionCount, MaxCount>
-    : detail::sectionalize::sectionalize_multi
-        <
-            MultiPolygon,
-            Sections,
-            DimensionCount,
-            detail::sectionalize::sectionalize_polygon
-                <
-                    typename boost::range_value<MultiPolygon>::type,
-                    Sections,
-                    DimensionCount,
-                    MaxCount
-                >
-        >
-
-{};
-
-
-} // namespace dispatch
-#endif
-
-
-
-
-} // namespace ggl
-
-#endif // GGL_MULTI_ALGORITHMS_SECTIONALIZE_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/simplify.hpp b/include/builtin-ggl/ggl/multi/algorithms/simplify.hpp
deleted file mode 100644
index 28b2a5b..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/simplify.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_SIMPLIFY_HPP
-#define GGL_MULTI_SIMPLIFY_HPP
-
-#include <vector>
-
-#include <ggl/algorithms/simplify.hpp>
-
-FIX ME it is not yet adapted to tag-dispatching
-
-namespace ggl
-{
-
-
-        template<typename ML>
-        inline void simplify_multi_linestring(const ML& ml_in, ML& ml_out, double max_distance)
-        {
-            ml_out.resize(ml_in.size());
-            typename ML::const_iterator it_in = ml_in.begin();
-            typename ML::iterator it_out = ml_out.begin();
-            for (; it_in != ml_in.end(); it_in++, it_out++)
-            {
-                simplify_linestring(*it_in, *it_out, max_distance);
-            }
-        }
-
-
-        template<typename MY>
-        inline void simplify_multi_polygon(const MY& mp_in, MY& mp_out, double max_distance)
-        {
-            mp_out.resize(mp_in.size());
-            typename MY::const_iterator it_in = mp_in.begin();
-            typename MY::iterator it_out = mp_out.begin();
-            for (; it_in != mp_in.end(); it_in++, it_out++)
-            {
-                simplify(*it_in, *it_out, max_distance);
-            }
-        }
-
-
-
-template<typename L,
-        template<typename,typename> class V, template<typename> class A>
-inline void simplify(const multi_linestring<L, V, A>& ml_in,
-    multi_linestring<L, V, A>& ml_out, double max_distance)
-{
-    simplify_multi_linestring(ml_in, ml_out, max_distance);
-}
-
-template<typename Y,
-        template<typename,typename> class V, template<typename> class A>
-inline void simplify(const multi_polygon<Y, V, A>& mp_in,
-            multi_polygon<Y, V, A>& mp_out, double max_distance)
-{
-    simplify_multi_polygon(mp_in, mp_out, max_distance);
-}
-
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_SIMPLIFY_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/transform.hpp b/include/builtin-ggl/ggl/multi/algorithms/transform.hpp
deleted file mode 100644
index a6ec3fa..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/transform.hpp
+++ /dev/null
@@ -1,87 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_ALGORITHMS_TRANSFORM_HPP
-#define GGL_MULTI_ALGORITHMS_TRANSFORM_HPP
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/transform.hpp>
-
-#include <ggl/multi/core/tags.hpp>
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace transform {
-
-/*!
-    \brief Is able to transform any multi-geometry, calling the single-version as policy
-*/
-template <typename Multi1, typename Multi2, typename Policy>
-struct transform_multi
-{
-    template <typename S>
-    static inline bool apply(Multi1 const& multi1, Multi2& multi2, S const& strategy)
-    {
-        multi2.resize(boost::size(multi1));
-
-        typename boost::range_const_iterator<Multi1>::type it1 
-                = boost::begin(multi1);
-        typename boost::range_iterator<Multi2>::type it2 
-                = boost::begin(multi2);
-
-        for (; it1 != boost::end(multi1); ++it1, ++it2)
-        {
-            if (! Policy::apply(*it1, *it2, strategy))
-            {
-                return false;
-            }
-        }
-
-        return true;
-    }
-};
-
-
-
-
-}} // namespace detail::transform
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Multi1, typename Multi2>
-struct transform<multi_polygon_tag, multi_polygon_tag, Multi1, Multi2>
-    : detail::transform::transform_multi
-        <
-            Multi1,
-            Multi2,
-            detail::transform::transform_polygon
-                <
-                    typename boost::range_value<Multi1>::type,
-                    typename boost::range_value<Multi2>::type
-                >
-        >
-{};
-
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-} // namespace ggl
-
-#endif // GGL_MULTI_ALGORITHMS_TRANSFORM_HPP
diff --git a/include/builtin-ggl/ggl/multi/algorithms/within.hpp b/include/builtin-ggl/ggl/multi/algorithms/within.hpp
deleted file mode 100644
index f5b0ec8..0000000
--- a/include/builtin-ggl/ggl/multi/algorithms/within.hpp
+++ /dev/null
@@ -1,104 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_ALGORITHMS_WITHIN_HPP
-#define GGL_MULTI_ALGORITHMS_WITHIN_HPP
-
-#include <vector>
-
-#include <ggl/algorithms/within.hpp>
-#include <ggl/multi/core/tags.hpp>
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace within {
-
-
-template<typename P, typename I, typename S>
-inline bool point_in_multi_polygon(const P& p, const I& m, const S& strategy)
-{
-    for (typename I::const_iterator i = m.begin(); i != m.end(); i++)
-    {
-        // Point within a multi-polygon: true if within one of the polygons
-        if (point_in_polygon(p, *i, strategy))
-        {
-            return true;
-        }
-    }
-    return false;
-}
-
-
-template<typename I, typename C>
-inline bool multi_polygon_in_circle(const I& m, const C& c)
-{
-    for (typename I::const_iterator i = m.begin(); i != m.end(); i++)
-    {
-        if (! polygon_in_circle(*i, c))
-        {
-            return false;
-        }
-    }
-    return true;
-}
-
-}} // namespace detail::within
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-/*
-template <typename M, typename B>
-struct within<multi_polygon_tag, box_tag, M, B>
-{
-    static inline bool apply(const M& m, const B& b)
-    {
-        return detail::within::multi_polygon_in_box(m, b);
-    }
-};
-*/
-
-template <typename M, typename C>
-struct within<multi_polygon_tag, nsphere_tag, M, C>
-{
-    static inline bool apply(const M& m, const C& c)
-    {
-        return detail::within::multi_polygon_in_circle(m, c);
-    }
-};
-
-template <typename P, typename M>
-struct within<point_tag, multi_polygon_tag, P, M>
-{
-    template <typename S>
-    static inline bool apply(const P& p, const M& m, const S& strategy)
-    {
-        return detail::within::point_in_multi_polygon(p, m, strategy);
-    }
-
-    static inline bool apply(const P& p, const M& m)
-    {
-        typedef typename point_type<M>::type PM;
-        typename strategy_within<
-                    typename cs_tag<P>::type, typename cs_tag<PM>::type, P, PM
-                        >::type strategy;
-        return apply(p, m, strategy);
-    }
-
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-} // namespace ggl
-
-#endif // GGL_MULTI_ALGORITHMS_WITHIN_HPP
diff --git a/include/builtin-ggl/ggl/multi/core/geometry_id.hpp b/include/builtin-ggl/ggl/multi/core/geometry_id.hpp
deleted file mode 100644
index 6d085d5..0000000
--- a/include/builtin-ggl/ggl/multi/core/geometry_id.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_MULTI_CORE_GEOMETRY_ID_HPP
-#define GGL_MULTI_CORE_GEOMETRY_ID_HPP
-
-
-#include <boost/mpl/int.hpp>
-#include <boost/type_traits.hpp>
-
-
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-#include <ggl/core/geometry_id.hpp>
-#include <ggl/multi/core/tags.hpp>
-
-
-namespace ggl {
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <>
-struct geometry_id<multi_point_tag>      : boost::mpl::int_<4> {};
-
-
-template <>
-struct geometry_id<multi_linestring_tag> : boost::mpl::int_<5> {};
-
-
-template <>
-struct geometry_id<multi_polygon_tag>    : boost::mpl::int_<6> {};
-
-
-
-} // namespace core_dispatch
-#endif
-
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_CORE_GEOMETRY_ID_HPP
diff --git a/include/builtin-ggl/ggl/multi/core/is_multi.hpp b/include/builtin-ggl/ggl/multi/core/is_multi.hpp
deleted file mode 100644
index b03183e..0000000
--- a/include/builtin-ggl/ggl/multi/core/is_multi.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_MULTI_CORE_IS_MULTI_HPP
-#define GGL_MULTI_CORE_IS_MULTI_HPP
-
-
-#include <boost/type_traits.hpp>
-
-
-#include <ggl/core/is_multi.hpp>
-#include <ggl/multi/core/tags.hpp>
-
-
-namespace ggl {
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <>
-struct is_multi<multi_point_tag> : boost::true_type {};
-
-
-template <>
-struct is_multi<multi_linestring_tag> : boost::true_type {};
-
-
-template <>
-struct is_multi<multi_polygon_tag> : boost::true_type {};
-
-
-} // namespace core_dispatch
-#endif
-
-
-
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_CORE_IS_MULTI_HPP
diff --git a/include/builtin-ggl/ggl/multi/core/point_type.hpp b/include/builtin-ggl/ggl/multi/core/point_type.hpp
deleted file mode 100644
index 3ea118e..0000000
--- a/include/builtin-ggl/ggl/multi/core/point_type.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_MULTI_CORE_POINT_TYPE_HPP
-#define GGL_MULTI_CORE_POINT_TYPE_HPP
-
-
-#include <boost/range/metafunctions.hpp>
-
-
-#include <ggl/core/point_type.hpp>
-#include <ggl/multi/core/tags.hpp>
-
-
-
-namespace ggl {
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename MultiPoint>
-struct point_type<multi_point_tag, MultiPoint>
-{
-    typedef typename boost::range_value<MultiPoint>::type type;
-};
-
-
-template <typename MultiLinestring>
-struct point_type<multi_linestring_tag, MultiLinestring>
-{
-    typedef typename point_type<linestring_tag,
-        typename boost::range_value<MultiLinestring>::type>::type type;
-};
-
-
-
-template <typename MultiPolygon>
-struct point_type<multi_polygon_tag, MultiPolygon>
-{
-    typedef typename point_type<polygon_tag,
-        typename boost::range_value<MultiPolygon>::type>::type type;
-};
-
-
-
-
-}
-#endif
-
-} // namespace ggl
-
-#endif // GGL_MULTI_CORE_POINT_TYPE_HPP
diff --git a/include/builtin-ggl/ggl/multi/core/ring_type.hpp b/include/builtin-ggl/ggl/multi/core/ring_type.hpp
deleted file mode 100644
index 1ecc053..0000000
--- a/include/builtin-ggl/ggl/multi/core/ring_type.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_MULTI_CORE_RING_TYPE_HPP
-#define GGL_MULTI_CORE_RING_TYPE_HPP
-
-
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/core/ring_type.hpp>
-#include <ggl/multi/core/tags.hpp>
-
-
-
-namespace ggl
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename MultiPolygon>
-struct ring_type<multi_polygon_tag, MultiPolygon>
-{
-    typedef typename ggl::ring_type
-        <
-            typename boost::range_value<MultiPolygon>::type
-        >::type type;
-};
-
-
-
-
-} // namespace core_dispatch
-#endif
-
-
-} // namespace ggl
-
-
-#endif // GGL_MULTI_CORE_RING_TYPE_HPP
diff --git a/include/builtin-ggl/ggl/multi/core/tags.hpp b/include/builtin-ggl/ggl/multi/core/tags.hpp
deleted file mode 100644
index 9f52d13..0000000
--- a/include/builtin-ggl/ggl/multi/core/tags.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_MULTI_CORE_TAGS_HPP
-#define GGL_MULTI_CORE_TAGS_HPP
-
-namespace ggl
-{
-
-/// OGC Multi point identifying tag
-struct multi_point_tag {};
-
-/// OGC Multi linestring identifying tag
-struct multi_linestring_tag {};
-
-/// OGC Multi polygon identifying tag
-struct multi_polygon_tag {};
-
-/// OGC Geometry Collection identifying tag
-struct geometry_collection_tag {};
-
-} // namespace ggl
-
-#endif // GGL_MULTI_CORE_TAGS_HPP
diff --git a/include/builtin-ggl/ggl/multi/core/topological_dimension.hpp b/include/builtin-ggl/ggl/multi/core/topological_dimension.hpp
deleted file mode 100644
index 9d894e4..0000000
--- a/include/builtin-ggl/ggl/multi/core/topological_dimension.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_MULTI_TOPOLOGICAL_DIMENSION_HPP
-#define GGL_MULTI_TOPOLOGICAL_DIMENSION_HPP
-
-
-#include <boost/mpl/int.hpp>
-
-
-#include <ggl/core/topological_dimension.hpp>
-#include <ggl/multi/core/tags.hpp>
-
-
-namespace ggl {
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <>
-struct top_dim<multi_point_tag> : boost::mpl::int_<0> {};
-
-
-template <>
-struct top_dim<multi_linestring_tag> : boost::mpl::int_<1> {};
-
-
-template <>
-struct top_dim<multi_polygon_tag> : boost::mpl::int_<2> {};
-
-
-} // namespace core_dispatch
-#endif
-
-} // namespace ggl
-
-
-#endif
diff --git a/include/builtin-ggl/ggl/multi/geometries/multi_linestring.hpp b/include/builtin-ggl/ggl/multi/geometries/multi_linestring.hpp
deleted file mode 100644
index 7fb6ac0..0000000
--- a/include/builtin-ggl/ggl/multi/geometries/multi_linestring.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_LINESTRING_HPP
-#define GGL_MULTI_LINESTRING_HPP
-
-#include <memory>
-#include <vector>
-
-#include <ggl/core/concepts/linestring_concept.hpp>
-#include <ggl/multi/core/tags.hpp>
-
-namespace ggl
-{
-
-// Class: multi_line
-// Purpose: groups lines belonging to each other, e.g. a broken highway
-template
-<
-    typename L,
-    template<typename, typename> class V = std::vector,
-    template<typename> class A = std::allocator
->
-struct multi_linestring : public V<L, A<L> >
-{
-    BOOST_CONCEPT_ASSERT( (concept::Linestring<L>) );
-};
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
-    typename L,
-    template<typename, typename> class V,
-    template<typename> class A
->
-struct tag< multi_linestring<L, V, A> >
-{
-    typedef multi_linestring_tag type;
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-} // namespace ggl
-
-#endif // GGL_MULTI_LINESTRING_HPP
diff --git a/include/builtin-ggl/ggl/multi/geometries/multi_point.hpp b/include/builtin-ggl/ggl/multi/geometries/multi_point.hpp
deleted file mode 100644
index 6bafc11..0000000
--- a/include/builtin-ggl/ggl/multi/geometries/multi_point.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_GEOMETRIES_MULTI_POINT_HPP
-#define GGL_MULTI_GEOMETRIES_MULTI_POINT_HPP
-
-#include <memory>
-#include <vector>
-
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/multi/core/tags.hpp>
-
-namespace ggl
-{
-
-// Class: multi_point
-// Purpose: groups points belonging to each other, e.g. a constellation
-template
-<
-    typename P,
-    template<typename, typename> class V = std::vector,
-    template<typename> class A = std::allocator
->
-struct multi_point : public V<P, A<P> >
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<P>) );
-};
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
-    typename P,
-    template<typename, typename> class V,
-    template<typename> class A
->
-struct tag< multi_point<P, V, A> >
-{
-    typedef multi_point_tag type;
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_MULTI_GEOMETRIES_MULTI_POINT_HPP
diff --git a/include/builtin-ggl/ggl/multi/geometries/multi_polygon.hpp b/include/builtin-ggl/ggl/multi/geometries/multi_polygon.hpp
deleted file mode 100644
index 4bbaa66..0000000
--- a/include/builtin-ggl/ggl/multi/geometries/multi_polygon.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_GEOMETRIES_MULTI_POLYGON_HPP
-#define GGL_MULTI_GEOMETRIES_MULTI_POLYGON_HPP
-
-#include <memory>
-#include <vector>
-
-#include <ggl/multi/core/tags.hpp>
-#include <ggl/core/concepts/polygon_concept.hpp>
-#include <ggl/multi/core/tags.hpp>
-
-namespace ggl
-{
-
-// Class: multi_polygon
-// Purpose: groups polygons belonging to each other, e.g. Hawaii
-template
-<
-    typename P,
-    template<typename, typename> class V = std::vector,
-    template<typename> class A = std::allocator
->
-struct multi_polygon : public V<P, A<P> >
-{
-    BOOST_CONCEPT_ASSERT( (concept::Polygon<P>) );
-};
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
-    typename P,
-    template<typename, typename> class V,
-    template<typename> class A
->
-struct tag< multi_polygon<P, V, A> >
-{
-    typedef multi_polygon_tag type;
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_MULTI_GEOMETRIES_MULTI_POLYGON_HPP
diff --git a/include/builtin-ggl/ggl/multi/iterators/point_const_iterator.hpp b/include/builtin-ggl/ggl/multi/iterators/point_const_iterator.hpp
deleted file mode 100644
index d814ceb..0000000
--- a/include/builtin-ggl/ggl/multi/iterators/point_const_iterator.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_MULTI_ITERATORS_POINT_CONST_ITERATOR_HPP
-#define GGL_MULTI_ITERATORS_POINT_CONST_ITERATOR_HPP
-
-
-#include <boost/type_traits/remove_const.hpp>
-
-
-#include <ggl/iterators/point_const_iterator.hpp>
-
-
-namespace ggl
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename MultiPolygon>
-struct point_const_iterator<multi_polygon_tag, MultiPolygon>
-{
-    typedef typename boost::range_value<MultiPolygon>::type polygon_type;
-    typedef typename boost::range_const_iterator
-        <
-            typename ring_type<polygon_type>::type
-        >::type type;
-};
-
-
-
-
-} // namespace dispatch
-#endif
-
-
-
-}
-
-
-#endif // GGL_MULTI_ITERATORS_POINT_CONST_ITERATOR_HPP
diff --git a/include/builtin-ggl/ggl/multi/util/write_dsv.hpp b/include/builtin-ggl/ggl/multi/util/write_dsv.hpp
deleted file mode 100644
index 8b6d734..0000000
--- a/include/builtin-ggl/ggl/multi/util/write_dsv.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_MULTI_UTIL_WRITE_DSV_HPP
-#define GGL_MULTI_UTIL_WRITE_DSV_HPP
-
-#include <ggl/util/write_dsv.hpp>
-
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace dsv {
-
-
-template <typename Geometry>
-struct dsv_multi
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os,
-                Geometry const& geometry,
-                dsv_settings const& settings)
-    {
-        os << settings.list_open;
-
-        typedef typename range_const_iterator<MultiGeometry>::type iterator;
-        for(iterator it = begin(multi); it != end(multi); ++it)
-        {
-            os << ggl::dsv(*it);
-        }
-        os << settings.list_close;
-    }
-};
-
-
-
-
-}} // namespace detail::dsv
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-
-template <typename Tag, typename Geometry>
-struct dsv<Tag, true, Geometry>
-    : detail::dsv::dsv_multi<Geometry>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-} // namespace ggl
-
-#endif // GGL_MULTI_UTIL_WRITE_DSV_HPP
diff --git a/include/builtin-ggl/ggl/policies/relate/de9im.hpp b/include/builtin-ggl/ggl/policies/relate/de9im.hpp
deleted file mode 100644
index 9c5b07c..0000000
--- a/include/builtin-ggl/ggl/policies/relate/de9im.hpp
+++ /dev/null
@@ -1,184 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRY_POLICIES_RELATE_DE9IM_HPP
-#define GGL_GEOMETRY_POLICIES_RELATE_DE9IM_HPP
-
-
-#include <ggl/strategies/intersection_result.hpp>
-#include <ggl/util/math.hpp>
-#include <ggl/util/select_coordinate_type.hpp>
-
-
-namespace ggl
-{
-
-namespace policies { namespace relate {
-
-
-template <typename S1, typename S2>
-struct segments_de9im
-{
-    typedef de9im_segment return_type;
-    typedef S1 segment_type1;
-    typedef S2 segment_type2;
-    typedef typename select_coordinate_type<S1, S2>::type coordinate_type;
-
-    static inline return_type rays_intersect(bool on_segment,
-                    double ra, double rb,
-                    coordinate_type const& dx1, coordinate_type const& dy1,
-                    coordinate_type const& dx2, coordinate_type const& dy2,
-                    coordinate_type const& wx, coordinate_type const& wy,
-                    S1 const& s1, S2 const& s2)
-    {
-        if(on_segment)
-        {
-            // 0 <= ra <= 1 and 0 <= rb <= 1
-            // Now check if one of them is 0 or 1, these are "touch" cases
-            bool a = math::equals(ra, 0.0) || math::equals(ra, 1.0);
-            bool b = math::equals(rb, 0.0) || math::equals(rb, 1.0);
-            if (a && b)
-            {
-                // Touch boundary/boundary: i-i == -1, i-b == -1, b-b == 0
-                // Opposite: if both are equal they touch in opposite direction
-                return de9im_segment(ra,rb,
-                        -1, -1, 1,
-                        -1,  0, 0,
-                         1,  0, 2, false, math::equals(ra,rb));
-            }
-            else if (a || b)
-            {
-                // Touch boundary/interior: i-i == -1, i-b == -1 or 0, b-b == -1
-                int A = a ? 0 : -1;
-                int B = b ? 0 : -1;
-                return de9im_segment(ra,rb,
-                        -1,  B, 1,
-                         A, -1, 0,
-                         1,  0, 2);
-            }
-
-            // Intersects: i-i == 0, i-b == -1, i-e == 1
-            return de9im_segment(ra,rb,
-                     0, -1, 1,
-                    -1, -1, 0,
-                     1,  0, 2);
-        }
-
-        // Not on segment, disjoint
-        return de9im_segment(ra,rb,
-                -1, -1, 1,
-                -1, -1, 0,
-                 1,  0, 2);
-    }
-
-    static inline return_type collinear_touch(coordinate_type const& x,
-                coordinate_type const& y, bool opposite, char)
-    {
-        return de9im_segment(0,0,
-                -1, -1, 1,
-                -1,  0, 0,
-                 1,  0, 2,
-                true, opposite);
-    }
-
-    template <typename S>
-    static inline return_type collinear_interior_boundary_intersect(S const& s,
-                bool a_within_b, bool opposite)
-    {
-        return a_within_b
-            ? de9im_segment(0,0,
-                 1, -1, -1,
-                 0,  0, -1,
-                 1,  0, 2,
-                true, opposite)
-            : de9im_segment(0,0,
-                 1,  0, 1,
-                -1,  0, 0,
-                -1, -1, 2,
-                true, opposite);
-    }
-
-
-
-    static inline return_type collinear_a_in_b(S1 const& s, bool opposite)
-    {
-        return de9im_segment(0,0,
-                1, -1, -1,
-                0, -1, -1,
-                1,  0,  2,
-                true, opposite);
-    }
-    static inline return_type collinear_b_in_a(const S2& s, bool opposite)
-    {
-        return de9im_segment(0,0,
-                 1,  0,  1,
-                -1, -1,  0,
-                -1, -1,  2,
-                true, opposite);
-    }
-
-    static inline return_type collinear_overlaps(
-                    coordinate_type const& x1, coordinate_type const& y1,
-                    coordinate_type const& x2, coordinate_type const& y2, bool opposite)
-    {
-        return de9im_segment(0,0,
-                1,  0, 1,
-                0, -1, 0,
-                1,  0, 2,
-                true, opposite);
-    }
-
-    static inline return_type segment_equal(S1 const& s, bool opposite)
-    {
-        return de9im_segment(0,0,
-                 1, -1, -1,
-                -1,  0, -1,
-                -1, -1,  2,
-                 true, opposite);
-    }
-
-    static inline return_type degenerate(S1 const& segment, bool a_degenerate)
-    {
-            return a_degenerate
-                ? de9im_segment(0,0,
-                     0, -1, -1,
-                    -1, -1, -1,
-                     1,  0,  2,
-                     false, false, false, true)
-                : de9im_segment(0,0,
-                     0, -1,  1,
-                    -1, -1,  0,
-                    -1, -1,  2,
-                     false, false, false, true);
-    }
-
-    static inline return_type collinear_disjoint()
-    {
-        return de9im_segment(0,0,
-                -1, -1, 1,
-                -1, -1, 0,
-                 1,  0, 2,
-                true);
-    }
-
-
-    static inline return_type parallel()
-    {
-        return de9im_segment(0,0,
-                -1, -1, 1,
-                -1, -1, 0,
-                 1,  0, 2, false, false, true);
-    }
-};
-
-
-}} // namespace policies::relate
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRY_POLICIES_RELATE_DE9IM_HPP
diff --git a/include/builtin-ggl/ggl/policies/relate/direction.hpp b/include/builtin-ggl/ggl/policies/relate/direction.hpp
deleted file mode 100644
index a3745db..0000000
--- a/include/builtin-ggl/ggl/policies/relate/direction.hpp
+++ /dev/null
@@ -1,299 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRY_POLICIES_RELATE_DIRECTION_HPP
-#define GGL_GEOMETRY_POLICIES_RELATE_DIRECTION_HPP
-
-#include <boost/concept_check.hpp>
-
-#include <ggl/util/math.hpp>
-#include <ggl/util/select_coordinate_type.hpp>
-
-
-namespace ggl
-{
-
-
-namespace policies { namespace relate {
-
-struct direction_type
-{
-    inline direction_type(char h,
-                double a = 0, double b = 0,
-                int ha = 0, int hb = 0,
-                int da = 0, int db = 0,
-                bool op = false)
-        : how(h)
-        , opposite(op)
-        , ra(a)
-        , rb(b)
-        , how_a(ha)
-        , how_b(hb)
-        , dir_a(da)
-        , dir_b(db)
-    {
-    }
-
-    inline direction_type(char h, bool op, int ha = 0, int hb = 0)
-        : how(h)
-        , opposite(op)
-        , ra(0)
-        , rb(0)
-        , how_a(ha)
-        , how_b(hb)
-        , dir_a(0)
-        , dir_b(0)
-    {
-    }
-
-
-    // "How" is the intersection formed?
-    char how;
-
-    // Is it opposite (for collinear/equal cases)
-    bool opposite;
-
-    // "Distance information", information on how far lies IP from a/b in ratio [0..1]
-    double ra, rb;
-
-    // Information on how A arrives at intersection, how B arrives at intersection
-    // 1: arrives at intersection
-    // -1: starts from intersection
-    int how_a;
-    int how_b;
-
-    // Direction: how is A positioned from B
-    // 1: points left, seen from IP
-    // -1: points right, seen from IP
-    // In case of intersection: B's TO direction
-    // In case that B's TO direction is at A: B's from direction
-    // In collinear cases: it is 0
-    int dir_a; // Direction of A-s TO from IP
-    int dir_b; // Direction of B-s TO from IP
-};
-
-
-template <typename S1, typename S2>
-struct segments_direction
-{
-    typedef direction_type return_type;
-    typedef S1 segment_type1;
-    typedef S2 segment_type2;
-    typedef typename select_coordinate_type<S1, S2>::type coordinate_type;
-
-    static inline return_type rays_intersect(bool on_segment,
-                    double ra, double rb,
-                    coordinate_type const& dx1, coordinate_type const& dy1,
-                    coordinate_type const& dx2, coordinate_type const& dy2,
-                    coordinate_type const& wx, coordinate_type const& wy,
-                    S1 const& s1, S2 const& s2)
-    {
-        boost::ignore_unused_variable_warning(dx2);
-        boost::ignore_unused_variable_warning(dy2);
-        boost::ignore_unused_variable_warning(wx);
-        boost::ignore_unused_variable_warning(wy);
-
-        if(on_segment)
-        {
-            // 0 <= ra <= 1 and 0 <= rb <= 1
-            // Check the configuration
-            bool ra0 = math::equals(ra, 0.0);
-            bool ra1 = math::equals(ra, 1.0);
-            bool rb0 = math::equals(rb, 0.0);
-            bool rb1 = math::equals(rb, 1.0);
-
-            return
-                // opposite and same starting point (FROM)
-                ra0 && rb0 ? calculate_side<1>(ra, rb, dx1, dy1, s1, s2, 'f', -1, -1)
-
-                // opposite and point to each other (TO)
-                : ra1 && rb1 ? calculate_side<0>(ra, rb, dx1, dy1, s1, s2, 't', 1, 1)
-
-                // not opposite, forming an angle, first a then b,
-                // directed either both left, or both right
-                // Check side of B2 from A. This is not calculated before
-                : ra1 && rb0 ? angle<1>(ra, rb, dx1, dy1, s1, s2, 'a', 1, -1)
-
-                // not opposite, forming a angle, first b then a,
-                // directed either both left, or both right
-                : ra0 && rb1 ? angle<0>(ra, rb, dx1, dy1, s1, s2, 'a', -1, 1)
-
-                // b starts from interior of a
-                : rb0 ? starts_from_middle(ra, rb, dx1, dy1, s1, s2, 'B', 0, -1)
-
-                // a starts from interior of b (#39)
-                : ra0 ? starts_from_middle(ra, rb, dx1, dy1, s1, s2, 'A', -1, 0)
-
-                // b ends at interior of a, calculate direction of A from IP
-                : rb1 ? b_ends_at_middle(ra, rb, dx2, dy2, s1, s2)
-
-                // a ends at interior of b
-                : ra1 ? a_ends_at_middle(ra, rb, dx1, dy1, s1, s2)
-
-                // normal intersection
-                : calculate_side<1>(ra, rb, dx1, dy1, s1, s2, 'i', -1, -1)
-                ;
-        }
-
-        // Not on segment, disjoint
-        return return_type('d');
-    }
-
-    static inline return_type collinear_touch(coordinate_type const& , coordinate_type const& , bool opposite, char how)
-    {
-        // Though this is 'collinear', we handle it as To/From/Angle because it is the same.
-        // It only does NOT have a direction.
-        int const arrive = how == 'T' ? 1 : -1;
-        return
-            ! opposite
-            ? return_type('a', 0, 0, how == 'A' ? 1 : -1, how == 'B' ? 1 : -1)
-            : return_type(how == 'T' ? 't' : 'f', 0, 0, arrive, arrive, 0, 0, true);
-    }
-
-    template <typename S>
-    static inline return_type collinear_interior_boundary_intersect(S const& , bool, bool opposite)
-    {
-        return return_type('c', opposite);
-    }
-
-    static inline return_type collinear_a_in_b(S1 const& , bool opposite)
-    {
-        return return_type('c', opposite);
-    }
-    static inline return_type collinear_b_in_a(S2 const& , bool opposite)
-    {
-        return return_type('c', opposite);
-    }
-
-    static inline return_type collinear_overlaps(
-                    coordinate_type const& , coordinate_type const& ,
-                    coordinate_type const& , coordinate_type const& , bool opposite)
-    {
-        return return_type('c', opposite);
-    }
-
-    static inline return_type segment_equal(S1 const& , bool opposite)
-    {
-        return return_type('e', opposite);
-    }
-
-    static inline return_type degenerate(S1 const& , bool)
-    {
-        return return_type('0');
-    }
-
-    static inline return_type collinear_disjoint()
-    {
-        return return_type('d');
-    }
-
-
-    static inline return_type parallel()
-    {
-        return return_type('p');
-    }
-
-private :
-
-
-    template <std::size_t I>
-    static inline return_type calculate_side(double ra, double rb,
-                coordinate_type const& dx1, coordinate_type const& dy1,
-                S1 const& s1, S2 const& s2,
-                char how, int how_a, int how_b)
-    {
-        coordinate_type dpx = get<I, 0>(s2) - get<0, 0>(s1);
-        coordinate_type dpy = get<I, 1>(s2) - get<0, 1>(s1);
-
-        // This is a "side calculation" as in the strategies, but here two terms are precalculated
-        // We might merge this with side, offering a pre-calculated term
-        // Waiting for implementing spherical...
-
-        return dx1 * dpy - dy1 * dpx > 0
-            ? return_type(how, ra, rb, how_a, how_b, -1, 1)
-            : return_type(how, ra, rb, how_a, how_b, 1, -1);
-    }
-
-    template <std::size_t I>
-    static inline return_type angle(double ra, double rb,
-                coordinate_type const& dx1, coordinate_type const& dy1,
-                S1 const& s1, S2 const& s2,
-                char how, int how_a, int how_b)
-    {
-        coordinate_type dpx = get<I, 0>(s2) - get<0, 0>(s1);
-        coordinate_type dpy = get<I, 1>(s2) - get<0, 1>(s1);
-
-         return dx1 * dpy - dy1 * dpx > 0
-            ? return_type(how, ra, rb, how_a, how_b, 1, 1)
-            : return_type(how, ra, rb, how_a, how_b, -1, -1);
-    }
-
-
-    static inline return_type starts_from_middle(double ra, double rb,
-                coordinate_type const& dx1, coordinate_type const& dy1,
-                S1 const& s1, S2 const& s2,
-                char which,
-                int how_a, int how_b)
-    {
-        // Calculate ARROW of b segment w.r.t. s1
-        coordinate_type dpx = get<1, 0>(s2) - get<0, 0>(s1);
-        coordinate_type dpy = get<1, 1>(s2) - get<0, 1>(s1);
-
-        int dir = dx1 * dpy - dy1 * dpx > 0 ? 1 : -1;
-
-        // From other perspective, then reverse
-        bool const is_a = which == 'A';
-        if (is_a)
-        {
-            dir = -dir;
-        }
-
-        return return_type('s', ra, rb,
-            how_a,
-            how_b,
-            is_a ? dir : -dir,
-            ! is_a ? dir : -dir);
-    }
-
-
-
-    // To be harmonized
-    static inline return_type a_ends_at_middle(double ra, double rb,
-                coordinate_type const& dx, coordinate_type const& dy,
-                S1 const& s1, S2 const& s2)
-    {
-        coordinate_type dpx = get<1, 0>(s2) - get<0, 0>(s1);
-        coordinate_type dpy = get<1, 1>(s2) - get<0, 1>(s1);
-
-        // Ending at the middle, one ARRIVES, the other one is NEUTRAL
-        // (because it both "arrives"  and "departs"  there
-        return dx * dpy - dy * dpx > 0
-            ? return_type('m', ra, rb, 1, 0, 1, 1)
-            : return_type('m', ra, rb, 1, 0, -1, -1);
-    }
-
-
-    static inline return_type b_ends_at_middle(double ra, double rb,
-                coordinate_type const& dx, coordinate_type const& dy,
-                S1 const& s1, S2 const& s2)
-    {
-        coordinate_type dpx = get<1, 0>(s1) - get<0, 0>(s2);
-        coordinate_type dpy = get<1, 1>(s1) - get<0, 1>(s2);
-
-        return dx * dpy - dy * dpx > 0
-            ? return_type('m', ra, rb, 0, 1, 1, 1)
-            : return_type('m', ra, rb, 0, 1, -1, -1);
-    }
-
-};
-
-}} // namespace policies::relate
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRY_POLICIES_RELATE_DIRECTION_HPP
diff --git a/include/builtin-ggl/ggl/policies/relate/intersection_points.hpp b/include/builtin-ggl/ggl/policies/relate/intersection_points.hpp
deleted file mode 100644
index 9c4f9de..0000000
--- a/include/builtin-ggl/ggl/policies/relate/intersection_points.hpp
+++ /dev/null
@@ -1,143 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP
-#define GGL_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP
-
-#include <boost/concept_check.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/util/select_coordinate_type.hpp>
-
-
-namespace ggl
-{
-
-namespace policies { namespace relate {
-
-
-template <typename S1, typename S2, typename ReturnType>
-struct segments_intersection_points
-{
-    typedef ReturnType return_type;
-    typedef S1 segment_type1;
-    typedef S2 segment_type2;
-    typedef typename select_coordinate_type<S1, S2>::type coordinate_type;
-
-    static inline return_type rays_intersect(bool on_segment,
-                    double ra, double rb,
-                    coordinate_type const& dx1, coordinate_type const& dy1,
-                    coordinate_type const& dx2, coordinate_type const& dy2,
-                    coordinate_type const& wx, coordinate_type const& wy,
-                    S1 const& s1, S2 const& s2)
-    {
-        boost::ignore_unused_variable_warning(rb);
-        boost::ignore_unused_variable_warning(dx2);
-        boost::ignore_unused_variable_warning(dy2);
-        boost::ignore_unused_variable_warning(wx);
-        boost::ignore_unused_variable_warning(wy);
-        boost::ignore_unused_variable_warning(s2);
-
-        return_type result;
-
-        if (on_segment)
-        {
-            result.count = 1;
-            set<0>(result.intersections[0],
-                boost::numeric_cast<coordinate_type>(get<0, 0>(s1) + ra * dx1));
-            set<1>(result.intersections[0],
-                boost::numeric_cast<coordinate_type>(get<0, 1>(s1) + ra * dy1));
-        }
-        return result;
-    }
-
-    static inline return_type collinear_touch(coordinate_type const& x,
-                coordinate_type const& y, bool, char)
-    {
-        return_type result;
-        result.count = 1;
-        set<0>(result.intersections[0], x);
-        set<1>(result.intersections[0], y);
-        return result;
-    }
-
-    template <typename S>
-    static inline return_type collinear_inside(S const& s)
-    {
-        return_type result;
-        result.count = 2;
-        set<0>(result.intersections[0], get<0, 0>(s));
-        set<1>(result.intersections[0], get<0, 1>(s));
-        set<0>(result.intersections[1], get<1, 0>(s));
-        set<1>(result.intersections[1], get<1, 1>(s));
-        return result;
-    }
-
-    template <typename S>
-    static inline return_type collinear_interior_boundary_intersect(S const& s, bool, bool)
-    {
-        return collinear_inside(s);
-    }
-
-    static inline return_type collinear_a_in_b(S1 const& s, bool)
-    {
-        return collinear_inside(s);
-    }
-    static inline return_type collinear_b_in_a(S2 const& s, bool)
-    {
-        return collinear_inside(s);
-    }
-
-    static inline return_type collinear_overlaps(
-                coordinate_type const& x1, coordinate_type const& y1,
-                coordinate_type const& x2, coordinate_type const& y2, bool)
-    {
-        return_type result;
-        result.count = 2;
-        set<0>(result.intersections[0], x1);
-        set<1>(result.intersections[0], y1);
-        set<0>(result.intersections[1], x2);
-        set<1>(result.intersections[1], y2);
-        return result;
-    }
-
-    static inline return_type segment_equal(S1 const& s, bool)
-    {
-        return_type result;
-        result.count = 2;
-        set<0>(result.intersections[0], get<0, 0>(s));
-        set<1>(result.intersections[0], get<0, 1>(s));
-        set<0>(result.intersections[1], get<1, 0>(s));
-        set<1>(result.intersections[1], get<1, 1>(s));
-        return result;
-    }
-
-    static inline return_type collinear_disjoint()
-    {
-        return return_type();
-    }
-    static inline return_type parallel()
-    {
-        return return_type();
-    }
-    static inline return_type degenerate(S1 const& s, bool)
-    {
-        return_type result;
-        result.count = 1;
-        set<0>(result.intersections[0], get<0, 0>(s));
-        set<1>(result.intersections[0], get<0, 1>(s));
-        return result;
-    }
-};
-
-
-}} // namespace policies::relate
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP
diff --git a/include/builtin-ggl/ggl/policies/relate/tupled.hpp b/include/builtin-ggl/ggl/policies/relate/tupled.hpp
deleted file mode 100644
index 1ab3cbe..0000000
--- a/include/builtin-ggl/ggl/policies/relate/tupled.hpp
+++ /dev/null
@@ -1,154 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRY_POLICIES_RELATE_TUPLED_HPP
-#define GGL_GEOMETRY_POLICIES_RELATE_TUPLED_HPP
-
-#include <boost/tuple/tuple.hpp>
-#include <ggl/util/select_coordinate_type.hpp>
-
-namespace ggl
-{
-
-namespace policies { namespace relate {
-
-
-// "tupled" to return intersection results together.
-// Now with two, with some meta-programming and derivations it can also be three (or more)
-template <typename Policy1, typename Policy2>
-struct segments_tupled
-{
-    typedef boost::tuple
-        <
-            typename Policy1::return_type,
-            typename Policy2::return_type
-        > return_type;
-
-    // Take segments of first policy, they should be equal
-    typedef typename Policy1::segment_type1 segment_type1;
-    typedef typename Policy1::segment_type2 segment_type2;
-
-    typedef typename select_coordinate_type
-        <
-            segment_type1,
-            segment_type2
-        >::type coordinate_type;
-
-
-    static inline return_type rays_intersect(bool on_segment,
-                    double ra, double rb,
-                    coordinate_type const& dx1, coordinate_type const& dy1,
-                    coordinate_type const& dx2, coordinate_type const& dy2,
-                    coordinate_type const& wx, coordinate_type const& wy,
-                    segment_type1 const& s1, segment_type2 const& s2)
-    {
-        return boost::make_tuple
-            (
-                Policy1::rays_intersect(on_segment, ra, rb, dx1, dy1, dx2, dy2, wx, wy, s1, s2),
-                Policy2::rays_intersect(on_segment, ra, rb, dx1, dy1, dx2, dy2, wx, wy, s1, s2)
-            );
-    }
-
-    static inline return_type collinear_touch(coordinate_type const& x,
-                coordinate_type const& y, bool opposite, char how)
-    {
-        return boost::make_tuple
-            (
-                Policy1::collinear_touch(x, y, opposite, how),
-                Policy2::collinear_touch(x, y, opposite, how)
-            );
-    }
-
-    template <typename S>
-    static inline return_type collinear_interior_boundary_intersect(S const& segment,
-                bool a_within_b, bool opposite)
-    {
-        return boost::make_tuple
-            (
-                Policy1::collinear_interior_boundary_intersect(segment, a_within_b, opposite),
-                Policy2::collinear_interior_boundary_intersect(segment, a_within_b, opposite)
-            );
-    }
-
-    static inline return_type collinear_a_in_b(segment_type1 const& segment,
-                bool opposite)
-    {
-        return boost::make_tuple
-            (
-                Policy1::collinear_a_in_b(segment, opposite),
-                Policy2::collinear_a_in_b(segment, opposite)
-            );
-    }
-    static inline return_type collinear_b_in_a(segment_type2 const& segment,
-                    bool opposite)
-    {
-        return boost::make_tuple
-            (
-                Policy1::collinear_b_in_a(segment, opposite),
-                Policy2::collinear_b_in_a(segment, opposite)
-            );
-    }
-
-
-    static inline return_type collinear_overlaps(
-                    coordinate_type const& x1, coordinate_type const& y1,
-                    coordinate_type const& x2, coordinate_type const& y2,
-                    bool opposite)
-    {
-        return boost::make_tuple
-            (
-                Policy1::collinear_overlaps(x1, y1, x2, y2, opposite),
-                Policy2::collinear_overlaps(x1, y1, x2, y2, opposite)
-            );
-    }
-
-    static inline return_type segment_equal(segment_type1 const& s,
-                bool opposite)
-    {
-        return boost::make_tuple
-            (
-                Policy1::segment_equal(s, opposite),
-                Policy2::segment_equal(s, opposite)
-            );
-    }
-
-    static inline return_type degenerate(segment_type1 const& segment,
-                bool a_degenerate)
-    {
-        return boost::make_tuple
-            (
-                Policy1::degenerate(segment, a_degenerate),
-                Policy2::degenerate(segment, a_degenerate)
-            );
-    }
-
-    static inline return_type collinear_disjoint()
-    {
-        return boost::make_tuple
-            (
-                Policy1::collinear_disjoint(),
-                Policy2::collinear_disjoint()
-            );
-    }
-
-
-    static inline return_type parallel()
-    {
-        return boost::make_tuple
-            (
-                Policy1::parallel(),
-                Policy2::parallel()
-            );
-    }
-};
-
-}} // namespace policies::relate
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRY_POLICIES_RELATE_TUPLED_HPP
diff --git a/include/builtin-ggl/ggl/strategies/agnostic/agn_convex_hull.hpp b/include/builtin-ggl/ggl/strategies/agnostic/agn_convex_hull.hpp
deleted file mode 100644
index c349893..0000000
--- a/include/builtin-ggl/ggl/strategies/agnostic/agn_convex_hull.hpp
+++ /dev/null
@@ -1,278 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGIES_AGNOSTIC_CONVEX_HULL_HPP
-#define GGL_STRATEGIES_AGNOSTIC_CONVEX_HULL_HPP
-
-#ifdef _MSC_VER
-#pragma warning( disable : 4101 )
-#endif
-
-#include <cstddef>
-#include <algorithm>
-#include <vector>
-
-#include <boost/range/functions.hpp>
-
-#include <ggl/core/cs.hpp>
-#include <ggl/strategies/strategy_traits.hpp>
-
-// TODO: Temporary, comparing tests, this can be removed in the end
-#if defined(GGL_USE_SMOOTH_SORT)
-#  include "SmoothSort.hpp"
-#elif defined(GGL_USE_MERGE_SORT)
-#  include "MergeSort.hpp"
-#else
-#endif
-
-namespace ggl
-{
-
-namespace strategy { namespace convex_hull {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename Range, typename RangeIterator, typename Strategy>
-static inline void get_extremes(const Range& range,
-            RangeIterator& min_it, RangeIterator& max_it,
-            const Strategy& strategy)
-{
-    min_it = boost::begin(range);
-    max_it = boost::begin(range);
-
-    for (RangeIterator it = boost::begin(range) + 1; it != boost::end(range); ++it)
-    {
-        if (strategy.smaller(*it, *min_it))
-        {
-            min_it = it;
-        }
-
-        if (strategy.larger(*it, *max_it))
-        {
-            max_it = it;
-        }
-    }
-}
-
-template <typename R>
-static inline void sort(R& range)
-{
-    #if defined(USE_SMOOTH_SORT)
-    smoothsort::sort(boost::begin(range), boost::end(range));
-    #elif defined(USE_MERGE_SORT)
-    comparing::merge_sort<thread_count>(boost::begin(range), boost::end(range), std::less<P>());
-    #else
-    std::sort(boost::begin(range), boost::end(range));
-    #endif
-}
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-// Completely reworked version from source at:
-// http://www.ddj.com/architect/201806315
-// also available at http://marknelson.us/2007/08/22/convex
-template <typename P>
-class graham
-{
-private:
-
-    typedef typename cs_tag<P>::type cs_tag;
-    typedef typename std::vector<P> container;
-    typedef typename std::vector<P>::const_iterator iterator;
-    typedef typename std::vector<P>::const_reverse_iterator rev_iterator;
-
-    container m_lower_hull;
-    container m_upper_hull;
-    container m_copied_input;
-
-
-public:
-
-    // Default constructor, ranges can be added using "add_range" but note they'll be copied
-    inline graham()
-    {
-    }
-
-    // Constructor with a range
-    template <typename Range>
-    inline graham(const Range& range)
-    {
-        handle_range(range);
-    }
-
-
-    template <typename OutputIterator>
-    inline void get(OutputIterator out)
-    {
-        for (iterator it = m_upper_hull.begin(); it != m_upper_hull.end(); ++it, ++out)
-        {
-            *out = *it;
-        }
-
-        // STL Port does not accept iterating from rbegin+1 to rend
-        std::size_t size = m_lower_hull.size();
-        if (size > 0)
-        {
-            rev_iterator it = m_lower_hull.rbegin() + 1;
-            for (std::size_t i = 1; i < size; ++i, ++it, ++out)
-            {
-                *out = *it;
-            }
-        }
-    }
-
-
-    // Note /
-    // TODO:
-    // Consider if it is better to create an iterator over a multi, which is then used here,
-    // instead of copying the range
-    // It makes it slightly more complicated but avoids the copy, which is attractive because
-    // multi-polygons (where it is used for) can be large.
-    template <typename Range>
-    inline void add_range(const Range& range)
-    {
-        std::copy(boost::begin(range), boost::end(range), std::back_inserter(m_copied_input));
-    }
-
-    inline void handle_input()
-    {
-        handle_range(m_copied_input);
-    }
-
-
-private:
-
-    template <typename Range>
-    inline void handle_range(const Range& range)
-    {
-        typedef typename boost::range_const_iterator<Range>::type range_iterator;
-
-        // Polygons with three corners, or closed with 4 points, are always convex
-        if (boost::size(range) <= 3)
-        {
-            for (range_iterator it = boost::begin(range);
-                        it != boost::end(range);
-                        ++it)
-            {
-                m_upper_hull.push_back(*it);
-            }
-            return;
-        }
-
-        // Get min/max (in most cases left / right) points
-        range_iterator left_it, right_it;
-        typename strategy_compare<cs_tag, P, 0>::type comparing;
-        detail::get_extremes(range, left_it, right_it, comparing);
-
-        // Bounding left/right points
-        container lower_points, upper_points;
-
-        assign_range(range, left_it, right_it, lower_points, upper_points);
-
-        detail::sort(lower_points);
-        detail::sort(upper_points);
-
-        build_half_hull<1>(lower_points, m_lower_hull, *left_it, *right_it);
-        build_half_hull<-1>(upper_points, m_upper_hull, *left_it, *right_it);
-    }
-
-
-
-    template <typename RangeIterator, typename Range>
-    inline void assign_range(const Range& range,
-            const RangeIterator& left_it,
-            const RangeIterator& right_it,
-            container& lower_points,
-            container& upper_points)
-    {
-        typename strategy_side<cs_tag, P>::type side;
-
-        // Put points in one of the two output sequences
-        for (RangeIterator it = boost::begin(range);
-            it != boost::end(range);
-            ++it)
-        {
-            if (it != left_it && it != right_it)
-            {
-                int dir = side.side(*left_it, *right_it, *it);
-                if ( dir < 0 )
-                {
-                    upper_points.push_back(*it);
-                }
-                else
-                {
-                    lower_points.push_back(*it);
-                }
-            }
-        }
-    }
-
-
-    template <int Factor>
-    inline void build_half_hull(const container& input, container& output,
-            const P& left, const P& right)
-    {
-        output.push_back(left);
-        for(iterator it = input.begin(); it != input.end(); ++it)
-        {
-            add_to_hull<Factor>(*it, output);
-        }
-        add_to_hull<Factor>(right, output);
-    }
-
-    template <int Factor>
-    inline void add_to_hull(const P& p, container& output)
-    {
-        typename strategy_side<cs_tag, P>::type side;
-
-        output.push_back(p);
-        register std::size_t output_size = output.size();
-        while (output_size >= 3)
-        {
-            rev_iterator rit = output.rbegin();
-            const P& last = *rit++;
-            const P& last2 = *rit++;
-
-            if (Factor * side.side(*rit, last, last2) <= 0)
-            {
-                // Remove last two points from stack, and add last again
-                // This is much faster then erasing the one but last.
-                output.pop_back();
-                output.pop_back();
-                output.push_back(last);
-                output_size--;
-            }
-            else
-            {
-                return;
-            }
-        }
-    }
-
-
-};
-
-}} // namespace strategy::convex_hull
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-template <typename P>
-struct strategy_convex_hull<cartesian_tag, P>
-{
-    typedef strategy::convex_hull::graham<P> type;
-};
-#endif
-
-} // namespace ggl
-
-
-#endif // GGL_STRATEGY_AGNOSTIC_CONVEX_HULL_HPP
diff --git a/include/builtin-ggl/ggl/strategies/agnostic/agn_simplify.hpp b/include/builtin-ggl/ggl/strategies/agnostic/agn_simplify.hpp
deleted file mode 100644
index bf92fbf..0000000
--- a/include/builtin-ggl/ggl/strategies/agnostic/agn_simplify.hpp
+++ /dev/null
@@ -1,196 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGY_AGNOSTIC_SIMPLIFY_HPP
-#define GGL_STRATEGY_AGNOSTIC_SIMPLIFY_HPP
-
-#include <boost/range/functions.hpp>
-
-#include <ggl/core/cs.hpp>
-
-
-//#define GL_DEBUG_SIMPLIFY
-
-#ifdef GL_DEBUG_SIMPLIFY
-#include <ggl/extensions/gis/io/wkt/write_wkt.hpp>
-#include <ggl/extensions/gis/io/wkt/stream_wkt.hpp>
-#include <iostream>
-#endif
-
-
-namespace ggl
-{
-namespace strategy
-{
-    namespace simplify
-    {
-        #ifndef DOXYGEN_NO_DETAIL
-        namespace detail
-        {
-
-            /*!
-                \brief Small wrapper around a point, with an extra member "included"
-                \details
-                - We could implement a complete point as well but that is not necessary
-                - We could derive from ggl::point but we need the original later on, including extra members;
-                    besides that it is not necessary to copy points during the algorithm
-                \tparam the enclosed point type
-            */
-            template<typename P>
-            struct douglas_peucker_point
-            {
-                const P& p;
-                bool included;
-
-                inline douglas_peucker_point(const P& ap)
-                    : p(ap)
-                    , included(false)
-                {}
-
-                inline douglas_peucker_point<P> operator=(const douglas_peucker_point<P>& other)
-                {
-                    return douglas_peucker_point<P>(*this);
-                }
-            };
-        }
-        #endif // DOXYGEN_NO_DETAIL
-
-
-        /*!
-            \brief Implements the simplify algorithm.
-            \ingroup simplify
-            \details The douglas_peucker strategy simplifies a linestring, ring or vector of points
-            using the well-known Douglas-Peucker algorithm. For the algorithm, see for example:
-            \see http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm
-            \see http://www2.dcs.hull.ac.uk/CISRG/projects/Royal-Inst/demos/dp.html
-            \tparam R boost range
-            \tparam O_IT output iterator
-            \tparam PSDS point-segment distance strategy to be used
-            \note This strategy uses itself a point-segment-distance strategy which can be specified
-            \author Barend and Maarten, 1995/1996
-            \author Barend, revised for Generic Geometry Library, 2008
-        */
-        template<typename R, typename O_IT, typename PSDS>
-        class douglas_peucker
-        {
-            typedef typename point_type<R>::type P;
-            typedef detail::douglas_peucker_point<P> DP;
-            typedef typename std::vector<DP>::iterator DIT;
-
-            typedef typename PSDS::return_type RET;
-
-            inline void consider(DIT begin, DIT end, const RET& max_dist, int& n,
-                            const PSDS& ps_distance_strategy) const
-            {
-                size_t size = end - begin;
-                // size must be at least 3 here: we want to consider a candidate point between begin and end
-                if (size <= 2)
-                {
-#ifdef GL_DEBUG_SIMPLIFY
-                    if (begin != end)
-                    {
-                        std::cout << "ignore between " << begin->p << " and " << (end - 1)->p << " size=" << size << std::endl;
-                    }
-                    std::cout << "return because size=" << size << std::endl;
-#endif
-                    return;
-                }
-
-                DIT last = end - 1;
-
-#ifdef GL_DEBUG_SIMPLIFY
-                std::cout << "find between " << begin->p << " and " << last->p << " size=" << size << std::endl;
-#endif
-
-
-                // Find most distance point, compare to the current segment
-                ggl::segment<const P> s(begin->p, last->p);
-                RET md(-1.0); // any value < 0
-                DIT candidate;
-                for(DIT it = begin + 1; it != last; it++)
-                {
-                    RET dist = ps_distance_strategy(it->p, s);
-
-#ifdef GL_DEBUG_SIMPLIFY
-                    std::cout << "consider " << it->p << " at " << dist.value() << (dist.value() > max_dist.value() ? " maybe" : " no") << std::endl;
-#endif
-                    if (dist > md)
-                    {
-                        md = dist;
-                        candidate = it;
-                    }
-                }
-
-                // If a point is found, set the include flag and handle segments in between recursively
-                if (md > max_dist)
-                {
-#ifdef GL_DEBUG_SIMPLIFY
-                    std::cout << "use " << candidate->p << std::endl;
-#endif
-
-                    candidate->included = true;
-                    n++;
-
-                    consider(begin, candidate + 1, max_dist, n, ps_distance_strategy);
-                    consider(candidate, end, max_dist, n, ps_distance_strategy);
-                }
-            }
-
-
-        public :
-
-            typedef PSDS distance_strategy_type;
-
-            /*!
-                \brief Call simplification on an iterator pair
-            */
-            inline void simplify(const R& range, O_IT out, double max_distance) const
-            {
-                PSDS strategy;
-                // Init the output, a vector of references to all points
-
-                // Note Geometry Algorithms suggest here
-                // http://geometryalgorithms.com/Archive/algorithm_0205/algorithm_0205.htm
-                // to "STAGE 1: Vertex Reduction within max_distance of prior vertex cluster"
-                // However, that is not correct: a vertex within the specified distance might be
-                // excluded here, but might be a better candidate for final inclusion than the point before.
-
-                std::vector<DP> ref_candidates(boost::begin(range), boost::end(range));
-
-                // Include first and last point of line, they are always part of the line
-                int n = 2;
-                ref_candidates.front().included = true;
-                ref_candidates.back().included = true;
-
-                // Get points, recursively, including them if they are further away than the specified distance
-                typedef typename PSDS::return_type RET;
-
-                consider(boost::begin(ref_candidates), boost::end(ref_candidates),
-                    make_distance_result<RET>(max_distance), n, strategy);
-
-                // Copy included elements to the output  (might be changed using copy_if)
-                for(typename std::vector<DP>::const_iterator it = boost::begin(ref_candidates);
-                    it != boost::end(ref_candidates); it++)
-                {
-                    if (it->included)
-                    {
-                        *out = it->p;
-                        out++;
-                    }
-                }
-            }
-
-        };
-
-    }
-}
-
-
-} // namespace ggl
-
-#endif // GGL_STRATEGY_AGNOSTIC_SIMPLIFY_HPP
diff --git a/include/builtin-ggl/ggl/strategies/agnostic/agn_within.hpp b/include/builtin-ggl/ggl/strategies/agnostic/agn_within.hpp
deleted file mode 100644
index 55e57cd..0000000
--- a/include/builtin-ggl/ggl/strategies/agnostic/agn_within.hpp
+++ /dev/null
@@ -1,162 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGY_AGNOSTIC_WITHIN_HPP
-#define GGL_STRATEGY_AGNOSTIC_WITHIN_HPP
-
-
-
-#include <ggl/geometries/segment.hpp>
-
-#include <ggl/strategies/strategy_traits.hpp>
-
-
-
-namespace ggl
-{
-namespace strategy
-{
-    namespace within
-    {
-
-        /*!
-            \brief Within detection using winding rule
-            \tparam P point type of point to examine
-            \tparam PS point type of segments, defaults to P
-            \author Barend Gehrels
-            \note The implementation is inspired by terralib http://www.terralib.org (LGPL)
-            \note but totally revised afterwards, especially for cases on segments
-            \note More efficient (less comparisons and no divison) than the cross count algorithm
-            \note Only dependant on "side", -> agnostic, suitable for latlong
-         */
-        template<typename P, typename PS = P>
-        class winding
-        {
-            private :
-                typedef typename coordinate_type<P>::type PT;
-                typedef typename coordinate_type<PS>::type ST;
-
-                /*! subclass to keep state */
-                struct windings
-                {
-                    int count;
-                    bool touches;
-                    const P& p;
-                    inline explicit windings(const P& ap)
-                        : count(0)
-                        , touches(false)
-                        , p(ap)
-                    {}
-                    inline bool within() const
-                    {
-                        return ! touches && count != 0;
-                    }
-                };
-
-                template <size_t D>
-                static inline int check_touch(const segment<const PS>& s, windings& state)
-                {
-                    const PT& p = get<D>(state.p);
-                    const ST& s1 = get<0, D>(s);
-                    const ST& s2 = get<1, D>(s);
-                    if ((s1 <= p && s2 >= p) || (s2 <= p && s1 >= p))
-                    {
-                        state.touches = true;
-                    }
-                    return 0;
-                }
-
-
-                template <size_t D>
-                static inline int check_segment(const segment<const PS>& s, windings& state)
-                {
-                    const PT& p = get<D>(state.p);
-                    const ST& s1 = get<0, D>(s);
-                    const ST& s2 = get<1, D>(s);
-
-                    // Check if one of segment endpoints is at same level of point
-                    bool eq1 = math::equals(s1, p);
-                    bool eq2 = math::equals(s2, p);
-
-                    if (eq1 && eq2)
-                    {
-                        // Both equal p -> segment is horizontal (or vertical for D=0)
-                        // The only thing which has to be done is check if point is ON segment
-                        return check_touch<1 - D>(s, state);
-                    }
-
-                    return
-                          eq1 ? (s2 > p ?  1 : -1)  // P on level s1, UP/DOWN depending on s2
-                        : eq2 ? (s1 > p ? -1 :  1)  // idem
-                        : s1 < p && s2 > p ?  2     // P between s1 -> s2 --> UP
-                        : s2 < p && s1 > p ? -2     // P between s2 -> s1 --> DOWN
-                        : 0;
-                }
-
-
-            public :
-
-                typedef windings state_type;
-
-                inline bool operator()(const segment<const PS>& s, state_type& state) const
-                {
-                    int cnt = check_segment<1>(s, state);
-                    if (cnt != 0)
-                    {
-                        typedef typename strategy_side<typename cs_tag<P>::type, P, PS>::type SS;
-
-                        typename select_coordinate_type<P, PS>::type side = SS::side(s, state.p);
-
-                        if (math::equals(side, 0))
-                        {
-                            // Point is lying on segment
-                            state.touches = true;
-                            state.count = 0;
-                            return false;
-                        }
-
-                        // Side is NEG for right, POS for left.
-                        // CNT is -2 for down, 2 for up (or -1/1)
-                        // Side positive thus means UP and LEFTSIDE or DOWN and RIGHTSIDE
-                        // See accompagnying figure (TODO)
-                        int sd = (side > 0 ? 1 : -1) * cnt;
-                        if (sd > 0)
-                        {
-                            state.count += cnt;
-                        }
-
-                    }
-                    return ! state.touches;
-                }
-
-        };
-
-    } // namespace within
-
-} // namespace strategy
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-template <typename P, typename PS>
-struct strategy_within<cartesian_tag, cartesian_tag, P, PS>
-{
-    typedef strategy::within::winding<P, PS> type;
-};
-
-template <typename P, typename PS>
-struct strategy_within<geographic_tag, geographic_tag, P, PS>
-{
-    typedef strategy::within::winding<P, PS> type;
-};
-#endif
-
-
-} // namespace ggl
-
-
-#endif // GGL_STRATEGY_AGNOSTIC_WITHIN_HPP
diff --git a/include/builtin-ggl/ggl/strategies/cartesian/cart_area.hpp b/include/builtin-ggl/ggl/strategies/cartesian/cart_area.hpp
deleted file mode 100644
index 9103581..0000000
--- a/include/builtin-ggl/ggl/strategies/cartesian/cart_area.hpp
+++ /dev/null
@@ -1,102 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGY_CARTESIAN_AREA_HPP
-#define GGL_STRATEGY_CARTESIAN_AREA_HPP
-
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits.hpp>
-
-#include <ggl/geometries/point_xy.hpp>
-#include <ggl/geometries/segment.hpp>
-
-
-namespace ggl
-{
-namespace strategy
-{
-    namespace area
-    {
-
-        /*!
-            \brief Strategy functor for area calculation on point_xy points
-            \details Calculates area using well-known triangulation algorithm
-            \tparam PS point type of segments
-            \par Concepts for PS:
-            - specialized point_traits class
-        */
-        template<typename PS, typename CalculationType = void>
-        class by_triangles
-        {
-            public :
-                // If user specified a calculation type, use that type,
-                //   whatever it is and whatever the point-type is.
-                // Else, use the pointtype, but at least double
-                typedef typename
-                    boost::mpl::if_c
-                    <
-                        boost::is_void<CalculationType>::type::value,
-                        typename select_most_precise
-                        <
-                            typename coordinate_type<PS>::type,
-                            double
-                        >::type,
-                        CalculationType
-                    >::type return_type;
-
-
-            private :
-
-                struct summation
-                {
-                    return_type sum;
-
-                    inline summation() : sum(return_type())
-                    {
-                        // Currently only 2D areas are supported
-                        assert_dimension<PS, 2>();
-                    }
-                    inline return_type area() const
-                    {
-                        return_type result = sum;
-                        result *= 0.5;
-                        return result;
-                    }
-                };
-
-            public :
-                typedef summation state_type;
-
-                inline bool operator()(segment<const PS> const& s,
-                            state_type& state) const
-                {
-                    // SUM += x2 * y1 - x1 * y2;
-                    state.sum += get<1, 0>(s) * get<0, 1>(s)
-                                - get<0, 0>(s) * get<1, 1>(s);
-                    return true;
-                }
-
-        };
-
-    } // namespace area
-} // namespace strategy
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-template <typename P>
-struct strategy_area<cartesian_tag, P>
-{
-    typedef strategy::area::by_triangles<P> type;
-};
-#endif
-
-} // namespace ggl
-
-
-#endif // GGL_STRATEGY_CARTESIAN_AREA_HPP
diff --git a/include/builtin-ggl/ggl/strategies/cartesian/cart_centroid.hpp b/include/builtin-ggl/ggl/strategies/cartesian/cart_centroid.hpp
deleted file mode 100644
index 4452e56..0000000
--- a/include/builtin-ggl/ggl/strategies/cartesian/cart_centroid.hpp
+++ /dev/null
@@ -1,292 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGY_CARTESIAN_CENTROID_HPP
-#define GGL_STRATEGY_CARTESIAN_CENTROID_HPP
-
-
-#include <boost/mpl/if.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/type_traits.hpp>
-
-#include <ggl/geometries/point_xy.hpp>
-#include <ggl/geometries/segment.hpp>
-
-#include <ggl/algorithms/assign.hpp>
-
-#include <ggl/util/select_coordinate_type.hpp>
-#include <ggl/util/copy.hpp>
-
-
-namespace ggl
-{
-
-namespace strategy
-{
-    namespace centroid
-    {
-        /*!
-            \brief Centroid calculation
-            \details Geolib original version,
-            \par Template parameters and concepts: see bashein_detmer
-            \author Barend and Maarten, 1995/1996
-            \author Revised for templatized library, Barend Gehrels, 2007
-            \note The results are slightly different from Bashein/Detmer, so probably slightly wrong.
-        */
-
-        template<typename PC, typename PS = PC>
-        class geolib1995
-        {
-            private  :
-                typedef typename select_most_precise
-                    <
-                        typename select_coordinate_type<PC, PS>::type,
-                        double
-                    >::type T;
-
-                /*! subclass to keep state */
-                struct sums
-                {
-                     PC sum_ms, sum_m;
-
-                    sums()
-                    {
-                        assign_point(sum_m, T());
-                        assign_point(sum_ms, T());
-                    }
-                    void centroid(PC& point)
-                    {
-                        point = sum_ms;
-
-                        if (get<0>(sum_m) != 0 && get<1>(sum_m) != 0)
-                        {
-                            multiply_value(point, 0.5);
-                            divide_point(point, sum_m);
-                        }
-                        else
-                        {
-                            // exception?
-                        }
-                    }
-                };
-
-            public :
-                typedef sums state_type;
-                inline bool operator()(const segment<const PS>& s, state_type& state) const
-                {
-                    /* Algorithm:
-                    For each segment:
-                    begin
-                        dx = x2 - x1;
-                        dy = y2 - y1;
-                        sx = x2 + x1;
-                        sy = y2 + y1;
-                        mx = dx * sy;
-                        my = sx * dy;
-
-                        sum_mx += mx;
-                        sum_my += my;
-                        sum_msx += mx * sx;
-                        sum_msy += my * sy;
-                    end;
-                    return POINT(0.5 * sum_msx / sum_mx, 0.5 * sum_msy / sum_my);
-                    */
-
-                    PS diff = s.second, sum = s.second;
-                    subtract_point(diff, s.first);
-                    add_point(sum, s.first);
-
-                    // We might create an arithmatic operation for this.
-                    PS m;
-                    get<0>(m) = get<0>(diff) * get<1>(sum);
-                    get<1>(m) = get<0>(sum) * get<1>(diff);
-
-                    add_point(state.sum_m, m);
-                    multiply_point(m, sum);
-                    add_point(state.sum_ms, m);
-
-                    return true;
-                }
-
-        };
-
-
-        /*!
-            \brief Centroid calculation using algorith Bashein / Detmer
-            \details Calculates centroid using triangulation method published by Bashein / Detmer
-            \tparam PC point type of centroid to calculate
-            \tparam PS point type of segments, defaults to PC
-            \par Concepts for PC and PS:
-            - specialized point_traits class
-            \author Adapted from  "Centroid of a Polygon" by Gerard Bashein and Paul R. Detmer<em>,
-            in "Graphics Gems IV", Academic Press, 1994</em>
-            \par Research notes
-            The algorithm gives the same results as Oracle and PostGIS but differs from MySQL
-            (tried 5.0.21 / 5.0.45 / 5.0.51a / 5.1.23).
-
-            Without holes:
-            - this:       POINT(4.06923363095238 1.65055803571429)
-            - geolib:     POINT(4.07254 1.66819)
-            - MySQL:      POINT(3.6636363636364  1.6272727272727)'
-            - PostGIS:    POINT(4.06923363095238 1.65055803571429)
-            - Oracle:           4.06923363095238 1.65055803571429
-            - SQL Server: POINT(4.06923362245959 1.65055804168294)
-
-            Statements:
-            - \b MySQL/PostGIS: select AsText(Centroid(GeomFromText('POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2
-                            ,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))')))
-            - \b Oracle: select sdo_geom.sdo_centroid(sdo_geometry(2003, null, null,
-                    sdo_elem_info_array(1, 1003, 1), sdo_ordinate_array(2,1.3,2.4,1.7,2.8,1.8
-                    ,3.4,1.2,3.7,1.6,3.4,2,4.1,3,5.3,2.6,5.4,1.2,4.9,0.8,2.9,0.7,2,1.3))
-                    , mdsys.sdo_dim_array(mdsys.sdo_dim_element('x',0,10,.00000005)
-                    ,mdsys.sdo_dim_element('y',0,10,.00000005)))
-                    from dual
-            - \b SQL Server 2008: select geometry::STGeomFromText('POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2
-                            ,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))',0)
-                            .STCentroid()
-                            .STAsText()
-
-            With holes:
-            - this:       POINT(4.04663 1.6349)
-            - geolib:     POINT(4.04675 1.65735)
-            - MySQL:      POINT(3.6090580503834 1.607573932092)
-            - PostGIS:    POINT(4.0466265060241 1.63489959839357)
-            - Oracle:           4.0466265060241 1.63489959839357
-            - SQL Server: POINT(4.0466264962959677 1.6348996057331333)
-
-            Statements:
-            - \b MySQL/PostGIS: select AsText(Centroid(GeomFromText('POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2
-                    ,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)
-                    ,(4 2,4.2 1.4,4.8 1.9,4.4 2.2,4 2))')));
-            - \b Oracle: select sdo_geom.sdo_centroid(sdo_geometry(2003, null, null
-                    , sdo_elem_info_array(1, 1003, 1, 25, 2003, 1)
-                    , sdo_ordinate_array(2,1.3,2.4,1.7,2.8,1.8,3.4,1.2,3.7,1.6,3.4,2,4.1,3,5.3
-                    ,2.6,5.4,1.2,4.9,0.8,2.9,0.7,2,1.3,4,2, 4.2,1.4, 4.8,1.9, 4.4,2.2, 4,2))
-                    , mdsys.sdo_dim_array(mdsys.sdo_dim_element('x',0,10,.00000005)
-                    ,mdsys.sdo_dim_element('y',0,10,.00000005)))
-                    from dual
-         */
-        template
-        <
-            typename CentroidPointType,
-            typename SegmentPointType = CentroidPointType,
-            typename CalculationType = void
-        >
-        class bashein_detmer
-        {
-            private :
-                // If user specified a calculation type, use that type,
-                //   whatever it is and whatever the point-type(s) are.
-                // Else, use the most appropriate coordinate type
-                //    of the two points, but at least double
-                typedef typename
-                    boost::mpl::if_c
-                    <
-                        boost::is_void<CalculationType>::type::value,
-                        typename select_most_precise
-                        <
-                            typename select_coordinate_type
-                                <
-                                    CentroidPointType,
-                                    SegmentPointType
-                                >::type,
-                            double
-                        >::type,
-                        CalculationType
-                    >::type calc_type;
-
-                /*! subclass to keep state */
-                struct sums
-                {
-                    calc_type sum_a2;
-                    calc_type sum_x;
-                    calc_type sum_y;
-                    inline sums()
-                        : sum_a2(calc_type())
-                        , sum_x(calc_type())
-                        , sum_y(calc_type())
-                    {
-                        typedef calc_type ct;
-                        //std::cout << "-> calctype: " << typeid(ct).name()
-                        //    << " size: " << sizeof(ct)
-                        //    << " init: " << sum_a2
-                        //    << std::endl;
-                    }
-
-                    inline void centroid(CentroidPointType& point)
-                    {
-                        if (sum_a2 != 0)
-                        {
-                            calc_type const v3 = 3;
-                            calc_type const a3 = v3 * sum_a2;
-
-                            typedef typename ggl::coordinate_type
-                                <
-                                    CentroidPointType
-                                >::type coordinate_type;
-
-                            set<0>(point,
-                                boost::numeric_cast<coordinate_type>(sum_x / a3));
-                            set<1>(point,
-                                boost::numeric_cast<coordinate_type>(sum_y / a3));
-                        }
-                        else
-                        {
-                            // exception?
-                        }
-                    }
-
-                };
-
-            public :
-                typedef sums state_type;
-
-                inline bool operator()(segment<const SegmentPointType> const& s, state_type& state) const
-                {
-                    /* Algorithm:
-                    For each segment:
-                    begin
-                        ai = x1 * y2 - x2 * y1;
-                        sum_a2 += ai;
-                        sum_x += ai * (x1 + x2);
-                        sum_y += ai * (y1 + y2);
-                    end
-                    return POINT(sum_x / (3 * sum_a2), sum_y / (3 * sum_a2) )
-                    */
-
-                    // Get coordinates and promote them to calc_type
-                    calc_type const x1 = boost::numeric_cast<calc_type>(get<0, 0>(s));
-                    calc_type const y1 = boost::numeric_cast<calc_type>(get<0, 1>(s));
-                    calc_type const x2 = boost::numeric_cast<calc_type>(get<1, 0>(s));
-                    calc_type const y2 = boost::numeric_cast<calc_type>(get<1, 1>(s));
-                    calc_type const ai = x1 * y2 - x2 * y1;
-                    state.sum_a2 += ai;
-                    state.sum_x += ai * (x1 + x2);
-                    state.sum_y += ai * (y1 + y2);
-
-                    return true;
-                }
-
-        };
-    } // namespace centroid
-
-} // namespace strategy
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-template <typename P, typename PS>
-struct strategy_centroid<cartesian_tag, P, PS>
-{
-    typedef strategy::centroid::bashein_detmer<P, PS> type;
-};
-#endif
-
-} // namespace ggl
-
-
-#endif // GGL_STRATEGY_CARTESIAN_CENTROID_HPP
diff --git a/include/builtin-ggl/ggl/strategies/cartesian/cart_compare.hpp b/include/builtin-ggl/ggl/strategies/cartesian/cart_compare.hpp
deleted file mode 100644
index 9911c89..0000000
--- a/include/builtin-ggl/ggl/strategies/cartesian/cart_compare.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGY_CARTESIAN_COMPARE_HPP
-#define GGL_STRATEGY_CARTESIAN_COMPARE_HPP
-
-
-#include <ggl/core/cs.hpp>
-#include <ggl/core/access.hpp>
-
-
-#include <ggl/strategies/strategy_traits.hpp>
-
-
-namespace ggl
-{
-namespace strategy
-{
-    namespace compare
-    {
-
-
-        /*!
-            \brief Compare (in one direction) strategy for cartesian coordinates
-            \ingroup util
-            \tparam P point-type
-            \tparam D dimension
-        */
-        template <typename P, size_t D>
-        struct euclidian
-        {
-            static inline bool smaller(const P& p1, const P& p2)
-            {
-                return get<D>(p1) < get<D>(p2);
-            }
-
-            static inline bool larger(const P& p1, const P& p2)
-            {
-                return get<D>(p1) > get<D>(p2);
-            }
-
-        };
-    } // namespace compare
-} // namespace strategy
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-template <typename P, size_t D>
-struct strategy_compare<cartesian_tag, P, D>
-{
-    typedef strategy::compare::euclidian<P, D> type;
-};
-
-#endif
-
-
-} // namespace ggl
-
-
-#endif // GGL_STRATEGY_CARTESIAN_COMPARE_HPP
diff --git a/include/builtin-ggl/ggl/strategies/cartesian/cart_distance.hpp b/include/builtin-ggl/ggl/strategies/cartesian/cart_distance.hpp
deleted file mode 100644
index 19b4005..0000000
--- a/include/builtin-ggl/ggl/strategies/cartesian/cart_distance.hpp
+++ /dev/null
@@ -1,246 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGY_CARTESIAN_DISTANCE_HPP
-#define GGL_STRATEGY_CARTESIAN_DISTANCE_HPP
-
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-#include <ggl/core/access.hpp>
-#include <ggl/core/point_type.hpp>
-
-#include <ggl/arithmetic/arithmetic.hpp>
-#include <ggl/arithmetic/dot_product.hpp>
-
-#include <ggl/strategies/strategy_traits.hpp>
-#include <ggl/strategies/distance_result.hpp>
-
-#include <ggl/util/select_coordinate_type.hpp>
-#include <ggl/util/copy.hpp>
-
-
-// Helper geometry
-#include <ggl/geometries/segment.hpp>
-
-namespace ggl {
-
-namespace strategy { namespace distance {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename P1, typename P2, size_t I, typename T>
-struct compute_pythagoras
-{
-    static inline T apply(P1 const& p1, P2 const& p2)
-    {
-        T const c1 = boost::numeric_cast<T>(get<I-1>(p2));
-        T const c2 = boost::numeric_cast<T>(get<I-1>(p1));
-        T const d = c1 - c2;
-        return d * d + compute_pythagoras<P1, P2, I-1, T>::apply(p1, p2);
-    }
-};
-
-template <typename P1, typename P2, typename T>
-struct compute_pythagoras<P1, P2, 0, T>
-{
-    static inline T apply(P1 const&, P2 const&)
-    {
-        return boost::numeric_cast<T>(0);
-    }
-};
-
-}
-#endif
-
-/*!
-    \brief Strategy for distance point to point: pythagoras
-    \ingroup distance
-    \tparam P1 first point type
-    \tparam P2 optional, second point type, defaults to first point type
-    \par Concepts for P1 and P2:
-    - specialized point_traits class
-*/
-template
-<
-    typename P1,
-    typename P2 = P1,
-    typename CalculationType = void
->
-struct pythagoras
-{
-    typedef typename
-        boost::mpl::if_c
-        <
-            boost::is_void<CalculationType>::type::value,
-            typename select_coordinate_type
-                <
-                    P1,
-                    P2
-                >::type,
-            CalculationType
-        >::type calculation_type;
-
-    typedef cartesian_distance<calculation_type> return_type;
-
-
-    inline return_type operator()(P1 const& p1, P2 const& p2) const
-    {
-
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<P1>) );
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<P2>) );
-
-        // Calculate distance using Pythagoras
-        // (Leave comment above for Doxygen)
-
-        assert_dimension_equal<P1, P2>();
-
-        return return_type(detail::compute_pythagoras
-            <
-                P1, P2,
-                dimension<P1>::value,
-                calculation_type
-            >::apply(p1, p2));
-    }
-};
-
-
-/*!
-    \brief Strategy for distance point to segment
-    \ingroup distance
-    \details Calculates distance using projected-point method, and (optionally) Pythagoras
-    \author Adapted from: http://geometryalgorithms.com/Archive/algorithm_0102/algorithm_0102.htm
-    \tparam P point type
-    \tparam SEG segment type
-    \tparam S strategy, optional, defaults to pythagoras
-    \par Concepts for S:
-    - cartesian_distance operator(P,P)
-*/
-template
-<
-    typename P,
-    typename Segment,
-    typename Strategy = pythagoras<P, typename point_type<Segment>::type>
->
-struct xy_point_segment
-{
-    typedef typename select_coordinate_type<P, Segment>::type coordinate_type;
-    typedef cartesian_distance<coordinate_type> return_type;
-    typedef Strategy distance_strategy_type; // OBSOLETE!
-    typedef Strategy point_strategy_type;
-
-
-    inline return_type operator()(P const& p, Segment const& s) const
-    {
-        assert_dimension_equal<P, Segment>();
-
-        /* Algorithm
-        POINT v(x2 - x1, y2 - y1);
-        POINT w(px - x1, py - y1);
-        c1 = w . v
-        c2 = v . v
-        b = c1 / c2
-        RETURN POINT(x1 + b * vx, y1 + b * vy);
-        */
-
-        typedef typename boost::remove_const
-        <
-            typename point_type<Segment>::type
-        >::type segment_point_type;
-
-        segment_point_type v, w;
-
-        // TODO
-        // ASSUMPTION: segment
-        // SOLVE THIS USING OTHER FUNCTIONS using get<,>
-        copy_coordinates(s.second, v);
-        copy_coordinates(p, w);
-        subtract_point(v, s.first);
-        subtract_point(w, s.first);
-
-        Strategy strategy;
-
-        coordinate_type c1 = dot_product(w, v);
-        if (c1 <= 0)
-        {
-            return strategy(p, s.first);
-        }
-        coordinate_type c2 = dot_product(v, v);
-        if (c2 <= c1)
-        {
-            return strategy(p, s.second);
-        }
-
-        // Even in case of char's, we have to turn to a point<double/float>
-        // because of the division.
-        coordinate_type b = c1 / c2;
-
-        // Note that distances with integer coordinates do NOT work because
-        // - the project point is integer
-        // - if we solve that, the used distance_strategy cannot handle double points
-        segment_point_type projected;
-        copy_coordinates(s.first, projected);
-        multiply_value(v, b);
-        add_point(projected, v);
-
-        return strategy(p, projected);
-
-    }
-};
-
-}} // namespace strategy::distance
-
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-template <typename P1, typename P2>
-struct strategy_distance<cartesian_tag, cartesian_tag, P1, P2>
-{
-    typedef strategy::distance::pythagoras<P1, P2> type;
-};
-
-template <typename Point, typename Segment>
-struct strategy_distance_segment<cartesian_tag, cartesian_tag, Point, Segment>
-{
-    typedef typename point_type<Segment>::type segment_point_type;
-
-    typedef strategy::distance::xy_point_segment
-    <
-        Point,
-        Segment,
-        typename strategy_distance
-        <
-            cartesian_tag, cartesian_tag, Point, segment_point_type
-        >::type
-    > type;
-};
-#endif
-
-
-template <typename P1, typename P2>
-struct strategy_tag<strategy::distance::pythagoras<P1, P2> >
-{
-    typedef strategy_tag_distance_point_point type;
-};
-
-template <typename Point, typename Segment, typename PPStrategy>
-struct strategy_tag<strategy::distance::xy_point_segment<Point, Segment, PPStrategy> >
-{
-    typedef strategy_tag_distance_point_segment type;
-};
-
-
-
-} // namespace ggl
-
-
-#endif // GGL_STRATEGY_CARTESIAN_DISTANCE_HPP
diff --git a/include/builtin-ggl/ggl/strategies/cartesian/cart_envelope.hpp b/include/builtin-ggl/ggl/strategies/cartesian/cart_envelope.hpp
deleted file mode 100644
index e992afe..0000000
--- a/include/builtin-ggl/ggl/strategies/cartesian/cart_envelope.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGY_CARTESIAN_ENVELOPE_HPP
-#define GGL_STRATEGY_CARTESIAN_ENVELOPE_HPP
-
-
-
-#include <ggl/geometries/point_xy.hpp>
-#include <ggl/geometries/segment.hpp>
-
-#include <ggl/algorithms/combine.hpp>
-
-
-namespace ggl
-{
-namespace strategy
-{
-    namespace envelope
-    {
-        // envelope calculation strategy for xy-points
-        template <typename P, typename B>
-        struct combine_xy
-        {
-            struct state
-            {
-                B& m_box;
-                state(B& box) : m_box(box)
-                {
-                    assign_inverse(m_box);
-                }
-            };
-
-            typedef state state_type;
-
-            void operator()(const P& p, state_type& s) const
-            {
-                ggl::combine(s.m_box, p);
-            }
-        };
-    } // namespace envelope
-
-} // namespace strategy
-
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-template <typename P, typename B>
-struct strategy_envelope<cartesian_tag, cartesian_tag, P, B>
-{
-    typedef strategy::envelope::combine_xy<P, B> type;
-};
-
-
-#endif
-
-
-} // namespace ggl
-
-
-#endif // GGL_STRATEGY_CARTESIAN_ENVELOPE_HPP
diff --git a/include/builtin-ggl/ggl/strategies/cartesian/cart_intersect.hpp b/include/builtin-ggl/ggl/strategies/cartesian/cart_intersect.hpp
deleted file mode 100644
index 1f8c57a..0000000
--- a/include/builtin-ggl/ggl/strategies/cartesian/cart_intersect.hpp
+++ /dev/null
@@ -1,352 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGY_CARTESIAN_INTERSECTION_HPP
-#define GGL_STRATEGY_CARTESIAN_INTERSECTION_HPP
-
-#include <algorithm>
-
-#include <ggl/core/exception.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/core/concepts/segment_concept.hpp>
-
-#include <ggl/util/select_coordinate_type.hpp>
-
-
-namespace ggl
-{
-
-
-class relate_cartesian_segments_exception : public ggl::exception
-{
-public:
-
-    relate_cartesian_segments_exception()  {}
-
-    virtual char const* what() const throw()
-    {
-        return "GGL: Internal error, unexpected case in relate_segment";
-    }
-};
-
-
-namespace strategy { namespace intersection {
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename S, size_t D>
-struct segment_interval
-{
-    template <typename T>
-    static inline void arrange(S const& s, T& s_1, T& s_2, bool& swapped)
-    {
-        s_1 = get<0, D>(s);
-        s_2 = get<1, D>(s);
-        if (s_1 > s_2)
-        {
-            std::swap(s_1, s_2);
-            swapped = true;
-        }
-    }
-};
-
-}
-#endif
-
-
-/*!
-    \see http://mathworld.wolfram.com/Line-LineIntersection.html
- */
-template <typename F>
-struct relate_cartesian_segments
-{
-    typedef typename F::return_type RETURN_TYPE;
-    typedef typename F::segment_type1 S1;
-    typedef typename F::segment_type2 S2;
-
-    typedef typename point_type<S1>::type P;
-    BOOST_CONCEPT_ASSERT( (concept::Point<P>) );
-
-    BOOST_CONCEPT_ASSERT( (concept::ConstSegment<S1>) );
-    BOOST_CONCEPT_ASSERT( (concept::ConstSegment<S2>) );
-    typedef typename select_coordinate_type<S1, S2>::type T;
-
-    /// Relate segments a and b
-    static inline RETURN_TYPE relate(S1 const& a, S2 const& b)
-    {
-        T dx_a = get<1, 0>(a) - get<0, 0>(a); // distance in x-dir
-        T dx_b = get<1, 0>(b) - get<0, 0>(b);
-        T dy_a = get<1, 1>(a) - get<0, 1>(a); // distance in y-dir
-        T dy_b = get<1, 1>(b) - get<0, 1>(b);
-        return relate(a, b, dx_a, dy_a, dx_b, dy_b);
-    }
-
-
-    /// Relate segments a and b using precalculated differences. This can save two or four substractions in many cases
-    static inline RETURN_TYPE relate(S1 const& a, S2 const& b,
-            T const& dx_a, T const& dy_a, T const& dx_b, T const& dy_b)
-    {
-        T wx = get<0, 0>(a) - get<0, 0>(b);
-        T wy = get<0, 1>(a) - get<0, 1>(b);
-
-        // Calculate determinants - Cramers rule
-        T d = (dy_b * dx_a) - (dx_b * dy_a);
-        T da = (dx_b * wy) - (dy_b * wx);
-        T db = (dx_a * wy) - (dy_a * wx);
-
-        if(! math::equals(d, 0))
-        {
-            // Determinant d is nonzero. Rays do intersect. This is the normal case.
-            // ra/rb: ratio 0-1 where intersection divides A/B
-
-            // Maybe:
-            // The ra/rb calculation can probably also be avoided, only necessary to calculate the points themselves
-            // On segment: 0 <= r <= 1
-            //      where: r==0 and r==1 are special cases
-            // --> r=0 if and only if da==0 (d != 0) [this is also checked below]
-            // --> r=1 da==d
-            // --> da/d > 0 if da==positive and d==positive OR da==neg and d==neg
-            // --> da/d < 1 if (both positive) da < d or (negative) da > d, e.g. -2 > -4
-            // --> it would save a division but makes it complexer
-
-            double ra = double(da) / double(d);
-            double rb = double(db) / double(d);
-
-            return F::rays_intersect(ra >= 0 && ra <= 1 && rb >= 0 && rb <= 1, ra, rb,
-                dx_a, dy_a, dx_b, dy_b, wx, wy, a, b);
-        }
-
-        if(math::equals(da, 0) && math::equals(db, 0))
-        {
-            // Both da & db are zero. Segments are collinear. We'll find out how.
-            return relate_collinear(a, b, dx_a, dy_a, dx_b, dy_b);
-        }
-
-        // Segments are parallel (might still be opposite but this is probably never interesting)
-        return F::parallel();
-    }
-
-private :
-
-
-    /// Relate segments known collinear
-    static inline RETURN_TYPE relate_collinear(S1 const& a, S2 const& b,
-            T const& dx_a, T const& dy_a,
-            T const& dx_b, T const& dy_b)
-    {
-        // All ca. 200 lines are about collinear rays
-        // The intersections, if any, are always boundary points of the segments. No need to calculate anything.
-        // However we want to find out HOW they intersect, there are many cases.
-        // Most sources only provide the intersection (above) or that there is a collinearity (but not the points)
-        // or some spare sources give the intersection points (calculated) but not how they align.
-        // This source tries to give everything and still be efficient.
-        // It is therefore (and because of the extensive clarification comments) rather long...
-
-        // \see http://mpa.itc.it/radim/g50history/CMP/4.2.1-CERL-beta-libes/file475.txt
-        // \see http://docs.codehaus.org/display/GEOTDOC/Point+Set+Theory+and+the+DE-9IM+Matrix
-        // \see http://mathworld.wolfram.com/Line-LineIntersection.html
-
-        // Because of collinearity the case is now one-dimensional and can be checked using intervals
-        // We arrange either horizontally or vertically
-        // We get then two intervals:
-        // a_1-------------a_2 where a_1 < a_2
-        // b_1-------------b_2 where b_1 < b_2
-        // In all figures below a_1/a_2 denotes arranged intervals, a1-a2 or a2-a1 are still unarranged
-        T a_1, a_2, b_1, b_2;
-        bool a_swapped = false, b_swapped = false;
-        if (math::equals(dx_b, 0))
-        {
-            // Vertical -> Check y-direction
-            detail::segment_interval<S1, 1>::arrange(a, a_1, a_2, a_swapped);
-            detail::segment_interval<S1, 1>::arrange(b, b_1, b_2, b_swapped);
-        }
-        else
-        {
-            // Check x-direction
-            detail::segment_interval<S1, 0>::arrange(a, a_1, a_2, a_swapped);
-            detail::segment_interval<S1, 0>::arrange(b, b_1, b_2, b_swapped);
-        }
-
-        // First handle "disjoint", probably common case.
-        // 2 cases: a_1----------a_2    b_1-------b_2 or B left of A
-        if (a_2 < b_1 || a_1 > b_2)
-        {
-            return F::collinear_disjoint();
-        }
-
-        // Then handle "equal", in polygon neighbourhood comparisons also a common case
-
-        // Check if segments are equal...
-        bool a1_eq_b1 = math::equals(get<0, 0>(a), get<0, 0>(b))
-                    && math::equals(get<0, 1>(a), get<0, 1>(b));
-        bool a2_eq_b2 = math::equals(get<1, 0>(a), get<1, 0>(b))
-                    && math::equals(get<1, 1>(a), get<1, 1>(b));
-        if (a1_eq_b1 && a2_eq_b2)
-        {
-            return F::segment_equal(a, false);
-        }
-
-        // ... or opposite equal
-        bool a1_eq_b2 = math::equals(get<0, 0>(a), get<1, 0>(b))
-                    && math::equals(get<0, 1>(a), get<1, 1>(b));
-        bool a2_eq_b1 = math::equals(get<1, 0>(a), get<0, 0>(b))
-                    && math::equals(get<1, 1>(a), get<0, 1>(b));
-        if (a1_eq_b2 && a2_eq_b1)
-        {
-            return F::segment_equal(a, true);
-        }
-
-
-        // Degenerate cases: segments of single point, lying on other segment, non disjoint
-        if (math::equals(dx_a, 0) && math::equals(dy_a, 0))
-        {
-            return F::degenerate(a, true);
-        }
-        if (math::equals(dx_b, 0) && math::equals(dy_b, 0))
-        {
-            return F::degenerate(b, false);
-        }
-
-
-        // The rest below will return one or two intersections.
-        // The delegated class can decide which is the intersection point, or two, build the Intersection Matrix (IM)
-        // For IM it is important to know which relates to which. So this information is given,
-        // without performance penalties to intersection calculation
-
-        bool has_common_points = a1_eq_b1 || a1_eq_b2 || a2_eq_b1 || a2_eq_b2;
-
-
-        // "Touch" -> one intersection point -> one but not two common points
-        // -------->             A (or B)
-        //         <----------   B (or A)
-        //        a_2==b_1         (b_2==a_1 or a_2==b1)
-
-        // The check a_2/b_1 is necessary because it excludes cases like
-        // ------->
-        //     --->
-        // ... which are handled lateron
-
-        // Corresponds to 4 cases, of which the equal points are determined above
-        // 1: a1---->a2 b1--->b2   ("a" first)
-        // 2: a2<----a1 b2<---b1   ("b" first)
-        // 3: a1---->a2 b2<---b1   ("t": to)
-        // 4: a2<----a1 b1--->b2   ("f": from)
-        // Where the arranged forms have two forms:
-        //    a_1-----a_2/b_1-------b_2 or reverse (B left of A)
-        if (has_common_points && (math::equals(a_2, b_1) || math::equals(b_2, a_1)))
-        {
-            if (a2_eq_b1) return F::collinear_touch(get<1, 0>(a), get<1, 1>(a), false, 'A');
-            if (a2_eq_b2) return F::collinear_touch(get<1, 0>(a), get<1, 1>(a), true, 'T');
-            if (a1_eq_b2) return F::collinear_touch(get<0, 0>(a), get<0, 1>(a), false, 'B');
-            if (a1_eq_b1) return F::collinear_touch(get<0, 0>(a), get<0, 1>(a), true, 'F');
-        }
-
-
-        // "Touch/within" -> there are common points and also an intersection of interiors:
-        // Corresponds to many cases:
-        // Case 1: a1------->a2  Case 5:      a1-->a2  Case 9:  a1--->a2
-        //             b1--->b2          b1------->b2           b1---------b2
-        // Case 2: a2<-------a1
-        //             b1----b2  Et cetera
-        // Case 3: a1------->a2
-        //             b2<---b1
-        // Case 4: a2<-------a1
-        //             b2<---b1
-
-        // For case 1-4: a_1 < (b_1 or b_2) < a_2, two intersections are equal to segment B
-        // For case 5-8: b_1 < (a_1 or a_2) < b_2, two intersections are equal to segment A
-        if (has_common_points)
-        {
-            bool a_in_b =  (b_1 < a_1 && a_1 < b_2) || (b_1 < a_2 && a_2 < b_2);
-            if (a2_eq_b2) return F::collinear_interior_boundary_intersect(a_in_b ? a : b, a_in_b, false);
-            if (a1_eq_b2) return F::collinear_interior_boundary_intersect(a_in_b ? a : b, a_in_b, true);
-            if (a2_eq_b1) return F::collinear_interior_boundary_intersect(a_in_b ? a : b, a_in_b, true);
-            if (a1_eq_b1) return F::collinear_interior_boundary_intersect(a_in_b ? a : b, a_in_b, false);
-        }
-
-        bool opposite = a_swapped ^ b_swapped;
-
-
-        // "Inside", a completely within b or b completely within a
-        // 2 cases:
-        // case 1:
-        //        a_1---a_2        -> take A's points as intersection points
-        //   b_1------------b_2
-        // case 2:
-        //   a_1------------a_2
-        //       b_1---b_2         -> take B's points
-        if (a_1 > b_1 && a_2 < b_2)
-        {
-            // A within B
-            return F::collinear_a_in_b(a, opposite);
-        }
-        if (b_1 > a_1 && b_2 < a_2)
-        {
-            // B within A
-            return F::collinear_b_in_a(b, opposite);
-        }
-
-
-        // Now that all cases with equal,touch,inside,disjoint,degenerate are handled the only thing left is an overlap
-        // Case 1: a1--------->a2         a_1---------a_2
-        //                 b1----->b2             b_1------b_2
-        // Case 2: a2<---------a1         a_1---------a_2          a_swapped
-        //                 b1----->b2             b_1------b_2
-        // Case 3: a1--------->a2         a_1---------a_2
-        //                 b2<-----b1             b_1------b_2     b_swapped
-        // Case 4: a2<-------->a1         a_1---------a_2          a_swapped
-        //                 b2<-----b1             b_1------b_2     b_swapped
-
-        // Case 5:     a1--------->a2          a_1---------a_2
-        //         b1----->b2             b1--------b2
-        // Case 6:     a2<---------a1
-        //         b1----->b2
-        // Case 7:     a1--------->a2
-        //         b2<-----b1
-        // Case 8:     a2<-------->a1
-        //         b2<-----b1
-
-        if (a_1 < b_1 && b_1 < a_2)
-        {
-            // Case 4,2,3,1
-            return
-                  a_swapped && b_swapped   ? F::collinear_overlaps(get<0, 0>(a), get<0, 1>(a), get<1, 0>(b), get<1, 1>(b), opposite)
-                : a_swapped                ? F::collinear_overlaps(get<0, 0>(a), get<0, 1>(a), get<0, 0>(b), get<0, 1>(b), opposite)
-                : b_swapped                ? F::collinear_overlaps(get<1, 0>(a), get<1, 1>(a), get<1, 0>(b), get<1, 1>(b), opposite)
-                :                            F::collinear_overlaps(get<1, 0>(a), get<1, 1>(a), get<0, 0>(b), get<0, 1>(b), opposite)
-                ;
-        }
-        if (b_1 < a_1 && a_1 < b_2)
-        {
-            // Case 8, 6, 7, 5
-            return
-                  a_swapped && b_swapped   ? F::collinear_overlaps(get<1, 0>(a), get<1, 1>(a), get<0, 0>(b), get<0, 1>(b), opposite)
-                : a_swapped                ? F::collinear_overlaps(get<1, 0>(a), get<1, 1>(a), get<1, 0>(b), get<1, 1>(b), opposite)
-                : b_swapped                ? F::collinear_overlaps(get<0, 0>(a), get<0, 1>(a), get<0, 0>(b), get<0, 1>(b), opposite)
-                :                            F::collinear_overlaps(get<0, 0>(a), get<0, 1>(a), get<1, 0>(b), get<1, 1>(b), opposite)
-                ;
-        }
-
-        // Nothing should goes through. If any we have made an error
-        // TODO: proper exception
-        throw relate_cartesian_segments_exception();
-    }
-};
-
-
-}} // namespace strategy::intersection
-
-
-
-} // namespace ggl
-
-
-#endif // GGL_STRATEGY_CARTESIAN_INTERSECTION_HPP
diff --git a/include/builtin-ggl/ggl/strategies/cartesian/cart_side.hpp b/include/builtin-ggl/ggl/strategies/cartesian/cart_side.hpp
deleted file mode 100644
index 01a8016..0000000
--- a/include/builtin-ggl/ggl/strategies/cartesian/cart_side.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGY_CARTESIAN_SIDE_HPP
-#define GGL_STRATEGY_CARTESIAN_SIDE_HPP
-
-
-
-#include <ggl/geometries/point_xy.hpp>
-#include <ggl/geometries/segment.hpp>
-
-#include <ggl/util/select_coordinate_type.hpp>
-
-
-
-namespace ggl
-{
-namespace strategy
-{
-    namespace side
-    {
-
-        template <typename P, typename PS>
-        struct xy_side
-        {
-
-            // Check at which side of a segment a point lies:
-            // left of segment (> 0), right of segment (< 0), on segment (0)
-            // In fact this is twice the area of a triangle
-            static inline typename select_coordinate_type<P, PS>::type
-                side(const segment<const PS>& s, const P& p)
-            {
-                typedef typename select_coordinate_type<P, PS>::type T;
-
-                // Todo: might be changed to subtract_point
-                T dx = get<1, 0>(s) - get<0, 0>(s);
-                T dy = get<1, 1>(s) - get<0, 1>(s);
-                T dpx = get<0>(p) - get<0, 0>(s);
-                T dpy = get<1>(p) - get<0, 1>(s);
-                return dx * dpy - dy * dpx;
-            }
-
-
-            static inline int side(const P& p0, const P& p1, const P& p2)
-            {
-                typename coordinate_type<P>::type s = side(segment<const P>(p0, p1), p2);
-                return s > 0 ? 1 : s < 0 ? -1 : 0;
-            }
-        };
-
-    } // namespace side
-} // namespace strategy
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-template <typename P, typename PS>
-struct strategy_side<cartesian_tag, P, PS>
-{
-    typedef strategy::side::xy_side<P, PS> type;
-};
-#endif
-
-} // namespace ggl
-
-
-#endif // GGL_STRATEGY_CARTESIAN_SIDE_HPP
diff --git a/include/builtin-ggl/ggl/strategies/cartesian/cart_within.hpp b/include/builtin-ggl/ggl/strategies/cartesian/cart_within.hpp
deleted file mode 100644
index 3e5570e..0000000
--- a/include/builtin-ggl/ggl/strategies/cartesian/cart_within.hpp
+++ /dev/null
@@ -1,100 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGY_CARTESIAN_WITHIN_HPP
-#define GGL_STRATEGY_CARTESIAN_WITHIN_HPP
-
-
-
-#include <ggl/geometries/segment.hpp>
-
-
-
-namespace ggl
-{
-namespace strategy
-{
-    namespace within
-    {
-        /*!
-            \brief Within detection using cross counting
-
-            \author adapted from Randolph Franklin algorithm
-            \author Barend and Maarten, 1995
-            \author Revised for templatized library, Barend Gehrels, 2007
-            \return true if point is in ring, works for closed rings in both directions
-            \note Does NOT work correctly for point ON border
-         */
-
-        template<typename P, typename PS = P>
-        struct franklin
-        {
-            private :
-                /*! subclass to keep state */
-                struct crossings
-                {
-                    P p;
-                    bool crosses;
-                    explicit crossings(const P& ap)
-                        : p(ap)
-                        , crosses(false)
-                    {}
-                    bool within() const
-                    {
-                        return crosses;
-                    }
-                };
-
-            public :
-
-                typedef crossings state_type;
-
-                inline bool operator()(const segment<const PS>& s, state_type& state) const
-                {
-                    /* Algorithm:
-                    if (
-                        ( (y2 <= py && py < y1)
-                            || (y1 <= py && py < y2) )
-                        && (px < (x1 - x2)
-                                * (py - y2)
-                                    / (y1 - y2) + x2)
-                        )
-                            crosses = ! crosses
-                    */
-
-
-                    if (
-                        ((get<1, 1>(s) <= get<1>(state.p) && get<1>(state.p) < get<0, 1>(s))
-                            || (get<0, 1>(s) <= get<1>(state.p) && get<1>(state.p) < get<1, 1>(s)))
-                        && (get<0>(state.p) < (get<0, 0>(s) - get<1, 0>(s))
-                            * (get<1>(state.p) - get<1, 1>(s))
-                                    / (get<0, 1>(s) - get<1, 1>(s)) + get<1, 0>(s))
-                        )
-                    {
-                        state.crosses = ! state.crosses;
-                    }
-                    return true;
-                }
-        };
-
-
-
-    } // namespace within
-
-
-
-} // namespace strategy
-
-
-
-
-
-} // namespace ggl
-
-
-#endif // GGL_STRATEGY_CARTESIAN_WITHIN_HPP
diff --git a/include/builtin-ggl/ggl/strategies/distance_result.hpp b/include/builtin-ggl/ggl/strategies/distance_result.hpp
deleted file mode 100644
index 567dace..0000000
--- a/include/builtin-ggl/ggl/strategies/distance_result.hpp
+++ /dev/null
@@ -1,265 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRY_STRATEGIES_DISTANCE_RESULT_HPP
-#define GGL_GEOMETRY_STRATEGIES_DISTANCE_RESULT_HPP
-
-#include <utility>
-#include <cmath>
-#include <limits>
-#include <iostream>
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits.hpp>
-
-namespace ggl {
-
-/*!
-    \brief Encapsulate the results of distance calculation
-    \ingroup distance
-    \details Distance calculation for xy points or xyz points is done by taking the square
-    root. However, for distance comparison drawing the square root is not necessary.
-    Therefore the distance strategies are allowed to return the squares of the distance.
-    This structure contains the distance, and a boolean to indicate if it is squared.
-    It has an automatic conversion to a double value, which does the square root if necessary.
-    \note Thanks to Phil Endecott for his suggestion to change the pair to the double-convertable
-    http://article.gmane.org/gmane.comp.lib.boost.devel/172709/match=greatcircle_distance
-    \note It might be templatized with a T
-*/
-template<typename T = double>
-struct cartesian_distance
-{
-    private :
-        T m_squared_distance;
-
-        // Because result is square-rooted, for integer, the cast should
-        // go to double and NOT to T
-        typedef typename
-            boost::mpl::if_c
-            <
-                boost::is_integral<T>::type::value,
-                double,
-                T
-            >::type cast_type;
-
-
-
-
-    public :
-
-
-        /// Constructor with a value
-        explicit cartesian_distance(T const& v) : m_squared_distance(v) {}
-
-        /// Automatic conversion to double or higher precision,
-        /// taking squareroot if necessary
-        inline operator cast_type() const
-        {
-#if defined(NUMERIC_ADAPTOR_INCLUDED)
-            return boost::sqrt(m_squared_distance);
-#else
-            return std::sqrt((long double)m_squared_distance);
-#endif
-        }
-
-        // Compare squared values
-        inline bool operator<(cartesian_distance<T> const& other) const
-        {
-            return this->m_squared_distance < other.m_squared_distance;
-        }
-        inline bool operator>(cartesian_distance<T> const& other) const
-        {
-            return this->m_squared_distance > other.m_squared_distance;
-        }
-        inline bool operator==(cartesian_distance<T> const& other) const
-        {
-            return this->m_squared_distance == other.m_squared_distance;
-        }
-
-        // Compare just with a corresponding POD value
-        // Note: this is NOT possible because of the cast to double,
-        // it makes it for the compiler ambiguous which to take
-        /*
-        inline bool operator<(T const& value) const
-        {
-            return this->m_squared_distance < (value * value);
-        }
-        inline bool operator>(T const& value) const
-        {
-            return this->m_squared_distance > (value * value);
-        }
-        inline bool operator==(T const& value) const
-        {
-            return this->m_squared_distance == (value * value);
-        }
-        */
-
-        // Utility method to compare without SQRT, but not with method above because for epsilon that
-        // makes no sense...
-        inline bool very_small() const
-        {
-            return m_squared_distance <= std::numeric_limits<T>::epsilon();
-        }
-
-        /// The "squared_value" method returns the internal squared value
-        inline T squared_value() const
-        {
-            return m_squared_distance;
-        }
-
-        /// Make streamable to enable std::cout << ggl::distance( )
-        template <typename CH, typename TR>
-        inline friend std::basic_ostream<CH, TR>& operator<<(std::basic_ostream<CH, TR>& os,
-                        cartesian_distance<T> const& d)
-        {
-            // Avoid "ambiguous function call" for MSVC
-            cast_type const sq = d.m_squared_distance;
-
-            os <<
-#if defined(NUMERIC_ADAPTOR_INCLUDED)
-                boost::sqrt(sq);
-#else
-                std::sqrt(sq);
-#endif
-            return os;
-        }
-
-};
-
-
-
-/*
-
-    From Phil Endecott, on the list:
-
-    You can go further.  If I'm searching through a long list of points to
-    find the closest to P then I'll avoid the squaring (and conversion to
-    double if my co-ordinates are integers) whenever possible.  You can
-    achieve this with a more complex distance proxy:
-
-    class distance_proxy {
-       double dx;
-       double dy;
-       distance_proxy(double dx_, double dy_): dx(dx_), dy(dy_) {}
-       friend pythag_distance(point,point);
-    public:
-       operator double() { return sqrt(dx*dx+dy*dy); }
-       bool operator>(double d) {
-         return dx>d
-             || dy>d
-             || (dx*dx+dy*dy > d*d);
-       }
-    };
-
-    So this is convertible to double, but can be compared to a distance
-    without any need for sqrt() and only multiplication in some cases.
-    Further refinement is possible.
-
-
-    Barend:
-    feasable, needs to be templatized by the number of dimensions. For distance it
-    results in a nice "delayed calculation".
-    For searching you might take another approach, first calculate dx, if OK then dy,
-    if OK then the sqrs. So as above but than distance does not need to be calculated.
-    So it is in fact another strategy.
-
-
-*/
-
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-    namespace distance
-    {
-        template <typename R, typename T>
-        struct distance_result_maker
-        {
-        };
-
-        template <typename R, typename T>
-        struct distance_result_maker<ggl::cartesian_distance<R>, T>
-        {
-            static inline ggl::cartesian_distance<R> apply(T const& value)
-            {
-                return cartesian_distance<R>(value * value);
-            }
-        };
-
-        template <typename T>
-        struct distance_result_maker<double, T>
-        {
-            static inline double apply(T const& value)
-            {
-                return value;
-            }
-        };
-
-
-        template <typename T>
-        struct close_to_zero
-        {
-            static inline bool apply(T const& value)
-            {
-                return value <= std::numeric_limits<T>::epsilon();
-            }
-        };
-
-
-        template <typename T>
-        struct close_to_zero<ggl::cartesian_distance<T> >
-        {
-            static inline bool apply(ggl::cartesian_distance<T> const& value)
-            {
-                return value.very_small();
-            }
-        };
-
-
-    }
-}
-#endif
-
-
-/*!
-    \brief Object generator to create instance which can be compared
-    \ingroup distance
-    \details If distance results have to be compared to a certain value it makes sense to use
-    this function to generate a distance result of a certain value, and compare the distance
-    result with this instance. SQRT calculations are then avoided
-    \tparam R distance result type
-    \tparam T arithmetic type, e.g. double
-    \param value the distance to compare with
-    \return the distance result
-*/
-template <typename R, typename T>
-inline R make_distance_result(T const& value)
-{
-    return detail::distance::distance_result_maker<R, T>::apply(value);
-}
-
-
-/*!
-    \brief Utility function to check if a distance is very small
-    \ingroup distance
-    \details Depending on the "distance result" type it checks if it is smaller than epsilon,
-    or (for Cartesian distances) if the square is smaller than epsilon
-    \tparam R the distance result type, either arithmetic or cartesian distance
-    \param value the distance result to check
-*/
-template <typename T>
-inline bool close_to_zero(T const& value)
-{
-    return detail::distance::close_to_zero<T>::apply(value);
-}
-
-} // namespace ggl
-
-
-#endif // GGL_GEOMETRY_STRATEGIES_DISTANCE_RESULT_HPP
diff --git a/include/builtin-ggl/ggl/strategies/intersection_result.hpp b/include/builtin-ggl/ggl/strategies/intersection_result.hpp
deleted file mode 100644
index 32196fd..0000000
--- a/include/builtin-ggl/ggl/strategies/intersection_result.hpp
+++ /dev/null
@@ -1,167 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_INTERSECTION_RESULT_HPP
-#define GGL_INTERSECTION_RESULT_HPP
-
-#if defined(HAVE_MATRIX_AS_STRING)
-#include <string>
-#endif
-
-namespace ggl
-{
-
-/*!
-    \brief Dimensionally Extended 9 Intersection Matrix
-    \details
-    \ingroup overlay
-    \see http://gis.hsr.ch/wiki/images/3/3d/9dem_springer.pdf
-*/
-struct de9im
-{
-    int ii, ib, ie,
-        bi, bb, be,
-        ei, eb, ee;
-
-    inline de9im()
-        : ii(-1), ib(-1), ie(-1)
-        , bi(-1), bb(-1), be(-1)
-        , ei(-1), eb(-1), ee(-1)
-    {
-    }
-
-    inline de9im(int ii0, int ib0, int ie0,
-        int bi0, int bb0, int be0,
-        int ei0, int eb0, int ee0)
-        : ii(ii0), ib(ib0), ie(ie0)
-        , bi(bi0), bb(bb0), be(be0)
-        , ei(ei0), eb(eb0), ee(ee0)
-    {}
-
-    inline bool equals() const
-    {
-        return ii >= 0 && ie < 0 && be < 0 && ei < 0 && eb < 0;
-    }
-
-    inline bool disjoint() const
-    {
-        return ii < 0 && ib < 0 && bi < 0 && bb < 0;
-    }
-
-    inline bool intersects() const
-    {
-        return ii >= 0 || bb >= 0 || bi >= 0 || ib >= 0;
-    }
-
-    inline bool touches() const
-    {
-        return ii < 0 && (bb >= 0 || bi >= 0 || ib >= 0);
-    }
-
-    inline bool crosses() const
-    {
-        return (ii >= 0 && ie >= 0) || (ii == 0);
-    }
-
-    inline bool overlaps() const
-    {
-        return ii >= 0 && ie >= 0 && ei >= 0;
-    }
-
-    inline bool within() const
-    {
-        return ii >= 0 && ie < 0 && be < 0;
-    }
-
-    inline bool contains() const
-    {
-        return ii >= 0 && ei < 0 && eb < 0;
-    }
-
-
-    static inline char as_char(int v)
-    {
-        return v >= 0 && v < 10 ? ('0' + char(v)) : '-';
-    }
-
-#if defined(HAVE_MATRIX_AS_STRING)
-    inline std::string matrix_as_string(std::string const& tab, std::string const& nl) const
-    {
-        std::string ret;
-        ret.reserve(9 + tab.length() * 3 + nl.length() * 3);
-        ret += tab; ret += as_char(ii); ret += as_char(ib); ret += as_char(ie); ret += nl;
-        ret += tab; ret += as_char(bi); ret += as_char(bb); ret += as_char(be); ret += nl;
-        ret += tab; ret += as_char(ei); ret += as_char(eb); ret += as_char(ee);
-        return ret;
-    }
-
-    inline std::string matrix_as_string() const
-    {
-        return matrix_as_string("", "");
-    }
-#endif
-
-};
-
-struct de9im_segment : public de9im
-{
-    bool collinear; // true if segments are aligned (for equal,overlap,touch)
-    bool opposite; // true if direction is reversed (for equal,overlap,touch)
-    bool parallel;  // true if disjoint but parallel
-    bool degenerate; // true for segment(s) of zero length
-
-    double ra, rb; // temp
-
-    inline de9im_segment()
-        : de9im()
-        , collinear(false)
-        , opposite(false)
-        , parallel(false)
-        , degenerate(false)
-    {}
-
-    inline de9im_segment(double a, double b,
-        int ii0, int ib0, int ie0,
-        int bi0, int bb0, int be0,
-        int ei0, int eb0, int ee0,
-        bool c = false, bool o = false, bool p = false, bool d = false)
-        : de9im(ii0, ib0, ie0, bi0, bb0, be0, ei0, eb0, ee0)
-        , collinear(c)
-        , opposite(o)
-        , parallel(p)
-        , degenerate(d)
-        , ra(a), rb(b)
-    {}
-
-
-#if defined(HAVE_MATRIX_AS_STRING)
-    inline std::string as_string() const
-    {
-        std::string ret = matrix_as_string();
-        ret += collinear ? "c" : "-";
-        ret += opposite ? "o" : "-";
-        return ret;
-    }
-#endif
-};
-
-template <typename P>
-struct segment_intersection_points
-{
-    int count;
-    P intersections[2];
-
-    segment_intersection_points()
-        : count(0)
-    {}
-};
-
-} // namespace ggl
-
-
-#endif // GGL_INTERSECTION_RESULT_HPP
diff --git a/include/builtin-ggl/ggl/strategies/spherical/haversine.hpp b/include/builtin-ggl/ggl/strategies/spherical/haversine.hpp
deleted file mode 100644
index 984f125..0000000
--- a/include/builtin-ggl/ggl/strategies/spherical/haversine.hpp
+++ /dev/null
@@ -1,257 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGY_SPHERICAL_DISTANCE_HPP
-#define GGL_STRATEGY_SPHERICAL_DISTANCE_HPP
-
-
-#include <ggl/core/cs.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/core/access.hpp>
-#include <ggl/core/radian_access.hpp>
-
-
-#include <ggl/strategies/strategy_traits.hpp>
-
-#include <ggl/strategies/distance_result.hpp>
-
-#include <ggl/util/get_cs_as_radian.hpp>
-
-
-
-namespace ggl
-{
-namespace strategy
-{
-
-    namespace distance
-    {
-
-        /*!
-            \brief Distance calculation for spherical coordinates on a perfect sphere using haversine
-            \ingroup distance
-            \tparam P1 first point type
-            \tparam P2 optional second point type
-            \author Adapted from: http://williams.best.vwh.net/avform.htm
-            \see http://en.wikipedia.org/wiki/Great-circle_distance
-            \note It says: <em>The great circle distance d between two points with coordinates {lat1,lon1} and {lat2,lon2} is given by:
-                        d=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))
-                    A mathematically equivalent formula, which is less subject to rounding error for short distances is:
-                        d=2*asin(sqrt((sin((lat1-lat2)/2))^2 + cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))</em>
-        */
-        template <typename P1, typename P2 = P1>
-        class haversine
-        {
-            public :
-                //typedef spherical_distance return_type;
-                typedef double return_type;
-
-                inline haversine(double r = 1.0)
-                    : m_radius(r)
-                {}
-
-                inline return_type operator()(const P1& p1, const P2& p2) const
-                {
-                    return calc(get_as_radian<0>(p1), get_as_radian<1>(p1),
-                                    get_as_radian<0>(p2), get_as_radian<1>(p2));
-                }
-
-            private :
-                double m_radius;
-                typedef typename coordinate_type<P1>::type T1;
-                typedef typename coordinate_type<P2>::type T2;
-
-                inline return_type calc(const T1& lon1, const T1& lat1, const T2& lon2, const T2& lat2) const
-                {
-                    double a = math::hav(lat2 - lat1) + cos(lat1) * cos(lat2) * math::hav(lon2 - lon1);
-                    double c = 2.0 * asin(sqrt(a));
-                    return return_type(m_radius * c);
-                }
-        };
-
-
-
-        /*!
-            \brief Strategy functor for distance point to segment calculation
-            \ingroup distance
-            \details Class which calculates the distance of a point to a segment, using latlong points
-            \tparam P point type
-            \tparam S segment type
-        */
-        template <typename P, typename S>
-        class ll_point_segment
-        {
-            public :
-                typedef double return_type;
-
-                inline ll_point_segment(double r = 1.0) : m_radius(r)
-                {}
-
-                inline return_type operator()(P const& p, S const& s) const
-                {
-                    PR pr, ps1, ps2;
-
-                    // Select transformation strategy and transform to radians (if necessary)
-                    typename strategy_transform<
-                                typename cs_tag<P>::type,
-                                typename cs_tag<PR>::type,
-                                typename coordinate_system<P>::type,
-                                typename coordinate_system<PR>::type,
-                                dimension<P>::value,
-                                dimension<PR>::value,
-                                P, PR>::type transform_strategy;
-
-
-                    // TODO
-                    // ASSUMPTION: segment
-                    // SOLVE THIS USING OTHER FUNCTIONS using get<,>
-                    transform_strategy(p, pr);
-                    transform_strategy(s.first, ps1);
-                    transform_strategy(s.second, ps2);
-                    return calc(pr, ps1, ps2);
-                }
-
-            private :
-                typedef point
-                    <
-                        typename coordinate_type<P>::type,
-                        ggl::dimension<P>::type::value,
-                        typename ggl::detail::get_cs_as_radian
-                            <
-                                typename coordinate_system<P>::type
-                            >::type
-                    > PR;
-                double m_radius;
-
-                /// Calculate course (bearing) between two points. Might be moved to a "course formula" ...
-                inline double course(PR const& p1, PR const& p2) const
-                {
-                    /***
-                        Course between points
-
-                        We obtain the initial course, tc1, (at point 1) from point 1 to point 2 by the following. The formula fails if the initial point is a pole. We can special case this with:
-
-                        IF (cos(lat1) < EPS)   // EPS a small number ~ machine precision
-                          IF (lat1 > 0): tc1= pi        //  starting from N pole
-                          ELSE: tc1= 2*pi         //  starting from S pole
-                          ENDIF
-                        ENDIF
-
-                        For starting points other than the poles:
-                        IF sin(lon2-lon1)<0: tc1=acos((sin(lat2)-sin(lat1)*cos(d))/(sin(d)*cos(lat1)))
-                        ELSE: tc1=2*pi-acos((sin(lat2)-sin(lat1)*cos(d))/(sin(d)*cos(lat1)))
-                        ENDIF
-
-                        An alternative formula, not requiring the pre-computation of d, the distance between the points, is:
-                           tc1=mod(atan2(sin(lon1-lon2)*cos(lat2),
-                                   cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon1-lon2))
-                                   , 2*pi)
-                     ***/
-                    double dlon = get<0>(p2) - get<0>(p1);
-                    double cos_p2lat = cos(get<1>(p2));
-                    return atan2(sin(dlon) * cos_p2lat,
-                        cos(get<1>(p1)) * sin(get<1>(p2))
-                        - sin(get<1>(p1)) * cos_p2lat * cos(dlon));
-                }
-
-                inline return_type calc(PR const& p, PR const& sp1, PR const& sp2) const
-                {
-                    /***
-                    Cross track error:
-                    Suppose you are proceeding on a great circle route from A to B (course =crs_AB) and end up at D, perhaps off course.
-                    (We presume that A is ot a pole!) You can calculate the course from A to D (crs_AD) and the distance from A to D (dist_AD)
-                    using the formulae above. In shifteds of these the cross track error, XTD, (distance off course) is given by
-
-                               XTD =asin(sin(dist_AD)*sin(crs_AD-crs_AB))
-
-                    (positive XTD means right of course, negative means left)
-                    (If the point A is the N. or S. Pole replace crs_AD-crs_AB with
-                    lon_D-lon_B or lon_B-lon_D, respectively.)
-                     ***/
-
-                    // Calculate distances, in radians, on the unit sphere
-                    // It seems not useful to let this strategy be templatized, it should be in radians and on the unit sphere
-                    strategy::distance::haversine<PR, PR> strategy(1.0);
-                    double d1 = strategy(sp1, p);
-
-                    // Actually, calculation of d2 not necessary if we know that the projected point is on the great circle...
-                    double d2 = strategy(sp2, p);
-
-                    // Source: http://williams.best.vwh.net/avform.htm
-
-                    double crs_AD = course(sp1, p);
-                    double crs_AB = course(sp1, sp2);
-                    double XTD = fabs(asin(sin(d1) * sin(crs_AD - crs_AB)));
-
-                    // Return shortest distance, either to projected point on segment sp1-sp2, or to sp1, or to sp2
-                    return return_type(m_radius * (std::min)((std::min)(d1, d2), XTD));
-                }
-        };
-
-
-
-
-
-    } // namespace distance
-
-
-
-
-} // namespace strategy
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-template <typename P1, typename P2>
-struct strategy_distance<spherical_tag, spherical_tag, P1, P2>
-{
-    typedef strategy::distance::haversine<P1, P2> type;
-};
-
-
-template <typename Point, typename Segment>
-struct strategy_distance_segment<spherical_tag, spherical_tag, Point, Segment>
-{
-    typedef strategy::distance::ll_point_segment<Point, Segment> type;
-};
-
-
-// Use this point-segment for geographic as well. TODO: change this, extension!
-template <typename Point, typename Segment>
-struct strategy_distance_segment<geographic_tag, geographic_tag, Point, Segment>
-{
-    typedef strategy::distance::ll_point_segment<Point, Segment> type;
-};
-
-
-
-
-template <typename P1, typename P2>
-struct strategy_tag<strategy::distance::haversine<P1, P2> >
-{
-    typedef strategy_tag_distance_point_point type;
-};
-
-template <typename Point, typename Segment>
-struct strategy_tag<strategy::distance::ll_point_segment<Point, Segment> >
-{
-    typedef strategy_tag_distance_point_segment type;
-};
-
-
-
-#endif
-
-
-
-
-
-
-} // namespace ggl
-
-
-#endif // GGL_STRATEGY_SPHERICAL_DISTANCE_HPP
diff --git a/include/builtin-ggl/ggl/strategies/spherical/sph_area.hpp b/include/builtin-ggl/ggl/strategies/spherical/sph_area.hpp
deleted file mode 100644
index cf99393..0000000
--- a/include/builtin-ggl/ggl/strategies/spherical/sph_area.hpp
+++ /dev/null
@@ -1,167 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRY_STRATEGIES_SPHERICAL_SPH_AREA_HPP
-#define GGL_GEOMETRY_STRATEGIES_SPHERICAL_SPH_AREA_HPP
-
-#include <ggl/geometries/segment.hpp>
-#include <ggl/strategies/spherical/haversine.hpp>
-#include <ggl/strategies/strategy_transform.hpp>
-
-#include <ggl/util/get_cs_as_radian.hpp>
-
-namespace ggl
-{
-namespace strategy
-{
-    namespace area
-    {
-
-
-
-        /*!
-            \brief Area calculation by spherical excess
-            \tparam P type of points of rings/polygons
-            \author Barend Gehrels. Adapted from:
-            - http://www.soe.ucsc.edu/~pang/160/f98/Gems/GemsIV/sph_poly.c
-            - http://williams.best.vwh.net/avform.htm
-            \note The version in Gems didn't account for polygons crossing the 180 meridian.
-            \note This version works for convex and non-convex polygons, for 180 meridian
-            crossing polygons and for polygons with holes. However, some cases (especially
-            180 meridian cases) must still be checked.
-            \note The version which sums angles, which is often seen, doesn't handle non-convex
-            polygons correctly.
-            \note The version which sums longitudes, see
-            http://trs-new.jpl.nasa.gov/dspace/bitstream/2014/40409/1/07-03.pdf, is simple
-            and works well in most cases but not in 180 meridian crossing cases. This probably
-            could be solved.
-        */
-        template<typename P>
-        class by_spherical_excess
-        {
-            private :
-                struct excess_sum
-                {
-                    double m_sum;
-                    double m_radius;
-
-                    // TODO: make this 1.0 & implement other construct to let user specify
-                    inline excess_sum(double radius = 1.0) //constants::average_earth_radius)
-                        : m_sum(0)
-                        , m_radius(radius)
-                    {}
-                    inline double area() const
-                    {
-                        return - m_sum * m_radius * m_radius;
-                            //constants::average_earth_radius * constants::average_earth_radius;
-                    }
-                };
-
-                // Distances are calculated on unit sphere here
-                strategy::distance::haversine<P, P> m_unit_sphere;
-                double m_radius;
-
-            public :
-                typedef double return_type;
-                typedef excess_sum state_type;
-
-                by_spherical_excess(double radius = 1.0)
-                    : m_unit_sphere(1)
-                    , m_radius(radius)
-                {}
-
-                inline bool operator()(segment<const P> const& segment, state_type& state) const
-                {
-                    if (get<0>(segment.first) != get<0>(segment.second))
-                    {
-                        typedef point
-                            <
-                                typename coordinate_type<P>::type,
-                                2,
-                                typename ggl::detail::get_cs_as_radian
-                                    <
-                                        typename coordinate_system<P>::type
-                                    >::type
-                            > PR;
-                        PR p1, p2;
-
-                        // Select transformation strategy and transform to radians (if necessary)
-                        typename strategy_transform<
-                                    typename cs_tag<P>::type,
-                                    typename cs_tag<PR>::type,
-                                    typename coordinate_system<P>::type,
-                                    typename coordinate_system<PR>::type,
-                                    dimension<P>::value,
-                                    dimension<PR>::value,
-                                    P, PR>::type transform_strategy;
-
-                        transform_strategy(segment.first, p1);
-                        transform_strategy(segment.second, p2);
-
-                        // Distance p1 p2
-                        double a = m_unit_sphere(segment.first, segment.second);
-                        // Sides on unit sphere to south pole
-                        double b = 0.5 * math::pi - ggl::get<1>(p2);
-                        double c = 0.5 * math::pi - ggl::get<1>(p1);
-                        // Semi parameter
-                        double s = 0.5 * (a + b + c);
-
-                        // E: spherical excess, using l'Huiller's formula
-                        // [tg(e / 4)]2   =   tg[s / 2]  tg[(s-a) / 2]  tg[(s-b) / 2]  tg[(s-c) / 2]
-                        double E = 4.0 * atan(sqrt(fabs(tan(s / 2)
-                                * tan((s - a) / 2)
-                                * tan((s - b) / 2)
-                                * tan((s - c) / 2))));
-
-                        E = fabs(E);
-
-                        // In right direction: positive, add area. In left direction: negative, subtract area.
-                        // Longitude comparisons are not so obvious. If one is negative, other is positive,
-                        // we have to take the date into account.
-                        // TODO: check this / enhance this, should be more robust. See also the "grow" for ll
-                        // TODO: use minmax or "smaller"/"compare" strategy for this
-                        double lon1 = ggl::get<0>(p1) < 0
-                            ? ggl::get<0>(p1) + math::two_pi
-                            : ggl::get<0>(p1);
-                        double lon2 = ggl::get<0>(p2) < 0
-                            ? ggl::get<0>(p2) + math::two_pi
-                            : ggl::get<0>(p2);
-
-                        if (lon2 < lon1)
-                        {
-                            E= -E;
-                        }
-
-                        state.m_sum += E;
-                    }
-                    return true;
-                }
-        };
-
-    } // namespace area
-
-} // namespace strategy
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-template <typename LL>
-struct strategy_area<spherical_tag, LL>
-{
-    typedef strategy::area::by_spherical_excess<LL> type;
-};
-
-template <typename LL>
-struct strategy_area<geographic_tag, LL>
-{
-    typedef strategy::area::by_spherical_excess<LL> type;
-};
-#endif
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRY_STRATEGIES_SPHERICAL_SPH_AREA_HPP
diff --git a/include/builtin-ggl/ggl/strategies/spherical/sph_envelope.hpp b/include/builtin-ggl/ggl/strategies/spherical/sph_envelope.hpp
deleted file mode 100644
index fe474ba..0000000
--- a/include/builtin-ggl/ggl/strategies/spherical/sph_envelope.hpp
+++ /dev/null
@@ -1,176 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_GEOMETRY_STRATEGIES_SPHERICAL_SPH_ENVELOPE_HPP
-#define GGL_GEOMETRY_STRATEGIES_SPHERICAL_SPH_ENVELOPE_HPP
-
-#include <boost/numeric/conversion/bounds.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-
-// NOTE: maybe evaluate/rework this using new "compare" strategy
-// - implement "compare" for latlong (e.g. return true if distance-difference < 90 deg, so 170 < -170 but 90 > -180)
-
-#include <ggl/strategies/spherical/haversine.hpp>
-
-namespace ggl
-{
-namespace strategy
-{
-    namespace envelope
-    {
-        // envelope calculation strategy for latlong-points
-        namespace shift
-        {
-            template <typename D>
-            struct shifted
-            {
-            };
-
-            template<>
-            struct shifted<radian>
-            {
-                inline static double shift() { return math::two_pi; }
-            };
-            template<>
-            struct shifted<degree>
-            {
-                inline static double shift() { return 360.0; }
-            };
-
-        }
-
-        /*!
-            \par Algorithm:
-            The envelope of latlong-points cannot be implemented as for xy-points. Suppose the
-            envelope of the Aleutian Islands must be calculated. The span from 170E to 170W, from -170 to 170.
-            Of course the real envelope is not -170..170 but 170..-170.
-            On the other hand, there might be geometries that indeed span from -170 to 170. If there are
-            two points, it is not known. If there are points in between, we probably should take the shorter
-            range. So we do that for the moment.
-            We shift coordinates and do as if we live in a world with longitude coordinates from 0 - 360,
-            where 0 is still at Greenwich. Longitude ranges are then calculated twice: one for real world,
-            one for the shifted world.
-            The shortest range is taken for the bounding box. This might have coordinates > 180
-        */
-
-        template <typename P, typename B>
-        struct grow_ll
-        {
-
-            struct state
-            {
-                typedef typename coordinate_type<B>::type T;
-                bool has_west;
-                T min_lat, max_lat;
-                T min_lon1, min_lon2, max_lon1, max_lon2;
-                B& mbr;
-
-                state(B& b)
-                    : mbr(b)
-                    , has_west(false)
-                    , min_lat(boost::numeric::bounds<T>::highest())
-                    , min_lon1(boost::numeric::bounds<T>::highest())
-                    , min_lon2(boost::numeric::bounds<T>::highest())
-                    , max_lat(boost::numeric::bounds<T>::lowest())
-                    , max_lon1(boost::numeric::bounds<T>::lowest())
-                    , max_lon2(boost::numeric::bounds<T>::lowest())
-                {}
-
-                template <typename T>
-                void take_minmax(const T& value, T& min_value, T& max_value)
-                {
-                    if (value < min_value)
-                    {
-                        min_value = value;
-                    }
-                    if (value > max_value)
-                    {
-                        max_value = value;
-                    }
-                }
-
-                void grow(const P& p)
-                {
-                    // For latitude, we can take the min/max
-                    take_minmax(get<1>(p), min_lat, max_lat);
-
-
-                    // For longitude, we do the same...
-                    take_minmax(get<0>(p), min_lon1, max_lon1);
-
-                    // But we also add 360 (2pi) if it is negative
-                    T value = get<0>(p);
-                    while(value < 0)
-                    {
-                        has_west = true;
-                        value += shift::shifted<typename coordinate_system<P>::type::units>::shift();
-                    }
-                    while (value > math::two_pi)
-                    {
-                        value -= shift::shifted<typename coordinate_system<P>::type::units>::shift();
-                    }
-                    take_minmax(value, min_lon2, max_lon2);
-                }
-
-                ~state()
-                //void envelope(box<PB>& mbr)
-                {
-                    // For latitude it is easy
-                    set<min_corner, 1>(mbr, min_lat);
-                    set<max_corner, 1>(mbr, max_lat);
-
-                    if (! has_west)
-                    {
-                        set<min_corner, 0>(mbr, min_lon1);
-                        set<max_corner, 0>(mbr, max_lon1);
-                    }
-                    else
-                    {
-                        // Get both ranges
-                        T diff1 = max_lon1 - min_lon1;
-                        T diff2 = max_lon2 - min_lon2;
-
-                        //std::cout << "range 1: " << min_lon1 * math::r2d << ".." << max_lon1 * math::r2d << std::endl;
-                        //std::cout << "range 2: " << min_lon2 * math::r2d << ".." << max_lon2 * math::r2d << std::endl;
-
-                        if (diff1 <= diff2)
-                        {
-                            set<min_corner, 0>(mbr, min_lon1);
-                            set<max_corner, 0>(mbr, max_lon1);
-                        }
-                        else
-                        {
-                            set<min_corner, 0>(mbr, min_lon2);
-                            set<max_corner, 0>(mbr, max_lon2);
-                        }
-                    }
-                }
-            };
-
-            typedef state state_type;
-
-            void operator()(const P& p, state_type& s) const
-            {
-                s.grow(p);
-            }
-        };
-    } // namespace envelope
-} // namespace strategy
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-template <typename P, typename B>
-struct strategy_envelope<geographic_tag, geographic_tag, P, B>
-{
-    typedef strategy::envelope::grow_ll<P, B>  type;
-};
-#endif
-
-} // namespace ggl
-
-#endif // GGL_GEOMETRY_STRATEGIES_SPHERICAL_SPH_ENVELOPE_HPP
diff --git a/include/builtin-ggl/ggl/strategies/strategies.hpp b/include/builtin-ggl/ggl/strategies/strategies.hpp
deleted file mode 100644
index 294ddad..0000000
--- a/include/builtin-ggl/ggl/strategies/strategies.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGIES_HPP
-#define GGL_STRATEGIES_HPP
-
-
-#include <ggl/strategies/strategy_traits.hpp>
-
-#include <ggl/strategies/cartesian/cart_area.hpp>
-#include <ggl/strategies/cartesian/cart_centroid.hpp>
-#include <ggl/strategies/cartesian/cart_compare.hpp>
-#include <ggl/strategies/cartesian/cart_distance.hpp>
-#include <ggl/strategies/cartesian/cart_envelope.hpp>
-#include <ggl/strategies/cartesian/cart_side.hpp>
-#include <ggl/strategies/cartesian/cart_within.hpp>
-
-#include <ggl/strategies/spherical/sph_area.hpp>
-#include <ggl/strategies/spherical/haversine.hpp>
-#include <ggl/strategies/spherical/sph_envelope.hpp>
-
-#include <ggl/strategies/agnostic/agn_convex_hull.hpp>
-#include <ggl/strategies/agnostic/agn_simplify.hpp>
-#include <ggl/strategies/agnostic/agn_within.hpp>
-
-#include <ggl/strategies/strategy_transform.hpp>
-
-#include <ggl/strategies/transform/matrix_transformers.hpp>
-#include <ggl/strategies/transform/map_transformer.hpp>
-#include <ggl/strategies/transform/inverse_transformer.hpp>
-
-
-#endif // GGL_STRATEGIES_HPP
diff --git a/include/builtin-ggl/ggl/strategies/strategy_traits.hpp b/include/builtin-ggl/ggl/strategies/strategy_traits.hpp
deleted file mode 100644
index b97921d..0000000
--- a/include/builtin-ggl/ggl/strategies/strategy_traits.hpp
+++ /dev/null
@@ -1,231 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGIES_STRATEGY_TRAITS_HPP
-#define GGL_STRATEGIES_STRATEGY_TRAITS_HPP
-
-#include <ggl/core/cs.hpp>
-#include <ggl/strategies/distance_result.hpp>
-
-// File containing strategy traits classes, to be specialized in other files
-// (This file might be splitted resulting into several small files)
-
-namespace ggl
-{
-
-namespace strategy
-{
-    /*!
-        \brief Indicate compiler/library user that strategy is not implemented.
-        \details The strategy_traits class define strategies for point types or for point type
-        combinations. If there is no implementation for that specific point type, or point type
-        combination, the calculation cannot be done. To indicate this, this not_implemented
-        class is used as a typedef stub.
-
-    */
-    struct not_implemented {};
-}
-
-
-/*!
-    \brief Traits class binding an area strategy to a coordinate system
-    \ingroup area
-    \tparam T tag of coordinate system
-    \tparam P point-type
-*/
-template <typename T, typename P>
-struct strategy_area
-{
-    typedef strategy::not_implemented type;
-};
-
-/*!
-    \brief Traits class binding a distance strategy to a (possibly two) coordinate system(s)
-    \ingroup distance
-    \tparam T1 tag of coordinate system of first point type
-    \tparam T2 tag of coordinate system of second point type
-    \tparam P1 first point-type
-    \tparam P2 second point-type
-*/
-template <typename T1, typename T2, typename P1, typename P2>
-struct strategy_distance
-{
-    typedef strategy::not_implemented type;
-};
-
-/*!
-    \brief Traits class binding a distance-to-segment strategy to a (possibly two) coordinate system(s)
-    \ingroup distance
-    \tparam CsTag1 tag of coordinate system of point type
-    \tparam CsTag2 tag of coordinate system of segment type, usually same as CsTag1
-    \tparam Point point-type
-    \tparam Segment segment-type
-*/
-template <typename CsTag1, typename CsTag2, typename Point, typename Segment>
-struct strategy_distance_segment
-{
-    typedef strategy::not_implemented type;
-};
-
-
-/*!
-    \brief Traits class binding a centroid calculation strategy to a coordinate system
-    \ingroup centroid
-    \tparam T tag of coordinate system
-    \tparam P point-type
-    \tparam PS segment point-type
-*/
-template <typename T, typename P, typename PS>
-struct strategy_centroid
-{
-    typedef strategy::not_implemented type;
-};
-
-
-/*!
-    \brief Traits class binding envelope strategy to a coordinate system
-    \ingroup envelope
-    \tparam TP tag of coordinate system of point
-    \tparam TB tag of coordinate system of box, usually same as TP
-    \tparam P point-type
-    \tparam B box-type
-*/
-template <typename TP, typename TB, typename P, typename B>
-struct strategy_envelope
-{
-    typedef strategy::not_implemented type;
-};
-
-
-/*!
-    \brief Traits class binding a convex hull calculation strategy to a coordinate system
-    \ingroup convex_hull
-    \tparam T tag of coordinate system
-    \tparam P point-type of input points
-*/
-template <typename T, typename P>
-struct strategy_convex_hull
-{
-    typedef strategy::not_implemented type;
-};
-
-
-/*!
-    \brief Traits class binding a within determination strategy to a coordinate system
-    \ingroup within
-    \tparam TP tag of coordinate system of point-type
-    \tparam TS tag of coordinate system of segment-type
-    \tparam P point-type of input points
-    \tparam PS point-type of input segment-points
-*/
-template <typename TP, typename TS, typename P, typename PS>
-struct strategy_within
-{
-    typedef strategy::not_implemented type;
-};
-
-
-/*!
-    \brief Traits class binding a side determination strategy to a coordinate system
-    \ingroup util
-    \tparam T tag of coordinate system of point-type
-    \tparam P point-type of input points
-    \tparam PS point-type of input points
-*/
-template <typename T, typename P, typename PS = P>
-struct strategy_side
-{
-    typedef strategy::not_implemented type;
-};
-
-
-
-/*!
-    \brief Traits class binding a comparing strategy to a coordinate system
-    \ingroup util
-    \tparam T tag of coordinate system of point-type
-    \tparam P point-type
-    \tparam D dimension to compare
-*/
-template <typename T, typename P, size_t D>
-struct strategy_compare
-{
-    typedef strategy::not_implemented type;
-};
-
-
-/*!
-    \brief Traits class binding a transformation strategy to a coordinate system
-    \ingroup transform
-    \details Can be specialized
-    - per coordinate system family (tag)
-    - per coordinate system (or groups of them)
-    - per dimension
-    - per point type
-    \tparam CS_TAG 1,2 coordinate system tags
-    \tparam CS 1,2 coordinate system
-    \tparam D 1, 2 dimension
-    \tparam P 1, 2 point type
- */
-template <typename CS_TAG1, typename CS_TAG2,
-            typename CS1, typename CS2,
-            size_t D1, size_t D2,
-            typename P1, typename P2>
-struct strategy_transform
-{
-    typedef strategy::not_implemented type;
-};
-
-
-/*!
-    \brief Traits class binding a parsing strategy to a coordinate system
-    \ingroup parse
-    \tparam T tag of coordinate system of point-type
-    \tparam CS coordinate system
-*/
-template <typename T, typename CS>
-struct strategy_parse
-{
-    typedef strategy::not_implemented type;
-};
-
-
-
-
-/*!
-    \brief Shortcut to define return type of distance strategy
-    \ingroup distance
-    \tparam G1 first geometry
-    \tparam G2 second geometry
- */
-template <typename G1, typename G2 = G1>
-struct distance_result
-{
-    typedef typename point_type<G1>::type P1;
-    typedef typename point_type<G2>::type P2;
-    typedef typename strategy_distance<
-                typename cs_tag<P1>::type,
-                typename cs_tag<P2>::type, P1, P2>::type S;
-    typedef typename S::return_type type;
-};
-
-
-
-struct strategy_tag_unknown {};
-struct strategy_tag_distance_point_point {};
-struct strategy_tag_distance_point_segment {};
-
-template <typename T>
-struct strategy_tag
-{
-    typedef strategy_tag_unknown type;
-};
-
-} // namespace ggl
-
-#endif // GGL_STRATEGIES_STRATEGY_TRAITS_HPP
diff --git a/include/builtin-ggl/ggl/strategies/strategy_transform.hpp b/include/builtin-ggl/ggl/strategies/strategy_transform.hpp
deleted file mode 100644
index 0bdad6c..0000000
--- a/include/builtin-ggl/ggl/strategies/strategy_transform.hpp
+++ /dev/null
@@ -1,358 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGY_TRANSFORM_HPP
-#define GGL_STRATEGY_TRANSFORM_HPP
-
-#include <cstddef>
-#include <cmath>
-#include <functional>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <ggl/arithmetic/arithmetic.hpp>
-#include <ggl/core/access.hpp>
-#include <ggl/core/coordinate_dimension.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/util/copy.hpp>
-#include <ggl/util/math.hpp>
-#include <ggl/util/select_coordinate_type.hpp>
-
-namespace ggl
-{
-
-namespace strategy { namespace transform {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template
-<
-    typename Src, typename Dst,
-    std::size_t D, std::size_t N,
-    template <typename> class F
->
-struct transform_coordinates
-{
-    static inline void transform(const Src& source, Dst& dest, double value)
-    {
-        typedef typename select_coordinate_type<Src, Dst>::type coordinate_type;
-
-        F<coordinate_type> function;
-        set<D>(dest, boost::numeric_cast<coordinate_type>(function(get<D>(source), value)));
-        transform_coordinates<Src, Dst, D + 1, N, F>::transform(source, dest, value);
-    }
-};
-
-template
-<
-    typename Src, typename Dst,
-    std::size_t N,
-    template <typename> class F
->
-struct transform_coordinates<Src, Dst, N, N, F>
-{
-    static inline void transform(const Src& source, Dst& dest, double value)
-    {
-    }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-    \brief Transformation strategy to copy one point to another using assignment operator
-    \ingroup transform
-    \tparam P point type
- */
-template <typename P>
-struct copy_direct
-{
-    inline bool operator()(const P& p1, P& p2) const
-    {
-        p2 = p1;
-        return true;
-    }
-};
-
-/*!
-    \brief Transformation strategy to do copy a point, copying per coordinate.
-    \ingroup transform
-    \tparam P1 first point type
-    \tparam P2 second point type
- */
-template <typename P1, typename P2>
-struct copy_per_coordinate
-{
-    inline bool operator()(P1 const& p1, P2& p2) const
-    {
-        // Defensive check, dimensions are equal, selected by specialization
-        assert_dimension_equal<P1, P2>();
-
-        copy_coordinates(p1, p2);
-        return true;
-    }
-};
-
-
-/*!
-    \brief Transformation strategy to go from degree to radian and back
-    \ingroup transform
-    \tparam P1 first point type
-    \tparam P2 second point type
-    \tparam F additional functor to divide or multiply with d2r
- */
-template <typename P1, typename P2, template <typename> class F>
-struct degree_radian_vv
-{
-    inline bool operator()(P1 const& p1, P2& p2) const
-    {
-        // Spherical coordinates always have 2 coordinates measured in angles
-        // The optional third one is distance/height, provided in another strategy
-        // Polar coordinates having one angle, will be also in another strategy
-        assert_dimension<P1, 2>();
-        assert_dimension<P2, 2>();
-
-        detail::transform_coordinates<P1, P2, 0, 2, F>::transform(p1, p2, math::d2r);
-        return true;
-    }
-};
-
-template <typename P1, typename P2, template <typename> class F>
-struct degree_radian_vv_3
-{
-    inline bool operator()(P1 const& p1, P2& p2) const
-    {
-        assert_dimension<P1, 3>();
-        assert_dimension<P2, 3>();
-
-        detail::transform_coordinates<P1, P2, 0, 2, F>::transform(p1, p2, math::d2r);
-        // Copy height or other third dimension
-        set<2>(p2, get<2>(p1));
-        return true;
-    }
-};
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-    /// Helper function for conversion, phi/theta are in radians
-    template <typename P>
-    inline void spherical_to_cartesian(double phi, double theta, double r, P& p)
-    {
-        assert_dimension<P, 3>();
-
-        // http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_spherical_coordinates
-        // Phi = first, theta is second, r is third, see documentation on cs::spherical
-        double const sin_theta = std::sin(theta);
-        set<0>(p, r * sin_theta * std::cos(phi));
-        set<1>(p, r * sin_theta * std::sin(phi));
-        set<2>(p, r * std::cos(theta));
-    }
-
-    /// Helper function for conversion
-    template <typename P>
-    inline bool cartesian_to_spherical2(double x, double y, double z, P& p)
-    {
-        assert_dimension<P, 2>();
-
-        // http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_Cartesian_coordinates
-
-        // TODO: MAYBE ONLY IF TO BE CHECKED?
-        double const r = std::sqrt(x * x + y * y + z * z);
-
-        // Unit sphere, r should be 1
-        typedef typename coordinate_type<P>::type coordinate_type;
-        if (std::abs(r - 1.0) > std::numeric_limits<coordinate_type>::epsilon())
-        {
-            return false;
-        }
-        // end todo
-
-        set_from_radian<0>(p, std::atan2(y, x));
-        set_from_radian<1>(p, std::acos(z));
-        return true;
-    }
-
-    template <typename P>
-    inline bool cartesian_to_spherical3(double x, double y, double z, P& p)
-    {
-        assert_dimension<P, 3>();
-
-        // http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_Cartesian_coordinates
-        double const r = std::sqrt(x * x + y * y + z * z);
-        set<2>(p, r);
-        set_from_radian<0>(p, std::atan2(y, x));
-        if (r > 0.0)
-        {
-            set_from_radian<1>(p, std::acos(z / r));
-            return true;
-        }
-        return false;
-    }
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-    \brief Transformation strategy for 2D spherical (phi,theta) to 3D cartesian (x,y,z)
-    \details on Unit sphere
-    \ingroup transform
-    \tparam P1 first point type
-    \tparam P2 second point type
- */
-template <typename P1, typename P2>
-struct from_spherical_2_to_cartesian_3
-{
-    inline bool operator()(P1 const& p1, P2& p2) const
-    {
-        assert_dimension<P1, 2>();
-        detail::spherical_to_cartesian(get_as_radian<0>(p1), get_as_radian<1>(p1), 1.0, p2);
-        return true;
-    }
-};
-
-/*!
-    \brief Transformation strategy for 3D spherical (phi,theta,r) to 3D cartesian (x,y,z)
-    \ingroup transform
-    \tparam P1 first point type
-    \tparam P2 second point type
- */
-template <typename P1, typename P2>
-struct from_spherical_3_to_cartesian_3
-{
-    inline bool operator()(P1 const& p1, P2& p2) const
-    {
-        assert_dimension<P1, 3>();
-        detail::spherical_to_cartesian(
-                    get_as_radian<0>(p1), get_as_radian<1>(p1), get<2>(p1), p2);
-        return true;
-    }
-};
-
-/*!
-    \brief Transformation strategy for 3D cartesian (x,y,z) to 2D spherical (phi,theta)
-    \details on Unit sphere
-    \ingroup transform
-    \tparam P1 first point type
-    \tparam P2 second point type
-    \note If x,y,z point is not lying on unit sphere, transformation will return false
- */
-template <typename P1, typename P2>
-struct from_cartesian_3_to_spherical_2
-{
-    inline bool operator()(P1 const& p1, P2& p2) const
-    {
-        assert_dimension<P1, 3>();
-        return detail::cartesian_to_spherical2(get<0>(p1), get<1>(p1), get<2>(p1), p2);
-    }
-};
-
-
-/*!
-    \brief Transformation strategy for 3D cartesian (x,y,z) to 3D spherical (phi,theta,r)
-    \ingroup transform
-    \tparam P1 first point type
-    \tparam P2 second point type
- */
-template <typename P1, typename P2>
-struct from_cartesian_3_to_spherical_3
-{
-    inline bool operator()(P1 const& p1, P2& p2) const
-    {
-        assert_dimension<P1, 3>();
-        return detail::cartesian_to_spherical3(get<0>(p1), get<1>(p1), get<2>(p1), p2);
-    }
-};
-
-}} // namespace strategy::transform
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-/// Specialization for same coordinate system family, same system, same dimension, same point type, can be copied
-template <typename CoordSysTag, typename CoordSys, std::size_t D, typename P>
-struct strategy_transform<CoordSysTag, CoordSysTag, CoordSys, CoordSys, D, D, P, P>
-{
-    typedef strategy::transform::copy_direct<P> type;
-};
-
-/// Specialization for same coordinate system family and system, same dimension, different point type, copy per coordinate
-template <typename CoordSysTag, typename CoordSys, std::size_t D, typename P1, typename P2>
-struct strategy_transform<CoordSysTag, CoordSysTag, CoordSys, CoordSys, D, D, P1, P2>
-{
-    typedef strategy::transform::copy_per_coordinate<P1, P2> type;
-};
-
-/// Specialization to convert from degree to radian for any coordinate system / point type combination
-template <typename CoordSysTag, template<typename> class CoordSys, typename P1, typename P2>
-struct strategy_transform<CoordSysTag, CoordSysTag, CoordSys<degree>, CoordSys<radian>, 2, 2, P1, P2>
-{
-    typedef strategy::transform::degree_radian_vv<P1, P2, std::multiplies> type;
-};
-
-/// Specialization to convert from radian to degree for any coordinate system / point type combination
-template <typename CoordSysTag, template<typename> class CoordSys, typename P1, typename P2>
-struct strategy_transform<CoordSysTag, CoordSysTag, CoordSys<radian>, CoordSys<degree>, 2, 2, P1, P2>
-{
-    typedef strategy::transform::degree_radian_vv<P1, P2, std::divides> type;
-};
-
-
-/// Specialization degree->radian in 3D
-template <typename CoordSysTag, template<typename> class CoordSys, typename P1, typename P2>
-struct strategy_transform<CoordSysTag, CoordSysTag, CoordSys<degree>, CoordSys<radian>, 3, 3, P1, P2>
-{
-    typedef strategy::transform::degree_radian_vv_3<P1, P2, std::multiplies> type;
-};
-
-/// Specialization radian->degree in 3D
-template <typename CoordSysTag, template<typename> class CoordSys, typename P1, typename P2>
-struct strategy_transform<CoordSysTag, CoordSysTag, CoordSys<radian>, CoordSys<degree>, 3, 3, P1, P2>
-{
-    typedef strategy::transform::degree_radian_vv_3<P1, P2, std::divides> type;
-};
-
-/// Specialization to convert from unit sphere(phi,theta) to XYZ
-template <typename CoordSys1, typename CoordSys2, typename P1, typename P2>
-struct strategy_transform<spherical_tag, cartesian_tag, CoordSys1, CoordSys2, 2, 3, P1, P2>
-{
-    typedef strategy::transform::from_spherical_2_to_cartesian_3<P1, P2> type;
-};
-
-/// Specialization to convert from sphere(phi,theta,r) to XYZ
-template <typename CoordSys1, typename CoordSys2, typename P1, typename P2>
-struct strategy_transform<spherical_tag, cartesian_tag, CoordSys1, CoordSys2, 3, 3, P1, P2>
-{
-    typedef strategy::transform::from_spherical_3_to_cartesian_3<P1, P2> type;
-};
-
-/// Specialization to convert from XYZ to unit sphere(phi,theta)
-template <typename CoordSys1, typename CoordSys2, typename P1, typename P2>
-struct strategy_transform<cartesian_tag, spherical_tag, CoordSys1, CoordSys2, 3, 2, P1, P2>
-{
-    typedef strategy::transform::from_cartesian_3_to_spherical_2<P1, P2> type;
-};
-
-/// Specialization to convert from XYZ to sphere(phi,theta,r)
-template <typename CoordSys1, typename CoordSys2, typename P1, typename P2>
-struct strategy_transform<cartesian_tag, spherical_tag, CoordSys1, CoordSys2, 3, 3, P1, P2>
-{
-    typedef strategy::transform::from_cartesian_3_to_spherical_3<P1, P2> type;
-};
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-} // namespace ggl
-
-#endif // GGL_STRATEGY_TRANSFORM_HPP
diff --git a/include/builtin-ggl/ggl/strategies/transform/inverse_transformer.hpp b/include/builtin-ggl/ggl/strategies/transform/inverse_transformer.hpp
deleted file mode 100644
index c798390..0000000
--- a/include/builtin-ggl/ggl/strategies/transform/inverse_transformer.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGIES_TRANSFORM_INVERSE_TRANSFORMER_HPP
-#define GGL_STRATEGIES_TRANSFORM_INVERSE_TRANSFORMER_HPP
-
-#include <boost/numeric/ublas/lu.hpp>
-#include <boost/numeric/ublas/io.hpp>
-#include <ggl/strategies/transform/matrix_transformers.hpp>
-
-namespace ggl
-{
-
-namespace strategy { namespace transform {
-
-/*!
-    \brief Transformation strategy to do an inverse ransformation in Cartesian system
-    \ingroup transform
-    \tparam P1 first point type
-    \tparam P2 second point type
- */
-template <typename P1, typename P2>
-struct inverse_transformer 
-    : ublas_transformer<P1, P2, dimension<P1>::type::value, dimension<P2>::type::value>
-{
-    typedef typename select_coordinate_type<P1, P2>::type T;
-
-    template <typename MatrixType>
-    inline inverse_transformer(const MatrixType& input)
-    {
-        typedef boost::numeric::ublas::matrix<double> matrix_type;
-        // create a working copy of the input
-        matrix_type copy(input.matrix());
-
-        // create a permutation matrix for the LU-factorization
-        typedef boost::numeric::ublas::permutation_matrix<> permutation_matrix;
-        permutation_matrix pm(copy.size1());
-
-        // perform LU-factorization
-        int res = boost::numeric::ublas::lu_factorize<matrix_type>(copy, pm);
-        if( res == 0 )
-        {
-            // create identity matrix
-            this->m_matrix.assign(boost::numeric::ublas::identity_matrix<T>(copy.size1()));
-
-            // backsubstitute to get the inverse
-            boost::numeric::ublas::lu_substitute(copy, pm, this->m_matrix);
-        }
-    }
-
-
-};
-
-
-}} // namespace strategy::transform
-
-
-} // namespace ggl
-
-#endif // GGL_STRATEGIES_TRANSFORM_INVERSE_TRANSFORMER_HPP
diff --git a/include/builtin-ggl/ggl/strategies/transform/map_transformer.hpp b/include/builtin-ggl/ggl/strategies/transform/map_transformer.hpp
deleted file mode 100644
index 9ad4362..0000000
--- a/include/builtin-ggl/ggl/strategies/transform/map_transformer.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGIES_TRANSFORM_MAP_TRANSFORMER_HPP
-#define GGL_STRATEGIES_TRANSFORM_MAP_TRANSFORMER_HPP
-
-
-#include <ggl/strategies/transform/matrix_transformers.hpp>
-
-
-namespace ggl
-{
-
-namespace strategy { namespace transform {
-
-/*!
-    \brief Transformation strategy to do map from one to another Cartesian system
-    \ingroup transform
-    \tparam P1 first point type
-    \tparam P2 second point type
-    \tparam Mirror if true map is mirrored upside-down (in most cases pixels
-        are from top to bottom, while map is from bottom to top)
- */
-template 
-<
-    typename P1, typename P2, 
-    bool Mirror, bool SameScale = true,
-    std::size_t Dimension1 = dimension<P1>::type::value,
-    std::size_t Dimension2 = dimension<P2>::type::value
->
-struct map_transformer 
-    : ublas_transformer<P1, P2, Dimension1, Dimension2>
-{
-    typedef typename select_coordinate_type<P1, P2>::type T;
-    typedef boost::numeric::ublas::matrix<T> M;
-
-    template <typename B, typename D>
-    explicit inline map_transformer(B const& box, D const& width, D const& height)
-    {
-        set_transformation(
-                get<min_corner, 0>(box), get<min_corner, 1>(box),
-                get<max_corner, 0>(box), get<max_corner, 1>(box),
-                width, height);
-    }
-
-    template <typename W, typename D>
-    explicit inline map_transformer(W const& wx1, W const& wy1, W const& wx2, W const& wy2,
-                        D const& width, D const& height)
-    {
-        set_transformation(wx1, wy1, wx2, wy2, width, height);
-    }
-
-
-    private :
-        void set_transformation_point(double wx, double wy, double px, double py, double scalex, double scaley)
-        {
-
-            // Translate to a coordinate system centered on world coordinates (-wx, -wy)
-            M t1(3,3);
-            t1(0,0) = 1;   t1(0,1) = 0;   t1(0,2) = -wx;
-            t1(1,0) = 0;   t1(1,1) = 1;   t1(1,2) = -wy;
-            t1(2,0) = 0;   t1(2,1) = 0;   t1(2,2) = 1;
-
-            // Scale the map
-            M s(3,3);
-            s(0,0) = scalex;   s(0,1) = 0;   s(0,2) = 0;
-            s(1,0) = 0;    s(1,1) = scaley;  s(1,2) = 0;
-            s(2,0) = 0;    s(2,1) = 0;      s(2,2) = 1;
-
-            // Translate to a coordinate system centered on the specified pixels (+px, +py)
-            M t2(3, 3);
-            t2(0,0) = 1;   t2(0,1) = 0;   t2(0,2) = px;
-            t2(1,0) = 0;   t2(1,1) = 1;   t2(1,2) = py;
-            t2(2,0) = 0;   t2(2,1) = 0;   t2(2,2) = 1;
-
-            // Calculate combination matrix in two steps
-            this->m_matrix = boost::numeric::ublas::prod(s, t1);
-            this->m_matrix = boost::numeric::ublas::prod(t2, this->m_matrix);
-        }
-
-
-        template <typename W, typename D>
-        void set_transformation(W const& wx1, W const& wy1, W const& wx2, W const& wy2,
-                        D const& width, D const& height)
-        {
-            D px1 = 0;
-            D py1 = 0;
-            D px2 = width;
-            D py2 = height;
-
-
-            // Calculate appropriate scale, take min because whole box must fit
-            // Scale is in PIXELS/MAPUNITS (meters)
-            double sx = (px2 - px1) / (wx2 - wx1);
-            double sy = (py2 - py1) / (wy2 - wy1);
-
-            if (SameScale)
-            {
-                double scale = (std::min)(sx, sy);
-                sx = scale;
-                sy = scale;
-            }
-
-            // Calculate centerpoints
-            double wmx = (wx1 + wx2) / 2.0;
-            double wmy = (wy1 + wy2) / 2.0;
-            double pmx = (px1 + px2) / 2.0;
-            double pmy = (py1 + py2) / 2.0;
-
-            set_transformation_point(wmx, wmy, pmx, pmy, sx, sy);
-
-            if (Mirror)
-            {
-                // Mirror in y-direction
-                M m(3,3);
-                m(0,0) = 1;   m(0,1) = 0;   m(0,2) = 0;
-                m(1,0) = 0;   m(1,1) = -1;  m(1,2) = 0;
-                m(2,0) = 0;   m(2,1) = 0;   m(2,2) = 1;
-
-                // Translate in y-direction such that it fits again
-                M y(3, 3);
-                y(0,0) = 1;   y(0,1) = 0;   y(0,2) = 0;
-                y(1,0) = 0;   y(1,1) = 1;   y(1,2) = height;
-                y(2,0) = 0;   y(2,1) = 0;   y(2,2) = 1;
-
-                // Calculate combination matrix in two steps
-                this->m_matrix = boost::numeric::ublas::prod(m, this->m_matrix);
-                this->m_matrix = boost::numeric::ublas::prod(y, this->m_matrix);
-            }
-        }
-};
-
-}} // namespace strategy::transform
-
-
-
-} // namespace ggl
-
-
-#endif // GGL_STRATEGIES_TRANSFORM_MAP_TRANSFORMER_HPP
diff --git a/include/builtin-ggl/ggl/strategies/transform/matrix_transformers.hpp b/include/builtin-ggl/ggl/strategies/transform/matrix_transformers.hpp
deleted file mode 100644
index bf463ca..0000000
--- a/include/builtin-ggl/ggl/strategies/transform/matrix_transformers.hpp
+++ /dev/null
@@ -1,357 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_STRATEGIES_MATRIX_TRANSFORMERS_HPP
-#define GGL_STRATEGIES_MATRIX_TRANSFORMERS_HPP
-
-
-// Remove the ublas checking, otherwise the inverse might fail (while nothing seems to be wrong)
-#define BOOST_UBLAS_TYPE_CHECK 0
-
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/numeric/ublas/vector.hpp>
-#include <boost/numeric/ublas/matrix.hpp>
-
-#include <ggl/core/coordinate_dimension.hpp>
-
-
-namespace ggl
-{
-
-
-namespace strategy { namespace transform {
-
-
-/*!
-    \brief Transformation strategy to do an affine matrix transformation in Cartesian system
-    \ingroup transform
-    \tparam P1 first point type
-    \tparam P2 second point type
-    \tparam Dimension1 number of dimensions to transform from first point, optional
-    \tparam Dimension1 number of dimensions to transform to second point, optional
- */
-template
-<
-    typename P1, typename P2,
-    std::size_t Dimension1,
-    std::size_t Dimension2
->
-class ublas_transformer
-{
-};
-
-template <typename P1, typename P2>
-class ublas_transformer<P1, P2, 2, 2>
-{
-protected :
-    typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
-    typedef coordinate_type ct; // Abbreviation
-    typedef boost::numeric::ublas::matrix<coordinate_type> matrix_type;
-    matrix_type m_matrix;
-
-public :
-    inline ublas_transformer(
-                ct const& m_0_0, ct const& m_0_1, ct const& m_0_2,
-                ct const& m_1_0, ct const& m_1_1, ct const& m_1_2,
-                ct const& m_2_0, ct const& m_2_1, ct const& m_2_2)
-        : m_matrix(3, 3)
-    {
-        m_matrix(0,0) = m_0_0;   m_matrix(0,1) = m_0_1;   m_matrix(0,2) = m_0_2;
-        m_matrix(1,0) = m_1_0;   m_matrix(1,1) = m_1_1;   m_matrix(1,2) = m_1_2;
-        m_matrix(2,0) = m_2_0;   m_matrix(2,1) = m_2_1;   m_matrix(2,2) = m_2_2;
-    }
-
-    inline ublas_transformer()
-        : m_matrix(3, 3)
-    {
-    }
-
-
-    inline bool operator()(const P1& p1, P2& p2) const
-    {
-        assert_dimension_greater_equal<P1, 2>();
-        assert_dimension_greater_equal<P2, 2>();
-
-        const coordinate_type& c1 = get<0>(p1);
-        const coordinate_type& c2 = get<1>(p1);
-
-        typedef typename ggl::coordinate_type<P2>::type ct2;
-
-        set<0>(p2, boost::numeric_cast<ct2>(c1 * m_matrix(0,0)
-                + c2 * m_matrix(0,1) + m_matrix(0,2)));
-        set<1>(p2, boost::numeric_cast<ct2>(c1 * m_matrix(1,0)
-                + c2 * m_matrix(1,1) + m_matrix(1,2)));
-
-        return true;
-    }
-
-    const matrix_type& matrix() const { return m_matrix; }
-};
-
-// It IS possible to go from 3 to 2 coordinates
-template <typename P1, typename P2>
-struct ublas_transformer<P1, P2, 3, 2>
-    : public ublas_transformer<P1, P2, 2, 2>
-{
-    typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
-    typedef coordinate_type ct; // Abbreviation
-
-    inline ublas_transformer(
-                ct const& m_0_0, ct const& m_0_1, ct const& m_0_2,
-                ct const& m_1_0, ct const& m_1_1, ct const& m_1_2,
-                ct const& m_2_0, ct const& m_2_1, ct const& m_2_2)
-        : ublas_transformer<P1, P2, 2, 2>(
-                    m_0_0, m_0_1, m_0_2,
-                    m_1_0, m_1_1, m_1_2,
-                    m_2_0, m_2_1, m_2_2)
-    {}
-
-    inline ublas_transformer()
-        : ublas_transformer<P1, P2, 2, 2>()
-    {}
-};
-
-
-template <typename P1, typename P2>
-class ublas_transformer<P1, P2, 3, 3>
-{
-protected :
-    typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
-    typedef coordinate_type ct; // Abbreviation
-    typedef boost::numeric::ublas::matrix<coordinate_type> matrix_type;
-    matrix_type m_matrix;
-
-    inline ublas_transformer(
-                ct const& m_0_0, ct const& m_0_1, ct const& m_0_2, ct const& m_0_3,
-                ct const& m_1_0, ct const& m_1_1, ct const& m_1_2, ct const& m_1_3,
-                ct const& m_2_0, ct const& m_2_1, ct const& m_2_2, ct const& m_2_3,
-                ct const& m_3_0, ct const& m_3_1, ct const& m_3_2, ct const& m_3_3
-                )
-        : m_matrix(4, 4)
-    {
-        m_matrix(0,0) = m_0_0; m_matrix(0,1) = m_0_1; m_matrix(0,2) = m_0_2; m_matrix(0,3) = m_0_3;
-        m_matrix(1,0) = m_1_0; m_matrix(1,1) = m_1_1; m_matrix(1,2) = m_1_2; m_matrix(1,3) = m_1_3;
-        m_matrix(2,0) = m_2_0; m_matrix(2,1) = m_2_1; m_matrix(2,2) = m_2_2; m_matrix(2,3) = m_2_3;
-        m_matrix(3,0) = m_3_0; m_matrix(3,1) = m_3_1; m_matrix(3,2) = m_3_2; m_matrix(3,3) = m_3_3;
-    }
-
-    inline ublas_transformer()
-        : m_matrix(4, 4)
-    {
-    }
-
-
-public :
-
-    inline bool operator()(const P1& p1, P2& p2) const
-    {
-        const coordinate_type& c1 = get<0>(p1);
-        const coordinate_type& c2 = get<1>(p1);
-        const coordinate_type& c3 = get<2>(p1);
-
-        typedef typename ggl::coordinate_type<P2>::type ct2;
-
-        set<0>(p2, boost::numeric_cast<ct2>(c1 * m_matrix(0,0)
-                + c2 * m_matrix(0,1) + c3 * m_matrix(0,2) + m_matrix(0,3)));
-        set<1>(p2, boost::numeric_cast<ct2>(c1 * m_matrix(1,0)
-                + c2 * m_matrix(1,1) + c3 * m_matrix(1,2) + m_matrix(1,3)));
-        set<2>(p2, boost::numeric_cast<ct2>(c1 * m_matrix(2,0)
-                + c2 * m_matrix(2,1) + c3 * m_matrix(2,2) + m_matrix(2,3)));
-
-        return true;
-    }
-
-    const matrix_type& matrix() const { return m_matrix; }
-};
-
-
-
-
-/*!
-    \brief Transformation strategy to translate in Cartesian system
-    \ingroup transform
-    \see http://www.devmaster.net/wiki/Transformation_matrices
-    \tparam P1 first point type
-    \tparam P2 second point type
-    \tparam Dimension1 number of dimensions to transform from first point, optional
-    \tparam Dimension1 number of dimensions to transform to second point, optional
- */
-template
-<
-    typename P1, typename P2,
-    std::size_t Dimension1 = ggl::dimension<P1>::type::value,
-    std::size_t Dimension2 = ggl::dimension<P2>::type::value
->
-struct translate_transformer {};
-
-
-template <typename P1, typename P2>
-struct translate_transformer<P1, P2, 2, 2>
-        : ublas_transformer<P1, P2, 2, 2>
-{
-    typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
-
-    // To have translate transformers compatible for 2/3 dimensions, the
-    // constructor takes an optional third argument doing nothing.
-    inline translate_transformer(coordinate_type const& translate_x,
-                coordinate_type const& translate_y,
-                coordinate_type const& dummy = 0)
-        : ublas_transformer<P1, P2, 2, 2>(
-                1, 0, translate_x,
-                0, 1, translate_y,
-                0, 0, 1)
-    {}
-
-};
-
-template <typename P1, typename P2>
-struct translate_transformer<P1, P2, 3, 3> : ublas_transformer<P1, P2, 3, 3>
-{
-    typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
-
-    inline translate_transformer(coordinate_type const& translate_x,
-                coordinate_type const& translate_y,
-                coordinate_type const& translate_z)
-        : ublas_transformer<P1, P2, 3, 3>(
-                1, 0, 0, translate_x,
-                0, 1, 0, translate_y,
-                0, 0, 1, translate_z,
-                0, 0, 0, 1)
-    {}
-
-};
-
-
-/*!
-    \brief Transformation strategy to scale in Cartesian system
-    \ingroup transform
-    \see http://www.devmaster.net/wiki/Transformation_matrices
-    \tparam P1 first point type
-    \tparam P2 second point type
-    \tparam Dimension1 number of dimensions to transform from first point, optional
-    \tparam Dimension1 number of dimensions to transform to second point, optional
-*/
-template
-<
-    typename P1, typename P2,
-    std::size_t Dimension1 = ggl::dimension<P1>::type::value,
-    std::size_t Dimension2 = ggl::dimension<P2>::type::value
->
-struct scale_transformer {};
-
-
-template <typename P1, typename P2>
-struct scale_transformer<P1, P2, 2, 2> : ublas_transformer<P1, P2, 2, 2>
-{
-    typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
-
-    inline scale_transformer(coordinate_type const& scale_x,
-                coordinate_type const& scale_y,
-                coordinate_type const& dummy = 0)
-        : ublas_transformer<P1, P2, 2, 2>(
-                scale_x, 0,       0,
-                0,       scale_y, 0,
-                0,       0,       1)
-    {}
-};
-
-
-template <typename P1, typename P2>
-struct scale_transformer<P1, P2, 3, 3> : ublas_transformer<P1, P2, 3, 3>
-{
-    typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
-
-    inline scale_transformer(coordinate_type const& scale_x,
-                coordinate_type const& scale_y,
-                coordinate_type const& scale_z)
-        : ublas_transformer<P1, P2, 3, 3>(
-                scale_x, 0,       0,       0,
-                0,       scale_y, 0,       0,
-                0,       0,       scale_z, 0,
-                0,       0,       0,       1)
-    {}
-};
-
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail {
-
-template <typename DegreeOrRadian>
-struct as_radian {};
-
-template <>
-struct as_radian<radian>
-{
-    static inline double get(double const& value)
-    {
-        return value;
-    }
-};
-
-template <>
-struct as_radian<degree>
-{
-    static inline double get(double const& value)
-    {
-        return value * math::d2r;
-    }
-
-};
-
-
-template
-<
-    typename P1, typename P2,
-    std::size_t Dimension1 = ggl::dimension<P1>::type::value,
-    std::size_t Dimension2 = ggl::dimension<P2>::type::value
->
-struct rad_rotate_transformer
-    : ublas_transformer<P1, P2, Dimension1, Dimension2>
-{
-    inline rad_rotate_transformer(double const& angle)
-        : ublas_transformer<P1, P2, Dimension1, Dimension2>(
-                 cos(angle), sin(angle), 0,
-                -sin(angle), cos(angle), 0,
-                 0,          0,          1)
-    {}
-};
-
-}
-#endif
-
-
-/*!
-    \brief Transformation strategy to rotate in Cartesian system
-    \ingroup transform
-    \tparam P1 first point type
-    \tparam P2 second point type
-    \tparam DegreeOrRadian degree/or/radian, type of rotation angle specification
-    \note Not yet in 3D, the 3D version requires special things to allow for
-      rotation around X, Y, Z or arbitrary axis
-    \see http://www.devmaster.net/wiki/Transformation_matrices
-    \note The 3D version will not compile
- */
-template <typename P1, typename P2, typename DegreeOrRadian>
-struct rotate_transformer : detail::rad_rotate_transformer<P1, P2>
-{
-    inline rotate_transformer(double const& angle)
-        : detail::rad_rotate_transformer
-            <
-                P1, P2
-            >(detail::as_radian<DegreeOrRadian>::get(angle))
-    {}
-
-};
-
-
-}} // namespace strategy::transform
-
-} // namespace ggl
-
-#endif // GGL_STRATEGIES_MATRIX_TRANSFORMERS_HPP
diff --git a/include/builtin-ggl/ggl/util/as_range.hpp b/include/builtin-ggl/ggl/util/as_range.hpp
deleted file mode 100644
index 6eaa0a0..0000000
--- a/include/builtin-ggl/ggl/util/as_range.hpp
+++ /dev/null
@@ -1,95 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_UTIL_AS_RANGE_HPP
-#define GGL_UTIL_AS_RANGE_HPP
-
-#include <boost/type_traits.hpp>
-
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/ring_type.hpp>
-#include <ggl/core/tag.hpp>
-#include <ggl/core/tags.hpp>
-
-namespace ggl {
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename GeometryTag, typename Geometry>
-struct as_range_type
-{
-    typedef Geometry type;
-};
-
-template <typename Geometry>
-struct as_range_type<polygon_tag, Geometry>
-{
-    typedef typename ring_type<Geometry>::type type;
-};
-
-
-
-template <typename GeometryTag, typename Geometry, typename Range>
-struct as_range
-{
-    static inline Range const& get(Geometry const& input)
-    {
-        return input;
-    }
-};
-
-template <typename Geometry, typename Range>
-struct as_range<polygon_tag, Geometry, Range>
-{
-    static inline Range const& get(Geometry const& input)
-    {
-        return exterior_ring(input);
-    }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief Meta-function utility returning either type itself, or outer ring
-    \details Utility to handle polygon's outer ring as a range
-\ingroup utility
-*/
-template <typename Geometry>
-struct as_range_type
-{
-    typedef typename dispatch::as_range_type
-        <
-            typename tag<Geometry>::type,
-            Geometry
-        >::type type;
-};
-
-/*!
-\brief Function getting either the range (ring, linestring) itself
-or the outer ring
-    \details Utility to handle polygon's outer ring as a range
-\ingroup utility
-*/
-template <typename Range, typename Geometry>
-inline Range const& as_range(Geometry const& input)
-{
-    return dispatch::as_range
-        <
-            typename tag<Geometry>::type,
-            Geometry,
-            Range
-        >::get(input);
-}
-
-} // namespace ggl
-
-#endif // GGL_UTIL_AS_RANGE_HPP
diff --git a/include/builtin-ggl/ggl/util/assign_box_corner.hpp b/include/builtin-ggl/ggl/util/assign_box_corner.hpp
deleted file mode 100644
index d6974c2..0000000
--- a/include/builtin-ggl/ggl/util/assign_box_corner.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_UTIL_ASSIGN_BOX_CORNER_HPP
-#define GGL_UTIL_ASSIGN_BOX_CORNER_HPP
-
-#include <cstddef>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <ggl/core/coordinate_dimension.hpp>
-
-// TODO: merge with "assign"
-
-namespace ggl
-{
-
-/*!
-    \brief Assign one point of a 2D box
-    \ingroup assign
-    \todo will be merged with assign
-*/
-template <std::size_t C1, std::size_t C2, typename B, typename P>
-inline void assign_box_corner(B const& box, P& point)
-{
-    // Be sure both are 2-Dimensional
-    assert_dimension<B, 2>();
-    assert_dimension<P, 2>();
-
-    // Copy coordinates
-    typedef typename coordinate_type<P>::type coordinate_type;
-
-    set<0>(point, boost::numeric_cast<coordinate_type>(get<C1, 0>(box)));
-    set<1>(point, boost::numeric_cast<coordinate_type>(get<C2, 1>(box)));
-}
-
-/*!
-    \brief Assign the 4 points of a 2D box
-    \ingroup assign
-    \todo will be merged with assign
-    \note The order can be crucial. Most logical is LOWER, UPPER and sub-order LEFT, RIGHT
-*/
-template <typename B, typename P>
-inline void assign_box_corners(B const& box, P& lower_left, P& lower_right, P& upper_left, P& upper_right)
-{
-    assign_box_corner<min_corner, min_corner>(box, lower_left);
-    assign_box_corner<max_corner, min_corner>(box, lower_right);
-    assign_box_corner<min_corner, max_corner>(box, upper_left);
-    assign_box_corner<max_corner, max_corner>(box, upper_right);
-}
-
-} // namespace
-
-#endif // GGL_UTIL_ASSIGN_BOX_CORNER_HPP
diff --git a/include/builtin-ggl/ggl/util/builder.hpp b/include/builtin-ggl/ggl/util/builder.hpp
deleted file mode 100644
index 86a41d4..0000000
--- a/include/builtin-ggl/ggl/util/builder.hpp
+++ /dev/null
@@ -1,334 +0,0 @@
-// VERY OLD
-// NOT PART OF GGL-REVIEW-TREE
-
-
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_UTIL_BUILDER_HPP
-#define GGL_UTIL_BUILDER_HPP
-
-#include <boost/scoped_array.hpp>
-
-#include <ggl/algorithms/make.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/core/ring_type.hpp>
-
-namespace ggl
-{
-
-/***
-
-* probably not necessary, in these cases points can be added directly.
-
-// Polygon builder version using a vector, to which points/holes can be added
-// Builds on destruction OR on call to build()
-template <class P, class Y>
-class polygon_builder_vector
-{
-    public :
-        polygon_builder_vector(Y& poly)
-            : m_poly(poly)
-        {}
-
-        virtual ~polygon_builder_vector()
-        {
-            build();
-        }
-
-        void build()
-        {
-            m_poly.outer().clear();
-            m_interior_rings(poly).resize(m_hole_array.size());
-
-            if (m_point_array.size() <= 0)
-            {
-                return;
-            }
-
-            P& first = m_point_array.front();
-            int r = -1;
-            int h = 0;
-            int i = 0;
-            for (std::vector<P>::const_iterator it = m_point_array.begin();
-                    it != m_point_array.end(); it++, i++)
-            {
-                // Check hole: if it is a holeindex, increase index r for rings
-                if (m_hole_array.size() > h && i == m_hole_array[h])
-                {
-                    r = h++;
-                }
-
-                if (r == -1)
-                {
-                    m_poly.outer().push_back(Y::point_type(it->x(), it->y()));
-                }
-                else
-                {
-                    // Some files indicate a hole using the very first point of the polygon.
-                    // They then also close the complete polygon with the very first point
-                    // Those points are skipped
-                    if (! (first == *it))
-                    {
-                        m_interior_rings(poly)[r].push_back(Y::point_type(it->x(), it->y()));
-                    }
-                }
-            }
-
-            m_hole_array.clear();
-            m_point_array.clear();
-        }
-
-        inline void add_hole(int h)
-        {
-            m_hole_array.push_back(h);
-        }
-        inline void add_point(const P& p)
-        {
-            m_point_array.push_back(p);
-        }
-
-    private :
-        std::vector<P> m_point_array;
-        std::vector<uint32> m_hole_array;
-        Y& m_poly;
-};
-***/
-
-
-// Many files need a pointer to an array of points and/or holes
-// The class below plus the builders below support that
-
-// a boost scoped array, extended with a count and a size
-template <typename T>
-class scoped_array_with_size : public boost::scoped_array<T>
-{
-public:
-
-    scoped_array_with_size(int n)
-        : m_count(n)
-        , boost::scoped_array<T>(n > 0 ? new T[n] : NULL)
-    {}
-
-    inline void resize(int n)
-    {
-        m_count = n;
-        reset(n > 0 ? new T[n] : NULL);
-    }
-
-    inline int count() const { return m_count; }
-    inline int memorysize() const { return m_count * sizeof(T); }
-
-private:
-
-    int m_count;
-};
-
-
-// A linebuilder-pointer class, builds the line on destruction
-template <typename P, typename L>
-class line_builder
-{
-public:
-
-    line_builder(L& line, int n)
-        : m_point_array(n)
-        , m_line(line)
-    {
-    }
-
-    virtual ~line_builder()
-    {
-        m_line.clear();
-        P* p = m_point_array.get();
-        for (int i = 0; i < m_point_array.count(); i++)
-        {
-            typedef point_type<L>::type LP;
-            m_line.push_back(make<LP>(p->x, p->y));
-            p++;
-        }
-    }
-
-    inline int pointarray_size() const { return m_point_array.memorysize(); }
-    inline P* pointarray() { return m_point_array.get(); }
-
-private:
-
-    scoped_array_with_size<P> m_point_array;
-    L& m_line;
-};
-
-// Polygon builder-pointer class, builds polygons on destruction.
-// Creates inner rings using array with hole-indexes
-template <typename P, typename Y>
-class polygon_builder
-{
-public:
-
-    polygon_builder(Y& poly, int n, int holecount = 0)
-        : m_point_array(n)
-        , m_hole_array(holecount)
-        , m_poly(poly)
-    {}
-
-    virtual ~polygon_builder()
-    {
-        exterior_ring(m_poly).clear();
-        interior_rings(m_poly).resize(m_hole_array.count());
-
-        if (m_point_array.count() <= 0)
-        {
-            return;
-        }
-
-        P* p = m_point_array.get();
-        P& first = *p;
-        int r = -1;
-        int h = 0;
-        for (int i = 0; i < m_point_array.count(); i++)
-        {
-            // Check hole: if it is a holeindex, increase index r for rings
-            if (m_hole_array.count() > h && i == m_hole_array[h])
-            {
-                r = h++;
-            }
-
-            if (r == -1)
-            {
-                exterior_ring(m_poly).push_back(Y::point_type(p->x, p->y));
-            }
-            else
-            {
-                // Some files indicate a hole using the very first point of the polygon.
-                // They then also close the complete polygon with the very first point
-                // Those points are skipped
-                if (! (first == *p))
-                {
-                    interior_rings(m_poly)[r].push_back(Y::point_type(p->x, p->y));
-                }
-            }
-            p++;
-        }
-    }
-
-    inline void set_holecount(int n)
-    {
-        m_hole_array.resize(n);
-    }
-
-    inline int pointarray_size() const { return m_point_array.memorysize(); }
-    inline P* pointarray() { return m_point_array.get(); }
-
-    inline int holearray_size() const { return m_hole_array.memorysize(); }
-    inline uint32* holearray() { return m_hole_array.get(); }
-
-private:
-
-    scoped_array_with_size<P> m_point_array;
-    scoped_array_with_size<uint32> m_hole_array;
-    Y& m_poly;
-};
-
-// A linebuilder-pointer class, builds the line on destruction
-template <typename P, typename L>
-class line_extractor
-{
-public:
-
-    line_extractor(const L& line)
-        : m_point_array(line.size())
-        , m_line(line)
-    {
-        P* p = m_point_array.get();
-        for(L::const_iterator it = line.begin(); it != line.end(); it++)
-        {
-            p->x = it->x();
-            p->y = it->y();
-            p++;
-        }
-    }
-
-    inline int pointarray_size() const { return m_point_array.memorysize(); }
-    inline const P* pointarray() const { return m_point_array.get(); }
-
-private:
-
-    scoped_array_with_size<P> m_point_array;
-    const L& m_line;
-};
-
-template <typename P, typename Y>
-class polygon_extractor
-{
-public:
-
-    polygon_extractor(const Y& poly)
-        : m_poly(poly)
-        , m_point_array(0)
-        , m_hole_array(0)
-    {
-        // Calculate total point-size
-        int n = exterior_ring(poly).size();
-        for (int i = 0; i < interior_rings(poly).size(); i++)
-        {
-            n += 1 + interior_rings(poly)[i].size();
-        }
-        m_point_array.resize(n);
-        m_hole_array.resize(interior_rings(poly).size());
-
-        // Fill the points with outer/inner arrays
-        n = 0;
-        add_points(exterior_ring(poly), m_point_array.get(), n);
-        uint32* h = m_hole_array.get();
-        for (int i = 0; i < interior_rings(poly).size(); i++)
-        {
-            h[i] = n;
-            add_points(interior_rings(poly)[i], m_point_array.get(), n);
-            add_very_first(m_point_array.get(), n);
-        }
-    }
-
-    inline int pointarray_count() const { return m_point_array.count(); }
-    inline int pointarray_size() const { return m_point_array.memorysize(); }
-    inline const P* pointarray()const  { return m_point_array.get(); }
-
-    inline int holearray_count() const { return m_hole_array.count(); }
-    inline int holearray_size() const { return m_hole_array.memorysize(); }
-    inline const uint32* holearray()const  { return m_hole_array.get(); }
-
-
-private:
-
-    typedef typename ring_type<Y>::type ring_type;
-
-    scoped_array_with_size<P> m_point_array;
-    scoped_array_with_size<uint32> m_hole_array;
-    const Y& m_poly;
-
-    inline void add_points(const ring_type& r, P* p, int& n)
-    {
-        for (ring_type::const_iterator it = r.begin(); it != r.end(); it++)
-        {
-            p[n].x = it->x();
-            p[n].y = it->y();
-            n++;
-        }
-    }
-
-    // add very first point to denote end-of-hole
-    inline void add_very_first(P* p, int& n)
-    {
-        const P& very_first = *p;
-        p[n++] = very_first;
-    }
-};
-
-} // namespace ggl
-
-#endif // GGL_UTIL_BUILDER_HPP
diff --git a/include/builtin-ggl/ggl/util/copy.hpp b/include/builtin-ggl/ggl/util/copy.hpp
deleted file mode 100644
index b34cd7f..0000000
--- a/include/builtin-ggl/ggl/util/copy.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_UTIL_COPY_HPP
-#define GGL_UTIL_COPY_HPP
-
-#include <cstddef>
-
-#include <boost/concept/requires.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/concept_check.hpp>
-
-#include <ggl/core/concepts/point_concept.hpp>
-
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace copy {
-
-template <typename Src, typename Dst, std::size_t D, std::size_t N>
-struct copy_coordinates
-{
-    static inline void copy(const Src& source, Dst& dest)
-    {
-        typedef typename coordinate_type<Dst>::type coordinate_type;
-
-        set<D>(dest, boost::numeric_cast<coordinate_type>(get<D>(source)));
-        copy_coordinates<Src, Dst, D + 1, N>::copy(source, dest);
-    }
-};
-
-template <typename Src, typename Dst, std::size_t N>
-struct copy_coordinates<Src, Dst, N, N>
-{
-    static inline void copy(const Src& source, Dst& dest)
-    {
-        boost::ignore_unused_variable_warning(source);
-        boost::ignore_unused_variable_warning(dest);
-    }
-};
-
-}} // namespace detail::copy
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-    \brief Copies coordinates from source to destination point
-    \ingroup assign
-    \details The function copy_coordinates copies coordinates from one point to another point.
-    Source point and destination point might be of different types.
-    \param source Source point
-    \param dest Destination point
-    \note If destination type differs from source type, they must have the same coordinate count
- */
-template <typename Src, typename Dst>
-inline void copy_coordinates(const Src& source, Dst& dest)
-{
-    BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Src>) );
-    BOOST_CONCEPT_ASSERT( (concept::Point<Dst>) );
-
-
-    //assert_dimension_equal<Dst, Src>();
-    detail::copy::copy_coordinates<Src, Dst, 0, dimension<Src>::value>::copy(source, dest);
-}
-
-} // namespace ggl
-
-#endif // GGL_UTIL_COPY_HPP
diff --git a/include/builtin-ggl/ggl/util/for_each_coordinate.hpp b/include/builtin-ggl/ggl/util/for_each_coordinate.hpp
deleted file mode 100644
index 4c45953..0000000
--- a/include/builtin-ggl/ggl/util/for_each_coordinate.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_UTIL_FOR_EACH_COORDINATE_HPP
-#define GGL_UTIL_FOR_EACH_COORDINATE_HPP
-
-#include <boost/concept/requires.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename Point, int Dimension, int DimensionCount>
-struct coordinates_scanner
-{
-    template <typename Op>
-    static inline void apply(Point& point, Op operation)
-    {
-        operation.template apply<Point, Dimension>(point);
-        coordinates_scanner
-            <
-                Point,
-                Dimension+1,
-                DimensionCount
-            >::apply(point, operation);
-    }
-};
-
-template <typename Point, int DimensionCount>
-struct coordinates_scanner<Point, DimensionCount, DimensionCount>
-{
-    template <typename Op>
-    static inline void apply(Point&, Op)
-    {}
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-template <typename Point, typename Op>
-inline void for_each_coordinate(Point& point, Op operation)
-{
-    BOOST_CONCEPT_ASSERT( (concept::Point<Point>) );
-
-    typedef typename detail::coordinates_scanner
-        <
-            Point, 0, dimension<Point>::type::value
-        > scanner;
-
-    scanner::apply(point, operation);
-}
-
-} // namespace ggl
-
-#endif // GGL_UTIL_FOR_EACH_COORDINATE_HPP
diff --git a/include/builtin-ggl/ggl/util/get_cs_as_radian.hpp b/include/builtin-ggl/ggl/util/get_cs_as_radian.hpp
deleted file mode 100644
index fe078f0..0000000
--- a/include/builtin-ggl/ggl/util/get_cs_as_radian.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Bruno Lalande 2008, 2009
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-
-#ifndef GGL_UTIL_GET_CS_AS_RADIAN_HPP
-#define GGL_UTIL_GET_CS_AS_RADIAN_HPP
-
-#include <ggl/core/cs.hpp>
-
-namespace ggl {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail {
-
-    template <typename CoordinateSystem>
-    struct get_cs_as_radian {};
-
-    template <typename Units>
-    struct get_cs_as_radian<cs::geographic<Units> >
-    {
-        typedef cs::geographic<radian> type;
-    };
-
-    template <typename Units>
-    struct get_cs_as_radian<cs::spherical<Units> >
-    {
-        typedef cs::spherical<radian> type;
-    };
-
-} // namespace detail
-#endif
-
-
-
-
-} // namespace ggl
-
-#endif // GGL_UTIL_GET_CS_AS_RADIAN_HPP
diff --git a/include/builtin-ggl/ggl/util/less.hpp b/include/builtin-ggl/ggl/util/less.hpp
deleted file mode 100644
index 8522014..0000000
--- a/include/builtin-ggl/ggl/util/less.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_UTIL_LESS_HPP
-#define GGL_UTIL_LESS_HPP
-
-
-namespace ggl
-{
-
-/*!
-    \brief Less predicate for usage in e.g. std::map
-*/
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename P, std::size_t Dimension, std::size_t DimensionCount>
-struct less
-{
-    static inline bool apply(P const& left, P const& right)
-    {
-        typedef typename ggl::coordinate_type<P>::type coordinate_type;
-        coordinate_type const cleft = ggl::get<Dimension>(left);
-        coordinate_type const cright = ggl::get<Dimension>(right);
-
-        return ggl::math::equals(cleft, cright)
-                ? less<P, Dimension + 1, DimensionCount>::apply(left, right)
-                : cleft < cright;
-                ;
-    }
-};
-
-template <typename P, std::size_t DimensionCount>
-struct less<P, DimensionCount, DimensionCount>
-{
-    static inline bool apply(P const&, P const&)
-    {
-        return false;
-    }
-};
-
-}
-#endif
-
-template <typename P>
-struct less
-{
-    inline bool operator()(P const& left, P const& right) const
-    {
-        return detail::less<P, 0,
-            ggl::dimension<P>::type::value>::apply(left, right);
-    }
-};
-
-} // namespace ggl
-
-#endif // GGL_UTIL_LESS_HPP
diff --git a/include/builtin-ggl/ggl/util/loop.hpp b/include/builtin-ggl/ggl/util/loop.hpp
deleted file mode 100644
index 06209b7..0000000
--- a/include/builtin-ggl/ggl/util/loop.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_UTIL_LOOP_HPP
-#define GGL_UTIL_LOOP_HPP
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/geometries/segment.hpp>
-
-namespace ggl
-{
-
-/*!
-    \brief Loops through segments of a container and call specified functor for all segments.
-    \ingroup loop
-    \details for_each like implementation to:
-    - walk over const segments of a linestring/polygon
-    - be able to break out the loop (if the functor returns false)
-    - have a const functor and keep state in separate state-object
-    - we still keep the "functor" here so it might be a function or an object, at this place
-    - in most algorithms the typename F::state_type is used; in those places it must be an object
-
-    \tparam R range type, for example a vector, linestring, linear_ring
-    \tparam F functor type, class or function, not modified by the algorithm
-    \tparam S state type, might be modified
-    \param range range (linestring iterator pair,vector,list,deque) containing points
-    \param functor functor which is called at each const segment
-    \param state state, specified separately from the strategy functor
-    \return false if the functor returns false, otherwise true
-    \par Concepts
-    - \a V
-        - const_iterator begin()
-        - const_iterator end()
-        - value_type
-    - \a F
-        - <em>if it is a function functor</em>: bool \b function (const segment&, state&)
-        - <em>if it is a class functor</em>: bool operator()(const segment&, state&) const
-    - \a S
-        - no specific requirements here, requirments given by F
-    \note Some algorithms from the Generic Geometry Library, for example within, centroid,
-    use this method.
-    \par Examples:
-    First example, using a class functor
-    \dontinclude doxygen_examples.cpp
-    \skip example_loop1
-    \line {
-    \until //:\\
-    Second example, using a function functor and latlong coordinates
-    \dontinclude doxygen_examples.cpp
-    \skip example_loop2
-    \line {
-    \until //:\\
-*/
-template<typename R, typename F, typename S>
-inline bool loop(R const& range, F const& functor, S& state)
-{
-    typedef typename boost::range_const_iterator<R>::type iterator_type;
-
-    iterator_type it = boost::begin(range);
-    if (it != boost::end(range))
-    {
-        iterator_type previous = it++;
-        while(it != boost::end(range))
-        {
-            segment<const typename boost::range_value<R>::type> s(*previous, *it);
-            if (! functor(s, state))
-            {
-                return false;
-            }
-            previous = it++;
-        }
-    }
-    return true;
-}
-
-} // namespace ggl
-
-#endif // GGL_UTIL_LOOP_HPP
diff --git a/include/builtin-ggl/ggl/util/math.hpp b/include/builtin-ggl/ggl/util/math.hpp
deleted file mode 100644
index 1b547fd..0000000
--- a/include/builtin-ggl/ggl/util/math.hpp
+++ /dev/null
@@ -1,91 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_UTIL_MATH_HPP
-#define GGL_UTIL_MATH_HPP
-
-#include <cmath>
-#include <limits>
-
-#include <boost/math/constants/constants.hpp>
-
-#include <ggl/util/select_most_precise.hpp>
-
-namespace ggl
-{
-
-namespace math
-{
-
-// Maybe replace this by boost equals or boost ublas numeric equals or so
-
-/*!
-    \brief returns true if both arguments are equal.
-
-    equals returns true if both arguments are equal.
-    \param a first argument
-    \param b second argument
-    \return true if a == b
-    \note If both a and b are of an integral type, comparison is done by ==. If one of the types
-    is floating point, comparison is done by abs and comparing with epsilon.
-*/
-
-template <typename T1, typename T2>
-inline bool equals(T1 const& a, T2 const& b)
-{
-    typedef typename select_most_precise<T1, T2>::type select_type;
-
-    // TODO: select on is_fundemental. Otherwise (non-fundamental), take == operator
-    if (std::numeric_limits<select_type>::is_exact)
-    {
-        return a == b;
-    }
-    else
-    {
-        return std::abs(a - b) < std::numeric_limits<select_type>::epsilon();
-    }
-}
-
-
-
-double const pi = boost::math::constants::pi<double>();
-double const two_pi = 2.0 * pi;
-double const d2r = pi / 180.0;
-double const r2d = 1.0 / d2r;
-
-/*!
-    \brief Calculates the haversine of an angle
-    \note See http://en.wikipedia.org/wiki/Haversine_formula
-    haversin(alpha) = sin2(alpha/2)
-*/
-template <typename T>
-inline T hav(T const& theta)
-{
-    using boost::math::constants::half;
-    T const sn = std::sin(half<T>() * theta);
-    return sn * sn;
-}
-
-/*!
-\brief Short utility to return the square
-
-\param value Value to calculate the square from
-\return The squared value
-*/
-template <typename T>
-inline T sqr(T const& value)
-{
-    return value * value;
-}
-
-} // namespace math
-
-
-} // namespace ggl
-
-#endif // GGL_UTIL_MATH_HPP
diff --git a/include/builtin-ggl/ggl/util/select_coordinate_type.hpp b/include/builtin-ggl/ggl/util/select_coordinate_type.hpp
deleted file mode 100644
index 88d268f..0000000
--- a/include/builtin-ggl/ggl/util/select_coordinate_type.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_UTIL_SELECT_COORDINATE_TYPE_HPP
-#define GGL_UTIL_SELECT_COORDINATE_TYPE_HPP
-
-
-#include <ggl/core/coordinate_type.hpp>
-#include <ggl/util/select_most_precise.hpp>
-
-/*!
-\defgroup utility utility: utilities
-*/
-
-namespace ggl
-{
-
-
-/*!
-    \brief Utility selecting the most precise coordinate type of two geometries
-    \ingroup utility
- */
-template <typename T1, typename T2>
-struct select_coordinate_type
-{
-    typedef typename select_most_precise
-        <
-            typename coordinate_type<T1>::type,
-            typename coordinate_type<T2>::type
-        >::type type;
-};
-
-} // namespace ggl
-
-#endif // GGL_UTIL_SELECT_COORDINATE_TYPE_HPP
diff --git a/include/builtin-ggl/ggl/util/select_most_precise.hpp b/include/builtin-ggl/ggl/util/select_most_precise.hpp
deleted file mode 100644
index 54ee21c..0000000
--- a/include/builtin-ggl/ggl/util/select_most_precise.hpp
+++ /dev/null
@@ -1,160 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_UTIL_SELECT_MOST_PRECISE_HPP
-#define GGL_UTIL_SELECT_MOST_PRECISE_HPP
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits.hpp>
-
-
-/*!
-\defgroup utility utility: utilities
-*/
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-
-namespace detail { namespace select_most_precise {
-
-
-// At least one of the types is non-fundamental. Take that one.
-// if both are non-fundamental, the type-to-be-selected
-// is unknown, it should be defined by explicit specialization.
-template <bool Fundamental1, bool Fundamental2, typename T1, typename T2>
-struct select_non_fundamental
-{
-    typedef T1 type;
-};
-
-template <typename T1, typename T2>
-struct select_non_fundamental<true, false, T1, T2>
-{
-    typedef T2 type;
-};
-
-template <typename T1, typename T2>
-struct select_non_fundamental<false, true, T1, T2>
-{
-    typedef T1 type;
-};
-
-
-// Selection of largest type (e.g. int of <short int,int>
-// It defaults takes the first one, if second is larger, take the second one
-template <bool SecondLarger, typename T1, typename T2>
-struct select_largest
-{
-    typedef T1 type;
-};
-
-template <typename T1, typename T2>
-struct select_largest<true, T1, T2>
-{
-    typedef T2 type;
-};
-
-
-
-// Selection of floating point and specializations:
-// both FP or both !FP does never occur...
-template <bool FP1, bool FP2, typename T1, typename T2>
-struct select_floating_point
-{
-    typedef char type;
-};
-
-
-// ... so if ONE but not both of these types is floating point, take that one
-template <typename T1, typename T2>
-struct select_floating_point<true, false, T1, T2>
-{
-    typedef T1 type;
-};
-
-
-template <typename T1, typename T2>
-struct select_floating_point<false, true, T1, T2>
-{
-    typedef T2 type;
-};
-
-
-}} // namespace detail::select_most_precise
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-    \brief Traits class to select, of two types, the most accurate type for
-        calculations
-    \ingroup utility
-    \details select_most_precise classes, compares two types on compile time.
-    For example, if an addition must be done with a double and an integer, the
-        result must be a double.
-    If both types are integer, the result can be an integer.
-    \note It is different from the "promote" class, already in boost. That
-        class promotes e.g. a (one) float to a double. This class selects a
-        type from two types. It takes the most accurate, but does not promote
-        afterwards.
-    \note This traits class is completely independant from GGL and might be a
-        separate (small) library in Boost
-    \note If the input is a non-fundamental type, it might be a calculation
-        type such as a GMP-value or another high precision value. Therefore,
-        if one is non-fundamental, that one is chosen.
-    \note If both types are non-fundamental, the result is indeterminate and
-        currently the first one is chosen.
-*/
-template <typename T1, typename T2>
-struct select_most_precise
-{
-    static const bool second_larger = sizeof(T2) > sizeof(T1);
-    static const bool one_not_fundamental = !
-        (boost::is_fundamental<T1>::type::value
-          && boost::is_fundamental<T2>::type::value);
-
-    static const bool both_same =
-        boost::is_floating_point<T1>::type::value
-        == boost::is_floating_point<T2>::type::value;
-
-    typedef typename boost::mpl::if_c
-        <
-            one_not_fundamental,
-            typename detail::select_most_precise::select_non_fundamental
-            <
-                boost::is_fundamental<T1>::type::value,
-                boost::is_fundamental<T2>::type::value,
-                T1,
-                T2
-            >::type,
-            typename boost::mpl::if_c
-            <
-                both_same,
-                typename detail::select_most_precise::select_largest
-                <
-                    second_larger,
-                    T1,
-                    T2
-                >::type,
-                typename detail::select_most_precise::select_floating_point
-                <
-                    boost::is_floating_point<T1>::type::value,
-                    boost::is_floating_point<T2>::type::value,
-                    T1,
-                    T2
-                >::type
-            >::type
-        >::type type;
-};
-
-
-
-} // namespace ggl
-
-#endif // GGL_UTIL_SELECT_MOST_PRECISE_HPP
diff --git a/include/builtin-ggl/ggl/util/write_dsv.hpp b/include/builtin-ggl/ggl/util/write_dsv.hpp
deleted file mode 100644
index 955c20f..0000000
--- a/include/builtin-ggl/ggl/util/write_dsv.hpp
+++ /dev/null
@@ -1,375 +0,0 @@
-// Generic Geometry Library
-//
-// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
-// Copyright Bruno Lalande 2008, 2009
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef GGL_UTIL_WRITE_DSV_HPP
-#define GGL_UTIL_WRITE_DSV_HPP
-
-#include <iostream>
-#include <string>
-
-#include <boost/concept/assert.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <ggl/algorithms/convert.hpp>
-#include <ggl/core/concepts/point_concept.hpp>
-#include <ggl/core/exterior_ring.hpp>
-#include <ggl/core/interior_rings.hpp>
-#include <ggl/core/ring_type.hpp>
-#include <ggl/core/is_multi.hpp>
-#include <ggl/geometries/linear_ring.hpp>
-
-
-
-namespace ggl
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace dsv {
-
-
-struct dsv_settings
-{
-    std::string coordinate_separator;
-    std::string point_open;
-    std::string point_close;
-    std::string point_separator;
-    std::string list_open;
-    std::string list_close;
-    std::string list_separator;
-
-    dsv_settings(std::string const& sep
-            , std::string const& open
-            , std::string const& close
-            , std::string const& psep
-            , std::string const& lopen
-            , std::string const& lclose
-            , std::string const& lsep
-            )
-        : coordinate_separator(sep)
-        , point_open(open)
-        , point_close(close)
-        , point_separator(psep)
-        , list_open(lopen)
-        , list_close(lclose)
-        , list_separator(lsep)
-    {}
-};
-
-template <typename P, int Dimension, int Count>
-struct stream_coordinate
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os, P const& p,
-            dsv_settings const& settings)
-    {
-        os << (Dimension > 0 ? settings.coordinate_separator : "") 
-            << get<Dimension>(p);
-        stream_coordinate<P, Dimension + 1, Count>::apply(os, p, settings);
-    }
-};
-
-template <typename P, int Count>
-struct stream_coordinate<P, Count, Count>
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>&, P const&,
-            dsv_settings const& settings)
-    {}
-};
-
-
-template <typename P, int Index, int Dimension, int Count>
-struct stream_box_corner
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os, P const& p,
-            dsv_settings const& settings)
-    {
-        os << (Dimension > 0 ? settings.coordinate_separator : "") 
-            << get<Index, Dimension>(p);
-        stream_box_corner<P, Index, Dimension + 1, Count>::apply(os, p, settings);
-    }
-};
-
-template <typename P, int Index, int Count>
-struct stream_box_corner<P, Index, Count, Count>
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>&, P const&,
-            dsv_settings const& settings)
-    {}
-};
-
-
-
-
-
-/*!
-\brief Stream points as \ref DSV
-*/
-template <typename Point>
-struct dsv_point
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os, Point const& p,
-            dsv_settings const& settings)
-    {
-        os << settings.point_open;
-        stream_coordinate<Point, 0, dimension<Point>::type::value>::apply(os, p, settings);
-        os << settings.point_close;
-    }
-
-    private:
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point>) );
-};
-
-/*!
-\brief Stream ranges as DSV
-\note policy is used to stream prefix/postfix, enabling derived classes to override this
-*/
-template <typename Range>
-struct dsv_range
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os,
-                Range const& range,
-                dsv_settings const& settings)
-    {
-        typedef typename boost::range_const_iterator<Range>::type iterator_type;
-
-        bool first = true;
-
-        os << settings.list_open;
-
-        // TODO: check EMPTY here
-
-        for (iterator_type it = boost::begin(range);
-            it != boost::end(range);
-            ++it)
-        {
-            os << (first ? "" : settings.point_separator)
-                << settings.point_open;
-
-            stream_coordinate
-                <
-                    point, 0, dimension<point>::type::value
-                >::apply(os, *it, settings);
-            os << settings.point_close;
-
-            first = false;
-        }
-
-        os << settings.list_close;
-    }
-
-    private:
-        typedef typename boost::range_value<Range>::type point;
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<point>) );
-};
-
-/*!
-\brief Stream sequence of points as DSV-part, e.g. (1 2),(3 4)
-\note Used in polygon, all multi-geometries
-*/
-
-
-
-
-
-template <typename Polygon>
-struct dsv_poly
-{
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os,
-                Polygon const& poly,
-                dsv_settings const& settings)
-    {
-        typedef typename ring_type<Polygon>::type ring;
-        typedef typename boost::range_const_iterator<
-                    typename interior_type<Polygon>::type>::type iterator;
-
-        os << settings.list_open;
-
-        dsv_range<ring>::apply(os, exterior_ring(poly), settings);
-        for (iterator it = boost::begin(interior_rings(poly));
-            it != boost::end(interior_rings(poly));
-            ++it)
-        {
-            os << settings.list_separator;
-            dsv_range<ring>::apply(os, *it, settings);
-        }
-        os << settings.list_close;
-    }
-
-    private:
-        BOOST_CONCEPT_ASSERT( (concept::ConstPoint<typename point_type<Polygon>::type>) );
-};
-
-template <typename Box, std::size_t Index>
-struct dsv_box_corner
-{
-    typedef typename point_type<Box>::type point_type;
-
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os,
-            Box const& box,
-            dsv_settings const& settings)
-    {
-        os << settings.point_open;
-        stream_box_corner
-            <
-                Box, Index, 0, dimension<Box>::type::value
-            >::apply(os, box, settings);
-        os << settings.point_close;
-    }
-};
-
-
-template <typename Box>
-struct dsv_box
-{
-    typedef typename point_type<Box>::type point_type;
-
-    template <typename Char, typename Traits>
-    static inline void apply(std::basic_ostream<Char, Traits>& os,
-            Box const& box,
-            dsv_settings const& settings)
-    {
-        os << settings.list_open;
-        dsv_box_corner<Box, 0>::apply(os, box, settings);
-        os << settings.point_separator;
-        dsv_box_corner<Box, 1>::apply(os, box, settings);
-        os << settings.list_close;
-    }
-};
-
-}} // namespace detail::dsv
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-template <typename Tag, bool IsMulti, typename Geometry>
-struct dsv {};
-
-
-template <typename Point>
-struct dsv<point_tag, false, Point>
-    : detail::dsv::dsv_point<Point>
-{};
-
-
-template <typename Linestring>
-struct dsv<linestring_tag, false, Linestring>
-    : detail::dsv::dsv_range<Linestring>
-{};
-
-
-/*!
-\brief Specialization to stream a box as DSV
-*/
-template <typename Box>
-struct dsv<box_tag, false, Box>
-    : detail::dsv::dsv_box<Box>
-{};
-
-
-/*!
-\brief Specialization to stream a ring as DSV
-*/
-template <typename Ring>
-struct dsv<ring_tag, false, Ring>
-    : detail::dsv::dsv_range<Ring>
-{};
-
-
-/*!
-\brief Specialization to stream polygon as DSV
-*/
-template <typename Polygon>
-struct dsv<polygon_tag, false, Polygon>
-    : detail::dsv::dsv_poly<Polygon>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief Generic geometry template manipulator class, takes corresponding output class from traits class
-\ingroup dsv
-\details Stream manipulator, streams geometry classes as \ref DSV streams
-\par Example:
-Small example showing how to use the dsv class
-\dontinclude doxygen_examples.cpp
-\skip example_as_dsv_point
-\line {
-\until }
-\note the template parameter must be specified. If that is inconvient, users might use streamdsv
-which streams geometries as manipulators, or the object generator make_dsv
-*/
-template <typename Geometry>
-class dsv_manipulator
-{
-public:
-
-    inline dsv_manipulator(Geometry const& g,
-            detail::dsv::dsv_settings const& settings)
-        : m_geometry(g)
-        , m_settings(settings)
-    {}
-
-    template <typename Char, typename Traits>
-    inline friend std::basic_ostream<Char, Traits>& operator<<(
-            std::basic_ostream<Char, Traits>& os,
-            dsv_manipulator const& m)
-    {
-        dispatch::dsv
-            <
-                typename tag<Geometry>::type,
-                is_multi<Geometry>::type::value,
-                Geometry
-            >::apply(os, m.m_geometry, m.m_settings);
-        os.flush();
-        return os;
-    }
-
-private:
-    Geometry const& m_geometry;
-    detail::dsv::dsv_settings m_settings;
-};
-
-/*!
-\brief Main DSV-streaming function
-\ingroup dsv
-*/
-template <typename Geometry>
-inline dsv_manipulator<Geometry> dsv(Geometry const& geometry
-    , std::string const& coordinate_separator = ", "
-    , std::string const& point_open = "("
-    , std::string const& point_close = ")"
-    , std::string const& point_separator = ", "
-    , std::string const& list_open = "("
-    , std::string const& list_close = ")"
-    , std::string const& list_separator = ", "
-    )
-{
-    return dsv_manipulator<Geometry>(geometry,
-        detail::dsv::dsv_settings(coordinate_separator,
-            point_open, point_close, point_separator,
-            list_open, list_close, list_separator));
-}
-
-
-
-} // namespace ggl
-
-#endif // GGL_UTIL_WRITE_DSV_HPP
diff --git a/mobilemerk/src/main.cpp b/mobilemerk/src/main.cpp
index 3a51b0e..486928d 100644
--- a/mobilemerk/src/main.cpp
+++ b/mobilemerk/src/main.cpp
@@ -1,4 +1,4 @@
-#include <QtGui/QApplication>
+#include <QtWidgets/QApplication>
 #include "MainWindow.h"
 
 int main(int argc, char *argv[])
diff --git a/plugins/background/MCadastreFranceBackground/qadastre/cadastrewrapper.cpp b/plugins/background/MCadastreFranceBackground/qadastre/cadastrewrapper.cpp
index 6abcab6..f3e7560 100644
--- a/plugins/background/MCadastreFranceBackground/qadastre/cadastrewrapper.cpp
+++ b/plugins/background/MCadastreFranceBackground/qadastre/cadastrewrapper.cpp
@@ -63,24 +63,24 @@ void CadastreWrapper::searchVille(const QString &city, const QString &department
 {
     // {"numerovoie": "", "indiceRepetition": "", "nomvoie": "", "lieuDit": "", "ville": city.upper(), "codePostal": "", "codeDepartement": dept, "nbResultatParPage": 20, "x": 0, "y" : 0}
     QString data = QString("numerovoie=&indiceRepetition=&nomvoie=&lieuDit=&ville=%1&codePostal=&codeDepartement=%2&nbResultatParPage=20&x=0&y=0")
-                   .arg(QString::fromAscii(QUrl::toPercentEncoding(city.toUpper())))
+                   .arg(QString::fromLatin1(QUrl::toPercentEncoding(city.toUpper())))
                    .arg(department);
     qDebug() << data;
-    qDebug() << data.toAscii();
+    qDebug() << data.toLatin1();
     qDebug() << m_networkManager;
-    m_networkManager->post(QNetworkRequest(QUrl("http://www.cadastre.gouv.fr/scpc/rechercherPlan.do")), data.toAscii());
+    m_networkManager->post(QNetworkRequest(QUrl("http://www.cadastre.gouv.fr/scpc/rechercherPlan.do")), data.toLatin1());
 }
 
 void CadastreWrapper::searchCode(const QString &code, const QString &department)
 {
     // {"numerovoie": "", "indiceRepetition": "", "nomvoie": "", "lieuDit": "", "ville": city.upper(), "codePostal": "", "codeDepartement": dept, "nbResultatParPage": 20, "x": 0, "y" : 0}
     QString data = QString("numerovoie=&indiceRepetition=&nomvoie=&lieuDit=&codeCommune=%1&codeDepartement=%2&nbResultatParPage=20&x=0&y=0")
-                   .arg(QString::fromAscii(QUrl::toPercentEncoding(code.toUpper())))
+                   .arg(QString::fromLatin1(QUrl::toPercentEncoding(code.toUpper())))
                    .arg(department);
     qDebug() << data;
-    qDebug() << data.toAscii();
+    qDebug() << data.toLatin1();
     qDebug() << m_networkManager;
-    m_networkManager->post(QNetworkRequest(QUrl("http://www.cadastre.gouv.fr/scpc/rechercherPlan.do")), data.toAscii());
+    m_networkManager->post(QNetworkRequest(QUrl("http://www.cadastre.gouv.fr/scpc/rechercherPlan.do")), data.toLatin1());
 }
 
 City CadastreWrapper::requestCity(const QString &code)
@@ -219,6 +219,7 @@ void CadastreWrapper::networkFinished(QNetworkReply *reply)
         m_gotCookie = true;
     } else if (reply->url() == QUrl("http://www.cadastre.gouv.fr/scpc/rechercherPlan.do")) {
         QString pageData = reply->readAll();
+        qDebug() << pageData;
         QWebPage parsedPage(this);
         QWebFrame *frame = parsedPage.mainFrame();
         frame->setHtml(pageData);
@@ -238,7 +239,7 @@ void CadastreWrapper::networkFinished(QNetworkReply *reply)
         } else {
             // We may have been successfull, who knows ?
             QString name = frame->findFirstElement("#ville").attribute("value");
-            QWebElementCollection links = frame->findAllElements(".resultat > .parcelles .view a");
+            QWebElementCollection links = frame->findAllElements(".resultat > .parcelles a");
             QRegExp linkRE("c=(\\w+)");
             foreach (QWebElement link, links) {
                 QString js = link.attribute("onclick");
diff --git a/plugins/background/MCadastreFranceBackground/qadastre/main.cpp b/plugins/background/MCadastreFranceBackground/qadastre/main.cpp
index 9e5d4b5..090eb29 100644
--- a/plugins/background/MCadastreFranceBackground/qadastre/main.cpp
+++ b/plugins/background/MCadastreFranceBackground/qadastre/main.cpp
@@ -15,7 +15,7 @@
     along with Qadastre. If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include <QtGui/QApplication>
+#include <QtWidgets/QApplication>
 #include <QDesktopServices>
 #include <QDebug>
 #include <QDir>
diff --git a/plugins/background/MGdalBackground/GdalAdapter.cpp b/plugins/background/MGdalBackground/GdalAdapter.cpp
index 5569c6b..cc94637 100644
--- a/plugins/background/MGdalBackground/GdalAdapter.cpp
+++ b/plugins/background/MGdalBackground/GdalAdapter.cpp
@@ -554,7 +554,7 @@ QPixmap GdalAdapter::getPixmap(const QRectF& /*wgs84Bbox*/, const QRectF& thePro
         double rty = src.height() / (double)sz.height();
 
         QRect mRect = QRect(s.toPoint(), sz.toSize());
-        QRect iRect = theImg.rect().intersect(mRect);
+        QRect iRect = theImg.rect().intersected(mRect);
         QRect sRect = QRect(iRect.topLeft() - mRect.topLeft(), iRect.size());
         QRect fRect = QRect(sRect.x() * rtx, sRect.y() * rty, sRect.width() * rtx, sRect.height() * rty);
 
@@ -654,4 +654,6 @@ QString GdalAdapter::toPropertiesHtml()
     return h;
 }
 
+#if !(QT_VERSION >= QT_VERSION_CHECK(5,0,0))
 Q_EXPORT_PLUGIN2(MGdalBackgroundPlugin, GdalAdapterFactory)
+#endif
diff --git a/plugins/background/MGdalBackground/GdalAdapter.h b/plugins/background/MGdalBackground/GdalAdapter.h
index b78681d..26e9613 100644
--- a/plugins/background/MGdalBackground/GdalAdapter.h
+++ b/plugins/background/MGdalBackground/GdalAdapter.h
@@ -177,6 +177,9 @@ class GdalAdapterFactory : public QObject, public IMapAdapterFactory
 {
     Q_OBJECT
     Q_INTERFACES(IMapAdapterFactory)
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    Q_PLUGIN_METADATA(IID "be.merkaartor.gdaladapter" FILE "GdalAdapter.json")
+#endif
 
 public:
     //! Creates an instance of the actual plugin
diff --git a/plugins/background/MGdalBackground/GdalAdapter.json b/plugins/background/MGdalBackground/GdalAdapter.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/plugins/background/MGdalBackground/GdalAdapter.json
@@ -0,0 +1 @@
+{}
diff --git a/plugins/background/MGeoTiffBackground/GeoTiffAdapter.cpp b/plugins/background/MGeoTiffBackground/GeoTiffAdapter.cpp
index 88d7a05..fa8c553 100644
--- a/plugins/background/MGeoTiffBackground/GeoTiffAdapter.cpp
+++ b/plugins/background/MGeoTiffBackground/GeoTiffAdapter.cpp
@@ -323,7 +323,7 @@ QPixmap GeoTiffAdapter::getPixmap(const QRectF& /*wgs84Bbox*/, const QRectF& the
         double rty = src.height() / (double)sz.height();
 
         QRect mRect = QRect(s.toPoint(), sz.toSize());
-        QRect iRect = theImg.rect().intersect(mRect);
+        QRect iRect = theImg.rect().intersected(mRect);
         QRect sRect = QRect(iRect.topLeft() - mRect.topLeft(), iRect.size());
         QRect fRect = QRect(sRect.x() * rtx, sRect.y() * rty, sRect.width() * rtx, sRect.height() * rty);
 
@@ -423,5 +423,7 @@ QString GeoTiffAdapter::toPropertiesHtml()
     return h;
 }
 
+#if !(QT_VERSION >= QT_VERSION_CHECK(5,0,0))
 Q_EXPORT_PLUGIN2(MGeoTiffBackgroundPlugin, GeoTiffAdapterFactory)
+#endif
 
diff --git a/plugins/background/MGeoTiffBackground/GeoTiffAdapter.h b/plugins/background/MGeoTiffBackground/GeoTiffAdapter.h
index 72660a0..a032377 100644
--- a/plugins/background/MGeoTiffBackground/GeoTiffAdapter.h
+++ b/plugins/background/MGeoTiffBackground/GeoTiffAdapter.h
@@ -174,6 +174,9 @@ class GeoTiffAdapterFactory : public QObject, public IMapAdapterFactory
 {
     Q_OBJECT
     Q_INTERFACES(IMapAdapterFactory)
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    Q_PLUGIN_METADATA(IID "be.merkaartor.geotiffadapter" FILE "GeoTiffAdapter.json")
+#endif
 
 public:
     //! Creates an instance of the actual plugin
diff --git a/plugins/background/MGeoTiffBackground/GeoTiffAdapter.json b/plugins/background/MGeoTiffBackground/GeoTiffAdapter.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/plugins/background/MGeoTiffBackground/GeoTiffAdapter.json
@@ -0,0 +1 @@
+{}
diff --git a/plugins/background/MGosmoreBackground/GosmoreAdapter.cpp b/plugins/background/MGosmoreBackground/GosmoreAdapter.cpp
index 44a0530..51d38d1 100644
--- a/plugins/background/MGosmoreBackground/GosmoreAdapter.cpp
+++ b/plugins/background/MGosmoreBackground/GosmoreAdapter.cpp
@@ -763,5 +763,7 @@ QString GosmoreAdapter::toPropertiesHtml()
 }
 
 #ifndef _MOBILE
+#if !(QT_VERSION >= QT_VERSION_CHECK(5,0,0))
 Q_EXPORT_PLUGIN2(MGosmoreBackgroundPlugin, GosmoreAdapterFactory)
 #endif
+#endif
diff --git a/plugins/background/MGosmoreBackground/GosmoreAdapter.h b/plugins/background/MGosmoreBackground/GosmoreAdapter.h
index 5a443ed..40ff34e 100644
--- a/plugins/background/MGosmoreBackground/GosmoreAdapter.h
+++ b/plugins/background/MGosmoreBackground/GosmoreAdapter.h
@@ -29,6 +29,9 @@ class GosmoreAdapter : public IMapAdapter
 {
     Q_OBJECT
     Q_INTERFACES(IMapAdapter)
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    Q_PLUGIN_METADATA(IID "be.merkaartor.GosmoreAdapter" FILE "GosmoreAdapter.json")
+#endif
 
 public:
     GosmoreAdapter();
diff --git a/plugins/background/MGosmoreBackground/GosmoreAdapter.json b/plugins/background/MGosmoreBackground/GosmoreAdapter.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/plugins/background/MGosmoreBackground/GosmoreAdapter.json
@@ -0,0 +1 @@
+{}
diff --git a/plugins/background/MMsBingMapBackground/MMsBingMapBackground.pro b/plugins/background/MMsBingMapBackground/MMsBingMapBackground.pro
index d82079c..3018e5e 100644
--- a/plugins/background/MMsBingMapBackground/MMsBingMapBackground.pro
+++ b/plugins/background/MMsBingMapBackground/MMsBingMapBackground.pro
@@ -6,6 +6,8 @@ DEPENDPATH += $${MERKAARTOR_SRC_DIR}/interfaces
 INCLUDEPATH += $${MERKAARTOR_SRC_DIR}/interfaces
 include ($${MERKAARTOR_SRC_DIR}/interfaces/Interfaces.pri)
 
+QT += widgets
+
 HEADERS += \
     mapadapter.h \
     msbingmapadapter.h
diff --git a/plugins/background/MMsBingMapBackground/msbingmapadapter.cpp b/plugins/background/MMsBingMapBackground/msbingmapadapter.cpp
index 43d99d0..7fb5ac9 100644
--- a/plugins/background/MMsBingMapBackground/msbingmapadapter.cpp
+++ b/plugins/background/MMsBingMapBackground/msbingmapadapter.cpp
@@ -220,9 +220,11 @@ QString MsBingMapAdapter::getLicenseUrl() const
     return QString();
 }
 
+#if !(QT_VERSION >= QT_VERSION_CHECK(5,0,0))
 Q_EXPORT_PLUGIN2(MMsBingMapBackgroundPlugin, MsBingMapAdapterFactory)
+#endif
 
-QString MsBingMapAdapter::getAttributionsHtml(const QRectF &bbox, const QRect &screen)
+QString MsBingMapAdapter::getAttributionsHtml(const QRectF &bbox , const QRect &/* screen */)
 {
     QStringList providers;
     int zoom = qRound(log(360. / bbox.width()) / log(2));   // log2 not available on FreeBSD
@@ -241,22 +243,22 @@ QString MsBingMapAdapter::getLogoHtml()
     return QString("<center><a href=\"http://www.bing.com/maps/\"><img src=\":/images/bing_logo.png\"/></a><br/><a href=\"http://opengeodata.org/microsoft-imagery-details\" style=\"color:silver; font-size:9px\">%1</a></center>").arg(tr("Terms of Use"));
 }
 
-int MsBingMapAdapter::getMinZoom(const QRectF &bbox) const
+int MsBingMapAdapter::getMinZoom(const QRectF &/* bbox */) const
 {
     return min_zoom;
 }
 
-int MsBingMapAdapter::getMaxZoom(const QRectF &bbox) const
+int MsBingMapAdapter::getMaxZoom(const QRectF &/* bbox */) const
 {
     return max_zoom;
 }
 
-int MsBingMapAdapter::getAdaptedMinZoom(const QRectF &bbox) const
+int MsBingMapAdapter::getAdaptedMinZoom(const QRectF &/* bbox */) const
 {
     return 0;
 }
 
-int MsBingMapAdapter::getAdaptedMaxZoom(const QRectF &bbox) const
+int MsBingMapAdapter::getAdaptedMaxZoom(const QRectF &/* bbox */) const
 {
     return max_zoom > min_zoom ? max_zoom - min_zoom : min_zoom - max_zoom;
 }
diff --git a/plugins/background/MMsBingMapBackground/msbingmapadapter.h b/plugins/background/MMsBingMapBackground/msbingmapadapter.h
index 8d3815c..2d5191c 100644
--- a/plugins/background/MMsBingMapBackground/msbingmapadapter.h
+++ b/plugins/background/MMsBingMapBackground/msbingmapadapter.h
@@ -150,6 +150,9 @@ class MsBingMapAdapterFactory : public QObject, public IMapAdapterFactory
 {
     Q_OBJECT
     Q_INTERFACES(IMapAdapterFactory)
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    Q_PLUGIN_METADATA(IID "be.merkaartor.msbingmapadapter" FILE "msbingmapadapter.json")
+#endif
 
 public:
     //! Creates an instance of the actual plugin
diff --git a/plugins/background/MMsBingMapBackground/msbingmapadapter.json b/plugins/background/MMsBingMapBackground/msbingmapadapter.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/plugins/background/MMsBingMapBackground/msbingmapadapter.json
@@ -0,0 +1 @@
+{}
diff --git a/plugins/background/MNavitBackground/NavitAdapter.cpp b/plugins/background/MNavitBackground/NavitAdapter.cpp
index 875687a..d96ecb9 100644
--- a/plugins/background/MNavitBackground/NavitAdapter.cpp
+++ b/plugins/background/MNavitBackground/NavitAdapter.cpp
@@ -739,5 +739,7 @@ QString NavitAdapter::toPropertiesHtml()
 }
 
 #ifndef _MOBILE
+#if !(QT_VERSION >= QT_VERSION_CHECK(5,0,0))
 Q_EXPORT_PLUGIN2(MNavitBackgroundPlugin, NavitAdapterFactory)
 #endif
+#endif
diff --git a/plugins/background/MNavitBackground/NavitAdapter.h b/plugins/background/MNavitBackground/NavitAdapter.h
index 870e68e..2b56e2c 100644
--- a/plugins/background/MNavitBackground/NavitAdapter.h
+++ b/plugins/background/MNavitBackground/NavitAdapter.h
@@ -28,6 +28,9 @@ class NavitAdapter : public IMapAdapter
 {
     Q_OBJECT
     Q_INTERFACES(IMapAdapter)
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    Q_PLUGIN_METADATA(IID "be.merkaartor.NavitAdapter" FILE "NavitAdapter.json")
+#endif
 
 public:
     NavitAdapter();
diff --git a/plugins/background/MNavitBackground/NavitAdapter.json b/plugins/background/MNavitBackground/NavitAdapter.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/plugins/background/MNavitBackground/NavitAdapter.json
@@ -0,0 +1 @@
+{}
diff --git a/plugins/background/MSpatialiteBackground/PrimitiveFeature.h b/plugins/background/MSpatialiteBackground/PrimitiveFeature.h
index 88b26da..225a84b 100644
--- a/plugins/background/MSpatialiteBackground/PrimitiveFeature.h
+++ b/plugins/background/MSpatialiteBackground/PrimitiveFeature.h
@@ -41,7 +41,7 @@ public:
     virtual IFeature* getParent(int) { return NULL; }
     virtual const IFeature* getParent(int) const { return NULL; }
 
-    virtual bool hasPainter(double) const { return false; }
+    virtual bool hasPainter(qreal) const { return false; }
 
     /** Give the id of the feature.
      *  If the feature has no id, a random id is generated
diff --git a/plugins/background/MSpatialiteBackground/SpatialiteAdapter.cpp b/plugins/background/MSpatialiteBackground/SpatialiteAdapter.cpp
index e819685..b925baf 100644
--- a/plugins/background/MSpatialiteBackground/SpatialiteAdapter.cpp
+++ b/plugins/background/MSpatialiteBackground/SpatialiteAdapter.cpp
@@ -73,18 +73,6 @@ inline uint qHash(IFeature::FId id)
 
 SpatialiteAdapter::SpatialiteAdapter()
 {
-    /*
-    VERY IMPORTANT:
-    you must initialize the SpatiaLite extension [and related]
-    BEFORE attempting to perform any other SQLite call
-    */
-    spatialite_init (0);
-
-    /* showing the SQLite version */
-    qDebug ("SQLite version: %s", sqlite3_libversion ());
-    /* showing the SpatiaLite version */
-    qDebug ("SpatiaLite version: %s", spatialite_version ());
-
     QAction* loadFile = new QAction(tr("Load Spatialite db..."), this);
     loadFile->setData(theUid.toString());
     connect(loadFile, SIGNAL(triggered()), SLOT(onLoadFile()));
@@ -105,8 +93,10 @@ SpatialiteAdapter::SpatialiteAdapter()
 
 SpatialiteAdapter::~SpatialiteAdapter()
 {
-    if (m_loaded)
+    if (m_loaded) {
         sqlite3_close(m_handle);
+        spatialite_cleanup_ex(s_handle);
+    }
 }
 
 void SpatialiteAdapter::onLoadFile()
@@ -155,10 +145,13 @@ void SpatialiteAdapter::initTable(const QString& table)
 
 void SpatialiteAdapter::setFile(const QString& fn)
 {
-    if (m_loaded)
+    if (m_loaded) {
         sqlite3_close(m_handle);
+        spatialite_cleanup_ex(s_handle);
+    }
     m_loaded = false;
 
+    s_handle = spatialite_alloc_connection();
     int ret = sqlite3_open_v2 (fn.toUtf8().data(), &m_handle, SQLITE_OPEN_READONLY, NULL);
     if (ret != SQLITE_OK)
     {
@@ -166,6 +159,7 @@ void SpatialiteAdapter::setFile(const QString& fn)
         sqlite3_close (m_handle);
         return;
     }
+    spatialite_init_ex(m_handle, s_handle, 0);
     QString q = QString("SELECT f_table_name FROM geometry_columns;");
     sqlite3_stmt *pStmt;
     ret = sqlite3_prepare_v2(m_handle, q.toUtf8().data(), q.size(), &pStmt, NULL);
@@ -181,6 +175,7 @@ void SpatialiteAdapter::setFile(const QString& fn)
     if (!m_tables.size()) {
         QMessageBox::critical(0,QCoreApplication::translate("SpatialiteBackground","No valid file"),QCoreApplication::translate("SpatialiteBackground","geometry_columns table absent or invalid"));
         sqlite3_close (m_handle);
+        spatialite_cleanup_ex(s_handle);
         return;
     }
     m_dbName = fn;
@@ -472,5 +467,7 @@ QString SpatialiteAdapter::toPropertiesHtml()
 }
 
 #ifndef _MOBILE
+#if !(QT_VERSION >= QT_VERSION_CHECK(5,0,0))
 Q_EXPORT_PLUGIN2(MSpatialiteBackgroundPlugin, SpatialiteAdapterFactory)
 #endif
+#endif
diff --git a/plugins/background/MSpatialiteBackground/SpatialiteAdapter.h b/plugins/background/MSpatialiteBackground/SpatialiteAdapter.h
index 83dcfaa..8aa3454 100644
--- a/plugins/background/MSpatialiteBackground/SpatialiteAdapter.h
+++ b/plugins/background/MSpatialiteBackground/SpatialiteAdapter.h
@@ -25,7 +25,7 @@
 these headers are required in order to support
 SQLite/SpatiaLite
 */
-#include <spatialite/sqlite3.h>
+#include <sqlite3.h>
 #include <spatialite/gaiageo.h>
 #include <spatialite.h>
 
@@ -39,6 +39,9 @@ class SpatialiteAdapter : public IMapAdapter
 {
     Q_OBJECT
     Q_INTERFACES(IMapAdapter)
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    Q_PLUGIN_METADATA(IID "be.merkaartor.SpatialiteAdapter" FILE "SpatialiteAdapter.json")
+#endif
 
 public:
     SpatialiteAdapter();
@@ -164,6 +167,7 @@ private:
 
     QString m_dbName;
     sqlite3 *m_handle;
+    void * s_handle;
     QHash<QString, sqlite3_stmt*> m_stmtHandles;
 
     mutable QCache<IFeature::FId, IFeature> m_cache;
diff --git a/plugins/background/MSpatialiteBackground/SpatialiteAdapter.json b/plugins/background/MSpatialiteBackground/SpatialiteAdapter.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/plugins/background/MSpatialiteBackground/SpatialiteAdapter.json
@@ -0,0 +1 @@
+{}
diff --git a/plugins/background/MWalkingPapersBackground/WalkingPapersAdapter.cpp b/plugins/background/MWalkingPapersBackground/WalkingPapersAdapter.cpp
index 40fffde..e9ece31 100644
--- a/plugins/background/MWalkingPapersBackground/WalkingPapersAdapter.cpp
+++ b/plugins/background/MWalkingPapersBackground/WalkingPapersAdapter.cpp
@@ -20,6 +20,7 @@
 #include <QMessageBox>
 #include <QInputDialog>
 #include <QTimer>
+#include <QImage>
 
 #include <QNetworkAccessManager>
 #include <QNetworkRequest>
@@ -111,17 +112,17 @@ void make_grayscale(QImage& in)
 {
     if(in.format()!=QImage::Format_Indexed8)
         throw "format error";
-    QVector<int> transform_table(in.numColors());
-    for(int i=0;i<in.numColors();i++)
+    QVector<int> transform_table(in.colorCount());
+    for(int i=0;i<in.colorCount();i++)
     {
         QRgb c1=in.color(i);
         int avg=qGray(c1);
         transform_table[i] = avg;
     }
-    in.setNumColors(256);
+    in.setColorCount(256);
     for(int i=0;i<256;i++)
         in.setColor(i,qRgb(i,i,i));
-    for(int i=0;i<in.numBytes();i++)
+    for(int i=0;i<in.byteCount();i++)
     {
         in.bits()[i]=transform_table[in.bits()[i]];
     }
@@ -152,7 +153,7 @@ bool WalkingPapersAdapter::getWalkingPapersDetails(const QUrl& reqUrl, QRectF& b
         return false;
     }
 
-    QString center = QString::fromAscii(reply->rawHeader("X-Print-Bounds"));
+    QString center = QString::fromLatin1(reply->rawHeader("X-Print-Bounds"));
     QStringList sl = center.split(" ");
     if (!sl.size() == 4)
         return false;
@@ -337,7 +338,7 @@ QPixmap WalkingPapersAdapter::getPixmap(const QRectF& wgs84Bbox, const QRectF& /
         double rty = theImg.height() / (double)sz.height();
 
         QRect mRect = QRect(s, sz);
-        QRect iRect = theImg.rect().intersect(mRect);
+        QRect iRect = theImg.rect().intersected(mRect);
         QRect sRect = QRect(iRect.topLeft() - mRect.topLeft(), iRect.size());
         QRect fRect = QRect(sRect.x() * rtx, sRect.y() * rty, sRect.width() * rtx, sRect.height() * rty);
 
@@ -440,4 +441,6 @@ QString WalkingPapersAdapter::toPropertiesHtml()
 }
 
 
+#if !(QT_VERSION >= QT_VERSION_CHECK(5,0,0))
 Q_EXPORT_PLUGIN2(MWalkingPapersBackgroundPlugin, WalkingPapersAdapterFactory)
+#endif
diff --git a/plugins/background/MWalkingPapersBackground/WalkingPapersAdapter.h b/plugins/background/MWalkingPapersBackground/WalkingPapersAdapter.h
index 670c2d1..62e5d70 100644
--- a/plugins/background/MWalkingPapersBackground/WalkingPapersAdapter.h
+++ b/plugins/background/MWalkingPapersBackground/WalkingPapersAdapter.h
@@ -155,6 +155,9 @@ class WalkingPapersAdapterFactory : public QObject, public IMapAdapterFactory
 {
     Q_OBJECT
     Q_INTERFACES(IMapAdapterFactory)
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    Q_PLUGIN_METADATA(IID "be.merkaartor.walkingpapersadapter" FILE "WalkingPapersAdapter.json")
+#endif
 
 public:
     //! Creates an instance of the actual plugin
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/config.pri b/plugins/background/MWalkingPapersBackground/WalkingPapersAdapter.json
similarity index 100%
rename from 3rdparty/qttoolbardialog-2.2_1-opensource/config.pri
rename to plugins/background/MWalkingPapersBackground/WalkingPapersAdapter.json
diff --git a/plugins/background/MYahooBackground/yahoolegalmapadapter.cpp b/plugins/background/MYahooBackground/yahoolegalmapadapter.cpp
index c6d67c2..1e0e378 100644
--- a/plugins/background/MYahooBackground/yahoolegalmapadapter.cpp
+++ b/plugins/background/MYahooBackground/yahoolegalmapadapter.cpp
@@ -101,4 +101,6 @@ void YahooLegalMapAdapter::setImageManager(IImageManager* anImageManager)
     theImageManager = anImageManager;
 }
 
+#if !(QT_VERSION >= QT_VERSION_CHECK(5,0,0))
 Q_EXPORT_PLUGIN2(MYahooBackgroundPlugin, YahooLegalMapAdapterFactory)
+#endif
diff --git a/plugins/background/MYahooBackground/yahoolegalmapadapter.h b/plugins/background/MYahooBackground/yahoolegalmapadapter.h
index 07e0e53..5d512ce 100644
--- a/plugins/background/MYahooBackground/yahoolegalmapadapter.h
+++ b/plugins/background/MYahooBackground/yahoolegalmapadapter.h
@@ -138,6 +138,9 @@ class YahooLegalMapAdapterFactory : public QObject, public IMapAdapterFactory
 {
     Q_OBJECT
     Q_INTERFACES(IMapAdapterFactory)
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    Q_PLUGIN_METADATA(IID "be.merkaartor.YahooLegalMapAdapter" FILE "yahoolegalmapadapter.json")
+#endif
 
 public:
     //! Creates an instance of the actual plugin
diff --git a/plugins/background/MYahooBackground/yahoolegalmapadapter.json b/plugins/background/MYahooBackground/yahoolegalmapadapter.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/plugins/background/MYahooBackground/yahoolegalmapadapter.json
@@ -0,0 +1 @@
+{}
diff --git a/plugins/background/MYahooTiledBackground/yahootiledmapadapter.cpp b/plugins/background/MYahooTiledBackground/yahootiledmapadapter.cpp
index d0fde81..77496fb 100644
--- a/plugins/background/MYahooTiledBackground/yahootiledmapadapter.cpp
+++ b/plugins/background/MYahooTiledBackground/yahootiledmapadapter.cpp
@@ -221,4 +221,6 @@ bool YahooTiledMapAdapter::isValid(int x, int y, int z) const
 }
 
 
+#if !(QT_VERSION >= QT_VERSION_CHECK(5,0,0))
 Q_EXPORT_PLUGIN2(MYahooTiledBackgroundPlugin, YahooTiledMapAdapterFactory)
+#endif
diff --git a/plugins/background/MYahooTiledBackground/yahootiledmapadapter.h b/plugins/background/MYahooTiledBackground/yahootiledmapadapter.h
index 569c050..0ac6292 100644
--- a/plugins/background/MYahooTiledBackground/yahootiledmapadapter.h
+++ b/plugins/background/MYahooTiledBackground/yahootiledmapadapter.h
@@ -155,6 +155,9 @@ class YahooTiledMapAdapterFactory : public QObject, public IMapAdapterFactory
 {
     Q_OBJECT
     Q_INTERFACES(IMapAdapterFactory)
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    Q_PLUGIN_METADATA(IID "be.merkaartor.YahooTiledMapAdapter" FILE "yahootiledmapadapter.json")
+#endif
 
 public:
     //! Creates an instance of the actual plugin
diff --git a/plugins/background/MYahooTiledBackground/yahootiledmapadapter.json b/plugins/background/MYahooTiledBackground/yahootiledmapadapter.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/plugins/background/MYahooTiledBackground/yahootiledmapadapter.json
@@ -0,0 +1 @@
+{}
diff --git a/plugins/background/background.pro b/plugins/background/background.pro
index 83fcb45..9470a58 100644
--- a/plugins/background/background.pro
+++ b/plugins/background/background.pro
@@ -1,5 +1,7 @@
 TEMPLATE = subdirs
 
+CONFIG += debug_and_release
+
 #Qt Version
 QT_VERSION = $$[QT_VERSION]
 QT_VERSION = $$split(QT_VERSION, ".")
@@ -8,23 +10,16 @@ QT_VER_MIN = $$member(QT_VERSION, 1)
 
 !symbian {
     SUBDIRS += \
-        # MArbitraryRasterMapBackground \
-        # MNavitBackground \
+#        MNavitBackground \
+#        MCadastreFranceBackground \
 #        MYahooTiledBackground \
 #        MYahooBackground \
         MMsBingMapBackground \
-        MWalkingPapersBackground
-
-    greaterThan(QT_VER_MAJ, 3) : greaterThan(QT_VER_MIN, 5) {
-        SUBDIRS += MCadastreFranceBackground
-    }
-
-    SUBDIRS += MGeoTiffBackground \
-               MGdalBackground
+        MWalkingPapersBackground \
+        MGeoTiffBackground \
+        MGdalBackground
 
     contains (SPATIALITE, 1) {
         SUBDIRS += MSpatialiteBackground
     }
-
 }
-
diff --git a/plugins/background/common.pri b/plugins/background/common.pri
index aaad3c1..684bbe1 100644
--- a/plugins/background/common.pri
+++ b/plugins/background/common.pri
@@ -1,4 +1,6 @@
-DESTDIR = $$OUTPUT_DIR/$$(QMAKESPEC)/bin/plugins/background
+OUTPUT_DIR = $$OUT_PWD/../../../binaries
+DESTDIR = $$OUTPUT_DIR/bin/plugins/background
+
 macx {
 	target.path = $${PREFIX}/merkaartor.app/Contents/plugins/background
 }
diff --git a/plugins/common.pri b/plugins/common.pri
index 1872f9f..332edc4 100644
--- a/plugins/common.pri
+++ b/plugins/common.pri
@@ -10,22 +10,13 @@ QT_VER_MIN = $$member(QT_VERSION, 1)
 
 MERKAARTOR_SRC_DIR = $$PWD/..
 
+CONFIG += debug_and_release
+
 #Static config
 include ($$MERKAARTOR_SRC_DIR/src/Config.pri)
 
 DEFINES += VERSION=\"\\\"$$VERSION\\\"\"
-DEFINES += REVISION=\"\\\"$$REVISION\\\"\"
-
-!contains(NODEBUG,1) {
-    CONFIG += debug
-    OBJECTS_DIR += tmp/$$(QMAKESPEC)/obj_debug
-}
-contains(NODEBUG,1) {
-    CONFIG += release
-    DEFINES += NDEBUG
-    DEFINES += QT_NO_DEBUG_OUTPUT
-    OBJECTS_DIR += tmp/$$(QMAKESPEC)/obj_release
-}
+#DEFINES += REVISION=\"\\\"$$REVISION\\\"\"
 
 win32-msvc* {
     DEFINES += _USE_MATH_DEFINES
@@ -34,21 +25,21 @@ win32-msvc* {
 TEMPLATE = lib
 CONFIG += plugin
 
-QT += core xml network
-
-#DEFINES += QT_NO_DEBUG_OUTPUT
+QT += core xml network widgets
 
-OUTPUT_DIR = $$MERKAARTOR_SRC_DIR/$$(QMAKESPEC)/binaries
-UI_DIR += tmp/$$(QMAKESPEC)
-MOC_DIR += tmp/$$(QMAKESPEC)
-RCC_DIR += tmp/$$(QMAKESPEC)
-DESTDIR = $$OUTPUT_DIR/$$(QMAKESPEC)/bin/plugins
+OUTPUT_DIR = $$OUT_PWD/../binaries
+UI_DIR += tmp
+MOC_DIR += tmp
+RCC_DIR += tmp
+DESTDIR = $$OUTPUT_DIR/bin/plugins
 
-DEPENDPATH += $${MERKAARTOR_SRC_DIR}/interfaces
-INCLUDEPATH += $${MERKAARTOR_SRC_DIR}/interfaces
+DEPENDPATH += $${MERKAARTOR_SRC_DIR}/interfaces $${MERKAARTOR_SRC_DIR}/src/Utils
+INCLUDEPATH += $${MERKAARTOR_SRC_DIR}/interfaces $${MERKAARTOR_SRC_DIR}/src/Utils
 INCLUDEPATH += $$MERKAARTOR_SRC_DIR/include
 LIBS += -L$$OUTPUT_DIR
 
+VPATH=$$INCLUDEPATH
+
 macx {
     # Prefix: base instalation directory
     PREFIX = /Applications
diff --git a/plugins/plugins.pro b/plugins/plugins.pro
index c39f5b4..43184e4 100644
--- a/plugins/plugins.pro
+++ b/plugins/plugins.pro
@@ -1,3 +1,6 @@
 TEMPLATE = subdirs
 
-SUBDIRS += background qtstyle
+CONFIG += debug_and_release
+
+SUBDIRS += background
+# qtstyle
diff --git a/plugins/qtstyle/common.pri b/plugins/qtstyle/common.pri
deleted file mode 100644
index fea7d18..0000000
--- a/plugins/qtstyle/common.pri
+++ /dev/null
@@ -1,7 +0,0 @@
-DESTDIR = $$OUTPUT_DIR/$$(QMAKESPEC)/bin/plugins/styles
-macx {
-	target.path = $${PREFIX}/merkaartor.app/Contents/plugins/styles
-}
-unix:!macx {
-	target.path = $${LIBDIR}/merkaartor/plugins/styles
-}
diff --git a/plugins/qtstyle/qtstyle.pro b/plugins/qtstyle/qtstyle.pro
deleted file mode 100644
index 1012a10..0000000
--- a/plugins/qtstyle/qtstyle.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-TEMPLATE = subdirs
-
-!symbian:SUBDIRS += skulpture22
diff --git a/plugins/qtstyle/skulpture/skulpture.cpp b/plugins/qtstyle/skulpture/skulpture.cpp
deleted file mode 100644
index 8c8507f..0000000
--- a/plugins/qtstyle/skulpture/skulpture.cpp
+++ /dev/null
@@ -1,8059 +0,0 @@
-/*
- * skulpture.cpp - classical three-dimensional artwork
- *
- * Copyright 2007, 2008 Christoph Feck
- *
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-// ### This file is a mess
-
-#include "skulpture_p.h"
-#include <QtGui/QLayout>
-#include <QtGui/QLCDNumber>
-#include <QtGui/QPainter>
-#include <QtGui/QLabel>
-#include <QtGui/QProgressBar>
-#include <QtGui/QScrollBar>
-#include <QtGui/QIcon>
-#include <QtGui/QStatusBar>
-#include <QtGui/QAbstractScrollArea>
-#include <QtGui/QScrollArea>
-#include <QtGui/QMdiArea>
-#include <QtGui/QMdiSubWindow>
-#include <QtGui/QMenu>
-#include <QtGui/QMenuBar>
-#include <QtGui/QWorkspace>
-#include <QtGui/QHeaderView>
-#include <QtGui/QMainWindow>
-#include <QtGui/QSplitter>
-#include <QtGui/QPainterPath>
-#include <QtGui/QGroupBox>
-#include <QtGui/QDockWidget>
-#include <QtGui/QToolButton>
-#include <QtGui/QTextEdit>
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-#include <QtGui/QPlainTextEdit>
-#endif
-#include <QtGui/QComboBox>
-#include <QtGui/QDial>
-#include <QtGui/QRadioButton>
-#include <QtGui/QCheckBox>
-#include <QtGui/QCalendarWidget>
-#include <QtGui/QToolBox>
-#include <QtGui/QToolBar>
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QLineEdit>
-#include <QtGui/QDialog>
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
-#include <QtGui/QKeyEvent>
-#include <QtCore/QList>
-#include <cstdio>
-#include <QtCore/QDebug>
-
-/*-----------------------------------------------------------------------*/
-
-#include <QtGui/QStylePlugin>
-
-class SkulptureStylePlugin : public QStylePlugin
-{
-	public:
-		QStringList keys() const {
-			return QString::fromUtf8("Skulpture").split(QChar(',', 0));
-		}
-
-		QStyle *create(const QString &key) {
-			if (key.toLower() == QString::fromUtf8("skulpture")) {
-				return new SkulptureStyle;
-			}
-			return 0;
-		}
-};
-
-
-Q_EXPORT_PLUGIN2(skulpture, SkulptureStylePlugin)
-
-
-/*-----------------------------------------------------------------------*/
-
-SkulptureStyle::SkulptureStyle()
-	: d(new Private)
-{
-	d->q = this;
-}
-
-
-SkulptureStyle::~SkulptureStyle()
-{
-	delete d;
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void SkulptureStyle::polish(QApplication *application)
-{
-//	ParentStyle::polish(application);
-//	return;
-#if 0
-	QString oldStyle = application->styleSheet();
-	QString newStyle;
-	QFile file(QString::fromUtf8("/home/pepo/Projekte/Qt/plugins/styles/SkulptureStyle.qss"));
-	if (file.open(QIODevice::ReadOnly)) {
-		QTextStream stream(&file);
-		newStyle = stream.readAll();
-	}
-	application->setStyleSheet(newStyle + QChar('\n', 0) + oldStyle);
-#endif
-	application->installEventFilter(d->shortcut_handler);
-	ParentStyle::polish(application);
-	QPalette palette;
-	polish(palette);
-	application->setPalette(palette);
-//	if (application->inherits("KApplication")) {
-//		qDebug() << "KApplication is a" << application->metaObject()->className() << "(" << "object name:" << application->objectName() << ")";
-//	}
-}
-
-
-void SkulptureStyle::unpolish(QApplication *application)
-{
-	ParentStyle::unpolish(application);
-	application->removeEventFilter(d->shortcut_handler);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-static inline bool is_frameless_popup(QWidget *widget)
-{
-	while (widget) {
-		Qt::WindowFlags flags = widget->windowFlags();
-		Qt::WindowType  type = Qt::WindowType(int(flags & Qt::WindowType_Mask));
-
-		if (type & Qt::Window) {
-			if (flags & Qt::FramelessWindowHint || type == Qt::Popup) {
-				return true;
-			}
-			return false;
-		}
-		widget = widget->parentWidget();
-	}
-	return true;
-}
-
-
-static inline bool is_framed_scrollarea(QWidget *widget)
-{
-#if 1
-	if (widget->inherits("Q3ScrollView")) {
-		QFrame *frame = qobject_cast<QFrame *>(widget);
-		if (frame->frameStyle() == (QFrame::StyledPanel | QFrame::Sunken)) {
-			return true;
-		}
-	}
-	if (QAbstractScrollArea *area = qobject_cast<QAbstractScrollArea *>(widget)) {
-		if (area->frameStyle() == (QFrame::StyledPanel | QFrame::Sunken)) {
-			int left, top, right, bottom;
-			widget->getContentsMargins(&left, &top, &right, &bottom);
-			if (!qobject_cast<QHeaderView *>(widget)
-			 // ### parse runtime version for better comparison
-			 && (QString::fromUtf8(qVersion()) >= QString::fromUtf8("4.4.") || !qobject_cast<QMdiArea *>(widget))
-		//	 && !qobject_cast<QWorkspace *>(widget)
-			 && !qobject_cast<QScrollArea *>(widget)
-			 && !widget->inherits("KColorCells")
-		//	 && !widget->inherits("QColumnView")
-			 && !widget->inherits("DolphinColumnView")
-			 && (!widget->inherits("KTextBrowser") || (left && top && right && bottom))
-			 && !widget->inherits("KDEPrivate::KPageTabbedView")
-		//	 && !widget->inherits("KFilePlacesView")
-			 && !is_frameless_popup(widget)) {
-				return true;
-			 }
-		}
-	}
-#endif
-	return false;
-}
-
-
-static WidgetShadow *findShadow(QWidget *widget)
-{
-	QWidget *parent = widget->parentWidget();
-	if (parent) {
-		QList<WidgetShadow *> shadows = parent->findChildren<WidgetShadow *>();
-
-		foreach (WidgetShadow *shadow, shadows) {
-			if (shadow->widget() == widget) {
-				return shadow;
-			}
-		}
-	}
-	return 0;
-}
-
-
-void SkulptureStyle::polish(QWidget *widget)
-{
-//	ParentStyle::polish(widget);
-//	return;
-#if 1
-	//printf("polishing a \"%s\" (which is a \"%s\")\n", widget->metaObject()->className(), widget->metaObject()->superClass()->className());
-#if 0
-	QPalette palette = widget->palette();
-	polish(palette);
-	widget->setPalette(palette);
-#endif
-#if 1
-	if (QMdiArea *area = qobject_cast<QMdiArea *>(widget)) {
-		area->installEventFilter(d);
-	}
-	if (qobject_cast<QMdiSubWindow *>(widget)) {
-		WidgetShadow *shadow = findShadow(widget);
-		if (!shadow) {
-			widget->installEventFilter(d);
-			if (widget->parentWidget()) {
-				WidgetShadow *shadow = new WidgetShadow(widget->parentWidget());
-				shadow->setWidget(widget);
-				shadow->updateZOrder();
-				shadow->show();
-			}
-		}
-	}
-#endif
-#if 1
-	if (QLCDNumber *lcd = qobject_cast<QLCDNumber *>(widget)) {
-		QPalette palette;
-		palette.setColor(QPalette::Base, QColor(220, 230, 210));
-		palette.setColor(QPalette::WindowText, QColor(60, 60, 60));
-		lcd->setPalette(palette);
-	//	lcd->installEventFilter(d);
-	//	lcd->setContentsMargins(8, 8, 8, 8);
-		lcd->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
-		lcd->setSegmentStyle(QLCDNumber::Flat);
-	}
-#endif
-#if 0
-	// FIXME Qt does not propagate scrollbars background role to ScrollBar*Page areas
-	if (QScrollBar *bar = qobject_cast<QScrollBar *>(widget)) {
-		if (bar->parentWidget()) {
-			QAbstractScrollArea *area = qobject_cast<QAbstractScrollArea *>(bar->parentWidget());
-			if (area && area->viewport()) {
-				bar->setBackgroundRole(area->viewport()->backgroundRole());
-			}
-		}
-	}
-#endif
-#if 1
-	if (QDialog *dialog = qobject_cast<QDialog *>(widget)) {
-		dialog->installEventFilter(d);
-	}
-#endif
-#if 0
-	if (QMainWindow *window = qobject_cast<QMainWindow *>(widget)) {
-		window->setBackgroundRole(QPalette::Dark);
-	}
-	if (QDockWidget *dock = qobject_cast<QDockWidget *>(widget)) {
-		dock->installEventFilter(d);
-	}
-	if (QStatusBar *bar = qobject_cast<QStatusBar *>(widget)) {
-		bar->installEventFilter(d);
-	}
-#endif
-	if (QToolBox *toolBox = qobject_cast<QToolBox *>(widget)) {
-		toolBox->setBackgroundRole(QPalette::Window);
-	//	toolBox->setContentsMargins(2, 2, 2, 2);
-	//	toolBox->installEventFilter(d);
-		toolBox->layout()->setSpacing(0);
-	}
-#if 0
-	if (widget->inherits("KTitleWidget")) {
-		QPalette palette = widget->palette();
-		palette.setColor(QPalette::Base, palette.color(QPalette::Window));
-		palette.setColor(QPalette::Text, palette.color(QPalette::WindowText));
-		widget->setPalette(palette);
-	}
-#endif
-	if (QFrame *frame = qobject_cast<QFrame *>(widget)) {
-		switch (frame->frameShape()) {
-			case QFrame::Panel:
-			case QFrame::WinPanel:
-			case QFrame::Box:
-				frame->setFrameShape(QFrame::StyledPanel);
-				break;
-			case QFrame::HLine:
-			case QFrame::VLine:
-				frame->setEnabled(false);
-				break;
-			default:
-				break;
-		}
-#if 1
-		if (widget->inherits("SidebarTreeView")) {
-			QPalette palette = widget->palette();
-			palette.setColor(QPalette::Window, palette.color(QPalette::Base));
-			((QAbstractScrollArea *) widget)->viewport()->setPalette(palette);
-		//	printf("frame style is 0x%08x\n", ((QFrame *) widget)->frameStyle());
-			((QFrame *) widget)->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
-		}
-#endif
-#if 1
-		if (widget->inherits("KFilePlacesView")) {
-			QPalette palette = widget->palette();
-			palette.setColor(QPalette::Window, palette.color(QPalette::Base));
-			((QAbstractScrollArea *) widget)->viewport()->setPalette(palette);
-		//	widget->setAutoFillBackground(true);
-			((QFrame *) widget)->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
-		}
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-		if (widget->inherits("QPlainTextEdit")) {
-			QPlainTextEdit *edit = static_cast<QPlainTextEdit *>(widget);
-		//	QPalette palette = edit->palette();
-		//	palette.setColor(QPalette::Window, QColor(245, 245, 245));
-		//	edit->setPalette(palette);
-		//	edit->viewport()->setPalette(palette);
-			edit->setBackgroundVisible(false);
-			edit->viewport()->installEventFilter(d);
-//			widget->setAttribute(Qt::WA_Hover, true);
-		}
-#endif
-#if 1
-		if (QTextEdit *edit = qobject_cast<QTextEdit *>(widget)) {
-			if (!qstrcmp(widget->metaObject()->className(), "SampleEdit")) {
-				QWidget *bg = new QWidget(widget);
-				bg->lower();
-				bg->setObjectName(QString::fromUtf8("sample_background"));
-				bg->setGeometry(2, 2, widget->width() - 4, widget->height() - 4);
-				bg->setAutoFillBackground(true);
-				bg->show();
-			} else {
-				d->mapper.setMapping(edit, edit);
-				connect(edit, SIGNAL(textChanged()), &d->mapper, SLOT(map()));
-				connect(&d->mapper, SIGNAL(mapped(QWidget *)), d, SLOT(textEditSourceChanged(QWidget *)));
-				d->updateTextEditMargins(edit);
-			}
-			edit->viewport()->installEventFilter(d);
-//			widget->setAttribute(Qt::WA_Hover, true);
-			edit->setTabChangesFocus(true);
-#if 0
-			if (QTextBrowser *browser = qobject_cast<QTextBrowser *>(widget)) {
-				connect(browser, SIGNAL(sourceChanged()), &d->mapper, SLOT(map()));
-			}
-#endif
-		}
-#endif
-	}
-#if 1
-	if (QComboBox *combo = qobject_cast<QComboBox *>(widget)) {
-		if (!combo->isEditable()) {
-			combo->setBackgroundRole(QPalette::Button);
-			combo->setForegroundRole(QPalette::ButtonText);
-		}
-	}
-#endif
-	if (qobject_cast<QCheckBox *>(widget)
-	 || qobject_cast<QRadioButton *>(widget)) {
-		widget->setBackgroundRole(QPalette::Window);
-		widget->setForegroundRole(QPalette::WindowText);
-	}
-	if (qobject_cast<QScrollBar *>(widget)
-//	 || qobject_cast<QLineEdit *>(widget)
-	 || qobject_cast<QDial *>(widget)
-	 || qobject_cast<QHeaderView*>(widget)
-	 || qobject_cast<QSlider *>(widget)
-	 || qobject_cast<QToolButton *>(widget)) {
-		widget->setAttribute(Qt::WA_Hover, true);
-	}
-#if 0
-	if (d->allowScrollBarSliderToCoverArrows && qobject_cast<QScrollBar *>(widget)) {
-		widget->installEventFilter(d);
-	}
-#endif
-	if (QProgressBar *pbar = qobject_cast<QProgressBar *>(widget)) {
-		pbar->installEventFilter(d);
-		if (pbar->isVisible() && !widget->inherits("StatusBarSpaceInfo")) {
-			d->setAnimated(pbar, true);
-		}
-		return; // do not call ParentStyle, because QPlastiqueStyle may add its own animation timer.
-	}
-#if 1
-	if (QToolBar *toolbar = qobject_cast<QToolBar *>(widget)) {
-		QFont font;
-		font.setPointSizeF(font.pointSizeF() / (1.19));
-		QList<QToolButton *> children = toolbar->findChildren<QToolButton *>();
-		foreach (QToolButton *child, children) {
-			if (!child->icon().isNull()) {
-				child->setFont(font);
-			}
-		}
-		connect(toolbar, SIGNAL(orientationChanged(Qt::Orientation)), d, SLOT(updateToolBarOrientation(Qt::Orientation)));
-	}
-#endif
-#if 0
-	// FIXME does not work
-	if (QMenu *menu = qobject_cast<QMenu *>(widget)) {
-#if 1
-		QFont font;
-		QFont oldfont;
-		oldfont.setPointSizeF(oldfont.pointSizeF() * 1.0001);
-		font.setPointSizeF(font.pointSizeF() / (1.19 /* * 1.19*/));
-		font.setBold(true);
-		menu->setFont(font);
-	/*	QAction *action = menu->menuAction();
-		action->setFont(oldfont);
-		QList<QAction *> children = action->findChildren<QAction *>();
-		foreach (QAction *child, children) {
-			child->setFont(oldfont);
-		}*/
-#else
-		menu->setStyleSheet(QString::fromUtf8("font-size: 6.5")/*.arg(menu->font().pointSizeF() / (1.19 * 1.19))*/);
-#endif
-	}
-#endif
-#if 0
-	// FIXME does not work
-	if (QGroupBox *group = qobject_cast<QGroupBox *>(widget)) {
-		QFont oldfont;
-#if 0
-		if (group->testAttribute(Qt::WA_SetFont)) {
-			QFont oldfont = group->fontInfo();
-		}
-#endif
-		QFont font = oldfont;
-		font.setPointSizeF(font.pointSizeF() * 1.19);
-		font.setBold(true);
-		group->setFont(font);
-		QList<QWidget *> children = group->findChildren<QWidget *>();
-		foreach (QWidget *child, children) {
-			if (1 || !(child->testAttribute(Qt::WA_SetFont))) {
-				printf("reset\n");
-				child->setFont(oldfont);
-			}
-		}
-	}
-#endif
-#if 1
-	if (widget->inherits("Q3Header")) {
-		QFont font;
-		font.setPointSizeF(font.pointSizeF() / (1.19 /* 1.19*/));
-		font.setBold(true);
-		widget->setFont(font);
-	}
-#endif
-	if (QAbstractScrollArea *area = qobject_cast<QAbstractScrollArea *>(widget)) {
-		if (QAbstractItemView *iv = qobject_cast<QAbstractItemView *>(widget)) {
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-			// ### Qt issue
-		//	iv->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
-		//	iv->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
-		//	QApplication::setWheelScrollLines(64);
-			iv = iv;
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-			iv->viewport()->setAttribute(Qt::WA_Hover);
-#endif
-
-#if 1
-			if (QHeaderView *header = qobject_cast<QHeaderView *>(widget)) {
-				QFont font;
-				font.setPointSizeF(font.pointSizeF() / (1.19 /* 1.19*/));
-				font.setBold(true);
-				header->setFont(font);
-				// FIXME workaround for Qt 4.3
-				header->headerDataChanged(header->orientation(), 0, 0);
-				header->updateGeometry();
-			}
-#endif
-		}
-		if (is_framed_scrollarea(area)) {
-			if (true /*|| !widget->inherits("KTextBrowser") || !widget->parentWidget() || !widget->parentWidget()->parentWidget() || !(widget->parentWidget()->parentWidget()->inherits("KTipDialog"))*/) {
-			//	if (!widget->inherits("KHTMLView")
-			//	&& !widget->inherits("DolphinIconsView")) {
-					d->installFrameShadow(area);
-			//	}
-			}
-		}
-	}
-#if 1
-	if (widget->inherits("Konsole::TerminalDisplay")
-	 || widget->inherits("KTextEditor::View")
-	 || widget->inherits("KHTMLView")) {
-	//	((QFrame *) widget)->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
-		d->installFrameShadow(widget);
-	}
-#endif
-	if (widget->inherits("Q3ScrollView")) {
-		if (is_framed_scrollarea(widget)) {
-			d->installFrameShadow(widget);
-		}
-	}
-#endif
-#if 0
-	if (QTabWidget *tab = qobject_cast<QTabWidget *>(widget)) {
-		if (QToolButton *button = qobject_cast<QToolButton *>(tab->cornerWidget(Qt::TopRightCorner))) {
-			button->setAutoRaise(true);
-		}
-		if (QToolButton *button = qobject_cast<QToolButton *>(tab->cornerWidget(Qt::TopLeftCorner))) {
-			button->setAutoRaise(true);
-		}
-	}
-#endif
-#if 1
-	if (QToolButton *button = qobject_cast<QToolButton *>(widget)) {
-		if (qobject_cast<QTabWidget *>(button->parentWidget())) {
-			button->setAutoRaise(true);
-		}
-	}
-#endif
-	if (!qstrcmp(widget->metaObject()->className(), "QToolBoxButton")) {
-		widget->setAttribute(Qt::WA_Hover, true);
-	}
-	if (!qstrcmp(widget->metaObject()->className(), "KLineEditButton")) {
-		widget->installEventFilter(d);
-		widget->setAttribute(Qt::WA_Hover, true);
-	}
-	ParentStyle::polish(widget);
-}
-
-
-void SkulptureStyle::unpolish(QWidget *widget)
-{
-	ParentStyle::unpolish(widget);
-//	return;
-	if (qobject_cast<QMdiArea *>(widget)) {
-		widget->removeEventFilter(d);
-	}
-	if (QMdiSubWindow *win = qobject_cast<QMdiSubWindow *>(widget)) {
-		win->removeEventFilter(d);
-		WidgetShadow *shadow = findShadow(win);
-		if (shadow) {
-			shadow->hide();
-			shadow->setParent(0);
-			shadow->deleteLater();
-		}
-	}
-#if 1
-	if (QDialog *dialog = qobject_cast<QDialog *>(widget)) {
-		dialog->removeEventFilter(d);
-	}
-#endif
-#if 0
-	if (QLCDNumber *lcd = qobject_cast<QLCDNumber *>(widget)) {
-		lcd->removeEventFilter(d);
-	}
-	if (QToolBox *toolBox = qobject_cast<QToolBox *>(widget)) {
-		toolBox->removeEventFilter(d);
-	}
-	if (QDockWidget *dock = qobject_cast<QDockWidget *>(widget)) {
-		dock->removeEventFilter(d);
-	}
-	if (QStatusBar *status = qobject_cast<QStatusBar *>(widget)) {
-		status->removeEventFilter(d);
-	}
-#endif
-#if 0
-	if (/*d->allowScrollBarSliderToCoverArrows &&*/ qobject_cast<QScrollBar *>(widget)) {
-		widget->installEventFilter(d);
-	}
-#endif
-	if (QProgressBar *pbar = qobject_cast<QProgressBar *>(widget)) {
-		pbar->removeEventFilter(d);
-		d->setAnimated(pbar, false);
-		return;
-	}
-	if (QAbstractScrollArea *area = qobject_cast<QAbstractScrollArea *>(widget)) {
-		area->removeEventFilter(d);
-		if (/*QAbstractItemView *iv =*/qobject_cast<QAbstractItemView *>(widget)) {
-#if 1
-			if (QHeaderView *header = qobject_cast<QHeaderView *>(widget)) {
-				QFont font;
-			//	font.setPointSizeF(font.pointSizeF() / (1.19 * 1.19));
-			//	font.setBold(true);
-				header->setFont(font);
-				// FIXME workaround for Qt 4.3
-				header->headerDataChanged(header->orientation(), 0, 0);
-				header->updateGeometry();
-			}
-#endif
-		}
-	/*	if (QMdiArea *area = qobject_cast<QMdiArea *>(widget)) {
-			area->viewport()->removeEventFilter(d);
-		}
-	*/
-		d->removeFrameShadow(area);
-	}
-#if 1
-	if (widget->inherits("Konsole::TerminalDisplay")
-	 || widget->inherits("KTextEditor::View")
-	 || widget->inherits("KHTMLView")) {
-		widget->removeEventFilter(d);
-		d->removeFrameShadow(widget);
-	}
-#endif
-	if (widget->inherits("Q3ScrollView")) {
-		widget->removeEventFilter(d);
-		d->removeFrameShadow(widget);
-	}
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-	if (widget->inherits("QPlainTextEdit")) {
-		QPlainTextEdit *edit = static_cast<QPlainTextEdit *>(widget);
-		edit->viewport()->removeEventFilter(d);
-	}
-#endif
-	if (QTextEdit *edit = qobject_cast<QTextEdit *>(widget)) {
-		if (!qstrcmp(widget->metaObject()->className(), "SampleEdit")) {
-			QList<QObject *> children = widget->children();
-			foreach (QObject *child, children) {
-				if (child->objectName() == QString::fromUtf8("sample_background")) {
-					child->setParent(0);
-					child->deleteLater();
-				}
-			}
-		} else {
-			d->mapper.removeMappings(edit);
-		}
-		edit->viewport()->removeEventFilter(d);
-	}
-	if (QToolBar *toolbar = qobject_cast<QToolBar *>(widget)) {
-		QFont font;
-	//	font.setPointSizeF(font.pointSizeF() / (1.19));
-		QList<QToolButton *> children = toolbar->findChildren<QToolButton *>();
-		foreach (QToolButton *child, children) {
-			if (!child->icon().isNull()) {
-				child->setFont(font);
-			}
-		}
-		disconnect(toolbar, SIGNAL(orientationChanged(Qt::Orientation)), d, SLOT(updateToolBarOrientation(Qt::Orientation)));
-	}
-	if (!qstrcmp(widget->metaObject()->className(), "KLineEditButton")) {
-		widget->removeEventFilter(d);
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-bool SkulptureStyle::Private::eventFilter(QObject *watched, QEvent *event)
-{
-#if 0
-	// can't happen, because widgets are the only ones to install it
-	if (!watched->isWidgetType()) {
-		return QObject::eventFilter(watched, event);
-	}
-#endif
-	QWidget *widget = reinterpret_cast<QWidget *>(watched);
-//	printf("handling a \"%s\" (which is a \"%s\")\n", widget->metaObject()->className(), widget->metaObject()->superClass()->className());
-	if (qobject_cast<QMdiSubWindow *>(widget)) {
-		WidgetShadow *shadow = findShadow(widget);
-		switch (event->type()) {
-			case QEvent::Move:
-			case QEvent::Resize:
-				if (shadow) {
-					shadow->updateGeometry();
-				}
-				break;
-			case QEvent::ZOrderChange:
-				if (shadow) {
-					shadow->updateZOrder();
-				}
-				break;
-			case QEvent::Hide:
-				if (shadow) {
-					shadow->setParent(0);
-					shadow->hide();
-					shadow->deleteLater();
-				}
-				break;
-			case QEvent::Show:
-				if (!shadow) {
-					if (widget->parentWidget()) {
-						shadow = new WidgetShadow(widget->parentWidget());
-						shadow->setWidget(widget);
-						shadow->updateZOrder();
-					}
-				} else {
-					shadow->updateZOrder();
-				}
-			default:
-				break;
-		}
-	}
-	switch (event->type()) {
-		case QEvent::Paint:
-#if 1 // highlight current line in QTextEdit / QPlainTextEdit
-			if (widget->objectName() == QLatin1String("qt_scrollarea_viewport")) {
-				if (QTextEdit *edit = qobject_cast<QTextEdit *>(widget->parent())) {
-					if (!qstrcmp(edit->metaObject()->className(), "SampleEdit")) {
-						QList<QObject *> children = edit->children();
-						foreach (QObject *child, children) {
-							if (child->objectName() == QString::fromUtf8("sample_background")) {
-								QWidget *bg = qobject_cast<QWidget *>(child);
-								if (bg) {
-									QPalette palette = edit->palette();
-									palette.setColor(QPalette::Window, palette.color(QPalette::Base));
-									bg->setPalette(palette);
-								}
-							}
-						}
-					}
-				//	updateTextEditMargins(edit);
-					highlightCurrentEditLine(edit);
-				}
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-				else if (widget->parent()->inherits("QPlainTextEdit")) {
-					highlightCurrentEditLine(static_cast<QPlainTextEdit *>(widget->parent()));
-				}
-#endif
-			}
-#endif
-#if 0
-			if (QDialog *dialog = qobject_cast<QDialog *>(widget)) {
-				QPainter painter(dialog);
-				QRect r = dialog->rect();
-				QLinearGradient dialogGradient1(r.topLeft(), r.bottomRight());
-				dialogGradient1.setColorAt(0.0, QColor(255, 255, 255, 30));
-				dialogGradient1.setColorAt(1.0, QColor(0, 0, 0, 10));
-			//	painter.fillRect(r, dialogGradient1);
-
-				QRadialGradient dialogGradient2(r.left() + r.width() / 2, r.top(), r.height());
-				dialogGradient2.setColorAt(0.0, QColor(255, 255, 225, 160));
-				dialogGradient2.setColorAt(1.0, QColor(0, 0, 0, 0));
-			//	painter.fillRect(r, dialogGradient2);
-
-				QLinearGradient dialogGradient3(r.topLeft(), r.bottomLeft());
-				dialogGradient3.setColorAt(0.0, QColor(255, 255, 255, 30));
-				dialogGradient3.setColorAt(1.0, QColor(0, 0, 0, 20));
-				painter.fillRect(r, dialogGradient3);
-
-				paintThinFrame(&painter, dialog->rect().adjusted(0, 0, 0, 0), dialog->palette(), 60, -20);
-				paintThinFrame(&painter, dialog->rect().adjusted(1, 1, -1, -1), dialog->palette(), -20, 60);
-			}
-#endif
-#if 0
-			if (QStatusBar *status = qobject_cast<QStatusBar *>(widget)) {
-				QPainter painter(status);
-				paintThinFrame(&painter, status->rect(), status->palette(), -20, 60);
-			}
-			if (QToolBox *toolBox = qobject_cast<QToolBox *>(widget)) {
-				QPainter painter(toolBox);
-				paintThinFrame(&painter, toolBox->rect(), toolBox->palette(), 60, -20);
-				paintThinFrame(&painter, toolBox->rect().adjusted(1, 1, -1, -1), toolBox->palette(), -60, 140);
-			}
-			if (QLCDNumber *lcd = qobject_cast<QLCDNumber *>(watched)) {
-				// TODO nicer digits, antialiased, slight italics
-			}
-			if (QDockWidget *dock = qobject_cast<QDockWidget *>(widget)) {
-				// ### rendering a frame around dock widgets does not work, because
-				// the subwidgets are placed at the edges.
-			}
-#endif
-			if (!qstrcmp(widget->metaObject()->className(), "KLineEditButton")) {
-				QPainter painter(widget);
-				QStyleOption option;
-				option.initFrom(widget);
-				if (option.state & QStyle::State_Enabled && option.state & QStyle::State_MouseOver) {
-				//	painter.fillRect(widget->rect(), Qt::red);
-				} else {
-					painter.setOpacity(0.2);
-				}
-				QRect r = QRect(widget->rect().center() - QPoint(4, 4), QSize(8, 8));
-				painter.drawPixmap(r, q->standardIcon(QStyle::SP_TitleBarCloseButton, &option, widget).pixmap(8, 8));
-				event->accept();
-				return true;
-			}
-			break;
-		case QEvent::Show:
-			if (QProgressBar *pbar = qobject_cast<QProgressBar *>(watched)) {
-				if (!widget->inherits("StatusBarSpaceInfo")) {
-					setAnimated(pbar, true);
-				}
-			}
-			/* fall through */
-		case QEvent::Move:
-		case QEvent::Resize:
-			if (QTextEdit *edit = qobject_cast<QTextEdit *>(widget)) {
-				if (!qstrcmp(widget->metaObject()->className(), "SampleEdit")) {
-					QList<QObject *> children = widget->children();
-					foreach (QObject *child, children) {
-						if (child->objectName() == QString::fromUtf8("sample_background")) {
-							QWidget *bg = qobject_cast<QWidget *>(child);
-							if (bg) {
-								bg->setGeometry(2, 2, widget->width() - 4, widget->height() - 4);
-							}
-						}
-					}
-				} else {
-					textEditSourceChanged(edit);
-				}
-			}
-			else if (qobject_cast<QMdiArea *>(widget)) {
-				QList<WidgetShadow *> shadows = widget->findChildren<WidgetShadow *>();
-				foreach (WidgetShadow *shadow, shadows) {
-					shadow->updateGeometry();
-				}
-			}
-			if (qobject_cast<QAbstractScrollArea *>(widget)
-			 || widget->inherits("Q3ScrollView")
-#if 1
-			 || widget->inherits("Konsole::TerminalDisplay")
-			 || widget->inherits("KTextEditor::View")
-			 || widget->inherits("KHTMLView")
-#endif
-			   ) {
-				updateFrameShadow(widget);
-			}
-			break;
-		case QEvent::Destroy:
-		case QEvent::Hide:
-			setAnimated(reinterpret_cast<QProgressBar *>(watched), false);
-			break;
-#if 0
-		case QEvent::MouseButtonRelease:
-			if (allowScrollBarSliderToCoverArrows && qobject_cast<QScrollBar *>(widget)) {
-				widget->update();
-			}
-			break;
-#endif
-		default:
-			break;
-	}
-	return QObject::eventFilter(watched, event);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-QRect SkulptureStyle::subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const
-{
-//	return ParentStyle::subElementRect(element, option, widget);
-	switch (element) {
-		case SE_ToolBoxTabContents:
-			return ParentStyle::subElementRect(element, option, widget).adjusted(11, 0, 0, 0);
-		case SE_TabWidgetLeftCorner:
-		case SE_TabWidgetRightCorner:
-			return ParentStyle::subElementRect(element, option, widget).adjusted(1, 1, -1, 1);
-		case SE_FrameContents:
-			return option->rect.adjusted(2, 2, -2, -2);
-#if 1
-		case SE_CheckBoxIndicator:
-		case SE_CheckBoxContents:
-		case SE_CheckBoxFocusRect:
-		case SE_CheckBoxClickRect:
-		case SE_CheckBoxLayoutItem:
-		case SE_RadioButtonIndicator:
-		case SE_RadioButtonContents:
-		case SE_RadioButtonFocusRect:
-		case SE_RadioButtonClickRect:
-		case SE_RadioButtonLayoutItem:
-			// FIXME: only to work around QPlastiqueStyle
-			return QWindowsStyle::subElementRect(element, option, widget);
-#endif
-		case SE_LineEditContents:
-			return option->rect.adjusted(3, 0, -3, 0);
-		case SE_DockWidgetCloseButton:
-		case SE_DockWidgetFloatButton: {
-				bool floating = false;
-				bool vertical = false;
-				if (option->type == QStyleOption::SO_DockWidget) {
-					if (widget) {
-						QStyleOptionDockWidget *dockOptions = (QStyleOptionDockWidget *) option;
-						if (dockOptions->floatable) {
-							const QDockWidget *dock = qobject_cast<const QDockWidget *>(widget);
-							if (dock) {
-								floating = dock->isFloating();
-								vertical = dock->features() & QDockWidget::DockWidgetVerticalTitleBar;
-							}
-						}
-					}
-				}
-				QRect r = ParentStyle::subElementRect(element, option, widget);
-				if (!vertical) {
-					if (floating) {
-						if (option->direction == Qt::LeftToRight) {
-							return r.adjusted(-6, 0, -6, 0);
-						} else {
-							return r.adjusted(6, 0, 6, 0);
-						}
-					} else {
-						if (option->direction == Qt::LeftToRight) {
-							return r.adjusted(-3, 1, -3, 1);
-						} else {
-							return r.adjusted(3, 1, 3, 1);
-						}
-					}
-				} else {
-					if (floating) {
-						return r.adjusted(0, 6, 0, 6);
-					} else {
-						return r.adjusted(1, 3, 1, 3);
-					}
-				}
-		}
-		case SE_DockWidgetTitleBarText:
-			return ParentStyle::subElementRect(element, option, widget).adjusted(4, -3, -4, 5);
-		case SE_DockWidgetIcon:
-			return ParentStyle::subElementRect(element, option, widget).adjusted(4, -3, 4, 5);
-		default:
-			break;
-	}
-	return ParentStyle::subElementRect(element, option, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-extern QSize sizeFromContentsMenuItem(const QStyleOptionMenuItem *option, const QSize &contentsSize);
-extern QSize sizeFromContentsMenu(const QStyleOption *option, const QSize &contentsSize, const QWidget *widget, const QStyle *style);
-extern QSize sizeFromContentsToolButton(const QStyleOptionToolButton *option, const QSize &contentsSize, const QWidget *widget, const QStyle *style);
-
-QSize SkulptureStyle::sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget) const
-{
-//	printf("SizeFromContents %d ... ", type);
-//	QSize result = ParentStyle::sizeFromContents(type, option, contentsSize, widget);
-//	printf("SizeFromContents OK\n");
-//	return result;
-#define FF -1
-	switch (type) {
-		case CT_Menu:
-			return sizeFromContentsMenu(option, contentsSize, widget, this);
-#if 1
-		// FIXME: only to work around QPlastiqueStyle
-		case CT_CheckBox:
-		case CT_RadioButton: {
-				QSize size = QWindowsStyle::sizeFromContents(type, option, contentsSize, widget);
-				size.rheight() -= 1;
-				return size;
-			}
-#endif
-		case CT_SpinBox:
-			return QWindowsStyle::sizeFromContents(type, option, contentsSize, widget) + QSize(5, -1 - FF);
-		case CT_ToolButton: {
-				const QStyleOptionToolButton *buttonOption = qstyleoption_cast<const QStyleOptionToolButton *>(option);
-				if (buttonOption) {
-					return sizeFromContentsToolButton(buttonOption, contentsSize, widget, this);
-				}
-			}
-			return contentsSize;
-		case CT_PushButton: {
-				QSize size = QCommonStyle::sizeFromContents(type, option, contentsSize, widget) + QSize(8, 0 - FF);
-				int width = size.width();
-				const QStyleOptionButton *buttonOption = qstyleoption_cast<const QStyleOptionButton *>(option);
-				/* make text buttons same size */
-				if (buttonOption && !buttonOption->text.isEmpty()) {
-					if (width < 64) {
-						width = 64;
-					} else {
-						width = ((width - 33) / 32) * 32 + 64;
-					}
-				}
-				size.setWidth(width);
-				return size;
-			}
-		case CT_TabBarTab: {
-				const QStyleOptionTab *tabOption = qstyleoption_cast<const QStyleOptionTab *>(option);
-				if (tabOption && int(tabOption->shape) & 2) {
-					return contentsSize + QSize(8, 24);
-				}
-			}
-			return contentsSize + QSize(24, 8);
-		case CT_LineEdit:
-			return contentsSize + QSize(8, 6 - FF);
-//		case CT_TabWidget:
-//			return contentsSize + QSize(8, 8);
-		case CT_MenuBarItem: {
-				QSize size = QWindowsStyle::sizeFromContents(type, option, contentsSize, widget);
-				return size + QSize(0, 1);
-			}
-			break;
-#if 1
-		case CT_MenuItem: {
-				const QStyleOptionMenuItem *menuOption = qstyleoption_cast<const QStyleOptionMenuItem *>(option);
-				if (menuOption) {
-					return sizeFromContentsMenuItem(menuOption, contentsSize);
-				}
-			}
-			break;
-#endif
-		case CT_Slider: {
-				QSize size = QCommonStyle::sizeFromContents(type, option, contentsSize, widget);
-			//	size.rheight() -= 1;
-				return size;
-#if 0
-				const QStyleOptionSlider *sliderOption = qstyleoption_cast<const QStyleOptionSlider *>(option);
-				if (sliderOption) {
-					QSize size = contentsSize;
-					// FIXME: Qt has a fixed tickmarks size... disable ticks for now
-					if (sliderOption->orientation == Qt::Horizontal) {
-						if (sliderOption->tickPosition & QSlider::TicksAbove) {
-							printf("ha\n");
-							size.rheight() -= 5;
-						}
-						if (sliderOption->tickPosition & QSlider::TicksBelow) {
-							printf("hb\n");
-							size.rheight() -= 5;
-						}
-					} else {
-						if (sliderOption->tickPosition & QSlider::TicksAbove) {
-							printf("va\n");
-							size.rwidth() -= 5;
-						}
-						if (sliderOption->tickPosition & QSlider::TicksBelow) {
-							printf("vb\n");
-							size.rwidth() -= 5;
-						}
-					}
-					return size;
-				}
-#endif
-			}
-			break;
-		case CT_ComboBox:
-		/*	if (widget && widget->inherits("QComboBox")) {
-				if (widget->parentWidget() && qobject_cast<QToolBar *>(widget->parentWidget())) {
-					return contentsSize + QSize(34, 4);
-				}
-			}
-		*/	return contentsSize + QSize(34, 6 - FF);
-		default:
-			break;
-	}
-	return ParentStyle::sizeFromContents(type, option, contentsSize, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-extern QRect subControlRectScrollBar(const QStyleOptionSlider *option, QStyle::SubControl subControl, const QWidget *widget, void */*data*/, int /*id*/, const QStyle *style);
-extern QRect subControlRectSlider(const QStyleOptionSlider *option, QStyle::SubControl subControl, const QWidget *widget, void */*data*/, int /*id*/, const QStyle *style);
-extern QRect subControlRectToolButton(const QStyleOptionToolButton *option, QStyle::SubControl subControl, const QWidget *widget, void */*data*/, int /*id*/, const QStyle *style);
-
-QRect SkulptureStyle::subControlRect(ComplexControl control, const QStyleOptionComplex *option, SubControl subControl, const QWidget *widget) const
-{
-//	printf("SubControlRect %d ... ", control);
-//	QRect result = ParentStyle::subControlRect(control, option, subControl, widget);
-//	printf("SubControlRect OK\n");
-//	return result;
-	switch (control) {
-#if 1
-		case CC_Slider:
-			if (const QStyleOptionSlider *sliderOption = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
-				return subControlRectSlider(sliderOption, subControl, widget, 0, 0, this);
-			}
-			break;
-#else
-		case CC_Slider: {
-				QRect r = QCommonStyle::subControlRect(control, option, subControl, widget);
-				return r;
-			}
-			break;
-#endif
-		case CC_TitleBar: {
-				QRect r = QCommonStyle::subControlRect(control, option, subControl, widget);
-				if (subControl != QStyle::SC_TitleBarSysMenu) {
-					return r.adjusted(-2, -2, -3, -3);
-				} else {
-					return r.adjusted(0, -1, 0, -1);
-				}
-			}
-			break;
-		case CC_ScrollBar:
-			if (d->allowScrollBarSliderToCoverArrows) {
-				if (const QStyleOptionSlider *sliderOption = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
-					return subControlRectScrollBar(sliderOption, subControl, widget, 0, 0, this);
-				}
-			} else {
-				return QCommonStyle::subControlRect(QStyle::CC_ScrollBar, option, subControl, widget);
-			}
-			break;
-		case CC_ToolButton:
-			if (const QStyleOptionToolButton *toolButtonOption = qstyleoption_cast<const QStyleOptionToolButton *>(option)) {
-				return subControlRectToolButton(toolButtonOption, subControl, widget, 0, 0, this);
-			}
-			break;
-		case CC_SpinBox: {
-				// FIXME do not depend on plastique style
-				QRect r = QPlastiqueStyle::subControlRect(control, option, subControl, widget);
-				switch (subControl) {
-					case SC_SpinBoxEditField:
-						if (QString::fromUtf8(qVersion()) == QString::fromUtf8("4.3.0")) {
-						//	printf("on 4.3.0\n");
-							return r;
-						}
-					//	printf("on 4.3.x\n");
-						return r.adjusted(-2, -2, 2, 2);
-					default:
-						break;
-				}
-				return r;
-			}
-			break;
-		case CC_ComboBox:
-			switch (subControl) {
-				case SC_ComboBoxEditField: {
-					const QStyleOptionComboBox *comboBoxOption = qstyleoption_cast<const QStyleOptionComboBox *>(option);
-					if (comboBoxOption) {
-						if (!comboBoxOption->editable) {
-							int s = option->direction == Qt::LeftToRight ? 4 : 0;
-							return ParentStyle::subControlRect(control, option, subControl, widget).adjusted(s, 0, s - 4, 0);
-						} else {
-							// FIXME do not depend on plastique style
-							QRect r = QPlastiqueStyle::subControlRect(control, option, subControl, widget);
-							if (QString::fromUtf8(qVersion()) == QString::fromUtf8("4.3.0")) {
-								return r;
-							}
-							return r.adjusted(-2, -2, 2, 2);
-						}
-					}
-				}
-				default:
-					break;
-			}
-			break;
-		case CC_GroupBox:
-			switch (subControl) {
-				case SC_GroupBoxCheckBox:
-			//	case SC_GroupBoxFrame:
-				case SC_GroupBoxLabel: {
-					const QStyleOptionGroupBox *groupBoxOption = qstyleoption_cast<const QStyleOptionGroupBox *>(option);
-					if (groupBoxOption) {
-						if (!(groupBoxOption->features & QStyleOptionFrameV2::Flat)) {
-							int x = option->direction == Qt::RightToLeft ? 8 : -8;
-							int y = (subControl == SC_GroupBoxCheckBox) ? 0 : 1;
-							return ParentStyle::subControlRect(control, option, subControl, widget).adjusted(x, y, x, y);
-						}
-					}
-				}
-				default:
-					break;
-			}
-			break;
-		default:
-			break;
-	}
-	return ParentStyle::subControlRect(control, option, subControl, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-QStyle::SubControl SkulptureStyle::hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, const QPoint &position, const QWidget *widget) const
-{
-#if 0
-	switch (control) {
-		case CC_Slider:
-			return QCommonStyle::hitTestComplexControl(control, option, position, widget);
-		case CC_SpinBox:
-			const QStyleOptionSpinBox *spinBoxOption = qstyleoption_cast<const QStyleOptionSpinBox *>(option);
-			if (spinBoxOption) {
-			}
-
-	}
-#endif
-	return ParentStyle::hitTestComplexControl(control, option, position, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void SkulptureStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
-{
-	const Private::DrawElementEntry *entry = d->draw_hash.value(element + Private::DE_Primitive);
-//	entry = 0;
-
-	Q_ASSERT(option);
-//	printf("drawPrimitive %d ... ", element);
-
-	if (entry && (!entry->type || option->type == entry->type)) {
-		entry->func(painter, option, widget ? widget->backgroundRole() : QPalette::Window, widget ? widget->foregroundRole() : QPalette::WindowText, entry->data, entry->id, widget, this);
-	} else {
-		// painter->fillRect(option->rect, Qt::red);
-		ParentStyle::drawPrimitive(element, option, painter, widget);
-	}
-//	printf("drawPrimitive OK\n");
-}
-
-
-void SkulptureStyle::drawControl(ControlElement control, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
-{
-	const Private::DrawElementEntry *entry = d->draw_hash.value(control + Private::DE_Element);
-//	entry = 0;
-
-	Q_ASSERT(option);
-//	printf("drawControl %d ... ", control);
-
-	if (entry && (!entry->type || option->type == entry->type)) {
-		entry->func(painter, option, widget ? widget->backgroundRole() : QPalette::Window, widget ? widget->foregroundRole() : QPalette::WindowText, entry->data, entry->id, widget, this);
-	} else {
-		// painter->fillRect(option->rect, Qt::red);
-		ParentStyle::drawControl(control, option, painter, widget);
-	}
-//	printf("drawControl OK\n");
-}
-
-
-void SkulptureStyle::drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const
-{
-	const Private::DrawElementEntry *entry = d->draw_hash.value(control + Private::DE_Complex);
-//	entry = 0;
-
-	Q_ASSERT(option);
-//	printf("drawComplex %d ... ", control);
-
-	if (entry && (!entry->type || option->type == entry->type)) {
-		entry->func(painter, option, widget ? widget->backgroundRole() : QPalette::Window, widget ? widget->foregroundRole() : QPalette::WindowText, entry->data, entry->id, widget, this);
-	} else {
-		// painter->fillRect(option->rect, Qt::red);
-		ParentStyle::drawComplexControl(control, option, painter, widget);
-	}
-//	printf("drawComplex OK\n");
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-//#include "skulpture.moc"
-
-
-/*
- * skulpture_animations.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QProgressBar>
-#include <QtCore/QTimeLine>
-#include <QtCore/QTimerEvent>
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * starts/stops timer
- *
- */
-
-void SkulptureStyle::Private::setAnimated(QWidget *widget, bool animated)
-{
-	if (!widget) {
-		return;
-	}
-
-	if (animated && animateProgressBars) {
-		animations.insert(widget);
-		if (!timer) {
-			timer = startTimer(60);
-		}
-	} else {
-		animations.remove(widget);
-		if (animations.isEmpty()) {
-			if (timer) {
-				killTimer(timer);
-				timer = 0;
-			}
-		}
-	}
-}
-
-
-bool SkulptureStyle::Private::isAnimated(QWidget *widget)
-{
-	if (!widget || !timer) {
-		return false;
-	}
-
-	return animations.contains(widget);
-}
-
-
-void SkulptureStyle::Private::timerEvent(QTimerEvent *event)
-{
-	if (event->timerId() == timer) {
-		foreach (QWidget *widget, animations) {
-			// FIXME: move this logic to progressbar
-			QProgressBar *bar = qobject_cast<QProgressBar *>(widget);
-			if (bar) {
-				if (bar->minimum() >= bar->maximum()
-				 || bar->value() < bar->maximum()) {
-					bar->update();
-				}
-			} else {
-				widget->update();
-			}
-		}
-	}
-	event->ignore();
-}
-
-
-/*
- * skulpture_arrows.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * Arrow shapes are paths. They are scaled, rotated, or flipped
- * before they are rendered.
- *
- * To create an arrow shape, use this coordinate system:
- *
- *		(-1, 1)		...		(1, 1)
- *
- *		...		(0, 0)		...
- *
- *		(-1, -1)	...		(1, -1)
- *
- * The center (0,0) is at the center of the arrow. The arrow
- * MUST POINT DOWN and should fill the whole rectangle.
- * The returned path should be closed.
- *
- * FIXME: the following does not work:
- * If the path is not closed, it will be mirrored along the y-axis
- * and closed. So to create a simple arrow, use:
- *	shape.moveTo(-1, 1);
- *	shape.lineTo(0, -1);
- *
- */
-#if 0
-class ArrowGlyph
-{
-	public:
-		virtual QPainterPath shape();
-		virtual ~ArrowGlyph();
-};
-
-
-ArrowGlyph::~ArrowGlyph()
-{
-}
-#endif
-
-static inline QPainterPath arrowShape()
-{
-	QPainterPath shape;
-#if 0
-	const qreal wf = 0.3;		// width of arrow body, 0 ... 1
-	const qreal hf = 0.0;		// start of arrow body, 1 ... -1
-	if (hf == 1.0) {
-		// special case: closed triangle
-		shape.moveTo(-1, 1);
-		shape.lineTo(1, 1);
-		shape.lineTo(0, -1);
-		shape.lineTo(-1, 1);
-	} else {
-		// arrow
-		const qreal h2f = hf;	// start of arrow, 1 ... -1
-		shape.moveTo(-wf, 1);
-		shape.lineTo(wf, 1);
-		shape.lineTo(wf, hf);
-		shape.lineTo(1, h2f);
-		shape.lineTo(0, -1);
-		shape.lineTo(-1, h2f);
-		shape.lineTo(-wf, hf);
-		shape.lineTo(-wf, 1);
-	}
-#elif 1
-	const qreal wf = 0.8;		// width of inner arrow 0 ... 1
-	const qreal hf = 0.2;		// position of inner arrow, -1 ... 1
-	if (wf == 0.0) {
-		// special case: closed triangle
-		shape.moveTo(-1, 1);
-		shape.lineTo(1, 1);
-		shape.lineTo(0, -1);
-		shape.lineTo(-1, 1);
-	} else if (wf == 1.0) {
-		// special case: full inner width
-		shape.moveTo(-1, 1);
-		shape.lineTo(0, hf);
-		shape.lineTo(1, 1);
-		shape.lineTo(0, -1);
-		shape.lineTo(-1, 1);
-	} else {
-		// concave arrow
-		shape.moveTo(-1, 1);
-		shape.lineTo(-wf, 1);
-		shape.lineTo(0, hf);
-		shape.lineTo(wf, 1);
-		shape.lineTo(1, 1);
-		shape.lineTo(0, -1);
-		shape.lineTo(-1, 1);
-	}
-#else
-	// dummy shape to test matrix
-	shape.moveTo(-1, 1);
-	shape.lineTo(0, 1);
-	shape.lineTo(0, -1);
-	shape.lineTo(-1, 1);
-#endif
-	return shape;
-}
-
-
-static inline QPainterPath arrowPath(const QStyleOption *option, Qt::ArrowType arrow, bool spin)
-{
-	int h = option->fontMetrics.height() * (spin ? 3 : 4) / 8;
-	int w = option->fontMetrics.height() / 2;
-	h /= 2; w /= 2;
-	if (arrow == Qt::DownArrow || arrow == Qt::RightArrow) {
-		h = -h;
-	}
-	if (arrow == Qt::LeftArrow || arrow == Qt::RightArrow) {
-		QMatrix arrowMatrix(0, w, h, 0, 0, 0);
-		return arrowMatrix.map(arrowShape());
-	} else {
-		QMatrix arrowMatrix(w, 0, 0, h, 0, 0);
-		return arrowMatrix.map(arrowShape());
-	}
-}
-
-
-void paintScrollArrow(QPainter *painter, const QStyleOption *option, Qt::ArrowType arrow, bool spin)
-{
-	painter->save();
-	// FIXME: combine translations with path matrix
-	painter->translate(option->rect.center());
-#if 1
-	painter->setRenderHint(QPainter::Antialiasing, true);
-#else
-	painter->setRenderHint(QPainter::Antialiasing, false);
-#endif
-	if (painter->renderHints() & QPainter::Antialiasing) {
-		painter->translate(0.5, 0.5);
-	}
-	switch (arrow) {
-		case Qt::UpArrow:
-			painter->translate(0, -0.5);
-			break;
-		case Qt::DownArrow:
-			painter->translate(0, 0.5);
-			break;
-		case Qt::LeftArrow:
-			painter->translate(-0.5, 0);
-			break;
-		case Qt::RightArrow:
-			painter->translate(0.5, 0);
-			break;
-		case Qt::NoArrow:
-			break;
-	}
-	painter->setPen(Qt::NoPen);
-	QColor color = option->palette.color(QPalette::Text);
-	if ((option->state & QStyle::State_MouseOver) && option->state & QStyle::State_Enabled /* && !(option->state & QStyle::State_Sunken)*/) {
-		color = option->palette.color(QPalette::Highlight).dark(200);
-	//	painter->setPen(QPen(Qt::white, 1.0));
-	} else {
-	//	painter->setPen(QPen(Qt::white, 0.5));
-	}
-	painter->setBrush(color);
-	qreal opacity = painter->opacity();
-	painter->setOpacity(0.7 * opacity);
-	painter->drawPath(arrowPath(option, arrow, spin));
-	painter->restore();
-}
-
-
-void paintIndicatorArrowDown(QPainter *painter, const QStyleOption *option)
-{
-	paintScrollArrow(painter, option, Qt::DownArrow, false);
-}
-
-
-void paintIndicatorArrowLeft(QPainter *painter, const QStyleOption *option)
-{
-	paintScrollArrow(painter, option, Qt::LeftArrow, false);
-}
-
-
-void paintIndicatorArrowRight(QPainter *painter, const QStyleOption *option)
-{
-	paintScrollArrow(painter, option, Qt::RightArrow, false);
-}
-
-
-void paintIndicatorArrowUp(QPainter *painter, const QStyleOption *option)
-{
-	paintScrollArrow(painter, option, Qt::UpArrow, false);
-}
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * Arrow shape description language
- *
- * (-1|1),(0|-1)
- *
- *
- * wf: [0...1]; hf: [-1...1]; (-1, 1),(-wf, 1),(0, hf),(wf, 1),(1, 1),(0, -1),(-1, 1);
- *
- * global variables the expressions can contain:
- *
- * none
- *
- * types:
- * bool
- * intlist
- * strlist
- * floatrange
- *
- */
-
-/*
- * skulpture_buttons.cpp
- *
- */
-
-#include "skulpture_p.h"
-//#include <QtGui/QGradient>
-#include <QtGui/QPainter>
-#include <cstdio>
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * create a path from a rectangle, with round corners.
- *
- * this is similar to Qt's RoundRect, but with more
- * control over the cubic points.
- *
- */
-
-static QPainterPath button_path(const QRectF &rect, qreal k)
-{
-	// 0.1 no roundness
-	// 0.2 - 0.3 minimal roundness
-	// 0.5 some roundness
-	// 0.7 nice roundness
-	// 1.0 default roundness
-	// 2.0 really round
-	k *= 0.1;
-#if 0
-	// Oxygen like shape
-	const qreal tlh_edge = 3.0 * k;
-	const qreal tlv_edge = 6.0 * k;
-	const qreal tlh_control = 2.0 * k;
-	const qreal tlv_control = 4.0 * k;
-	const qreal blh_edge = 3.0 * k;
-	const qreal blv_edge = 6.0 * k;
-	const qreal blh_control = 2.0 * k;
-	const qreal blv_control = 4.0 * k;
-	const qreal trh_edge = 3.0 * k;
-	const qreal trv_edge = 6.0 * k;
-	const qreal trh_control = 2.0 * k;
-	const qreal trv_control = 4.0 * k;
-	const qreal brh_edge = 3.0 * k;
-	const qreal brv_edge = 6.0 * k;
-	const qreal brh_control = 2.0 * k;
-	const qreal brv_control = 4.0 * k;
-#elif 0
-	// testing new shape
-	const qreal tlh_edge = 6.0 * k;
-	const qreal tlv_edge = 3.0 * k;
-	const qreal tlh_control = 4.0 * k;
-	const qreal tlv_control = 2.0 * k;
-	const qreal blh_edge = 6.0 * k;
-	const qreal blv_edge = 6.0 * k;
-	const qreal blh_control = 4.0 * k;
-	const qreal blv_control = 4.0 * k;
-	const qreal trh_edge = 6.0 * k;
-	const qreal trv_edge = 3.0 * k;
-	const qreal trh_control = 4.0 * k;
-	const qreal trv_control = 2.0 * k;
-	const qreal brh_edge = 6.0 * k;
-	const qreal brv_edge = 6.0 * k;
-	const qreal brh_control = 4.0 * k;
-	const qreal brv_control = 4.0 * k;
-#else
-	// circle shape
-	const qreal tlh_edge = 6.0 * k;
-	const qreal tlv_edge = 6.0 * k;
-	const qreal tlh_control = 4.0 * k;
-	const qreal tlv_control = 4.0 * k;
-	const qreal blh_edge = 6.0 * k;
-	const qreal blv_edge = 6.0 * k;
-	const qreal blh_control = 4.0 * k;
-	const qreal blv_control = 4.0 * k;
-	const qreal trh_edge = 6.0 * k;
-	const qreal trv_edge = 6.0 * k;
-	const qreal trh_control = 4.0 * k;
-	const qreal trv_control = 4.0 * k;
-	const qreal brh_edge = 6.0 * k;
-	const qreal brv_edge = 6.0 * k;
-	const qreal brh_control = 4.0 * k;
-	const qreal brv_control = 4.0 * k;
-#endif
-	QPainterPath path;
-	path.moveTo(rect.left() + tlh_edge, rect.top());
-	path.lineTo(rect.right() - trh_edge, rect.top());
-	path.cubicTo(rect.right() - trh_edge + trh_control, rect.top(), rect.right(), rect.top() + trv_edge - trv_control, rect.right(), rect.top() + trv_edge);
-	path.lineTo(rect.right(), rect.bottom() - brv_edge);
-	path.cubicTo(rect.right(), rect.bottom() - brv_edge + brv_control, rect.right() - brh_edge + brh_control, rect.bottom(), rect.right() - brh_edge, rect.bottom());
-	path.lineTo(rect.left() + blh_edge, rect.bottom());
-	path.cubicTo(rect.left() + blh_edge - blh_control, rect.bottom(), rect.left(), rect.bottom() - blv_edge + blv_control, rect.left(), rect.bottom() - blv_edge);
-	path.lineTo(rect.left(), rect.top() + tlv_edge);
-	path.cubicTo(rect.left(), rect.top() + tlv_edge - tlv_control, rect.left() + tlh_edge - tlh_control, rect.top(), rect.left() + tlh_edge, rect.top());
-	return path;
-}
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * create a gradient for the inner fill of a button
- *
- */
-
-static QBrush button_gradient(const QRectF &rect, const QColor &color, const QStyleOptionButton *option)
-{
-	qreal ch = color.hueF();
-	qreal cs = color.saturationF() * 1.0;
-	qreal cv = color.valueF() * 1.0;
-	int ca = color.alpha();
-	QColor col;
-
-	if (0 && option->state & QStyle::State_MouseOver) {
-		// Oxygen like highlight
-		QRadialGradient gradient((rect.topLeft() + rect.topRight()) / 2.0, rect.width() / 2.0);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.01));
-		gradient.setColorAt(1.0, col);
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.09));
-		gradient.setColorAt(0.0, col);
-		return gradient;
-	} else {
-		if (rect.height() > 64) {
-			return QColor(color);
-		}
-		QLinearGradient gradient(rect.topLeft(), rect.bottomLeft());
-#if 1
-		// flat tin
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.02));
-		// FIXME other users of ca
-		col.setAlpha(ca);
-		gradient.setColorAt(0.0, col);
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.03));
-		col.setAlpha(ca);
-		gradient.setColorAt(1.0, col);
-#elif 0
-		// Skulpture default
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.02));
-		gradient.setColorAt(0.0, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv + 0.02));
-		gradient.setColorAt(0.4, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.01));
-		gradient.setColorAt(0.6, col);
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.03));
-		gradient.setColorAt(1.0, col);
-#elif 0
-		// tin
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.05));
-		gradient.setColorAt(0.0, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.02));
-		gradient.setColorAt(0.10, col);
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.03));
-		gradient.setColorAt(0.85, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.03));
-		gradient.setColorAt(1.0, col);
-#elif 0
-		// fat tin
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.09));
-		gradient.setColorAt(0.0, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.02));
-		gradient.setColorAt(0.15, col);
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.03));
-		gradient.setColorAt(0.80, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.07));
-		gradient.setColorAt(1.0, col);
-#elif 0
-		// plastik
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.03));
-		gradient.setColorAt(1.0, col);
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.03));
-		gradient.setColorAt(0.0, col);
-#elif 0
-		// fat plastik
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.09));
-		gradient.setColorAt(0.0, col);
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.05));
-		gradient.setColorAt(0.1, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.04));
-		gradient.setColorAt(0.85, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.07));
-		gradient.setColorAt(1.0, col);
-#elif 0
-		// oxygen (really flat)
-		gradient.setColorAt(0.0, color);
-		gradient.setColorAt(1.0, color);
-#elif 0
-		// wet plastik (glassy, nearly like SkandaleStyle 0.0.0, but more flat)
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.03));
-		gradient.setColorAt(0.0, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.01));
-		gradient.setColorAt(0.40, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.05));
-		gradient.setColorAt(0.405, col);
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.05));
-		gradient.setColorAt(1.0, col);
-#elif 0
-		// aluminium
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.03));
-		gradient.setColorAt(0.0, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.03));
-		gradient.setColorAt(0.40, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.03));
-		gradient.setColorAt(0.405, col);
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.03));
-		gradient.setColorAt(1.0, col);
-#elif 0
-		// platin
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.05));
-		gradient.setColorAt(0.0, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.05));
-		gradient.setColorAt(0.40, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.05));
-		gradient.setColorAt(0.405, col);
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.05));
-		gradient.setColorAt(1.0, col);
-#elif 0
-		// silver
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.07));
-		gradient.setColorAt(0.0, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.05));
-		gradient.setColorAt(0.40, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.03));
-		gradient.setColorAt(0.405, col);
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.09));
-		gradient.setColorAt(1.0, col);
-#elif 0
-		// rubber
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.09));
-		gradient.setColorAt(0.0, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.01));
-		gradient.setColorAt(0.30, col);
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.00));
-		gradient.setColorAt(0.70, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.07));
-		gradient.setColorAt(1.0, col);
-#elif 0
-		// ugly silver
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.09));
-		gradient.setColorAt(0.0, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.03));
-		gradient.setColorAt(0.10, col);
-		col.setHsvF(ch, cs, qMin(1.0, cv + 0.05));
-		gradient.setColorAt(0.60, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.01));
-		gradient.setColorAt(0.90, col);
-		col.setHsvF(ch, cs, qMax(0.0, cv - 0.07));
-		gradient.setColorAt(1.0, col);
-#endif
-		return gradient;
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * style options:
- *	features: Flat, HasMenu, DefaultButton, AutoDefaultButton, CommandLinkButton
- *	state: Sunken, On, Raised
- *	state: Enabled, HasFocus, MouseOver, Active
- *
- */
-
-void paintButtonPanel(QPainter *painter, const QStyleOptionButton *option, QPalette::ColorRole bgrole)
-{
-	const QRectF &c_rect = option->rect;
-	const qreal t = 1.0;
-	QRectF rect = c_rect;
-#if 0
-	painter->setPen(Qt::NoPen);
-	painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 1.5), QColor(255, 0, 0, 255), QColor(0, 0, 255, 255)));
-	painter->drawPath(button_path(rect, 1.5));
-	return;
-#endif
-	bool frame = true;
-	if (option->features & QStyleOptionButton::Flat && !(option->state & QStyle::State_Sunken)) {
-		frame = false;
-	}
-	painter->setPen(Qt::NoPen);
-	if ((option->features & QStyleOptionButton::DefaultButton) && (option->state & QStyle::State_Enabled)) {
-		painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 1.3), blend_color(QColor(0, 0, 0, 10), option->palette.color(QPalette::Highlight).light(110), 0.2), blend_color(QColor(0, 0, 0, 15), option->palette.color(QPalette::Highlight).light(110), 0.2)));
-	} else {
-		painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 1.3), shaded_color(option->palette.color(QPalette::Window), -10), shaded_color(option->palette.color(QPalette::Window), -15)));
-	}
-	painter->drawPath(button_path(rect, 1.5));
-	rect.adjust(t, t, -t, -t);
-	QBrush bgbrush = option->palette.brush(option->state & QStyle::State_Enabled ? (bgrole == QPalette::NoRole ? QPalette::Button : bgrole) : QPalette::Window);
-	if (bgbrush.style() == Qt::SolidPattern && bgbrush.color().alpha() == 0) {
-		QColor color = option->palette.color(QPalette::Window);
-		color.setAlpha(0);
-		bgbrush = color;
-	}
-	if (frame) {
-		if (option->state & QStyle::State_Enabled) {
-			if (0 && option->state & QStyle::State_HasFocus) {
-				painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 1.1), blend_color(QColor(0, 0, 0, 35), option->palette.color(QPalette::Highlight).dark(120), 0.7), blend_color(QColor(0, 0, 0, 35), option->palette.color(QPalette::Highlight).dark(120), 0.7)));
-			} else if (option->state & QStyle::State_Sunken || option->state & QStyle::State_On) {
-				painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 1.1), shaded_color(option->palette.color(QPalette::Window), -35), shaded_color(option->palette.color(QPalette::Window), -75)));
-			} else {
-				painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 1.1), shaded_color(option->palette.color(QPalette::Window), -75), shaded_color(option->palette.color(QPalette::Window), -45)));
-			}
-		} else {
-			painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 1.1), shaded_color(option->palette.color(QPalette::Window), -35), shaded_color(option->palette.color(QPalette::Window), -35)));
-		}
-		painter->drawPath(button_path(rect, 1.3));
-		rect.adjust(t, t, -t, -t);
-
-		if (bgbrush.style() == Qt::SolidPattern) {
-			QColor bgcolor = bgbrush.color();
-			if (option->state & QStyle::State_On) {
-				bgcolor = blend_color(bgcolor, option->palette.color(QPalette::Highlight), 0.2);
-				bgbrush = button_gradient(rect, bgcolor, option);
-			}
-			if (option->state & QStyle::State_Enabled) {
-				if (option->state & QStyle::State_Sunken) {
-					bgcolor = bgcolor.light(102);
-				} else if (option->state & QStyle::State_MouseOver) {
-					bgcolor = bgcolor.light(104);
-				}
-				bgbrush = button_gradient(rect, bgcolor, option);
-			}
-			painter->setBrush(bgbrush);
-		//	painter->setBrush(option->palette.color(QPalette::Button));
-			painter->drawPath(button_path(rect, 1.1));
-			if (option->state  & QStyle::State_Enabled) {
-				if (option->state & QStyle::State_Sunken || option->state & QStyle::State_On) {
-					painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 0.9), shaded_color(bgcolor, -10), shaded_color(bgcolor, -20)));
-				} else {
-					painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 0.9), shaded_color(bgcolor, -20), shaded_color(bgcolor, 160)));
-				}
-				painter->drawPath(button_path(rect, 1.1));
-			}
-		}
-		painter->setBrush(bgbrush);
-	} else {
-		QColor bgcolor = option->palette.color(QPalette::Window);
-		if (option->state & QStyle::State_MouseOver) {
-			bgcolor = bgcolor.light(104);
-		}
-		if (option->state & QStyle::State_On) {
-			bgcolor = blend_color(bgcolor, option->palette.color(QPalette::Highlight), 0.2);
-		}
-		painter->setBrush(bgcolor);
-	}
-	rect.adjust(t, t, -t, -t);
-//	painter->setBrush(option->palette.color(QPalette::Button));
-	painter->save();
-	// make transparent buttons appear transparent
-	painter->setCompositionMode(QPainter::CompositionMode_Source);
-	painter->drawPath(button_path(rect, 0.9));
-	painter->restore();
-//	painter->drawRect(c_rect.adjusted(3, 3, -3, -3));
-}
-
-
-void paintPushButtonBevel(QPainter *painter, const QStyleOptionButton *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole fgrole, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	QStyleOptionButton opt = *option;
-
-	opt.features &= ~(QStyleOptionButton::HasMenu);
-	((QCommonStyle *) style)->QCommonStyle::drawControl(QStyle::CE_PushButtonBevel, &opt, painter, widget);
-	if (option->features & QStyleOptionButton::Flat) {
-		if (!(option->state & (QStyle::State_Sunken | QStyle::State_On))) {
-			if (option->state & QStyle::State_MouseOver) {
-				painter->fillRect(option->rect, QColor(255, 255, 255, 60));
-			}
-		}
-	}
-	if (option->features & QStyleOptionButton::HasMenu) {
-		int size = style->pixelMetric(QStyle::PM_MenuButtonIndicator, &opt, widget);
-//		QFont font;
-//		font.setPointSizeF(font.pointSizeF() / 1.19);
-//		opt.fontMetrics = QFontMetrics(font);
-		opt.palette.setColor(QPalette::Text, opt.palette.color(fgrole));
-		opt.state &= ~(QStyle::State_MouseOver);
-		if (option->direction == Qt::LeftToRight) {
-			opt.rect = QRect(option->rect.right() - size - 2, option->rect.top(), size, option->rect.height());
-		} else {
-			opt.rect = QRect(option->rect.left() + 4, option->rect.top(), size, option->rect.height());
-		}
-		if (option->state & (QStyle::State_Sunken | QStyle::State_On)) {
-			opt.rect.translate(style->pixelMetric(QStyle::PM_ButtonShiftHorizontal, &opt, widget), style->pixelMetric(QStyle::PM_ButtonShiftVertical, &opt, widget));
-		}
-		style->drawPrimitive(QStyle::PE_IndicatorArrowDown, &opt, painter, widget);
-	}
-}
-
-
-/*
- * skulpture_cache.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPixmapCache>
-#include <QtCore/QDebug>
-#include <QtGui/QGradient>
-#include <QtGui/QPainter>
-
-
-/*-----------------------------------------------------------------------*/
-
-static const bool UsePixmapCache = true;
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * paint a pushbutton to painter
- *
- */
-
-extern void paintButtonPanel(QPainter *painter, const QStyleOptionButton *option, QPalette::ColorRole bgrole);
-
-static const int button_edge_size = 16;
-static const int button_inner_width = 32;
-
-void paintCommandButtonPanel(QPainter *painter, const QStyleOptionButton *option, QPalette::ColorRole bgrole)
-{
-	bool useCache = UsePixmapCache;
-	QString pixmapName;
-	QPixmap pixmap;
-	QRect r = option->rect;
-	r.setWidth(button_inner_width + 2 * button_edge_size);
-
-	if (/*option->state & (QStyle::State_HasFocus | QStyle::State_MouseOver) ||*/ r.height() > 64) {
-		useCache = false;
-	}
-	if (useCache) {
-		uint state = uint(option->state) & (QStyle::State_Enabled | QStyle::State_On | QStyle::State_MouseOver | QStyle::State_Sunken | QStyle::State_HasFocus);
-		uint features = uint(option->features) & (QStyleOptionButton::Flat | QStyleOptionButton::DefaultButton);
-		if (!(state & QStyle::State_Enabled)) {
-			state &= ~(QStyle::State_MouseOver | QStyle::State_HasFocus);
-		}
-		pixmapName.sprintf("scp-cbp-%x-%x-%x-%x-%llx-%x", features, uint(bgrole), state, option->direction, option->palette.cacheKey(), r.height());
-	}
-	if (!useCache || !QPixmapCache::find(pixmapName, pixmap)) {
-		pixmap =  QPixmap(r.size());
-		pixmap.fill(Qt::transparent);
-	//	pixmap.fill(Qt::red);
-		QPainter p(&pixmap);
-		QStyleOptionButton but = *option;
-		but.rect = QRect(QPoint(0, 0), r.size());
-	//	### neither Clear nor Source works?
-	//	p.setCompositionMode(QPainter::CompositionMode_Clear);
-	//	p.setCompositionMode(QPainter::CompositionMode_Source);
-	//	p.fillRect(but.rect, Qt::transparent);
-	//	p.setCompositionMode(QPainter::CompositionMode_SourceOver);
-		p.setFont(painter->font());
-		p.setRenderHint(QPainter::Antialiasing, true);
-		paintButtonPanel(&p, &but, bgrole);
-		p.end();
-		if (useCache) {
-			QPixmapCache::insert(pixmapName, pixmap);
-		//	qDebug() << "inserted into cache:" << pixmapName;
-		}
-	}
-	int rem;
-	if (option->rect.width() == r.width()) {
-		rem = r.width();
-	} else {
-		int side = qMin(option->rect.width() / 2, button_inner_width + button_edge_size);
-		painter->drawPixmap(r.topLeft(), pixmap, QRect(0, 0, side, r.height()));
-		int midw = option->rect.width() - 2 * side;
-		rem = option->rect.width() - side;
-		r.translate(side, 0);
-		while (midw > 0) {
-			int w = qMin(button_inner_width, midw);
-			rem -= w;
-			painter->drawPixmap(r.topLeft(), pixmap, QRect(button_edge_size, 0, w, r.height()));
-			r.translate(w, 0);
-			midw -= button_inner_width;
-		}
-	}
-	painter->drawPixmap(r.topLeft(), pixmap, QRect(r.width() - rem, 0, rem, r.height()));
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintPanelButtonTool(QPainter *painter, const QStyleOption *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	Q_UNUSED(style);
-	QStyleOptionButton button;
-
-	if (widget && !qstrcmp(widget->metaObject()->className(), "QDockWidgetTitleButton")) {
-		if (!(option->state & QStyle::State_MouseOver)) return;
-	}
-	button.QStyleOption::operator=(*option);
-	button.features = QStyleOptionButton::None;
-//	button.state &= ~(QStyle::State_Sunken | QStyle::State_Selected | QStyle::State_On);
-	// ### qtconfig creates its color select buttons as disabled...
-	// ### the same is done in for TitleBar buttons
-	if (button.state == QStyle::State_Sunken || button.state == QStyle::State_Raised) {
-		button.state |= QStyle::State_Enabled;
-	} else if (!(button.state & QStyle::State_Enabled) && (option->state & QStyle::State_AutoRaise)) {
-		return;
-	}
-	// ### don't know if tool buttons should have that big frame...
-	button.rect.adjust(-1, -1, 1, 1);
-	// FIXME bgrole
-	paintCommandButtonPanel(painter, &button, QPalette::Button);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-static void paintIndicatorCached(QPainter *painter, const QStyleOption *option, void (*paintIndicator)(QPainter *painter, const QStyleOption *option), bool useCache, const QString &pixmapName)
-{
-	QPixmap pixmap;
-
-	if (!useCache || !QPixmapCache::find(pixmapName, pixmap)) {
-		pixmap =  QPixmap(option->rect.size());
-#if 1
-		pixmap.fill(Qt::transparent);
-	//	pixmap.fill(Qt::red);
-#else
-		pixmap.fill(option->palette.color(QPalette::Window));
-#endif
-		QPainter p(&pixmap);
-		QStyleOption opt = *option;
-		opt.rect = QRect(QPoint(0, 0), option->rect.size());
-	//	p.setCompositionMode(QPainter::CompositionMode_Clear);
-	//	p.setCompositionMode(QPainter::CompositionMode_Source);
-	//	p.fillRect(opt.rect, Qt::transparent);
-	//	p.setCompositionMode(QPainter::CompositionMode_SourceOver);
-		p.setFont(painter->font());
-		p.setRenderHint(QPainter::Antialiasing, true);
-		paintIndicator(&p, &opt);
-		p.end();
-		if (useCache) {
-			QPixmapCache::insert(pixmapName, pixmap);
-		//	qDebug() << "inserted into cache:" << pixmapName;
-		}
-	}
-	painter->drawPixmap(option->rect, pixmap);
-}
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * paint a checkbox to the painter
- *
- * the size/position of the checkbox is
- * option->rect
- *
- * the following option->state flags modify appearance:
- * - enabled
- * - on, off, nochange
- * - mouse over
- * - selected
- *
- */
-
-static void paintCheckBox(QPainter *painter, const QStyleOption *option)
-{
-	QRect r = option->rect;
-//	painter->fillRect(option->rect, Qt::red);
-	r.adjust(2, 2, -2, -2);
-	if (option->state & QStyle::State_NoChange) {
-		paintThinFrame(painter, r.adjusted(-1, -1, 1, 1), option->palette, 30, -10);
-		paintThinFrame(painter, r, option->palette, -50, -60);
-		paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, 0, 60);
-		QColor color = option->palette.color(QPalette::Window);
-		if (option->state & QStyle::State_Enabled) {
-			if (option->state & QStyle::State_Sunken) {
-				color = color.dark(110);
-			} else if (option->state & QStyle::State_MouseOver) {
-				color = color.light(106);
-			}
-		} else {
-			color = color.dark(106);
-		}
-		painter->fillRect(r.adjusted(2, 2, -2, -2), color);
-	} else {
-		QColor color = option->palette.color(QPalette::Base);
-		if (!(option->state & QStyle::State_On) && !(option->state & QStyle::State_Enabled)) {
-			color = option->palette.color(QPalette::Window);
-		}
-		painter->fillRect(r.adjusted(1, 1, -1, -1), color);
-		QLinearGradient checkGradient(r.topLeft(), r.bottomLeft());
-		checkGradient.setColorAt(0.0, shaded_color(color, -15));
-		checkGradient.setColorAt(1.0, shaded_color(color, 60));
-		painter->fillRect(r.adjusted(1, 1, -1, -1), checkGradient);
-		paintRecessedFrame(painter, r.adjusted(-1, -1, 1, 1), option->palette, RF_Small);
-		if (option->state & QStyle::State_Enabled) {
-			paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, 140, 200);
-		} else {
-			paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, 180, 180);
-		}
-#if 0
-		// FIXME dont use round highlight, but works better
-		QRadialGradient on_gradient(rf.center(), r.width() / 2.0 + 2);
-		QColor endc = option->palette.color(QPalette::Highlight).light(150);
-		QColor midc = endc;
-
-		if (option->state & QStyle::State_MouseOver) {
-			midc.setAlpha(250);
-		} else {
-			midc.setAlpha(120);
-		}
-		endc.setAlpha(0);
-		if (option->state & QStyle::State_Sunken) {
-			on_gradient.setColorAt(0.0, option->palette.color(QPalette::Base));
-		} else if (option->state & QStyle::State_On) {
-			on_gradient.setColorAt(0.0, option->palette.color(QPalette::Highlight).dark(150));
-			on_gradient.setColorAt(0.3, option->palette.color(QPalette::Highlight));
-		} else if (!(option->state & QStyle::State_MouseOver)) {
-			return;
-		}
-		on_gradient.setColorAt(0.4, option->palette.color(QPalette::Highlight).light(150));
-
-		on_gradient.setColorAt(0.5, midc);
-		on_gradient.setColorAt(1.0, endc);
-		painter->setPen(Qt::NoPen);
-		painter->setBrush(on_gradient);
-		painter->drawRect(r);
-#endif
-		{
-		QRectF r = option->rect;
-		r.adjust(2, 2, -2, -2);
-		QPainterPath path;
-		qreal a;
-		r.moveCenter(QPointF(0, 0));
-		// FIXME make a loop
-		if (option->state & (QStyle::State_On | QStyle::State_Sunken | QStyle::State_MouseOver)) {
-			painter->save();
-			r.adjust(1, 1, -1, -1);
-			path = QPainterPath();
-			path.setFillRule(Qt::WindingFill);
-			a = r.width() / 4.0;
-			path.addRect(r.adjusted(a, 0, -a, 0));
-			path.addRect(r.adjusted(0, a, 0, -a));
-			painter->setPen(Qt::NoPen);
-			painter->setBrush(option->palette.color(QPalette::Highlight).light(150));
-			painter->setOpacity(painter->opacity() * 0.5);
-			painter->translate(QRectF(option->rect).center());
-			painter->rotate(50);
-			painter->drawPath(path);
-			painter->restore();
-		}
-		if (option->state & (QStyle::State_On | QStyle::State_Sunken)) {
-			painter->save();
-			r.adjust(1, 1, -1, -1);
-			path = QPainterPath();
-			path.setFillRule(Qt::WindingFill);
-			a = r.width() / 3.0;
-			path.addRect(r.adjusted(a, 0, -a, 0));
-			path.addRect(r.adjusted(0, a, 0, -a));
-			painter->setPen(Qt::NoPen);
-			painter->setBrush(option->palette.color(QPalette::Highlight));
-			painter->setOpacity(painter->opacity() * (option->state & QStyle::State_On ? 0.5 : 0.7));
-			painter->translate(QRectF(option->rect).center());
-			painter->rotate(50);
-			painter->drawPath(path);
-			painter->restore();
-		}
-		if (option->state & QStyle::State_On) {
-			painter->save();
-			path = QPainterPath();
-			path.setFillRule(Qt::WindingFill);
-			r.adjust(1, 1, -1, -1);
-			a = r.width() / 3.0;
-			path.addRect(r.adjusted(a, 0, -a, 0));
-			path.addRect(r.adjusted(0, a, 0, -a));
-			painter->setPen(Qt::NoPen);
-			painter->setBrush(option->palette.color(QPalette::Highlight).dark(option->state & QStyle::State_Sunken ? 80 : 150));
-			painter->setOpacity(painter->opacity() * 0.8);
-			painter->translate(QRectF(option->rect).center());
-			painter->rotate(50);
-			painter->drawPath(path);
-			painter->restore();
-		}
-		}
-	}
-}
-
-
-void paintIndicatorCheckBox(QPainter *painter, const QStyleOptionButton *option)
-{
-	bool useCache = UsePixmapCache;
-	QString pixmapName;
-	QRect r = option->rect;
-
-	if (/* option->state & (QStyle::State_HasFocus | QStyle::State_MouseOver) ||*/ r.width() * r.height() > 4096) {
-		useCache = false;
-	}
-	if (useCache) {
-		uint state = uint(option->state) & (QStyle::State_Enabled | QStyle::State_On | QStyle::State_NoChange | QStyle::State_MouseOver | QStyle::State_Sunken | QStyle::State_HasFocus);
-		if (!(state & QStyle::State_Enabled)) {
-			state &= ~(QStyle::State_MouseOver | QStyle::State_HasFocus);
-		}
-		state &= ~(QStyle::State_HasFocus);
-		pixmapName.sprintf("scp-icb-%x-%x-%llx-%x-%x", state, option->direction, option->palette.cacheKey(), r.width(), r.height());
-	}
-	paintIndicatorCached(painter, option, paintCheckBox, useCache, pixmapName);
-}
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * paint a radiobutton to the painter
- *
- * the size/position of the radiobutton is
- * option->rect
- *
- * the following option->state flags modify appearance:
- * - enabled
- * - on, off
- * - mouse over
- * - selected
- *
- */
-
-static void paintRadioButton(QPainter *painter, const QStyleOption *option)
-{
-//	const qreal angle = option->direction == Qt::LeftToRight ? 135.0 : 45.0;
-
-//	painter->fillRect(option->rect, Qt::red);
-	int d = qMin(option->rect.width(), option->rect.height()) - 4;
-	QRect r(option->rect.left() + (option->rect.width() - d) / 2, option->rect.top() + (option->rect.height() - d) / 2, d, d);
-//	painter->fillRect(r, Qt::white);
-	QLinearGradient border_gradient(r.topLeft(), r.bottomRight());
-	border_gradient.setColorAt(0.0, option->palette.color(QPalette::Window).lighter(120));
-//	border_gradient.setColorAt(0.1, option->palette.color(QPalette::Window));
-//	border_gradient.setColorAt(0.7, option->palette.color(QPalette::Window).darker(400));
-	border_gradient.setColorAt(1.0, option->palette.color(QPalette::Window).darker(20));
-	int t = 2;
-	painter->setPen(QPen(border_gradient, t));
-#if 0
-	QLinearGradient dial_gradient(r.topLeft(), r.bottomLeft());
-	dial_gradient.setColorAt(0.0, option->palette.color(QPalette::Window).darker(105));
-	dial_gradient.setColorAt(0.5, option->palette.color(QPalette::Window).lighter(102));
-	dial_gradient.setColorAt(1.0, option->palette.color(QPalette::Window).lighter(105));
-#elif 0
-	QLinearGradient dial_gradient(r.topLeft(), r.bottomLeft());
-	dial_gradient.setColorAt(0.0, option->palette.color(QPalette::Window).lighter(102));
-	dial_gradient.setColorAt(0.4, option->palette.color(QPalette::Window).darker(102));
-	dial_gradient.setColorAt(0.5, option->palette.color(QPalette::Window).darker(105));
-	dial_gradient.setColorAt(1.0, option->palette.color(QPalette::Window).lighter(102));
-#else
-	QConicalGradient dial_gradient(r.center(), -100);
-	if (option->state & QStyle::State_Enabled) {
-		dial_gradient.setColorAt(0.0, option->palette.color(QPalette::Base).darker(102));
-		dial_gradient.setColorAt(0.3, option->palette.color(QPalette::Base).darker(106));
-		dial_gradient.setColorAt(0.7, option->palette.color(QPalette::Base).darker(110));
-		dial_gradient.setColorAt(1.0, option->palette.color(QPalette::Base).darker(102));
-	} else {
-		dial_gradient.setColorAt(0.0, option->palette.color(QPalette::Window).lighter(102));
-		dial_gradient.setColorAt(0.4, option->palette.color(QPalette::Window).darker(102));
-		dial_gradient.setColorAt(0.5, option->palette.color(QPalette::Window).darker(105));
-		dial_gradient.setColorAt(1.0, option->palette.color(QPalette::Window).lighter(102));
-	}
-#endif
-	painter->setBrush(dial_gradient);
-	t = t / 2;
-	painter->drawEllipse(r.adjusted(t, t, -t, -t));
-
-	QLinearGradient border2_gradient(r.topLeft(), r.bottomRight());
-	border2_gradient.setColorAt(1.0, option->palette.color(QPalette::Window).darker(option->state & QStyle::State_On ?  120 : 110));
-	border2_gradient.setColorAt(0.5, option->palette.color(QPalette::Window));
-	border2_gradient.setColorAt(0.0, option->palette.color(QPalette::Window).darker(200));
-	painter->drawEllipse(r.adjusted(t, t, -t, -t));
-//	t = option->state & QStyle::State_On ? 2 : 1;
-	t = 1;
-	painter->setPen(QPen(border2_gradient, t));
-	painter->setBrush(Qt::NoBrush);
-	painter->drawEllipse(r);
-	if (1 || option->state & QStyle::State_On) {
-		QRectF rf = r;
-		QRadialGradient on_gradient(rf.center(), d / 2.0 + 2);
-		QColor endc = option->palette.color(QPalette::Highlight).light(150);
-		QColor midc = endc;
-#if 0
-		midc.setAlpha(120);
-		endc.setAlpha(0);
-		on_gradient.setColorAt(0.0, option->palette.color(QPalette::Highlight).dark(150));
-		on_gradient.setColorAt(0.3, option->palette.color(QPalette::Highlight));
-		on_gradient.setColorAt(0.4, option->palette.color(QPalette::Highlight).light(150));
-#else
-		if (option->state & QStyle::State_MouseOver) {
-			midc.setAlpha(10);
-		} else {
-			midc.setAlpha(120);
-		}
-		endc.setAlpha(0);
-		if (option->state & QStyle::State_Sunken) {
-			on_gradient.setColorAt(0.0, option->palette.color(QPalette::Base));
-		} else if (option->state & QStyle::State_On) {
-			on_gradient.setColorAt(0.0, option->palette.color(QPalette::Highlight).dark(150));
-			on_gradient.setColorAt(0.3, option->palette.color(QPalette::Highlight));
-		} else if (!(option->state & QStyle::State_MouseOver)) {
-			return;
-		}
-		on_gradient.setColorAt(0.4, option->palette.color(QPalette::Highlight).light(150));
-#endif
-		on_gradient.setColorAt(0.5, midc);
-		on_gradient.setColorAt(1.0, endc);
-		painter->setPen(Qt::NoPen);
-		painter->setBrush(on_gradient);
-		painter->drawEllipse(r);
-	//	painter->drawEllipse(r.adjusted(-2, -2, 2, 2));
-	}
-}
-
-
-void paintIndicatorRadioButton(QPainter *painter, const QStyleOptionButton *option)
-{
-	bool useCache = UsePixmapCache;
-	QString pixmapName;
-	QRect r = option->rect;
-
-	if (/* option->state & (QStyle::State_HasFocus | QStyle::State_MouseOver) ||*/ r.width() * r.height() > 4096) {
-		useCache = false;
-	}
-	if (useCache) {
-		uint state = uint(option->state) & (QStyle::State_Enabled | QStyle::State_On | QStyle::State_MouseOver | QStyle::State_Sunken | QStyle::State_HasFocus);
-		if (!(state & QStyle::State_Enabled)) {
-			state &= ~(QStyle::State_MouseOver | QStyle::State_HasFocus);
-		}
-		state &= ~(QStyle::State_HasFocus);
-		pixmapName.sprintf("scp-irb-%x-%x-%llx-%x-%x", state, option->direction, option->palette.cacheKey(), r.width(), r.height());
-	}
-	paintIndicatorCached(painter, option, paintRadioButton, useCache, pixmapName);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintIndicatorMenuCheckMark(QPainter *painter, const QStyleOptionMenuItem *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	// FIXME QPlastiqueStyle does not call this, but calls
-	// PE_IndicatorCheckBox/RadioButton directly
-	QStyleOptionButton buttonOption;
-
-	buttonOption.QStyleOption::operator=(*option);
-//	buttonOption.rect.adjust(-2, -2, 2, 2);
-//	qDebug("here!");
-//	printf("state 0x%08x\n", uint(buttonOption.state));
-	if (option->state & QStyle::State_Enabled) {
-		if (buttonOption.state & QStyle::State_On) {
-			buttonOption.state |= QStyle::State_Sunken;
-		}
-	}
-	buttonOption.state |= QStyle::State_On;
-	if (widget) {
-		buttonOption.palette = widget->palette();
-		if (option->state & QStyle::State_Enabled) {
-			if (option->state & QStyle::State_Active) {
-				buttonOption.palette.setCurrentColorGroup(QPalette::Active);
-			} else {
-				buttonOption.palette.setCurrentColorGroup(QPalette::Inactive);
-			}
-		} else {
-			buttonOption.palette.setCurrentColorGroup(QPalette::Disabled);
-		}
-	}
-	if (option->checkType == QStyleOptionMenuItem::Exclusive) {
-		QSize size(style->pixelMetric(QStyle::PM_ExclusiveIndicatorWidth, option, widget), style->pixelMetric(QStyle::PM_ExclusiveIndicatorHeight, option, widget));
-		buttonOption.rect = QRect(option->rect.center() - QPoint(size.width() / 2, size.height() / 2), size);
-		paintIndicatorRadioButton(painter, &buttonOption);
-	} else {
-		QSize size(style->pixelMetric(QStyle::PM_IndicatorWidth, option, widget), style->pixelMetric(QStyle::PM_IndicatorHeight, option, widget));
-		buttonOption.rect = QRect(option->rect.center() - QPoint(size.width() / 2, size.height() / 2), size);
-		paintIndicatorCheckBox(painter, &buttonOption);
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-static void paintGrip(QPainter *painter, const QStyleOption *option)
-{
-//	painter->fillRect(option->rect, Qt::red);
-	int d = qMin(option->rect.width(), option->rect.height());
-	// good values are 3 (very small), 4 (small), 5 (good), 7 (large), 9 (huge)
-	// int d = 5;
-	QRectF rect(QRectF(option->rect).center() - QPointF(d / 2.0, d / 2.0), QSizeF(d, d));
-	const qreal angle = option->direction == Qt::LeftToRight ? 135.0 : 45.0;
-//	const qreal angle = 90;
-	QColor color;
-	qreal opacity = 0.9;
-
-	painter->save();
-	painter->setPen(Qt::NoPen);
-	if (option->state & QStyle::State_Enabled) {
-		if (option->state & QStyle::State_Sunken) {
-			color = option->palette.color(QPalette::Highlight).dark(110);
-		} else {
-			color = option->palette.color(QPalette::Button);
-		}
-	} else {
-		color = option->palette.color(QPalette::Window);
-		opacity = 0.5;
-	}
-
-	QConicalGradient gradient1(rect.center(), angle);
-	gradient1.setColorAt(0.0, shaded_color(color, -110));
-	gradient1.setColorAt(0.25, shaded_color(color, -30));
-	gradient1.setColorAt(0.5, shaded_color(color, 180));
-	gradient1.setColorAt(0.75, shaded_color(color, -30));
-	gradient1.setColorAt(1.0, shaded_color(color, -110));
-	painter->setBrush(color);
-	painter->drawEllipse(rect);
-	painter->setBrush(gradient1);
-	painter->setOpacity(opacity);
-	painter->drawEllipse(rect);
-	painter->setOpacity(1.0);
-	if (d > 2) {
-		QConicalGradient gradient2(rect.center(), angle);
-		gradient2.setColorAt(0.0, shaded_color(color, -40));
-		gradient2.setColorAt(0.25, shaded_color(color, 0));
-		gradient2.setColorAt(0.5, shaded_color(color, 210));
-		gradient2.setColorAt(0.75, shaded_color(color, 0));
-		gradient2.setColorAt(1.0, shaded_color(color, -40));
-		rect.adjust(1, 1, -1, -1);
-		painter->setBrush(color);
-		painter->drawEllipse(rect);
-		painter->setBrush(gradient2);
-		painter->setOpacity(opacity);
-		painter->drawEllipse(rect);
-		painter->setOpacity(1.0);
-		if (d > 8) {
-			QConicalGradient gradient3(rect.center(), angle);
-			gradient3.setColorAt(0.0, shaded_color(color, -10));
-			gradient3.setColorAt(0.25, shaded_color(color, 0));
-			gradient3.setColorAt(0.5, shaded_color(color, 180));
-			gradient3.setColorAt(0.75, shaded_color(color, 0));
-			gradient3.setColorAt(1.0, shaded_color(color, -10));
-			rect.adjust(2, 2, -2, -2);
-			painter->setBrush(color);
-			painter->drawEllipse(rect);
-			painter->setBrush(gradient3);
-			painter->setOpacity(opacity);
-			painter->drawEllipse(rect);
-			painter->setOpacity(1.0);
-		}
-	}
-
-	painter->restore();
-}
-
-
-void paintCachedGrip(QPainter *painter, const QStyleOption *option, QPalette::ColorRole bgrole)
-{
-	bool useCache = UsePixmapCache;
-	QString pixmapName;
-	QRect r = option->rect;
-
-	if (/* option->state & (QStyle::State_HasFocus | QStyle::State_MouseOver) ||*/ r.width() * r.height() > 4096) {
-		useCache = false;
-	}
-	if (useCache) {
-		uint state = uint(option->state) & (QStyle::State_Enabled | QStyle::State_On | QStyle::State_MouseOver | QStyle::State_Sunken | QStyle::State_HasFocus);
-		if (!(state & QStyle::State_Enabled)) {
-			state &= ~(QStyle::State_MouseOver | QStyle::State_HasFocus);
-		}
-		state &= ~(QStyle::State_HasFocus);
-		pixmapName.sprintf("scp-isg-%x-%x-%x-%llx-%x-%x", uint(bgrole), state, option->direction, option->palette.cacheKey(), r.width(), r.height());
-	}
-	paintIndicatorCached(painter, option, paintGrip, useCache, pixmapName);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintDialBase(QPainter *painter, const QStyleOption *option)
-{
-//	painter->fillRect(option->rect, Qt::red);
-//	painter->save();
-//	painter->setRenderHint(QPainter::Antialiasing, true);
-	int d = qMin(option->rect.width(), option->rect.height());
-/*	if (d > 20 && option->notchTarget > 0) {
-		d += -1;
-	}
-*/	QRectF r((option->rect.width() - d) / 2.0, (option->rect.height() - d) / 2.0, d, d);
-	const qreal angle = option->direction == Qt::LeftToRight ? 135.0 : 45.0;
-//	const qreal angle = 90;
-
-	painter->setPen(Qt::NoPen);
-	QColor border_color = option->palette.color(QPalette::Window);
-#if 0
-	{
-		QRadialGradient depth_gradient(r.center(), d / 2);
-//		depth_gradient.setColorAt(0.0, QColor(0, 0, 0, 255));
-		depth_gradient.setColorAt(0.5, QColor(0, 0, 0, 255));
-		depth_gradient.setColorAt(1.0, QColor(0, 0, 0, 0));
-		painter->setBrush(depth_gradient);
-		painter->drawEllipse(r);
-	}
-#endif
-#if 1
-	if (option->state & QStyle::State_HasFocus && option->state & QStyle::State_KeyboardFocusChange) {
-		painter->setBrush(option->palette.color(QPalette::Highlight).dark(180));
-		r.adjust(1, 1, -1, -1);
-		painter->drawEllipse(r);
-		painter->setBrush(border_color);
-		r.adjust(1, 1, -1, -1);
-		painter->drawEllipse(r);
-		r.adjust(1, 1, -1, -1);
-	} else {
-		painter->setBrush(border_color);
-		r.adjust(1, 1, -1, -1);
-		painter->drawEllipse(r);
-		r.adjust(1, 1, -1, -1);
-		QConicalGradient border_gradient(r.center(), angle);
-		if (!(option->state & QStyle::State_Enabled)) {
-			border_color = border_color.lighter(120);
-		}
-		border_gradient.setColorAt(0.0, border_color.darker(180));
-		border_gradient.setColorAt(0.3, border_color.darker(130));
-		border_gradient.setColorAt(0.5, border_color.darker(170));
-		border_gradient.setColorAt(0.7, border_color.darker(130));
-		border_gradient.setColorAt(1.0, border_color.darker(180));
-		painter->setBrush(border_gradient);
-//		painter->setBrush(Qt::blue);
-		painter->drawEllipse(r);
-		r.adjust(1, 1, -1, -1);
-	}
-	d -= 6;
-
-	QColor dial_color;
-	if (option->state & QStyle::State_Enabled) {
-		dial_color = option->palette.color(QPalette::Button).lighter(101);
-		if (option->state & QStyle::State_MouseOver) {
-			dial_color = dial_color.lighter(103);
-		}
-	} else {
-		dial_color = option->palette.color(QPalette::Window);
-	}
-	qreal t = option->state & QStyle::State_Enabled ? 2.0 : 1.5;
-	if (1) {
-		// ###: work around Qt 4.3.0 bug? (this works for 4.3.1)
-		QConicalGradient border_gradient(r.center(), angle);
-		border_gradient.setColorAt(0.0, dial_color.lighter(120));
-		border_gradient.setColorAt(0.2, dial_color);
-		border_gradient.setColorAt(0.5, dial_color.darker(130));
-		border_gradient.setColorAt(0.8, dial_color);
-		border_gradient.setColorAt(1.0, dial_color.lighter(120));
-		painter->setPen(QPen(border_gradient, t));
-	} else {
-		painter->setPen(QPen(Qt::red, t));
-	}
-#if 0
-	QLinearGradient dial_gradient(r.topLeft(), r.bottomLeft());
-	dial_gradient.setColorAt(0.0, dial_color.darker(105));
-	dial_gradient.setColorAt(0.5, dial_color.lighter(102));
-	dial_gradient.setColorAt(1.0, dial_color.lighter(105));
-#elif 1
-	QLinearGradient dial_gradient(option->direction == Qt::RightToLeft ? r.topRight() : r.topLeft(), option->direction == Qt::RightToLeft ? r.bottomLeft() : r.bottomRight());
-//	QLinearGradient dial_gradient(r.topLeft(), r.bottomLeft());
-	if (true || option->state & QStyle::State_Enabled) {
-#if 1
-		dial_gradient.setColorAt(0.0, dial_color.darker(106));
-		dial_gradient.setColorAt(1.0, dial_color.lighter(104));
-#else
-		dial_gradient.setColorAt(0.0, dial_color.lighter(101));
-		dial_gradient.setColorAt(0.5, dial_color.darker(103));
-		dial_gradient.setColorAt(1.0, dial_color.lighter(104));
-#endif
-	} else {
-		dial_gradient.setColorAt(0.0, dial_color);
-		dial_gradient.setColorAt(1.0, dial_color);
-	}
-#elif 0
-	QConicalGradient dial_gradient(r.center(), angle);
-	dial_gradient.setColorAt(0.0, dial_color.lighter(102));
-	dial_gradient.setColorAt(0.5, dial_color.darker(103));
-	dial_gradient.setColorAt(1.0, dial_color.lighter(102));
-#else
-	QBrush dial_gradient(dial_color);
-#endif
-	painter->setBrush(dial_gradient);
-	t = t / 2;
-	painter->drawEllipse(r.adjusted(t, t, -t, -t));
-
-//	painter->setPen(Qt::NoPen);
-//	painter->setBrush(dial_color);
-//	painter->drawEllipse(r.adjusted(d / 4, d / 4, - d / 4, - d / 4));
-
-#if 0
-	QLinearGradient border2_gradient(r.topLeft(), r.bottomRight());
-	border2_gradient.setColorAt(1.0, dial_color.darker(425));
-	border2_gradient.setColorAt(0.9, dial_color);
-	border2_gradient.setColorAt(0.0, dial_color.darker(400));
-	painter->setPen(QPen(border2_gradient, 1.3));
-	painter->setBrush(Qt::NoBrush);
-	painter->drawEllipse(r.adjusted(0.3, 0.3, -0.3, -0.3));
-#endif
-//	painter->restore();
-#endif
-}
-
-
-void paintCachedDialBase(QPainter *painter, const QStyleOptionSlider *option)
-{
-	bool useCache = UsePixmapCache;
-	QString pixmapName;
-	QRect r = option->rect;
-	int d = qMin(r.width(), r.height());
-
-	if (/* option->state & (QStyle::State_HasFocus | QStyle::State_MouseOver) ||*/ d > 128) {
-		useCache = false;
-	}
-	if (useCache) {
-		uint state = uint(option->state) & (QStyle::State_Enabled | QStyle::State_On | QStyle::State_MouseOver | QStyle::State_KeyboardFocusChange | QStyle::State_HasFocus);
-		if (!(state & QStyle::State_Enabled)) {
-			state &= ~(QStyle::State_MouseOver | QStyle::State_HasFocus | QStyle::State_KeyboardFocusChange);
-		}
-	//	state &= ~(QStyle::State_HasFocus);
-		pixmapName.sprintf("scp-qdb-%x-%x-%llx-%x", state, option->direction, option->palette.cacheKey(), d);
-	}
-	paintIndicatorCached(painter, option, paintDialBase, useCache, pixmapName);
-}
-
-
-void paintIndicatorDial(QPainter *painter, const QStyleOptionSlider *option)
-{
-	int d = qMin(option->rect.width(), option->rect.height());
-	QRect rect(option->rect.center() - QPoint((d - 1) / 2, (d - 1) / 2), QSize(d, d));
-	QStyleOptionSlider opt;
-	opt.QStyleOption::operator=(*option);
-	opt.rect = rect;
-	paintCachedDialBase(painter, &opt);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintBranchChildren(QPainter *painter, const QStyleOption *option)
-{
-	painter->setBrush(option->palette.color(QPalette::Text));
-	painter->setPen(Qt::NoPen);
-	painter->drawEllipse(option->rect);
-}
-
-
-void paintCachedIndicatorBranchChildren(QPainter *painter, const QStyleOption *option)
-{
-	bool useCache = UsePixmapCache;
-	QString pixmapName;
-	QRect r = option->rect;
-	int d = qMin(r.width(), r.height());
-
-	if (/* option->state & (QStyle::State_HasFocus | QStyle::State_MouseOver) ||*/ d > 64) {
-		useCache = false;
-	}
-	if (useCache) {
-		uint state = uint(option->state) & (QStyle::State_Enabled | QStyle::State_Open);
-	//	if (!(state & QStyle::State_Enabled)) {
-	//		state &= ~(QStyle::State_MouseOver | QStyle::State_HasFocus | QStyle::State_KeyboardFocusChange);
-	//	}
-	//	state &= ~(QStyle::State_HasFocus);
-		pixmapName.sprintf("scp-qibc-%x-%x-%llx-%x", state, option->direction, option->palette.cacheKey(), d);
-	}
-	paintIndicatorCached(painter, option, paintBranchChildren, useCache, pixmapName);
-}
-
-
-/*
- * skulpture_color.cpp
- *
- */
-
-#include "skulpture_p.h"
-
-
-/*-----------------------------------------------------------------------*/
-
-QColor shaded_color(const QColor &color, int shade)
-{
-#if 1
-	const qreal contrast = 1.0;
-	int r, g, b;
-	color.getRgb(&r, &g, &b);
-	int gray = qGray(r, g, b);
-	gray = qMax(r, qMax(g, b));
-	gray = (r + b + g + 3 * gray) / 6;
-	if (shade < 0) {
-		qreal k = 220.0 / 255.0 * shade;
-		k *= contrast;
-		int a = 255;
-		if (gray > 0) {
-			a = int(k * 255 / (0 - gray));
-			if (a < 0) a = 0;
-			if (a > 255) a = 255;
-		}
-		return QColor(0, 0, 0, a);
-	} else {
-		qreal k = (255 - 220.0) / (255.0) * shade;
-		k *= contrast;
-		int a = 255;
-		if (gray < 255) {
-			a = int(k * 255 / (255 - gray));
-			if (a < 0) a = 0;
-			if (a > 255) a = 255;
-		}
-		return QColor(255, 255, 255, a);
-	}
-#else
-	if (shade < 0) {
-		return QColor(0, 0, 0, -shade);
-	} else {
-		return QColor(255, 255, 255, shade);
-	}
-#endif
-}
-
-
-QColor blend_color(const QColor &c0, const QColor &c1, qreal blend)
-{
-#if 0 // more exact, but probably slower
-	QColor c;
-
-	blend = qMin(1.0, qMax(0.0, blend));
-	c.setRgbF(
-		c0.redF() * (1.0 - blend) + c1.redF() * blend,
-		c0.greenF() * (1.0 - blend) + c1.greenF() * blend,
-		c0.blueF() * (1.0 - blend) + c1.blueF() * blend,
-		c0.alphaF() * (1.0 - blend) + c1.alphaF() * blend
-	);
-	return c;
-#else
-	int b = int(0.5 + 256.0 * blend);
-	b = qMin(256, qMax(0, b));
-	QRgb rgba0 = c0.rgba();
-	QRgb rgba1 = c1.rgba();
-	return QColor(
-		qRed(rgba0) + (((qRed(rgba1) - qRed(rgba0)) * b) >> 8),
-		qGreen(rgba0) + (((qGreen(rgba1) - qGreen(rgba0)) * b) >> 8),
-		qBlue(rgba0) + (((qBlue(rgba1) - qBlue(rgba0)) * b) >> 8),
-		qAlpha(rgba0) + (((qAlpha(rgba1) - qAlpha(rgba0)) * b) >> 8)
-	);
-#endif
-}
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * Don't be too fancy about colors, because KDE 4
- * has a different color system
- */
-
-static void computePaletteGroups(QPalette &palette)
-{
-#if 0 // force colors (for KDE4 alpha)
-	palette.setColor(QPalette::Active, QPalette::Window, QColor(221, 220, 218));
-	palette.setColor(QPalette::Active, QPalette::WindowText, QColor(0, 0, 0));
-	palette.setColor(QPalette::Active, QPalette::Button, QColor(226, 225, 222));
-	palette.setColor(QPalette::Active, QPalette::ButtonText, QColor(0, 0, 0));
-	palette.setColor(QPalette::Active, QPalette::Base, QColor(250, 250, 250));
-	palette.setColor(QPalette::Active, QPalette::Text, QColor(0, 0, 0));
-//	palette.setColor(QPalette::Active, QPalette::Highlight, QColor(250, 210, 0));
-//	palette.setColor(QPalette::Active, QPalette::HighlightedText, QColor(0, 0, 0));
-#endif
-	palette.setColor(QPalette::Inactive, QPalette::Window, palette.color(QPalette::Active, QPalette::Window));
-	palette.setColor(QPalette::Inactive, QPalette::WindowText, palette.color(QPalette::Active, QPalette::WindowText));
-	palette.setColor(QPalette::Inactive, QPalette::Button, palette.color(QPalette::Active, QPalette::Button));
-	palette.setColor(QPalette::Inactive, QPalette::ButtonText, palette.color(QPalette::Active, QPalette::ButtonText));
-	palette.setColor(QPalette::Inactive, QPalette::Base, palette.color(QPalette::Active, QPalette::Base));
-	palette.setColor(QPalette::Inactive, QPalette::Text, palette.color(QPalette::Active, QPalette::Text));
-//	palette.setColor(QPalette::Inactive, QPalette::Highlight, QColor(250, 210, 0));
-//	palette.setColor(QPalette::Inactive, QPalette::HighlightedText, QColor(0, 0, 0));
-#if 0
-	palette.setColor(QPalette::Active, QPalette::WindowText, QColor(0, 0, 0));
-	palette.setColor(QPalette::Active, QPalette::ButtonText, QColor(0, 0, 0));
-	palette.setColor(QPalette::Active, QPalette::Text, QColor(0, 0, 0));
-#endif
-	palette.setColor(QPalette::Active, QPalette::AlternateBase, palette.color(QPalette::Active, QPalette::Base).dark(103));
-	palette.setColor(QPalette::Inactive, QPalette::AlternateBase, palette.color(QPalette::Inactive, QPalette::Base).dark(103));
-	palette.setColor(QPalette::Disabled, QPalette::AlternateBase, palette.color(QPalette::Disabled, QPalette::Base).dark(103));
-
-	palette.setColor(QPalette::Disabled, QPalette::Window, palette.color(QPalette::Window));
-	palette.setColor(QPalette::Disabled, QPalette::WindowText, shaded_color(palette.color(QPalette::Window), -40));
-	palette.setColor(QPalette::Disabled, QPalette::Button, palette.color(QPalette::Button));
-	palette.setColor(QPalette::Disabled, QPalette::ButtonText, shaded_color(palette.color(QPalette::Button), -40));
-	palette.setColor(QPalette::Disabled, QPalette::Base, palette.color(QPalette::Window).light(100));
-	palette.setColor(QPalette::Disabled, QPalette::Text, palette.color(QPalette::Base).dark(140));
-	palette.setColor(QPalette::Disabled, QPalette::Highlight, palette.color(QPalette::Window).dark(120));
-	// ### does Qt use these for QHLine / QVLine ?
-#if 1
-//	palette.setColor(QPalette::Active, QPalette::Dark, QColor(0, 0, 0, 20));
-//	palette.setColor(QPalette::Active, QPalette::Light, QColor(255, 255, 255, 60));
-//	palette.setColor(QPalette::Inactive, QPalette::Dark, QColor(0, 0, 0, 20));
-//	palette.setColor(QPalette::Inactive, QPalette::Light, QColor(255, 255, 255, 60));
-	palette.setColor(QPalette::Disabled, QPalette::Dark, shaded_color(palette.color(QPalette::Window), -20));
-	palette.setColor(QPalette::Disabled, QPalette::Light, shaded_color(palette.color(QPalette::Window), 60));
-#endif
-}
-
-
-QPalette SkulptureStyle::standardPalette() const
-{
-	QPalette palette = ParentStyle::standardPalette();
-#if 0
-palette.setColor(QPalette::Window, QColor(225, 222, 215));
-palette.setColor(QPalette::Button, QColor(230, 227, 220));
-palette.setColor(QPalette::Base, QColor(250, 250, 248));
-#elif 0 // dark scheme (testing)
-palette.setColor(QPalette::Window, QColor(70, 70, 70));
-palette.setColor(QPalette::Button, QColor(90, 90, 90));
-palette.setColor(QPalette::Base, QColor(0, 0, 0));
-palette.setColor(QPalette::Text, QColor(255, 255, 255));
-palette.setColor(QPalette::ButtonText, QColor(255, 255, 255));
-palette.setColor(QPalette::WindowText, QColor(255, 255, 255));
-#elif 0 // Skulpture 0.0.3
-//palette.setColor(QPalette::Window, QColor(235, 235, 235));
-palette.setColor(QPalette::Window, QColor(220, 220, 220));
-//palette.setColor(QPalette::Window, QColor(195, 195, 195));
-//palette.setColor(QPalette::Button, QColor(255, 255, 255));
-palette.setColor(QPalette::Button, QColor(225, 225, 225));
-//palette.setColor(QPalette::Button, QColor(25, 25, 25));
-//palette.setColor(QPalette::ButtonText, QColor(255, 255, 255));
-palette.setColor(QPalette::Base, QColor(250, 250, 250));
-#else // Skulpture 0.0.4
-palette.setColor(QPalette::Window, QColor(221, 220, 218));
-palette.setColor(QPalette::WindowText, QColor(0, 0, 0));
-palette.setColor(QPalette::Button, QColor(226, 225, 222));
-palette.setColor(QPalette::ButtonText, QColor(0, 0, 0));
-palette.setColor(QPalette::Base, QColor(250, 250, 250));
-palette.setColor(QPalette::Text, QColor(0, 0, 0));
-#endif
-
-#if 0 // turkise
-palette.setColor(QPalette::Highlight, QColor(120, 230, 220));
-palette.setColor(QPalette::HighlightedText, QColor(0, 0, 0));
-#elif 0 // green
-palette.setColor(QPalette::Highlight, QColor(150, 210, 150));
-//palette.setColor(QPalette::Highlight, QColor(220, 180, 60));
-palette.setColor(QPalette::HighlightedText, QColor(0, 0, 0));
-#elif 1 // gold
-palette.setColor(QPalette::Highlight, QColor(250, 210, 0));
-//palette.setColor(QPalette::Highlight, QColor(180, 180, 180));
-palette.setColor(QPalette::HighlightedText, QColor(0, 0, 0));
-#elif 0 // light blue
-palette.setColor(QPalette::Highlight, QColor(160, 210, 250));
-palette.setColor(QPalette::HighlightedText, QColor(0, 0, 0));
-#else // dark blue
-palette.setColor(QPalette::Highlight, QColor(80, 120, 200));
-palette.setColor(QPalette::HighlightedText, QColor(255, 255, 255));
-#endif
-
-//	palette.setColor(QPalette::Button, QColor(215, 225, 210));
-//	palette.setColor(QPalette::Button, QColor(230, 230, 230));
-//	palette.setColor(QPalette::Button, QColor(240, 200, 210));
-//	palette.setColor(QPalette::Highlight, QColor(40, 70, 80));
-//	palette.setColor(QPalette::Highlight, QColor(80, 130, 160));
-//	palette.setColor(QPalette::Highlight, QColor(80, 130, 60));
-//	palette.setColor(QPalette::Highlight, QColor(140, 70, 50));
-	computePaletteGroups(palette);
-	return palette;
-}
-
-
-void SkulptureStyle::polish(QPalette &palette)
-{
-	ParentStyle::polish(palette);
-	computePaletteGroups(palette);
-}
-
-
-/*
- * skulpture_combobox.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintComboBox(QPainter *painter, const QStyleOptionComboBox *option, QPalette::ColorRole bgrole, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	QStyleOptionComboBox opt;
-	opt = *option;
-	if (opt.state & QStyle::State_On) {
-		opt.state |= QStyle::State_Sunken;
-	} else {
-		opt.state &= ~QStyle::State_Sunken;
-	}
-	opt.state &= ~QStyle::State_On;
-	QRect r  = ((QCommonStyle *) style)->QCommonStyle::subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxArrow, widget);
-	if (option->direction == Qt::LeftToRight) {
-		r.adjust(-2, 0, 1, 0);
-	} else {
-		r.adjust(-1, 0, 2, 0);
-	}
-	if (option->subControls & (QStyle::SC_ComboBoxFrame | QStyle::SC_ComboBoxEditField)) {
-		if (!option->editable) {
-			QStyleOptionButton buttonOption;
-			buttonOption.QStyleOption::operator=(opt);
-			// buttonOption.palette.setColor(bgrole, buttonOption.palette.color(QPalette::Window));
-			style->drawPrimitive(QStyle::PE_PanelButtonCommand, &buttonOption, painter, widget);
-			// separator
-			int ox = r.width() - 1;
-			if (opt.state & QStyle::State_Sunken) {
-				ox -= 1;
-			}
-			if (option->direction == Qt::LeftToRight) {
-				painter->fillRect(option->rect.adjusted(option->rect.width() - ox - 1, 2, -ox, -2), shaded_color(option->palette.color(QPalette::Button), -30));
-				painter->fillRect(option->rect.adjusted(option->rect.width() - ox, 2, -ox + 1, -2), shaded_color(option->palette.color(QPalette::Button), 80));
-			} else {
-				painter->fillRect(option->rect.adjusted(ox - 1, 2, ox - option->rect.width(), -2), shaded_color(option->palette.color(QPalette::Button), -30));
-				painter->fillRect(option->rect.adjusted(ox, 2, ox - option->rect.width() + 1, -2), shaded_color(option->palette.color(QPalette::Button), 80));
-			}
-		} else {
-			QColor color = option->palette.color(QPalette::Window);
-			if (option->state & QStyle::State_Enabled) {
-				color = option->palette.color(QPalette::Window).lighter(107);
-			}
-			if (option->direction == Qt::LeftToRight) {
-				painter->fillRect(r.adjusted(3, 0, -1, 0), color);
-			} else {
-				painter->fillRect(r.adjusted(1, 0, -3, 0), color);
-			}
-
-			QStyleOptionFrame frameOpt;
-			frameOpt.QStyleOption::operator=(*option);
-			frameOpt.rect = style->subControlRect(QStyle::CC_ComboBox, option, QStyle::SC_ComboBoxFrame, widget);
-			frameOpt.state |= QStyle::State_Sunken;
-			frameOpt.lineWidth = style->pixelMetric(QStyle::PM_ComboBoxFrameWidth, &frameOpt, widget);
-			frameOpt.midLineWidth = 0;
-			color = option->palette.color(QPalette::Window);
-			if (option->state & QStyle::State_Enabled) {
-				color = option->palette.color(QPalette::Base);
-				if (option->state & QStyle::State_HasFocus) {
-					color = blend_color(color, option->palette.color(QPalette::Highlight), 0.15);
-				}
-			}
-			QRect edit = style->subControlRect(QStyle::CC_ComboBox, option, QStyle::SC_ComboBoxEditField, widget).adjusted(2, 2, -2, -2);
-			painter->fillRect(edit, color);
-			if (option->state & QStyle::State_Enabled && option->rect.height() <= 64) {
-				QLinearGradient panelGradient(option->rect.topLeft(), option->rect.bottomLeft());
-				if (color.valueF() > 0.9) {
-					panelGradient.setColorAt(0.0, shaded_color(color, -20));
-				}
-				panelGradient.setColorAt(0.6, shaded_color(color, 0));
-				panelGradient.setColorAt(1.0, shaded_color(color, 10));
-				painter->fillRect(edit, panelGradient);
-			}
-			style->drawPrimitive(QStyle::PE_FrameLineEdit, &frameOpt, painter, widget);
-		}
-	}
-
-	// arrow
-	if (option->subControls & (QStyle::SC_ComboBoxArrow)) {
-		int ox = r.width() - 2;
-		// ### work around Qt bug
-	//	r.setHeight((r.height() & -2) + 0);
-		if (option->direction == Qt::LeftToRight) {
-			QRect ar(int(option->rect.width()) - ox + 2, 2, ox - 6, r.height());
-			if (opt.state & QStyle::State_Sunken) {
-				ar.adjust(1, 1, 1, 1);
-			}
-			opt.rect = ar;
-		} else {
-			QRect ar(6, 2, ox - 6, r.height());
-			if (opt.state & QStyle::State_Sunken) {
-				ar.adjust(-1, 1, -1, 1);
-			}
-			opt.rect = ar;
-		}
-		opt.state &= QStyle::State_Enabled;
-#if 0
-		((QPlastiqueStyle *) style)->QPlastiqueStyle::drawPrimitive(QStyle::PE_IndicatorArrowDown, &opt, painter, widget);
-#else
-		opt.rect.adjust(-1, 0, -1, 0);
-	//	painter->fillRect(opt.rect, Qt::red);
-		style->drawPrimitive(QStyle::PE_IndicatorArrowDown, &opt, painter, widget);
-#endif
-	}
-
-	// focus frame
-	if ((option->state & QStyle::State_HasFocus) && !option->editable) {
-		QStyleOptionFocusRect focus;
-		focus.QStyleOption::operator=(*option);
-		focus.rect = style->subElementRect(QStyle::SE_ComboBoxFocusRect, option, widget);
-//		focus.rect = style->subControlRect(QStyle::CC_ComboBox, option, QStyle::SC_ComboBoxEditField, widget).adjusted(-2, 0, 2, 0);
-		focus.state |= QStyle::State_FocusAtBorder;
-		focus.backgroundColor = option->palette.color(bgrole);
-		style->drawPrimitive(QStyle::PE_FrameFocusRect, &focus, painter, widget);
-	}
-}
-
-
-void paintComboBoxLabel(QPainter *painter, const QStyleOptionComboBox *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	QStyleOptionComboBox opt = *option;
-	opt.palette.setColor(QPalette::Base, QColor(0, 0, 0, 0));
-//	((QWindowsStyle *) style)->QWindowsStyle::drawControl(QStyle::CE_ComboBoxLabel, &opt, painter, widget);
-	((QPlastiqueStyle *) style)->QPlastiqueStyle::drawControl(QStyle::CE_ComboBoxLabel, &opt, painter, widget);
-}
-
-
-/*
- * skulpture_dial.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QAbstractSlider>
-#include <cmath>
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintIndicatorDial(QPainter *painter, const QStyleOptionSlider *option);
-extern void paintCachedGrip(QPainter *painter, const QStyleOption *option, QPalette::ColorRole bgrole);
-
-void paintDial(QPainter *painter, const QStyleOptionSlider *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	int d = qMin(option->rect.width(), option->rect.height());
-	QStyleOptionSlider opt = *option;
-	const QAbstractSlider *slider;
-	// always highlight knob if pressed (even if mouse is not over knob)
-	if ((option->state & QStyle::State_HasFocus) && (slider = qobject_cast<const QAbstractSlider *>(widget))) {
-		if (slider->isSliderDown()) {
-			opt.state |= QStyle::State_MouseOver;
-		}
-	}
-
-	// tickmarks
-	opt.palette.setColor(QPalette::Inactive, QPalette::WindowText, QColor(120, 120, 120, 255));
-	opt.palette.setColor(QPalette::Active, QPalette::WindowText, QColor(120, 120, 120, 255));
-	opt.state &= ~QStyle::State_HasFocus;
-	((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_Dial, &opt, painter, widget);
-
-	// focus rectangle
-	if (option->state & QStyle::State_HasFocus) {
-		QStyleOptionFocusRect focus;
-		opt.state |= QStyle::State_HasFocus;
-		focus.QStyleOption::operator=(opt);
-		focus.rect.adjust(-1, -1, 1, 1);
-		style->drawPrimitive(QStyle::PE_FrameFocusRect, &focus, painter, widget);
-	}
-	opt.palette = option->palette;
-
-	// dial base
-	if (d <= 256) {
-		paintIndicatorDial(painter, &opt);
-	} else {
-		// large dials are slow to render, do not render them
-	}
-
-	// dial knob
-	d -= 6;
-	int gripSize = (option->fontMetrics.height() / 4) * 2 - 1;
-	opt.rect.setSize(QSize(gripSize, gripSize));
-	opt.rect.moveCenter(option->rect.center());
-	// angle calculation from qcommonstyle.cpp (c) Trolltech 1992-2007, ASA.
-	qreal angle;
-	int sliderPosition = option->upsideDown ? option->sliderPosition : (option->maximum - option->sliderPosition);
-	int range = option->maximum - option->minimum;
-	if (!range) {
-		angle = M_PI / 2;
-	} else if (option->dialWrapping) {
-		angle = M_PI * 1.5 - (sliderPosition - option->minimum) * 2 * M_PI / range;
-	} else {
-		angle = (M_PI * 8 - (sliderPosition - option->minimum) * 10 * M_PI / range) / 6;
-	}
-
-	qreal rr = d / 2.0 - gripSize - 2;
-	opt.rect.translate(int(0.5 + rr * cos(angle)), int(0.5 - rr * sin(angle)));
-	paintCachedGrip(painter, &opt, option->state & QStyle::State_Enabled ? QPalette::Button : QPalette::Window);
-}
-
-
-/*
- * skulpture_dock.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QDockWidget>
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintFrameDockWidget(QPainter *painter, const QStyleOptionFrame *option)
-{
-	paintThinFrame(painter, option->rect, option->palette, -60, 160);
-	paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -20, 60);
-}
-
-
-void paintDockWidgetTitle(QPainter *painter, const QStyleOptionDockWidget *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	const QDockWidget *dock = qobject_cast<const QDockWidget *>(widget);
-	bool vertical = dock && (dock->features() & QDockWidget::DockWidgetVerticalTitleBar);
-	bool floating = dock && dock->isFloating();
-	QRect r = option->rect;
-	if (floating) {
-		if (vertical) {
-			r.adjust(-3, 3, 0, -3);
-		} else {
-			r.adjust(3, -3, -3, 0);
-		}
-	//	painter->fillRect(r.adjusted(1, 1, -1, -1), QColor(30, 40, 80));
-	}
-	QColor color = option->palette.color(QPalette::Window);
-	paintThinFrame(painter, r, option->palette, 40, -20);
-	paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -20, 80);
-	QLinearGradient gradient(r.topLeft(), vertical ? r.topRight() : r.bottomLeft());
-	gradient.setColorAt(0.0, shaded_color(color, 50));
-	gradient.setColorAt(0.2, shaded_color(color, 30));
-	gradient.setColorAt(0.5, shaded_color(color, 0));
-	gradient.setColorAt(0.51, shaded_color(color, -10));
-	gradient.setColorAt(1.0, shaded_color(color, -20));
-	painter->fillRect(r.adjusted(1, 1, -1, -1), gradient);
-#if 0
-	QRadialGradient dialogGradient2(r.left() + r.width() / 2, r.top(), r.height());
-	dialogGradient2.setColorAt(0.0, QColor(255, 255, 255, 50));
-	dialogGradient2.setColorAt(1.0, QColor(0, 0, 0, 0));
-	painter->save();
-	painter->translate(r.center());
-	painter->scale(r.width() / 2.0 / r.height(), 1);
-	painter->translate(-r.center());
-	painter->fillRect(r.adjusted(1, 1, -1, -1), dialogGradient2);
-	painter->restore();
-#endif
-	QFont font = painter->font();
-	font.setBold(true);
-	font.setPointSizeF(font.pointSizeF() / 1.19);
-	painter->save();
-	painter->setFont(font);
-	r = style->subElementRect(QStyle::SE_DockWidgetTitleBarText, option, widget);
-	// ### fix for Plastique centering
-	if (vertical && option->rect.height() & 1) {
-		if (!floating) {
-			r.adjust(0, 1, 0, 1);
-		} else {
-			r.adjust(0, -1, 0, -1);
-		}
-	}
-	if (floating) {
-		if (vertical) {
-			r.adjust(-1, 12, 3, -10);
-		} else {
-			r.adjust(2, 3, -3, -7);
-		}
-	} else {
-		if (vertical) {
-			r.adjust(0, 8, 4, -8);
-		} else {
-			r.adjust(0, 5, 0, -7);
-		}
-	}
-	if (vertical) {
-		QMatrix mat;
-		QPointF c = r.center();
-		mat.translate(c.x(), c.y());
-		mat.rotate(-90);
-		mat.translate(-c.x(), -c.y());
-		r = mat.mapRect(r);
-		painter->setMatrix(mat, true);
-	}
-//	painter->fillRect(r, Qt::red);
-	painter->setClipRect(r);
-	style->drawItemText(painter, r, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic | Qt::TextHideMnemonic, option->palette, true, option->title, QPalette::Text);
-	painter->restore();
-}
-
-
-/*
- * skulpture_frames.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QAbstractSpinBox>
-#include <QtGui/QApplication>
-#include <QtGui/QComboBox>
-#include <QtGui/QPainter>
-#include <cmath>
-#include <cstdio>
-
-
-/*-----------------------------------------------------------------------*/
-
-static void paintThinFrame(QPainter *painter, const QRect &rect, const QBrush &brush1, const QBrush &brush2)
-{
-	painter->fillRect(QRect(rect.left() + 1, rect.top(), rect.width() - 1, 1), brush2);
-	painter->fillRect(QRect(rect.left(), rect.top(), 1, rect.height()), brush2);
-	painter->fillRect(QRect(rect.left(), rect.bottom(), rect.width() - 1, 1), brush1);
-	painter->fillRect(QRect(rect.right(), rect.top(), 1, rect.height()), brush1);
-}
-
-
-static const QBrush shaded_brush(const QPalette &palette, int shade, QPalette::ColorRole bgrole)
-{
-	return (shaded_color(palette.color(bgrole), shade));
-}
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * paintThinFrame - paint a single pixel wide frame
- *
- * Paints a frame _inside_ the specified rectangle, using
- * a single pixel wide pen. The frame is rendered by darkening
- * or brightening the pixels in that area; no specific color
- * can be selected.
- *
- * dark and light specify how dark or bright the frame should
- * be rendered. They are either negative (meaning darkening),
- * or positive (meaning brigthening).
- *
- * TODO:
- * dark and light are arbitrary values; they need adjustment.
- *
- */
-
-void paintThinFrame(QPainter *painter, const QRect &rect, const QPalette &palette, int dark, int light, QPalette::ColorRole bgrole)
-{
-	paintThinFrame(painter, rect, shaded_brush(palette, dark, bgrole), shaded_brush(palette, light, bgrole));
-}
-
-
-void paintRecessedFrame(QPainter *painter, const QRect &rect, const QPalette &palette, enum RecessedFrame rf, QPalette::ColorRole bgrole)
-{
-	paintThinFrame(painter, rect, palette, 30, -20, bgrole);
-	paintThinFrame(painter, rect.adjusted(1, 1, -1, -1), palette, -20, -70, bgrole);
-	paintRecessedFrameShadow(painter, rect.adjusted(2, 2, -2, -2), rf);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintFrameGroupBox(QPainter *painter, const QStyleOptionFrame *option)
-{
-	QRect r = option->rect;
-	r.setHeight(/*r.height() +*/ 2);
-	paintThinFrame(painter, r, option->palette, 60, -20);
-//	paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -20, 60);
-}
-
-
-void paintStyledFrame(QPainter *painter, const QStyleOptionFrame *option, QPalette::ColorRole bgrole, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle */*style*/)
-{
-	if (option->state & QStyle::State_Sunken) {
-		if (widget && widget->parentWidget() && widget->inherits("QFrame") && widget->parentWidget()->inherits("KFontRequester")) {
-			paintThinFrame(painter, option->rect, option->palette, 60, -20);
-			paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -20, 60);
-			QLinearGradient panelGradient(option->rect.topLeft(), option->rect.bottomLeft());
-			panelGradient.setColorAt(0.6, QColor(0, 0, 0, 0));
-			panelGradient.setColorAt(1.0, shaded_color(option->palette.color(QPalette::Window), 70));
-			painter->fillRect(option->rect.adjusted(2, 2, -2, -2), panelGradient);
-		} else {
-			if (option->palette.color(QPalette::Base) == QColor(220, 230, 210)) {
-				painter->fillRect(option->rect.adjusted(2, 2, -2, -2), option->palette.color(QPalette::Base));
-				paintRecessedFrame(painter, option->rect, option->palette, RF_Small);
-			} else {
-				RecessedFrame rf = RF_Large;
-				if (!(option->state & QStyle::State_Enabled)
-				 || (widget && !widget->isEnabled())) {
-					rf = RF_Small;
-				}
-				if (widget && (widget->inherits("QAbstractItemView") || widget->inherits("Q3ScrollView"))) {
-					const QList<QObject *> children = widget->children();
-					foreach (QObject *child, children) {
-						if (child->inherits("FrameShadow")) {
-							rf = RF_None;
-							break;
-						}
-					}
-				}
-				paintRecessedFrame(painter, option->rect, option->palette, rf);
-			}
-		}
-	} else if (option->state & QStyle::State_Raised) {
-		QRect r = option->rect;
-		if (option->lineWidth == 0) {
-			paintThinFrame(painter, r, option->palette, -20, 60);
-		} else {
-			paintThinFrame(painter, r, option->palette, -10, -20);
-			paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -30, 80, bgrole);
-		//	painter->fillRect(option->rect, Qt::red);
-		}
-	} else {
-		// Plain
-		if (widget && widget->parentWidget() && widget->inherits("QFrame") && widget->parentWidget()->inherits("KTitleWidget")) {
-			QRect r = option->rect;
-			bgrole = QPalette::Window;
-//			bgrole = QPalette::Base;
-			QColor bgcolor = option->palette.color(bgrole);
-			painter->fillRect(r, bgcolor);
-			paintThinFrame(painter, r, option->palette, -10, -20);
-		//	painter->fillRect(r.adjusted(1, 1, -1, -1), QColor(200, 190, 160));
-		//	painter->fillRect(r.adjusted(1, 1, -1, -1), QColor(240, 240, 240));
-			paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -30, 80, bgrole);
-			QLinearGradient gradient(r.topLeft(), r.bottomLeft());
-			gradient.setColorAt(0.0, shaded_color(bgcolor, 90));
-			gradient.setColorAt(0.2, shaded_color(bgcolor, 60));
-			gradient.setColorAt(0.5, shaded_color(bgcolor, 0));
-			gradient.setColorAt(0.51, shaded_color(bgcolor, -10));
-			gradient.setColorAt(1.0, shaded_color(bgcolor, -20));
-			painter->fillRect(r.adjusted(1, 1, -1, -1), gradient);
-#if 0
-			QRadialGradient dialogGradient2(r.left() + r.width() / 2, r.top(), r.height());
-			dialogGradient2.setColorAt(0.0, QColor(255, 255, 255, 50));
-			dialogGradient2.setColorAt(1.0, QColor(0, 0, 0, 0));
-			painter->save();
-			painter->translate(r.center());
-			painter->scale(r.width() / 2.0 / r.height(), 1);
-			painter->translate(-r.center());
-			painter->fillRect(r.adjusted(1, 1, -1, -1), dialogGradient2);
-			painter->restore();
-#endif
-		} else {
-			QRect r = option->rect;
-			paintThinFrame(painter, r, option->palette, 60, -20);
-			paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -20, 60, bgrole);
-		}
-	}
-}
-
-
-void paintFrameLineEdit(QPainter *painter, const QStyleOptionFrame *option)
-{
-	paintRecessedFrame(painter, option->rect, option->palette, RF_Small);
-}
-
-
-void paintPanelLineEdit(QPainter *painter, const QStyleOptionFrame *option, QPalette::ColorRole bgrole, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget)
-{
-	bool focus = (option->state & QStyle::State_HasFocus) && !(option->state & QStyle::State_ReadOnly);
-	if (option->palette.brush(bgrole).style() == Qt::SolidPattern) {
-		QColor color = option->palette.color(bgrole);
-//		printf("style=%d, bgrole=%d, panel color: r=%d, g=%d, b=%d, a=%d\n", option->palette.brush(bgrole).style(), bgrole, color.red(), color.green(), color.blue(), color.alpha());
-		if (focus) {
-#if 0
-			color.setHsvF(option->palette.color(QPalette::Highlight).hueF(), 0.05, 1.0);
-#else
-			color = blend_color(color, option->palette.color(QPalette::Highlight), 0.15);
-#endif
-		} else if (option->state & QStyle::State_ReadOnly) {
-		//	color = color.light(102);
-	/*	} else if ((option->state & QStyle::State_Enabled)
-		 && (option->state & QStyle::State_MouseOver)) {
-			color = color.light(120);
-	*/	}
-		painter->fillRect(option->rect.adjusted(2, 2, -2, -2), color);
-		if (option->state & QStyle::State_Enabled && option->rect.height() <= 64) {
-			QLinearGradient panelGradient(option->rect.topLeft(), option->rect.bottomLeft());
-			if (color.valueF() > 0.9) {
-				panelGradient.setColorAt(0.0, shaded_color(color, -20));
-			}
-			panelGradient.setColorAt(0.6, shaded_color(color, 0));
-			panelGradient.setColorAt(1.0, shaded_color(color, 10));
-			painter->fillRect(option->rect.adjusted(2, 2, -2, -2), panelGradient);
-		}
-	}
-	if (focus && option->state & QStyle::State_KeyboardFocusChange) {
-		QColor color = option->palette.color(QPalette::Highlight).dark(120);
-		color.setAlpha(120);
-		painter->fillRect(option->rect.adjusted(4, 4 + option->rect.height() - 9, -4, -4), color);
-	}
-	if (option->lineWidth) {
-		if (option->state & QStyle::State_ReadOnly) {
-			paintThinFrame(painter, option->rect, option->palette, 60, -20);
-			paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -20, 60);
-		} else {
-			paintRecessedFrame(painter, option->rect, option->palette, option->rect.height() <= 64 ? RF_Small : RF_Small);
-		}
-	} else if (widget && widget->parent() && (qobject_cast<QAbstractSpinBox *>(widget->parent()) || qobject_cast<QComboBox *>(widget->parent()))) {
-		if (option->palette.brush(bgrole).style() != Qt::SolidPattern) {
-			/* Fix Qt stylesheet demo */
-			return;
-		}
-		int icon = 0;
-		QComboBox *combo = qobject_cast<QComboBox *>(widget->parent());
-		if (combo) {
-			icon = widget->geometry().left();
-			painter->save();
-			painter->setClipRect(option->rect.adjusted(2, 0, -2, 0));
-		}
-		paintRecessedFrameShadow(painter, option->rect.adjusted(2 - icon, 2, -2, -2), option->rect.height() <= 64 ? RF_Small : RF_Small);
-		if (combo) {
-			painter->restore();
-		}
-	}
-}
-
-
-void paintFrameFocusRect(QPainter *painter, const QStyleOptionFocusRect *option)
-{
-	if (!(option->state & QStyle::State_KeyboardFocusChange)) {
-		return;
-	}
-	QColor color = option->palette.color(QPalette::Highlight);
-	color.setAlpha(20);
-	painter->fillRect(option->rect, color);
-//	painter->fillRect(option->rect.adjusted(1, 1, -1, -1), color);
-	painter->fillRect(option->rect.adjusted(2, 2, -2, -2), color);
-	color = color.dark(120);
-	color.setAlpha(230);
-	painter->fillRect(option->rect.adjusted(0, option->rect.height() - 1, 0, 0), color);
-}
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * create a gradient to draw the edge of the given path.
- *
- * the path must be convex.
- *
- * there are eight colors, one for each of the four edges
- * and the four corners.
- *
- * these are as follows:
- *
- *		c0	c1	c2
- *		c7		c3
- *		c6	c5	c4
- *
- * currently, these are created from two colors only (c0, c4).
- *
- * ### currently this function DOES NOT WORK WELL
- * because of oddities in QConicalGradient.
- *
- * maybe don't use QConicalGradient at all
- *
- */
-
-QGradient path_edge_gradient(const QRectF &rect, const QStyleOption *option, const QPainterPath &path, const QColor &color2, const QColor &color1)
-{
-	QPointF c = rect.center();
-	QColor color[8];
-#if 1
-	if (/*true ||*/ option->direction == Qt::LeftToRight) {
-		color[0] = blend_color(QColor(255, 255, 255, 255), color1, 0.5);
-		color[1] = color1;
-		color[2] = blend_color(color1, color2, 0.5);
-		color[3] = color2;
-	//	color[3] = color1;
-		color[4] = blend_color(QColor(0, 0, 0, 255), color2, 0.5);
-		color[5] = color2;
-		color[6] = blend_color(color2, color1, 0.5);
-		color[7] = color1;
-	//	color[7] = color2;
-	} else {
-		color[2] = blend_color(QColor(255, 255, 255, 255), color1, 0.5);
-		color[1] = color1;
-		color[0] = blend_color(color1, color2, 0.5);
-		color[7] = color2;
-	//	color[7] = color1;
-		color[6] = blend_color(QColor(0, 0, 0, 255), color2, 0.5);
-		color[5] = color2;
-		color[4] = blend_color(color2, color1, 0.5);
-		color[3] = color1;
-	//	color[3] = color2;
-	}
-#else
-	color[0] = QColor(255, 0, 0);
-	color[2] = QColor(255, 0, 100);
-	color[4] = QColor(255, 100, 0);
-	color[6] = QColor(255, 100, 100);
-	color[1] = QColor(0, 255, 0);
-	color[3] = QColor(0, 255, 100);
-	color[5] = QColor(100, 255, 0);
-	color[7] = QColor(100, 255, 100);
-#endif
-	QConicalGradient gradient(c, 0);
-#if 0 // does not work well
-	QPolygonF poly = path.toFillPolygon();
-	QPainterPath pp;
-	pp.addPolygon(poly);
-	for (int i = 0; i < pp.elementCount() - 1; ++i) {
-		const QPainterPath::Element e1 = pp.elementAt(i);
-		const QPainterPath::Element e2 = pp.elementAt(i + 1);
-		if (e2.isLineTo()) {
-		//	printf("\nat segment %d (%3g/%3g) > (%3g/%3g)\n", i, e1.x, e1.y, e2.x, e2.y);
-			QColor col;
-			qreal angle = atan2(e2.y - e1.y, e2.x - e1.x);
-			/*
-			 * angle == 0: c5
-			 * angle == pi/2: c3
-			 * angle == pi: c1
-			 * angle == 3pi/2: c7
-			 */
-			const qreal e = (M_PI / 4.0);
-			if (angle < 0) {
-				angle += M_PI * 2.0;
-			}
-			if (angle >= 0*e && angle <= 1*e) {
-				col = blend_color(color[5], color[4], (angle - 0*e) / e);
-			} else if (angle >= 1*e && angle <= 2*e) {
-				col = blend_color(color[4], color[3], (angle - 1*e) / e);
-			} else if (angle >= 2*e && angle <= 3*e) {
-				col = blend_color(color[3], color[2], (angle - 2*e) / e);
-			} else if (angle >= 3*e && angle <= 4*e) {
-				col = blend_color(color[2], color[1], (angle - 3*e) / e);
-			} else if (angle >= 4*e && angle <= 5*e) {
-				col = blend_color(color[1], color[0], (angle - 4*e) / e);
-			} else if (angle >= 5*e && angle <= 6*e) {
-				col = blend_color(color[0], color[7], (angle - 5*e) / e);
-			} else if (angle >= 6*e && angle <= 7*e) {
-				col = blend_color(color[7], color[6], (angle - 6*e) / e);
-			} else if (angle >= 7*e && angle <= 8.00001*e) {
-				col = blend_color(color[6], color[5], (angle - 7*e) / e);
-			} else {
-				qDebug("should not get here");
-			}
-		//	printf(" color is %g/%g/%g\n", col.redF() * 255, col.greenF() * 255, col.blueF() * 255);
-			qreal angle1 = atan2(e1.y - c.y(), e1.x - c.x());
-			qreal angle2 = atan2(e2.y - c.y(), e2.x - c.x());
-			if (angle1 < 0) {
-				angle1 += M_PI * 2.0;
-			}
-			if (angle2 < 0) {
-				angle2 += M_PI * 2.0;
-			}
-			if (angle1 > angle2) {
-				gradient.setColorAt(0.0, color[3]);
-				gradient.setColorAt(angle2 / 2.0 / M_PI - 0.00001, col);
-				gradient.setColorAt(angle1 / 2.0 / M_PI + 0.00001, col);
-				gradient.setColorAt(1.0, color[3]);
-			} else {
-				// FIXME: broken QConicalGradient in 4.3.0 ?
-				// this is a workaround
-				if (qAbs(e1.x - e2.x) < 0.1 || qAbs(e1.y - e2.y) < 0.1) {
-					gradient.setColorAt(angle1 / 2.0 / M_PI + 0.00001, col);
-					gradient.setColorAt(angle2 / 2.0 / M_PI - 0.00001, col);
-				} else {
-				//	gradient.setColorAt((angle1 + angle2) / 4.0 / M_PI, col);
-				}
-			}
-		//	printf(" gradient range: %3g > %3g\n angle is %3g\n", angle1 / 2.0 / M_PI, angle2 / 2.0 / M_PI, angle);
-		}
-	}
-#else // works a BIT better for this special case
-	Q_UNUSED(path);
-	qreal angle;
-	qreal d = 1;
-	QRectF r = rect.adjusted(1, 1, -1, -1);
-	{
-		QRectF rect = r;
-		gradient.setColorAt(0.0, color[3]);
-
-		angle = atan2(rect.top() + d - c.y(), rect.right() - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[3]);
-
-		angle = atan2(rect.top() - c.y(), rect.right() - d - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[5]);
-
-		angle = atan2(rect.top() - c.y(), rect.left() + d - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[5]);
-
-		angle = atan2(rect.top() + d - c.y(), rect.left() - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[7]);
-
-		angle = atan2(rect.bottom() - d - c.y(), rect.left() - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[7]);
-
-		angle = atan2(rect.bottom() - c.y(), rect.left() + d - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[1]);
-
-		angle = atan2(rect.bottom() - c.y(), rect.right() - d - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[1]);
-
-		angle = atan2(rect.bottom() - d - c.y(), rect.right() - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[3]);
-
-		gradient.setColorAt(1.0, color[3]);
-	}
-#endif
-	return gradient;
-}
-
-
-/*
- * skulpture_header.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QHeaderView>
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintHeaderEmptyArea(QPainter *painter, const QStyleOption *option)
-{
-	if (option->state & QStyle::State_Enabled) {
-		painter->fillRect(option->rect, option->palette.color(QPalette::Window).light(107));
-	} else {
-		painter->fillRect(option->rect, option->palette.color(QPalette::Window).dark(104));
-	}
-	if (option->state & QStyle::State_Horizontal) {
-		paintThinFrame(painter, option->rect.adjusted(0, -2, 32000, -1), option->palette, -20, 60);
-//		painter->fillRect(option->rect.adjusted(0, option->rect.height() - 1, 0, 0), QColor(255, 255, 255, 160));
-	} else {
-		paintThinFrame(painter, option->rect.adjusted(-2, 0, -1, 32000), option->palette, -20, 60);
-//		painter->fillRect(option->rect.adjusted(option->rect.width() - 1, 0, 0, 0), QColor(255, 255, 255, 160));
-	}
-}
-
-
-void paintHeaderSection(QPainter *painter, const QStyleOptionHeader *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	Q_UNUSED(style);
-
-	if (!(option->state & (QStyle::State_Raised | QStyle::State_Sunken))) {
-		painter->fillRect(option->rect, option->palette.color(QPalette::Window).dark(104));
-		paintRecessedFrame(painter, option->rect.adjusted(-9, -9, 3, 3), option->palette, RF_Small);
-		painter->fillRect(QRect(option->rect.right(), option->rect.bottom(), 1, 1), option->palette.color(QPalette::Window));
-	} else {
-		bool enabled = true;
-		if (!(option->state & QStyle::State_Enabled)) {
-			enabled = false;
-			if (widget && widget->inherits("Q3Header")) {
-				enabled = widget->isEnabled();
-			}
-		}
-		if (enabled) {
-			bool hover = false;
-			const QHeaderView *view = qobject_cast<const QHeaderView *>(widget);
-			if (view && (view->isClickable() || view->isMovable())) {
-				hover = option->state & QStyle::State_MouseOver;
-			}
-		//	painter->fillRect(option->rect, option->palette.color(QPalette::Window).light(107));
-			painter->fillRect(option->rect, option->palette.color(QPalette::Base).dark(hover ? 104 : (option->state & QStyle::State_On ? 120 : 106)));
-		} else {
-			painter->fillRect(option->rect, option->palette.color(QPalette::Window).dark(104));
-		}
-		if (true || !(option->state & QStyle::State_On)) {
-			if (option->orientation == Qt::Horizontal) {
-				paintThinFrame(painter, option->rect.adjusted(0, -2, 0, -1), option->palette, -20, 60);
-			} else {
-				if (option->direction == Qt::LeftToRight) {
-					paintThinFrame(painter, option->rect.adjusted(-2, 0, -1, 0), option->palette, -20, 60);
-				} else {
-					paintThinFrame(painter, option->rect.adjusted(1, 0, 2, 0), option->palette, -20, 60);
-				}
-			}
-		}
-#if 0
-		if (option->orientation == Qt::Horizontal) {
-			painter->fillRect(option->rect.adjusted(0, option->rect.height() - 1, 0, 0), QColor(255, 255, 255, 160));
-		} else {
-			painter->fillRect(option->rect.adjusted(option->rect.width() - 1, 0, 0, 0), QColor(255, 255, 255, 160));
-		}
-#endif
-	}
-}
-
-
-void paintHeaderLabel(QPainter *painter, const QStyleOptionHeader *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	painter->save();
-	if (widget) {
-		painter->setFont(widget->font());
-	}
-//	if (true || !painter->font().bold()) {
-//		painter->setOpacity(painter->opacity() * 0.7);
-//	}
-//	QFont font(painter->font());
-//	font.setPointSizeF(font.pointSizeF() / 1.19);
-//	font.setBold(true);
-//	painter->setFont(font);
-	((QCommonStyle *) style)->QCommonStyle::drawControl(QStyle::CE_HeaderLabel, option, painter, widget);
-	painter->restore();
-}
-
-
-void paintHeaderSortIndicator(QPainter *painter, const QStyleOptionHeader *option)
-{
-	int h = option->fontMetrics.height() / 2 + 2;
-	int w = option->fontMetrics.height() / 4 + 2;
-	QPainterPath path;
-
-	h /= 2; w /= 2;
-	if (option->sortIndicator == QStyleOptionHeader::SortDown) {
-		h = -h;
-	}
-	path.moveTo(-w, h);
-	path.lineTo(w, h);
-	path.lineTo(0, -h);
-	path.lineTo(-w, h);
-	qreal opacity = painter->opacity();
-	painter->save();
-	painter->setRenderHint(QPainter::Antialiasing, true);
-	painter->translate(option->rect.center());
-	painter->translate(0.5, 1.5);
-	painter->setPen(Qt::NoPen);
-	painter->setBrush(option->palette.color(QPalette::Text));
-	painter->setOpacity(0.6 * opacity);
-	painter->drawPath(path);
-	painter->restore();
-}
-
-/*
- * skulpture_icons.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtCore/QSettings>
-#include <QtGui/QStyleOption>
-#include <QtGui/QDockWidget>
-#include <QtGui/QFrame>
-#include <QtGui/QPainter>
-#include <cstdlib>
-#include <cstdio>
-
-
-/*-----------------------------------------------------------------------*/
-#if 0 // not yet
-static QStringList xdg_data_dirs()
-{
-	QString dirs = QString::fromLocal8Bit(getenv("XDG_DATA_DIRS"));
-
-	if (dirs.isEmpty()) {
-		dirs = QString::fromUtf8("/usr/local/share:/usr/share:/opt/kde3/share");
-	}
-	return dirs.split(QChar(':', 0));
-}
-
-
-static QStringList icon_themes()
-{
-	return QString::fromUtf8(
-		"default.kde" "\n"
-		"hicolor" "\n"
-		"oxygen" "\n"
-		"crystalsvg"
-	).split(QChar('\n', 0));
-}
-
-#define OXYGEN "/media/hdb1/svn/kde/kdelibs/pics/oxygen"
-
-struct IconSetting
-{
-	enum Size { ToolIconSize = -1 };
-
-	const char * const label;
-
-	int id;
-	const char * const icon;
-	int size;
-};
-
-static const struct IconSetting iconSettings[] =
-{
- { "MessageBox/InformationIcon", QStyle::SP_MessageBoxInformation, "dialog-information", 32 },
- { "MessageBox/WarningIcon", QStyle::SP_MessageBoxWarning, "dialog-warning", 32 },
- { "MessageBox/ErrorIcon", QStyle::SP_MessageBoxWarning, "dialog-error", 32 },
- { "MessageBox/QuestionIcon", QStyle::SP_MessageBoxWarning, "KEduca", 32 },
- { 0, -1, 0, 0 },
-};
-#endif
-
-QPixmap SkulptureStyle::standardPixmap(QStyle::StandardPixmap standardPixmap, const QStyleOption *option, const QWidget *widget) const
-{
-#if 0
-	switch (standardPixmap) {
-		case SP_MessageBoxInformation:	return QPixmap(OXYGEN "/32x32/actions/dialog-information.png");
-		case SP_MessageBoxWarning:		return QPixmap(OXYGEN "/32x32/actions/dialog-warning.png");
-		case SP_MessageBoxCritical:		return QPixmap(OXYGEN "/32x32/actions/dialog-error.png");
-		case SP_MessageBoxQuestion:		return QPixmap(OXYGEN "/32x32/apps/KEduca.png");
-
-		case SP_DesktopIcon:			return QPixmap(OXYGEN "/16x16/actions/about-kde.png");
-		case SP_TrashIcon:				return QPixmap(OXYGEN "/16x16/actions/edit-trash.png");
-		case SP_ComputerIcon:			return QPixmap(OXYGEN "/16x16/devices/system.png");
-		case SP_DriveFDIcon:			return QPixmap(OXYGEN "/16x16/devices/3floppy-unmount.png");
-		case SP_DriveHDIcon:			return QPixmap(OXYGEN "/16x16/devices/hdd-unmount.png");
-		case SP_DriveCDIcon:			return QPixmap(OXYGEN "/16x16/devices/drive-optical.png");
-		case SP_DriveDVDIcon:			return QPixmap(OXYGEN "/16x16/devices/dvd-unmount.png");
-		case SP_DriveNetIcon:			return QPixmap(OXYGEN "/16x16/devices/nfs-unmount.png");
-
-		case SP_DirHomeIcon:			return QPixmap(OXYGEN "/16x16/places/folder-home.png");
-		case SP_DirClosedIcon:
-		case SP_DirIcon:
-		case SP_DirLinkIcon:				return QPixmap(OXYGEN "/16x16/places/folder.png");
-		case SP_DirOpenIcon:			return QPixmap(OXYGEN "/16x16/actions/folder-open.png");
-
-		case SP_FileLinkIcon:
-		case SP_FileIcon:				return QPixmap(OXYGEN "/16x16/mimetypes/document.png");
-
-		case SP_FileDialogStart:			return QPixmap(OXYGEN "/16x16/actions/go-top.png");
-		case SP_FileDialogEnd:			return QPixmap(OXYGEN "/16x16/actions/go-next.png");
-		case SP_FileDialogToParent:		return QPixmap(OXYGEN "/16x16/actions/go-up.png");
-		case SP_FileDialogNewFolder:		return QPixmap(OXYGEN "/16x16/actions/folder-new.png");
-		case SP_FileDialogDetailedView:	return QPixmap(OXYGEN "/16x16/actions/fileview-detailed.png");
-		case SP_FileDialogInfoView:		return QPixmap(OXYGEN "/16x16/actions/documentinfo-koffice.png");
-		case SP_FileDialogContentsView:	return QPixmap(OXYGEN "/16x16/actions/file-find.png");
-		case SP_FileDialogListView:		return QPixmap(OXYGEN "/16x16/actions/fileview-multicolumn.png");
-		case SP_FileDialogBack:			return QPixmap(OXYGEN "/16x16/actions/go-previous.png");
-
-		case SP_DialogOkButton:			return QPixmap(OXYGEN "/16x16/actions/dialog-ok.png");
-		case SP_DialogCancelButton:		return QPixmap(OXYGEN "/16x16/actions/dialog-cancel.png");
-		case SP_DialogHelpButton:		return QPixmap(OXYGEN "/16x16/actions/help-contents.png");
-		case SP_DialogOpenButton:		return QPixmap(OXYGEN "/16x16/actions/document-open.png");
-		case SP_DialogSaveButton:		return QPixmap(OXYGEN "/16x16/actions/document-save.png");
-		case SP_DialogCloseButton:		return QPixmap(OXYGEN "/16x16/actions/dialog-close.png");
-		case SP_DialogApplyButton:		return QPixmap(OXYGEN "/16x16/actions/dialog-apply.png");
-		case SP_DialogResetButton:		return QPixmap(OXYGEN "/16x16/actions/edit-undo.png");
-		case SP_DialogDiscardButton:		return QPixmap(OXYGEN "/16x16/actions/emptytrash.png");
-		case SP_DialogYesButton:			return QPixmap(OXYGEN "/16x16/actions/dialog-apply.png");
-		case SP_DialogNoButton:			return QPixmap(OXYGEN "/16x16/actions/dialog-cancel.png");
-
-		case SP_ArrowUp:				return QPixmap(OXYGEN "/16x16/actions/arrow-up.png");
-		case SP_ArrowDown:				return QPixmap(OXYGEN "/16x16/actions/arrow-down.png");
-		case SP_ArrowLeft:				return QPixmap(OXYGEN "/16x16/actions/arrow-left.png");
-		case SP_ArrowRight:				return QPixmap(OXYGEN "/16x16/actions/arrow-right.png");
-		case SP_ArrowBack:				return QPixmap(OXYGEN "/16x16/actions/go-previous.png");
-		case SP_ArrowForward:			return QPixmap(OXYGEN "/16x16/actions/go-next.png");
-	}
-#endif
-	return ParentStyle::standardPixmap(standardPixmap, option, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * decorationShape - get shape for window decoration button
- *
- * The coordinate system is -1 ... 1 for each dimension, with
- * (0, 0) being at the center, and positive coordinates pointing
- * down and to the right.
- *
- */
-
-QPainterPath decorationShape(QStyle::StandardPixmap sp)
-{
-	static const qreal k = 0.3;
-	static const qreal kx1 = 0.8;
-	static const qreal kx2 = 0.55;
-	QPainterPath path;
-
-	switch (sp) {
-		case QStyle::SP_TitleBarCloseButton:
-			path.moveTo(-1, -1);
-			path.lineTo(0, -k);
-			path.lineTo(1, -1);
-			path.lineTo(k, 0);
-			path.lineTo(1, 1);
-			path.lineTo(0, k);
-			path.lineTo(-1, 1);
-			path.lineTo(-k, 0);
-			path.lineTo(-1, -1);
-			path.closeSubpath();
-			break;
-		case QStyle::SP_TitleBarNormalButton:
-		case QStyle::SP_TitleBarMaxButton:
-			path.moveTo(0, -1);
-			path.lineTo(1, 0);
-			path.lineTo(0, 1);
-			path.lineTo(-1, 0);
-			path.lineTo(0, -1);
-			path.moveTo(0, -kx2);
-			path.lineTo(-kx1, 0);
-			path.lineTo(0, kx2);
-			path.lineTo(kx1, 0);
-			path.lineTo(0, -kx2);
-			path.closeSubpath();
-			break;
-		case QStyle::SP_TitleBarShadeButton:
-			path.moveTo(-1, -0.4);
-			path.lineTo(0, -0.6);
-			path.lineTo(1, -0.4);
-			path.lineTo(0, -1);
-			path.lineTo(-1, -0.4);
-			path.closeSubpath();
-			break;
-		case QStyle::SP_TitleBarUnshadeButton:
-			path.moveTo(-1, -1);
-			path.lineTo(0, -0.8);
-			path.lineTo(1, -1);
-			path.lineTo(0, -0.4);
-			path.lineTo(-1, -1);
-			path.closeSubpath();
-			break;
-		case QStyle::SP_TitleBarMinButton:
-			path.moveTo(-1, 0.4);
-			path.lineTo(0, 0.6);
-			path.lineTo(1, 0.4);
-			path.lineTo(0, 1);
-			path.lineTo(-1, 0.4);
-			path.closeSubpath();
-			break;
-		case QStyle::SP_TitleBarContextHelpButton:
-			path.moveTo(0.0305, 0.513);
-			path.lineTo(-0.0539, 0.513);
-			path.lineTo(0.0117, 0.227);
-			path.lineTo(0.22, -0.0859);
-			path.lineTo(0.38, -0.323);
-			path.lineTo(0.417, -0.491);
-			path.lineTo(0.279, -0.767);
-			path.lineTo(-0.0609, -0.87);
-			path.lineTo(-0.342, -0.814);
-			path.lineTo(-0.445, -0.692);
-			path.lineTo(-0.383, -0.568);
-			path.lineTo(-0.321, -0.456);
-			path.lineTo(-0.368, -0.373);
-			path.lineTo(-0.483, -0.339);
-			path.lineTo(-0.64, -0.396);
-			path.lineTo(-0.71, -0.555);
-			path.lineTo(-0.512, -0.827);
-			path.lineTo(0.0281, -0.947);
-			path.lineTo(0.649, -0.783);
-			path.lineTo(0.797, -0.516);
-			path.lineTo(0.73, -0.31);
-			path.lineTo(0.476, -0.0625);
-			path.lineTo(0.111, 0.255);
-			path.lineTo(0.0305, 0.513);
-			path.moveTo(0.00234, 0.681);
-			path.lineTo(0.165, 0.726);
-			path.lineTo(0.232, 0.834);
-			path.lineTo(0.164, 0.943);
-			path.lineTo(0.00234, 0.988);
-			path.lineTo(-0.158, 0.943);
-			path.lineTo(-0.225, 0.834);
-			path.lineTo(-0.158, 0.726);
-			path.lineTo(0.00234, 0.681);
-			path.closeSubpath();
-			break;
-		case QStyle::SP_CustomBase + 1:
-			path.moveTo(0, -1);
-			path.lineTo(0.2, -0.2);
-			path.lineTo(1, 0);
-			path.lineTo(0.2, 0.2);
-			path.lineTo(0, 1);
-			path.lineTo(-0.2, 0.2);
-			path.lineTo(-1, 0);
-			path.lineTo(-0.2, -0.2);
-			path.lineTo(0, -1);
-			path.closeSubpath();
-			break;
-		case QStyle::SP_CustomBase + 2:
-			path.moveTo(0, -0.2);
-			path.lineTo(1, 0);
-			path.lineTo(0, 0.2);
-			path.lineTo(-1, 0);
-			path.lineTo(0, -0.2);
-			path.closeSubpath();
-			break;
-		case QStyle::SP_CustomBase + 4:
-			path.moveTo(0, -0.2);
-			path.lineTo(1, 0);
-			path.lineTo(0, 0.2);
-			path.lineTo(-1, 0);
-			path.lineTo(0, -0.2);
-			path.closeSubpath();
-			path.moveTo(-1, -0.4);
-			path.lineTo(0, -0.6);
-			path.lineTo(1, -0.4);
-			path.lineTo(0, -1);
-			path.lineTo(-1, -0.4);
-			path.closeSubpath();
-			break;
-		case QStyle::SP_CustomBase + 5:
-			path.moveTo(0, -0.2);
-			path.lineTo(1, 0);
-			path.lineTo(0, 0.2);
-			path.lineTo(-1, 0);
-			path.lineTo(0, -0.2);
-			path.closeSubpath();
-			path.moveTo(-1, 0.4);
-			path.lineTo(0, 0.6);
-			path.lineTo(1, 0.4);
-			path.lineTo(0, 1);
-			path.lineTo(-1, 0.4);
-			path.closeSubpath();
-			break;
-		case QStyle::SP_CustomBase + 6:
-			path.moveTo(0, -0.2);
-			path.lineTo(1, 0);
-			path.lineTo(0, 0.2);
-			path.lineTo(-1, 0);
-			path.lineTo(0, -0.2);
-			path.closeSubpath();
-			path.moveTo(-1, -1);
-			path.lineTo(0, -0.8);
-			path.lineTo(1, -1);
-			path.lineTo(0, -0.4);
-			path.lineTo(-1, -1);
-			path.closeSubpath();
-			break;
-		case QStyle::SP_CustomBase + 7:
-			path.moveTo(0, -0.2);
-			path.lineTo(1, 0);
-			path.lineTo(0, 0.2);
-			path.lineTo(-1, 0);
-			path.lineTo(0, -0.2);
-			path.closeSubpath();
-			path.moveTo(-1, 1);
-			path.lineTo(0, 0.8);
-			path.lineTo(1, 1);
-			path.lineTo(0, 0.4);
-			path.lineTo(-1, 1);
-			path.closeSubpath();
-			break;
-		case QStyle::SP_ToolBarHorizontalExtensionButton:
-			path.moveTo(-1, -1);
-			path.lineTo(0, 0);
-			path.lineTo(-1, 1);
-			path.lineTo(-0.5, 0);
-			path.lineTo(-1, -1);
-			path.closeSubpath();
-			path.moveTo(0, -1);
-			path.lineTo(1, 0);
-			path.lineTo(0, 1);
-			path.lineTo(0.5, 0);
-			path.lineTo(0, -1);
-			path.closeSubpath();
-			break;
-		case QStyle::SP_ToolBarVerticalExtensionButton:
-			path.moveTo(-1, -1);
-			path.lineTo(0, -0.5);
-			path.lineTo(1, -1);
-			path.lineTo(0, 0);
-			path.lineTo(-1, -1);
-			path.closeSubpath();
-			path.moveTo(-1, 0);
-			path.lineTo(0, 0.5);
-			path.lineTo(1, 0);
-			path.lineTo(0, 1);
-			path.lineTo(-1, 0);
-			path.closeSubpath();
-			break;
-		default:
-			break;
-	}
-	return path;
-}
-
-
-QIcon SkulptureStyle::standardIconImplementation(QStyle::StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const
-{
-#if 0
-	QIcon icon;
-
-	switch (standardIcon) {
-		default:
-			icon.addPixmap(standardPixmap(standardIcon, option, widget));
-			break;
-	}
-	return icon;
-#else
-	if (standardIcon > QStyle::SP_CustomBase
-	 || (standardIcon >= QStyle::SP_TitleBarMinButton && standardIcon <= QStyle::SP_TitleBarContextHelpButton)
-	 || (standardIcon == QStyle::SP_ToolBarHorizontalExtensionButton)
-	 || (standardIcon == QStyle::SP_ToolBarVerticalExtensionButton)
-	) {
-		bool dock = qobject_cast<const QDockWidget *>(widget) != 0;
-		bool ext = (standardIcon == QStyle::SP_ToolBarHorizontalExtensionButton)
-		 || (standardIcon == QStyle::SP_ToolBarVerticalExtensionButton);
-		if (dock && standardIcon == QStyle::SP_TitleBarNormalButton) {
-			standardIcon = QStyle::SP_TitleBarMaxButton;
-		}
-		QPainterPath path = decorationShape(standardIcon);
-		const int size = ext ? 8 : (dock ? 14 : 10);
-		const qreal s = size / 2.0;
-		QPixmap pixmap(size, size);
-		pixmap.fill(Qt::transparent);
-		QPainter painter(&pixmap);
-		painter.setRenderHint(QPainter::Antialiasing, true);
-		painter.translate(s, s);
-		if (dock) {
-			painter.scale(s - 2, s - 2);
-		} else {
-			painter.scale(s, s);
-		}
-		painter.setPen(Qt::NoPen);
-		if (option) {
-			painter.setBrush(option->palette.color(QPalette::Text));
-		} else {
-			painter.setBrush(Qt::black);
-		}
-		painter.drawPath(path);
-		return QIcon(pixmap);
-	}
-	return ParentStyle::standardIconImplementation(standardIcon, option, widget);
-#endif
-}
-
-
-QPixmap SkulptureStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *option) const
-{
-	return ParentStyle::generatedIconPixmap(iconMode, pixmap, option);
-}
-
-
-QRect SkulptureStyle::itemPixmapRect(const QRect &rectangle, int alignment, const QPixmap & pixmap) const
-{
-	return ParentStyle::itemPixmapRect(rectangle, alignment, pixmap);
-}
-
-
-void SkulptureStyle::drawItemPixmap(QPainter *painter, const QRect &rectangle, int alignment, const QPixmap &pixmap) const
-{
-	ParentStyle::drawItemPixmap(painter, rectangle, alignment, pixmap);
-}
-
-
-/*
- * skulpture_mdi.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QMdiSubWindow>
-#include <QtCore/QSettings>
-#include <cmath>
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintFrameWindow(QPainter *painter, const QStyleOptionFrame *option)
-{
-//	painter->fillRect(option->rect, option->palette.color(QPalette::Window));
-#if 0
-	paintThinFrame(painter, option->rect.adjusted(0, 0, 0, 0), option->palette, -60, 160);
-	paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -20, 60);
-#else
-	paintThinFrame(painter, option->rect.adjusted(0, 0, 0, 0), option->palette, -90, 355);
-	paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -40, 100);
-#endif
-//	paintThinFrame(painter, option->rect.adjusted(4, 7 + option->fontMetrics.height(), -4, -4), option->palette, 60, -20);
-#if 0
-	painter->setPen(Qt::red);
-	painter->setBrush(Qt::NoBrush);
-	painter->drawRect(option->rect.adjusted(0, 0, -1, -1));
-#endif
-}
-
-
-static void getTitleBarPalette(QPalette &palette)
-{
-	QSettings settings(QLatin1String("Trolltech"));
-	settings.beginGroup(QLatin1String("Qt"));
-
-	if (settings.contains(QLatin1String("KWinPalette/activeBackground"))) {
-		palette.setColor(QPalette::Window, QColor(settings.value(QLatin1String("KWinPalette/inactiveBackground")).toString()));
-		palette.setColor(QPalette::WindowText, QColor(settings.value(QLatin1String("KWinPalette/inactiveForeground")).toString()));
-		palette.setColor(QPalette::Highlight, QColor(settings.value(QLatin1String("KWinPalette/activeBackground")).toString()));
-		palette.setColor(QPalette::HighlightedText, QColor(settings.value(QLatin1String("KWinPalette/activeForeground")).toString()));
-	} else {
-		palette.setColor(QPalette::Window, QColor(0, 0, 0, 20));
-		palette.setColor(QPalette::WindowText, QColor(0, 0, 0, 255));
-		QColor barColor = palette.color(QPalette::Highlight);
-		barColor.setHsvF(barColor.hueF(), barColor.saturationF() * 0.9, 0.25);
-		palette.setColor(QPalette::Highlight, barColor);
-		palette.setColor(QPalette::HighlightedText, QColor(255, 255, 255, 240));
-	}
-}
-
-
-void paintTitleBar(QPainter *painter, const QStyleOptionTitleBar *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	QColor barColor;
-	QColor textColor;
-
-	painter->save();
-	qreal opacity = painter->opacity();
-
-	QPalette palette = option->palette;
-
-	if (widget && widget->inherits("QMdiSubWindow")) {
-		if (widget->objectName() != QString::fromAscii("SkulpturePreviewWindow")) {
-			getTitleBarPalette(palette);
-		}
-	}
-	if (option->state & QStyle::State_Active) {
-		barColor = palette.color(QPalette::Highlight);
-		textColor = palette.color(QPalette::HighlightedText);
-	} else {
-		barColor = palette.color(QPalette::Window);
-		textColor = palette.color(QPalette::WindowText);
-	}
-
-	QLinearGradient barGradient(option->rect.topLeft() + QPoint(-1, -1), option->rect.bottomLeft() + QPoint(-1, -2));
-//	barGradient.setColorAt(0.0, option->palette.color(QPalette::Window));
-	barGradient.setColorAt(0.0, barColor.dark(105));
-//	barGradient.setColorAt(0.3, barColor);
-//	barGradient.setColorAt(0.7, barColor);
-	barGradient.setColorAt(1.0, barColor.light(120));
-//	barGradient.setColorAt(1.0, option->palette.color(QPalette::Window));
-//	painter->fillRect(option->rect.adjusted(-1, -1, 1, -2), barGradient);
-//	painter->fillRect(option->rect.adjusted(-1, -1, 1, -2), barColor);
-
-#if 1
-	{
-		QRect r = option->rect.adjusted(-4, -7, 4, 0);
-		QRect lr = r.adjusted(6, 2, -6/* - 55*/, -1);
-	//	QRect lr = r.adjusted(6, 2, -70, -1);
-
-		if (true || option->state & QStyle::State_Active) {
-			painter->fillRect(lr, barColor);
-		}
-
-		QStyleOptionTitleBar buttons = *option;
-	//	buttons.subControls &= ~QStyle::SC_TitleBarLabel;
-		buttons.subControls = QStyle::SC_TitleBarSysMenu;
-		buttons.rect.adjust(3, -2, -4, -1);
-		painter->setOpacity(option->state & QStyle::State_Active ? opacity : 0.7 * opacity);
-		((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_TitleBar, &buttons, painter, widget);
-		buttons = *option;
-#if 0
-		buttons.subControls &= ~(QStyle::SC_TitleBarLabel | QStyle::SC_TitleBarSysMenu);
-		((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_TitleBar, &buttons, painter, widget);
-#else
-		QStyleOption opt = *option;
-		QIcon icon;
-
-		for (int i = 1; i <= 7; ++i) {
-			QStyle::SubControl sc = (QStyle::SubControl) (1 << i);
-			if (option->subControls & sc & ~(QStyle::SC_TitleBarContextHelpButton)) {
-				QRect rect = style->subControlRect(QStyle::CC_TitleBar, option, sc, widget);
-				if (option->activeSubControls & sc) {
-					if (sc == QStyle::SC_TitleBarCloseButton) {
-						painter->fillRect(rect, QColor(255, 0, 0, 120));
-					} else {
-						painter->fillRect(rect, QColor(255, 255, 255, 70));
-					}
-				}
-				opt.palette.setColor(QPalette::Text, Qt::black);
-				icon = style->standardIcon((QStyle::StandardPixmap)(QStyle::SP_TitleBarMenuButton + i), &opt, widget);
-				painter->setOpacity(0.1 * opacity);
-				icon.paint(painter, rect.adjusted(1, 1, 1, 1));
-				opt.palette.setColor(QPalette::Text, textColor);
-				icon = style->standardIcon((QStyle::StandardPixmap)(QStyle::SP_TitleBarMenuButton + i), &opt, widget);
-				painter->setOpacity(option->state & QStyle::State_Active ? opacity : 0.7 * opacity);
-				icon.paint(painter, rect);
-			}
-		}
-#endif
-		painter->setOpacity(opacity);
-
-#if 0
-		QRect buttonRect = option->rect.adjusted(300, 1, -90, -6);
-		paintThinFrame(painter, buttonRect, option->palette, -180, 40);
-		paintThinFrame(painter, buttonRect.adjusted(-1, -1, 1, 1), option->palette, 40, -180);
-#endif
-
-		{
-			QLinearGradient labelGradient(lr.topLeft(), lr.bottomLeft());
-#if 0
-			labelGradient.setColorAt(0.0, QColor(0, 0, 0, 50));
-			labelGradient.setColorAt(0.5, QColor(0, 0, 0, 0));
-			labelGradient.setColorAt(0.55, QColor(0, 0, 0, 20));
-			labelGradient.setColorAt(1.0, QColor(0, 0, 0, 0));
-#elif 1
-			labelGradient.setColorAt(0.0, QColor(255, 255, 255, 10));
-			labelGradient.setColorAt(0.5, QColor(255, 255, 255, 40));
-			labelGradient.setColorAt(0.55, QColor(0, 0, 0, 0));
-			labelGradient.setColorAt(1.0, QColor(255, 255, 255, 20));
-#else
-			labelGradient.setColorAt(0.0, QColor(0, 0, 0, 30));
-			labelGradient.setColorAt(1.0, QColor(255, 255, 255, 60));
-#endif
-			painter->fillRect(lr, labelGradient);
-		}
-
-		QLinearGradient barGradient(r.topLeft(), r.bottomLeft());
-		barGradient.setColorAt(0.0, QColor(255, 255, 255, 200));
-		barGradient.setColorAt(0.2, QColor(255, 255, 255, 80));
-		barGradient.setColorAt(0.5, QColor(255, 255, 255, 30));
-		barGradient.setColorAt(1.0, QColor(255, 255, 255, 0));
-		painter->fillRect(r, barGradient);
-#if 0
-		QRadialGradient dialogGradient2(r.left() + r.width() / 2, r.top(), r.height());
-		dialogGradient2.setColorAt(0.0, QColor(255, 255, 225, 70));
-		dialogGradient2.setColorAt(1.0, QColor(0, 0, 0, 0));
-		painter->save();
-		painter->translate(r.center());
-		painter->scale(r.width() / 2.0 / r.height(), 1);
-		painter->translate(-r.center());
-		painter->fillRect(r.adjusted(1, 1, -1, -1), dialogGradient2);
-		painter->restore();
-#endif
-		paintThinFrame(painter, lr, option->palette, -30, 90);
-		paintThinFrame(painter, lr.adjusted(-1, -1, 1, 1), option->palette, 90, -30);
-
-	}
-#endif
-
-
-#if 0
-//	paintThinFrame(painter, option->rect.adjusted(0, 0, 0, -1), option->palette, -30, 80);
-	paintThinFrame(painter, option->rect.adjusted(-1, -1, 1, 0), option->palette, 80, -30);
-	painter->fillRect(option->rect.adjusted(0, 0, 0, -1), barColor);
-
-	// FIXME: adjust rect for new shadow // paintRecessedFrameShadow(painter, option->rect.adjusted(-1, -1, 1, 0), RF_Large);
-	{
-		QRect labelRect = option->rect.adjusted(20, 0, -250, 0);
-		painter->fillRect(labelRect, option->palette.color(QPalette::Window));
-		paintThinFrame(painter, labelRect.adjusted(0, 0, 0, 1), option->palette, -30, 80);
-	}
-#endif
-
-	if (option->subControls & QStyle::SC_TitleBarLabel) {
-		QRect labelRect;
-
-		if (widget && widget->inherits("QMdiSubWindow")) {
-			QFont font = painter->font();
-			font.setBold(true);
-			labelRect = option->rect.adjusted(option->fontMetrics.height() + 10, -1, -2, -3);
-		//	font.setPointSizeF(10);
-			painter->setFont(font);
-		} else {
-			labelRect = style->subControlRect(QStyle::CC_TitleBar, option, QStyle::SC_TitleBarLabel, widget);
-		}
-		painter->setOpacity(opacity * 0.1);
-		painter->setPen(Qt::black);
-		painter->drawText(labelRect.adjusted(1, 1, 1, 1), Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, option->text);
-		painter->setOpacity(option->state & QStyle::State_Active ? opacity : 0.7 * opacity);
-		painter->setPen(textColor);
-		painter->drawText(labelRect, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, option->text);
-	}
-/*
-	if (!option->icon.isNull()) {
-		labelRect.setWidth(16);
-		labelRect.setHeight(16);
-		painter->drawPixmap(labelRect.adjusted(0, -1, 0, -1), option->icon.pixmap(QSize(16, 16)));
-	}
-*/	painter->restore();
-}
-
-
-int getWindowFrameMask(QStyleHintReturnMask *mask, const QStyleOptionTitleBar *option, const QWidget *widget)
-{
-	Q_UNUSED(widget);
-	mask->region = option->rect;
-
-	// TODO get total dimensions of workspace and don't use masks on corners
-	/*if (option->rect.topLeft() != QPoint(0, 0))*/ {
-//		mask->region -= QRect(option->rect.topLeft(), QSize(1, 1));
-	}
-//	mask->region -= QRect(option->rect.topRight(), QSize(1, 1));
-//	mask->region -= QRect(option->rect.bottomLeft(), QSize(1, 1));
-//	mask->region -= QRect(option->rect.bottomRight(), QSize(1, 1));
-
-	// try new style
-//	mask->region -= QRect(option->rect.topLeft(), QSize(6, 1));
-//	mask->region -= QRect(option->rect.topRight() - QPoint(5, 0), QSize(6, 1));
-	return 1;
-}
-
-
-/*
- * skulpture_menu.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QMenu>
-#include <QtGui/QShortcut>
-#include <cstdio>
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintFrameMenu(QPainter *painter, const QStyleOptionFrame *option)
-{
-	paintThinFrame(painter, option->rect, option->palette, -60, 160);
-	paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -20, 60);
-}
-
-
-void paintPanelMenuBar(QPainter *painter, const QStyleOptionFrame *option)
-{
-	Q_UNUSED(painter); Q_UNUSED(option);
-//	paintThinFrame(painter, option->rect, option->palette, -20, 60);
-//	painter->fillRect(option->rect.adjusted(1, 1, -1, -1), option->palette.color(QPalette::Window));
-}
-
-
-void paintMenuBarEmptyArea(QPainter *painter, const QStyleOption *option)
-{
-	Q_UNUSED(painter); Q_UNUSED(option);
-//	painter->fillRect(option->rect, option->palette.color(QPalette::Window));
-}
-
-
-/*-----------------------------------------------------------------------*/
-#if 0
-QSize sizeFromContentsMenuBarItem(const QStyleOptionMenuItem *option, const QSize &contentsSize)
-{
-}
-#endif
-
-extern void paintCommandButtonPanel(QPainter *painter, const QStyleOptionButton *option, QPalette::ColorRole bgrole);
-
-void paintMenuBarItem(QPainter *painter, const QStyleOptionMenuItem *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-#if 0
-	if (option->state & QStyle::State_Selected) {
-		painter->fillRect(option->rect, option->palette.color(QPalette::Highlight));
-		paintThinFrame(painter, option->rect, option->palette, -10, 20);
-	}
-#else
-	QStyleOptionButton button;
-
-	button.QStyleOption::operator=(*option);
-	button.features = QStyleOptionButton::None;
-	button.rect.adjust(-1, -1, 1, 1);
-//	button.rect.adjust(0, -1, 0, -1);
-	if (option->state & QStyle::State_Selected || option->state & QStyle::State_MouseOver) {
-		button.state |= QStyle::State_MouseOver;
-		paintCommandButtonPanel(painter, &button, QPalette::Button);
-	}
-#endif
-	int alignment = Qt::AlignCenter | Qt::TextShowMnemonic;
-	if (!style->styleHint(QStyle::SH_UnderlineShortcut, option, widget)) {
-		alignment |= Qt::TextHideMnemonic;
-	}
-#if 0
-	painter->save();
-	painter->setPen(option->palette.color(option->state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Text));
-	style->drawItemText(painter, option->rect, alignment, option->palette, option->state & QStyle::State_Enabled, option->text, QPalette::NoRole);
-	painter->restore();
-#else
-	QRect r = option->rect;
-//	int x = option->state & QStyle::State_Sunken ? style->pixelMetric(QStyle::PM_ButtonShiftHorizontal, option, widget) : 0;
-//	int y = option->state & QStyle::State_Sunken ? style->pixelMetric(QStyle::PM_ButtonShiftVertical, option, widget) : 0;
-//	r.adjust(x, y, x, y);
-//	r.adjust(0, -1, 0, -1);
-	// FIXME support icon
-	style->drawItemText(painter, r, alignment, option->palette, option->state & QStyle::State_Enabled, option->text, QPalette::ButtonText);
-#endif
-//	((QCommonStyle *) style)->QCommonStyle::drawControl(QStyle::CE_MenuBarItem, option, painter, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * this menu code work arounds some limitations of Qt menus.
- * new features are:
- *
- * - text column and shortcut column can overlap
- * - shortcut column can be hidden
- * - shortcut column can have a different font
- * - shortcut column can have actual keyboard glyphs
- * - shortcut keys can have frames
- * - the + connector for keys can be hidden
- *
- * keyboard glyphs are used for: Shift, Arrows, Return
- * german keyboards also have: "Bild <arrow up>", "Bild <arrow down>"
- * keyboards in other locales may have other glyphs, so
- * keep it configurable.
- *
- *
- * We must entirely replace Qt's layout algorithm.
- *
- */
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * sizeFromContentsMenu
- *
- * following information is passed in option:
- *
- *
- */
-
-QSize sizeFromContentsMenu(const QStyleOption *option, const QSize &contentsSize, const QWidget *widget, const QStyle */*style*/)
-{
-	Q_UNUSED(option); Q_UNUSED(widget);
-	return contentsSize;
-}
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * sizeFromContentsMenuItem
- *
- * following information is passed in option:
- *
- *
- */
-
-QSize sizeFromContentsMenuItem(const QStyleOptionMenuItem *option, const QSize &contentsSize)
-{
-	if (option->menuItemType == QStyleOptionMenuItem::Separator) {
-		return QSize(4, 4);
-	}
-
-	// always make room for icon column
-	int iconWidth = 16 + 4;
-	if (option->maxIconWidth > iconWidth) {
-		iconWidth = option->maxIconWidth;
-	}
-
-	QFont menu_font;
-
-	int w = contentsSize.width(), h = contentsSize.height();
-	w += iconWidth + 4 + 22;
-	h += 4;
-	return QSize(w, h);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintMenuItem(QPainter *painter, const QStyleOptionMenuItem *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	const bool buttonmode = true;
-
-	if (qobject_cast<const QMenu *>(widget)) {
-		painter->fillRect(option->rect, option->palette.color(QPalette::Active, buttonmode ? QPalette::Window : QPalette::Base));
-		QRect rect = option->rect;
-		if (option->direction == Qt::RightToLeft) {
-			rect.translate(rect.width() - 25, 0);
-		}
-		rect.setWidth(24/*option->maxIconWidth*/);
-#if 0
-		painter->fillRect(rect.adjusted(0, 0, -1, 0), option->palette.color(QPalette::Window).darker(107));
-#else
-		QLinearGradient gradient(rect.topLeft(), rect.topRight());
-		gradient.setColorAt(0.0, QColor(0, 0, 0, 10));
-		gradient.setColorAt(1.0, QColor(0, 0, 0, 10));
-		if (buttonmode) {
-			painter->fillRect(rect.adjusted(0, 0, -1, 0), gradient);
-		} else {
-			painter->fillRect(rect.adjusted(0, 0, -1, 0), option->palette.color(QPalette::Active, QPalette::Window));
-		}
-#endif
-	}
-//	painter->fillRect(option->rect.adjusted(option->maxIconWidth, 0, -1, 0), option->palette.color(QPalette::Window).lighter(102));
-	if (option->state & QStyle::State_Selected) {
-		if (buttonmode) {
-			QStyleOptionButton button;
-
-			button.QStyleOption::operator=(*option);
-			button.features = QStyleOptionButton::None;
-			button.state |= QStyle::State_MouseOver;
-			button.rect.adjust(-1, -1, 0, 1);
-			if (option->state & QStyle::State_Selected || option->state & QStyle::State_MouseOver) {
-				paintCommandButtonPanel(painter, &button, QPalette::Button);
-			}
-		} else {
-			QColor color = option->palette.color(QPalette::Active, QPalette::Highlight);
-			if (!(option->state & QStyle::State_Enabled)) {
-			//	color = blend_color(color, option->palette.color(QPalette::Window), 0.9);
-				color.setAlpha(40);
-			} else {
-				color.setAlpha(180);
-			}
-			painter->fillRect(option->rect.adjusted(0, 0, -1, 0), color);
-			if (option->state & QStyle::State_Enabled) {
-				paintThinFrame(painter, option->rect.adjusted(0, 0, -1, 0), option->palette, -20, -20);
-			}
-		}
-	} else {
-		/* */
-	}
-	if (option->menuItemType == QStyleOptionMenuItem::Separator) {
-		if (qobject_cast<const QMenu *>(widget)) {
-		//	QRect rect = option->rect;
-		//	rect.setWidth(22/*option->maxIconWidth*/);
-		//	painter->fillRect(rect.adjusted(0, 0, -1, 0), option->palette.color(QPalette::Window).darker(110));
-			if (option->direction == Qt::LeftToRight) {
-				paintThinFrame(painter, option->rect.adjusted(23, 1, 3, -1), option->palette, 60, -20);
-			} else {
-				paintThinFrame(painter, option->rect.adjusted(0, 1, -25, -1), option->palette, 60, -20);
-			}
-		//	painter->fillRect(option->rect, Qt::red);
-		} else {
-			QRect rect = option->rect;
-			rect.setHeight(2);
-			rect.translate(0, (option->rect.height() - 2) >> 1);
-			paintThinFrame(painter, rect, option->palette, 60, -20);
-		}
-		return;
-	}
-//	painter->save();
-//	QFont font = painter->font();
-//	font.setPointSizeF(font.pointSizeF() / (1.19));
-//	font.setBold(true);
-//	painter->setFont(font);
-	QStyleOptionMenuItem menuOption = *option;
-	if (buttonmode) {
-		menuOption.palette.setColor(QPalette::HighlightedText, option->palette.color(QPalette::ButtonText));
-		menuOption.palette.setColor(QPalette::ButtonText, option->palette.color(QPalette::WindowText));
-	} else {
-		menuOption.palette.setColor(QPalette::ButtonText, option->palette.color(QPalette::Text));
-	}
-	menuOption.palette.setColor(QPalette::Highlight, QColor(0, 0, 0, 0));
-	menuOption.palette.setColor(QPalette::Button, QColor(0, 0, 0, 0));
-	menuOption.palette.setColor(QPalette::Window, QColor(0, 0, 0, 0));
-	menuOption.palette.setColor(QPalette::Shadow, QColor(0, 0, 0, 0));
-	menuOption.palette.setColor(QPalette::Light, QColor(0, 0, 0, 0));
-	menuOption.palette.setColor(QPalette::Midlight, QColor(0, 0, 0, 0));
-	menuOption.palette.setColor(QPalette::Dark, QColor(0, 0, 0, 0));
-#if 0
-	int pos;
-	if ((pos = option->text.indexOf(QChar('\t', 0))) > 0) {
-		QString shortcut = option->text.mid(pos + 1);
-	//	shortcut = shortcut.replace(QString::fromUtf8("Strg+"), QChar('^', 0));
-		shortcut = shortcut.left(shortcut.length() - 1).replace(QChar('+', 0), QChar(' ', 0)) + shortcut.right(1);
-#if 0
-		shortcut = shortcut.replace(QShortcut::tr("Left"), QChar(0x2190));
-		shortcut = shortcut.replace(QShortcut::tr("Up"), QChar(0x2191));
-		shortcut = shortcut.replace(QShortcut::tr("Right"), QChar(0x2192));
-		shortcut = shortcut.replace(QShortcut::tr("Down"), QChar(0x2193));
-		shortcut = shortcut.replace(QShortcut::tr("Shift"), QChar(0x21e7));
-//		shortcut = shortcut.replace(QShortcut::tr("Ctrl"), QChar(0x2318));
-		// german keyboard shows Arrows for PgUp / PgDown
-		shortcut = shortcut.replace(QString::fromUtf8(" aufw\xc3\xa4rts"), QChar(0x2191));
-		shortcut = shortcut.replace(QString::fromUtf8(" abw\xc3\xa4rts"), QChar(0x2193));
-#endif
-		menuOption.text = option->text.left(pos) + QChar('\t', 0) + shortcut;
-	}
-#endif
-	if (menuOption.maxIconWidth < 16 + 4) {
-		menuOption.maxIconWidth = 16 + 3;
-		if (option->direction == Qt::LeftToRight) {
-			menuOption.rect.adjust(2, 0, 2, 0);
-		} else {
-			menuOption.rect.adjust(-4, 0, -4, 0);
-		}
-	} else {
-		if (option->direction == Qt::LeftToRight) {
-			menuOption.rect.adjust(1, 0, 1, 0);
-		} else {
-			menuOption.rect.adjust(-3, 0, -3, 0);
-		}
-	}
-	if (menuOption.checked) {
-		menuOption.icon = QIcon();
-	}
-	// ### hack to reduce size of arrow
-	QFont font;
-	font.setPointSizeF(font.pointSizeF() / 1.19);
-	menuOption.fontMetrics = QFontMetrics(font);
-	((QWindowsStyle *) style)->QWindowsStyle::drawControl(QStyle::CE_MenuItem, &menuOption, painter, widget);
-//	painter->restore();
-
-	/* arrows: left up right down: 0x2190-0x2193
-	 * shift?: 0x21E7
-	 * command: 0x2318
-	 * return: 0x23CE, 0x21B5
-	 * backspace: 0x232B
-	 * (scrollbar arrows: left up right down: 0x25C4,B2,BA,BC)
-	 * dot: 0x25CF
-	 * other arrow right: 0x2799
-	 */
-}
-
-
-/*
- * skulpture_metrics.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtCore/QSettings>
-#include <QtGui/QApplication>
-#include <cstdio>
-
-
-/*-----------------------------------------------------------------------*/
-#if 0 // not yet
-struct MetricSetting {
-	const char * const label;
-	int id;
-	int value;
-	unsigned char flags;
-	unsigned char min; short max;
-};
-
-
-static const struct MetricSetting metricSettings[] =
-{
- { "MDI/TitleBar/Height", QStyle::PM_TitleBarHeight, 25 },
- { "Button/Margin", QStyle::PM_ButtonMargin, 8 },
- { 0, -1, 0 }
-};
-#endif
-
-static inline int fontSize(const QStyleOption *option, const QWidget *widget)
-{
-	if (option) {
-		return option->fontMetrics.height();// - 1;
-	} else if (widget) {
-		return widget->fontMetrics().height();// - 1;
-	}
-	return 16;
-}
-
-
-static inline int appFontSize(const QStyleOption *option, const QWidget *widget)
-{
-	Q_UNUSED(option); Q_UNUSED(widget);
-	return QApplication::fontMetrics().height();
-}
-
-
-static inline int iconSize(int fontSize)
-{
-	int iconSize;
-
-	if (fontSize < 22) {
-		iconSize = 16;
-	} else if (fontSize < 32) {
-		iconSize = 22;
-	} else {
-		iconSize = 32;
-	}
-	return iconSize;
-}
-
-
-static inline Qt::LayoutDirection direction(const QStyleOption *option, const QWidget *widget)
-{
-	if (option) {
-		return option->direction;
-	} else if (widget) {
-		return widget->layoutDirection();
-	}
-	return Qt::LeftToRight;
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-int SkulptureStyle::pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const
-{
-//	return ParentStyle::pixelMetric(metric, option, widget);
-	switch (metric) {
-	/* Window */
-		case PM_TitleBarHeight: {
-				if (option) {
-#if 0
-					printf("fontleading: %d\n", option->fontMetrics.leading());
-					printf("fontlinespacing: %d\n", option->fontMetrics.lineSpacing());
-					printf("fontheight: %d\n", option->fontMetrics.height());
-					printf("xheight: %d\n", option->fontMetrics.xHeight());
-					printf("x-bheight: %d\n", option->fontMetrics.boundingRect(QChar('x', 0)).height());
-					printf("X-bheight: %d\n", option->fontMetrics.boundingRect(QChar('X', 0)).height());
-					printf("g-bheight: %d\n", option->fontMetrics.boundingRect(QChar('g', 0)).height());
-					printf("§-bheight: %d\n", option->fontMetrics.boundingRect(QString::fromUtf8("§").at(0)).height());
-					printf("Ä-bheight: %d\n", option->fontMetrics.boundingRect(QString::fromUtf8("Ä").at(0)).height());
-#endif
-					return 3 + fontSize(option, widget);
-				} else {
-					return 21;
-				}
-			}
-			break;
-		case PM_MDIFrameWidth:			return 3;
-		/* MenuBar & Menu */
-		case PM_MenuBarVMargin:		return 1;
-		case PM_MenuBarHMargin:		return 1;
-		case PM_MenuBarPanelWidth:		return 0;
-		case PM_MenuBarItemSpacing:		return 0;
-		// ### anything other than 0 f*cks up Qt's menu positioning code ...
-		case PM_MenuVMargin:			return 0;
-		case PM_MenuHMargin:			return 0;
-		case PM_MenuPanelWidth:		return 1;
-		/* ToolBar & ToolButton */
-		case PM_ToolBarSeparatorExtent:	return 6;
-		case PM_ToolBarHandleExtent:		return 9; //fontSize(option, widget) / 2;
-		case PM_ToolBarFrameWidth:		return 1;
-		case PM_ToolBarItemMargin:		return 0;
-		case PM_ToolBarIconSize:			return iconSize(fontSize(option, widget));
-		case PM_ToolBarItemSpacing:		return 0;
-		case PM_ToolBarExtensionExtent:	return 12;
-		/* DockWidget */
-		case PM_DockWidgetSeparatorExtent:	return (fontSize(option, widget) / 4) * 2 - 1;
-		case PM_DockWidgetHandleExtent:	return 160;	// TODO
-		case PM_DockWidgetFrameWidth:	return 2;
-		case PM_DockWidgetTitleMargin:	return 2;
-		case PM_DockWidgetTitleBarButtonMargin:
-									return 0;
-		/* ItemView */
-		case PM_HeaderGripMargin:		return 4;
-		case PM_HeaderMargin:			return 3;
-		case PM_HeaderMarkSize:			return 5;
-	/* Controls */
-		/* Button */
-		case PM_ButtonDefaultIndicator:	return 0;
-		case PM_ButtonShiftHorizontal:		return direction(option, widget) == Qt::LeftToRight ? 1 : -1;
-		case PM_ButtonShiftVertical:		return 1;
-		case PM_ButtonMargin:			return fontSize(option, widget) / 2 - 4;
-		case PM_MenuButtonIndicator:		return fontSize(option, widget);
-		case PM_ExclusiveIndicatorWidth:
-		case PM_ExclusiveIndicatorHeight:
-		case PM_IndicatorWidth:
-		case PM_IndicatorHeight:			return fontSize(option, widget);// * 6 / 5;
-		case PM_CheckBoxLabelSpacing:	return fontSize(option, widget) / 3;
-		case PM_RadioButtonLabelSpacing:	return fontSize(option, widget) / 3;
-		/* Slider */
-		case PM_SliderSpaceAvailable:
-			return ((QCommonStyle *) this)->QCommonStyle::pixelMetric(metric, option, widget);
-		case PM_SliderThickness:
-		case PM_SliderControlThickness:	return (fontSize(option, widget) / 4) * 2 + 9 + 4;
-		case PM_SliderLength:			return 2 * fontSize(option, widget) - 4;
-		case PM_SliderTickmarkOffset: {
-			if (const QStyleOptionSlider *sliderOption = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
-				if (sliderOption->tickPosition == QSlider::TicksAbove) {
-					return 5;
-				} else if (sliderOption->tickPosition == QSlider::TicksBothSides) {
-					return 5;
-				} else if (sliderOption->tickPosition == QSlider::TicksBelow) {
-					return 0;
-				}
-			}
-			return 0;
-		}
-		/* ScrollBar */
-		case PM_ScrollBarExtent:			return (appFontSize(option, widget) / 4) * 2 + 9;
-		case PM_ScrollBarSliderMin:		return 2 * appFontSize(option, widget) + 4;
-		/* ComboBox */
-		case PM_ComboBoxFrameWidth:	return 2;
-		/* SpinBox & QDial */
-		case PM_SpinBoxFrameWidth:		return 2;
-	/* Misc */
-		/* GroupBox */
-		/* TabBar & TabWidget */
-		case PM_TabBarIconSize:			return iconSize(fontSize(option, widget));
-		case PM_TabBarTabHSpace:		return 0;
-		case PM_TabBarTabVSpace:		return 0;
-		case PM_TabBarBaseOverlap:		return 2;
-		case PM_TabBarScrollButtonWidth:	return 2 * (fontSize(option, widget) / 2) + 1;
-		case PM_TabBar_ScrollButtonOverlap:	return 0;
-		case PM_TabBarTabShiftVertical:	return 0;
-		case PM_TabBarTabShiftHorizontal:	return 0;
-//		case PM_TabBarBaseHeight:		return 22;
-// ???	case PM_TabBarTabOverlap:		return 4;
-		/* ProgressBar */
-		/* Other */
-		case PM_SmallIconSize:			return iconSize(fontSize(option, widget));
-		case PM_SplitterWidth:			return (fontSize(option, widget) / 4) * 2 + 1;
-		/* Layout */
-		case PM_LayoutHorizontalSpacing:
-		case PM_LayoutVerticalSpacing:
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-			return -1;
-#else
-			return fontSize(option, widget) / 3;
-#endif
-
-		case PM_DefaultChildMargin:		return fontSize(option, widget) / 2;
-		case PM_DefaultTopLevelMargin:	return 1 + fontSize(option, widget) * 5 / 8;
-
-		case PM_LayoutLeftMargin:
-		case PM_LayoutTopMargin:
-		case PM_LayoutRightMargin:
-		case PM_LayoutBottomMargin:
-			return pixelMetric((option && (option->state & State_Window)) || (widget && widget->isWindow()) ? PM_DefaultTopLevelMargin : PM_DefaultChildMargin, option, widget);
-		case PM_DefaultFrameWidth:		return 2;
-		case PM_TextCursorWidth:			return qMax(1, (fontSize(option, widget) + 8) / 12);
-		default:
-			return ParentStyle::pixelMetric(metric, option, widget);
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-int SkulptureStyle::layoutSpacingImplementation(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option, const QWidget *widget) const
-{
-#if 0
-	return ParentStyle::layoutSpacingImplementation(control1, control2, orientation, option, widget);
-#else
-	if (orientation == Qt::Vertical && (control1 == QSizePolicy::CheckBox || control1 ==QSizePolicy::RadioButton || control2 ==QSizePolicy::CheckBox || control2 ==QSizePolicy::RadioButton)) {
-		return fontSize(option, widget) / 3;
-	}
-	int space = ParentStyle::layoutSpacingImplementation(control1, control2, orientation, option, widget);
-	if (space <= 0) return space;
-	return int(0.5 + fontSize(option, widget) / 16.0 * ((space > 6 ? space - 2 : space) & -2));
-#endif
-}
-#endif
-
-/*
- * skulpture_misc.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QTableView>
-
-
-/*-----------------------------------------------------------------------*/
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-void paintPanelItemViewItem(QPainter *painter, const QStyleOptionViewItemV4 *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	Q_UNUSED(style);
-
-	QColor color = option->palette.color(QPalette::Highlight);
-	bool mouse = option->state & QStyle::State_MouseOver && option->state & QStyle::State_Enabled;
-
-	if (option->version >= 2 && option->features & QStyleOptionViewItemV2::Alternate) {
-		painter->fillRect(option->rect, option->palette.color(QPalette::AlternateBase));
-	} else {
-		painter->fillRect(option->rect, option->backgroundBrush);
-	}
-	if (option->state & QStyle::State_Selected) {
-		if (mouse) {
-			color = color.lighter(110);
-		}
-	} else if (mouse) {
-		color.setAlpha(40);
-	} else {
-		return;
-	}
-	painter->save();
-	// ### work around KDE widgets that turn on antialiasing
-	painter->setRenderHint(QPainter::Antialiasing, false);
-	painter->setBrush(Qt::NoBrush);
-//	QColor shine(255, 255, 255, option->rect.height() > 20 ? 25 : 10);
-	QColor shadow(0, 0, 0, option->rect.height() > 20 ? 50 : 20);
-	painter->setPen(shadow);
-//	painter->setPen(QPen(color.darker(option->rect.height() > 20 ? 150 : 120), 1));
-	painter->fillRect(option->rect, color);
-	const QTableView *table = qobject_cast<const QTableView *>(widget);
-#if 0
-	if (!widget) {
-		if (widget->objectName() == QLatin1String("qt_scrollarea_viewport")) {
-			if (widget->parentWidget()) {
-				table = qobject_cast<const QTableView *>(widget->parentWidget());
-			}
-		}
-	}
-#endif
-	if (table && table->showGrid()) {
-		painter->restore();
-		return;
-	}
-	if (option->version >= 4) {
-#if 0
-		// ### Qt doesn't initialize option->widget, so do not use it
-		if (qobject_cast<const QTableView *>(option->widget)) {
-			painter->restore();
-			return;
-		}
-#endif
-		switch (option->viewItemPosition) {
-			case QStyleOptionViewItemV4::Beginning:
-				painter->drawLine(option->rect.topLeft() + QPoint(0, 1), option->rect.bottomLeft() - QPoint(0, 1));
-				painter->drawLine(option->rect.topLeft(), option->rect.topRight());
-				painter->drawLine(option->rect.bottomLeft(), option->rect.bottomRight());
-				break;
-			case QStyleOptionViewItemV4::End:
-				painter->drawLine(option->rect.topRight() + QPoint(0, 1), option->rect.bottomRight() - QPoint(0, 1));
-				painter->drawLine(option->rect.topLeft(), option->rect.topRight());
-				painter->drawLine(option->rect.bottomLeft(), option->rect.bottomRight());
-				break;
-			case QStyleOptionViewItemV4::Middle:
-				painter->drawLine(option->rect.topLeft(), option->rect.topRight());
-				painter->drawLine(option->rect.bottomLeft(), option->rect.bottomRight());
-				break;
-			case QStyleOptionViewItemV4::Invalid:
-			case QStyleOptionViewItemV4::OnlyOne:
-				painter->drawRect(option->rect.adjusted(0, 0, -1, -1));
-				break;
-		}
-	} else {
-		painter->drawRect(option->rect.adjusted(0, 0, -1, -1));
-	}
-	painter->restore();
-}
-#endif
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintCachedIndicatorBranchChildren(QPainter *painter, const QStyleOption *option);
-
-void paintIndicatorBranch(QPainter *painter, const QStyleOption *option)
-{
-	QPoint center = option->rect.center() + (option->direction == Qt::LeftToRight ? QPoint(2, 0) : QPoint(-1, 0));
-
-	if (option->state & (QStyle::State_Item | QStyle::State_Sibling)) {
-		QColor lineColor = option->palette.color(QPalette::Text);
-		lineColor.setAlpha(50);
-		painter->fillRect(QRect(center.x(), option->rect.y(), 1, center.y() - option->rect.y()), lineColor);
-		if (option->state & QStyle::State_Sibling) {
-			painter->fillRect(QRect(center.x(), center.y(), 1, option->rect.bottom() - center.y() + 1), lineColor);
-		}
-		if (option->state & QStyle::State_Item) {
-			if (option->direction == Qt::RightToLeft) {
-				painter->fillRect(QRect(option->rect.left(), center.y(), center.x() - option->rect.left(), 1), lineColor);
-			} else {
-				painter->fillRect(QRect(center.x() + 1, center.y(), option->rect.right() - center.x(), 1), lineColor);
-			}
-			if (!(option->state & QStyle::State_Sibling)) {
-				lineColor.setAlpha(25);
-				painter->fillRect(QRect(center.x(), center.y(), 1, 1), lineColor);
-			}
-		}
-	}
-	if (option->state & QStyle::State_Children && !(option->state & QStyle::State_Open)) {
-		QStyleOption opt = *option;
-		static const int d = 5;
-		opt.rect = QRect(center.x() - d / 2, center.y() - d / 2, d, d);
-		paintCachedIndicatorBranchChildren(painter, &opt);
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintSizeGrip(QPainter *painter, const QStyleOptionSizeGrip *option)
-{
-	QRect r;
-
-	switch (option->corner) {
-		case Qt::TopLeftCorner:		r = option->rect.adjusted(0, 0, 2, 2);	break;
-		case Qt::TopRightCorner:		r = option->rect.adjusted(-2, 0, 0, 2);	break;
-		case Qt::BottomLeftCorner:	r = option->rect.adjusted(0, -2, 2, 0);	break;
-		case Qt::BottomRightCorner:	r = option->rect.adjusted(-2, -2, 0, 0);	break;
-	}
-	paintThinFrame(painter, r, option->palette, 60, -20);
-	paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -20, 60);
-	switch (option->corner) {
-		case Qt::TopRightCorner:	// for Kickoff 4.1
-			painter->save();
-			painter->setPen(QPen(shaded_color(option->palette.color(QPalette::Window), 60), 1.0));
-			painter->drawLine(r.topLeft(), r.bottomRight());
-			painter->setPen(QPen(shaded_color(option->palette.color(QPalette::Window), -20), 1.0));
-			painter->drawLine(r.topLeft() + QPoint(1, -1), r.bottomRight() + QPoint(1, -1));
-			painter->restore();
-			break;
-		case Qt::BottomRightCorner:
-			painter->save();
-			painter->setPen(QPen(shaded_color(option->palette.color(QPalette::Window), -20), 1.0));
-			painter->drawLine(r.topRight(), r.bottomLeft());
-			painter->setPen(QPen(shaded_color(option->palette.color(QPalette::Window), 60), 1.0));
-			painter->drawLine(r.topRight() + QPoint(1, 1), r.bottomLeft() + QPoint(1, 1));
-			painter->restore();
-			break;
-		case Qt::TopLeftCorner:
-			// TODO
-			break;
-		case Qt::BottomLeftCorner:
-			// TODO
-			break;
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintCommandButtonPanel(QPainter *painter, const QStyleOptionButton *option, QPalette::ColorRole bgrole);
-
-void paintToolBoxTabShape(QPainter *painter, const QStyleOptionToolBoxV2 *option)
-{
-	QRect r = option->rect;
-	if (option->state & QStyle::State_Selected) {
-		QColor color = option->palette.color(QPalette::Window);
-		paintThinFrame(painter, r, option->palette, 40, -20);
-		paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -20, 80);
-		QLinearGradient gradient(r.topLeft(), r.bottomLeft());
-		gradient.setColorAt(0.0, shaded_color(color, 50));
-		gradient.setColorAt(0.2, shaded_color(color, 30));
-		gradient.setColorAt(0.5, shaded_color(color, 0));
-		gradient.setColorAt(0.51, shaded_color(color, -10));
-		gradient.setColorAt(1.0, shaded_color(color, -20));
-		painter->fillRect(r.adjusted(1, 1, -1, -1), gradient);
-	} else if (option->state & (QStyle::State_Sunken | QStyle::State_MouseOver)) {
-		QStyleOptionButton button;
-		button.QStyleOption::operator=(*option);
-		button.features = QStyleOptionButton::None;
-	//	button.rect.adjust(-1, -1, 1, 1);
-		paintCommandButtonPanel(painter, &button, QPalette::Window);
-	} else if (option->version >= 2 && option->selectedPosition == QStyleOptionToolBoxV2::PreviousIsSelected) {
-		r.setHeight(2);
-		paintThinFrame(painter, r, option->palette, 60, -20);
-	} else {
-	//	r.setHeight(2);
-	//	painter->fillRect(r, option->palette.color(QPalette::Window));
-	}
-	QStyleOption indicator;
-	indicator = *option;
-	indicator.rect.setSize(QSize(11, 11));
-	indicator.rect.translate(0, (option->rect.height() - 11) >> 1);
-	indicator.state = QStyle::State_Children;
-	if (option->state & QStyle::State_Selected) {
-		indicator.state |= QStyle::State_Open;
-	}
-	paintIndicatorBranch(painter, &indicator);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintCachedGrip(QPainter *painter, const QStyleOption *option, QPalette::ColorRole bgrole);
-
-void paintSplitter(QPainter *painter, const QStyleOption *option)
-{
-	if (option->state & QStyle::State_Enabled && option->state & QStyle::State_MouseOver) {
-		painter->fillRect(option->rect, QColor(255, 255, 255, 60));
-	}
-	int d = 5;
-	QRect rect(QRect(option->rect).center() - QPoint(d / 2, d / 2), QSize(d, d));
-	QStyleOption iOption = *option;
-	iOption.rect = rect;
-	iOption.palette.setCurrentColorGroup(QPalette::Disabled);
-//	iOption.state &= ~QStyle::State_Enabled;
-	iOption.palette.setColor(QPalette::Button, iOption.palette.color(QPalette::Window));
-	paintCachedGrip(painter, &iOption, QPalette::Window);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintRubberBand(QPainter *painter, const QStyleOptionRubberBand *option)
-{
-	painter->save();
-	if (true || option->shape == QRubberBand::Rectangle) {
-		qreal opacity = painter->opacity();
-		painter->setOpacity(opacity * 0.2);
-		painter->fillRect(option->rect, option->palette.color(QPalette::Highlight));
-		painter->setOpacity(opacity * 0.8);
-		painter->setPen(QPen(option->palette.color(QPalette::Highlight) /*, 1.0, Qt::DotLine*/));
-		painter->drawRect(option->rect.adjusted(0, 0, -1, -1));
-		painter->setOpacity(opacity);
-	} else {
-	//	painter->fillRect(option->rect, Qt::green);
-	}
-	painter->restore();
-}
-
-
-int getRubberBandMask(QStyleHintReturnMask *mask, const QStyleOption *option, const QWidget *widget)
-{
-	static const int rubber_width = 4;
-	int r = rubber_width;
-
-	Q_UNUSED(widget);
-	mask->region = option->rect;
-	if (option->rect.width() > 2 * r && option->rect.height() > 2 * r) {
-		mask->region -= option->rect.adjusted(r, r, -r, -r);
-	}
-	return 1;
-}
-
-
-/*
- * skulpture_progressbar.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QProgressBar>
-#include <QtCore/QTime>
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintProgressBarGroove(QPainter *painter, const QStyleOptionProgressBar *option)
-{
-//	paintThinFrame(painter, option->rect, option->palette, 60, -20);
-	painter->fillRect(option->rect.adjusted(2, 2, -2, -2), option->palette.color(QPalette::Base));
-//	painter->fillRect(option->rect.adjusted(1, 1, -1, -1), QColor(230, 230, 230));
-}
-
-
-void paintProgressBarLabel(QPainter *painter, const QStyleOptionProgressBarV2 *option)
-{
-#if 0
-	QRectF rect = option->rect.adjusted(6, 0, -(option->rect.width() - 40), 0);
-#endif
-	QFont font(painter->font());
-	font.setBold(true);
-	painter->save();
-	painter->setFont(font);
-	qreal opacity = painter->opacity();
-#if 1
-	painter->setOpacity(0.3 * opacity);
-	painter->setPen(Qt::black);
-	if (option->version >= 2) {
-		if (option->orientation == Qt::Vertical) {
-			painter->translate(option->rect.center());
-			painter->rotate(option->bottomToTop ? -90 : 90);
-			painter->translate(- option->rect.center());
-		}
-	}
-	painter->drawText(option->rect.adjusted(1, 1, 1, 1), Qt::AlignCenter, option->text);
-	painter->drawText(option->rect.adjusted(-1, 1, -1, 1), Qt::AlignCenter, option->text);
-	painter->drawText(option->rect.adjusted(1, -1, 1, -1), Qt::AlignCenter, option->text);
-	painter->drawText(option->rect.adjusted(-1, -1, -1, -1), Qt::AlignCenter, option->text);
-#endif
-	painter->setOpacity(0.9 * opacity);
-//	painter->setPen(option->palette.color(QPalette::HighlightedText));
-	painter->setPen(Qt::white);
-	painter->drawText(option->rect, Qt::AlignCenter, option->text);
-	//painter->setOpacity(opacity);
-	painter->restore();
-}
-
-
-void paintProgressBarContents(QPainter *painter, const QStyleOptionProgressBar *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle */*style*/)
-{
-	const QProgressBar *bar = qobject_cast<const QProgressBar *>(widget);
-	bool norange = (option->minimum == 0 && option->maximum == 0);
-//	norange = 1;
-	int percentage = 0;
-	int m = QTime(0, 0).msecsTo(QTime::currentTime()) / 30;
-
-	if (option->minimum < option->maximum) {
-		// decide if we should animate
-		// FIXME: this test should be done in timerEvent, to stop/restart timer.
-		if (option->progress == option->maximum || option->text == QString()) {
-			m = 0;
-		} else if (bar) {
-			if (bar->format() != QString::fromAscii("%p%")) {
-				m = 0;
-			}
-		}
-		percentage = 100 * (option->progress - option->minimum) / (option->maximum - option->minimum);
-	}
-	QRectF rect = option->rect.adjusted(2, 2, -2, -2);
-
-	qreal r = (qMax(rect.width() - 2, rect.height() - 2) - 8.0) * 100.0 / 100.0 + 8.0;
-	QPointF center = rect.center();
-	QRadialGradient r_grad(center, r / 2.0);
-	QLinearGradient l_grad(rect.topLeft(), rect.topRight());
-	QGradient *gradient = &l_grad;
-	QColor color = option->palette.color(QPalette::Highlight).dark(150);
-
-	if (widget && widget->parentWidget() && widget->parentWidget()->parentWidget()
-	 && widget->parentWidget()->parentWidget()->inherits("KNewPasswordDialog")) {
-		color.setHsv(percentage * 85 / 100, 200, 240 - percentage);
-	//	if (percentage > 75) m = 0;
-	} else if (widget && widget->inherits("StatusBarSpaceInfo")) {
-		int p = percentage;
-		if (p < 75) p = 100; else p = (100 - p) * 4;
-		color.setHsv(p * 85 / 100, 200, 240 - p);
-	} else {
-		gradient = &r_grad;
-	}
-	if (norange) {
-		percentage = 100;
-	}
-	if (percentage == 0 && option->progress == option->minimum) {
-		int v = m & 15;
-		if (m & 16) v = 15 - v;
-		color.setAlpha(100 + v * 5);
-	}
-	gradient->setColorAt(0.0, color);
-	gradient->setColorAt(0.04, color);
-	int i;
-	for (i = 0; i < percentage; ++i) {
-		int v;
-		if (norange) {
-			v = i + m;
-		} else {
-			v = i - m;
-		}
-		int k = v & 7;
-		if (v & 8) k = 7 - k;
-		if (norange) {
-			color.setAlpha(2 * (100 - i) + 7 * k);
-		} else {
-			color.setAlpha(100 + (100 - i * 0) + 7 * k);
-		}
-		gradient->setColorAt(0.1 + i * 0.009, color);
-	}
-	gradient->setColorAt(0.1 + i * 0.009, QColor(0, 0, 0, 0));
-	gradient->setColorAt(1.0, QColor(0, 0, 0, 0));
-	painter->fillRect(option->rect.adjusted(2, 2, -2, -2), *gradient);
-	QLinearGradient glassyGradient(option->rect.topLeft(), option->rect.bottomLeft());
-#if 0 // really glassy
-	glassyGradient.setColorAt(0.0, QColor(255, 255, 255, 210));
-	glassyGradient.setColorAt(0.45, QColor(0, 0, 0, 2));
-	glassyGradient.setColorAt(0.455, QColor(0, 0, 0, 11));
-	glassyGradient.setColorAt(1.0, QColor(255, 255, 255, 60));
-#else // like Skandale 0.0.2
-	glassyGradient.setColorAt(0.0, QColor(255, 255, 255, 60));
-	glassyGradient.setColorAt(0.45, QColor(0, 0, 0, 2));
-	glassyGradient.setColorAt(0.455, QColor(0, 0, 0, 11));
-	glassyGradient.setColorAt(1.0, QColor(255, 255, 255, 60));
-#endif
-	painter->fillRect(option->rect.adjusted(2, 2, -2, -2), glassyGradient);
-	paintRecessedFrame(painter, option->rect, option->palette, RF_Small);
-}
-
-
-/*
- * skulpture_scrollbar.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QAbstractScrollArea>
-#include <QtGui/QApplication>
-#include <climits>
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintScrollArrow(QPainter *painter, const QStyleOption *option, Qt::ArrowType arrow, bool spin);
-
-void paintScrollArea(QPainter *painter, const QStyleOption *option)
-{
-	QColor color = option->palette.color(QPalette::Window);
-	if (option->state & QStyle::State_Enabled || option->type != QStyleOption::SO_Slider) {
-#if 0
-		if (option->state & QStyle::State_Sunken) {
-			color = color.lighter(107);
-		} else {
-			color = color.darker(107);
-		}
-#elif 0
-		color = option->palette.color(QPalette::Base);
-#elif 1
-		if (option->state & QStyle::State_Sunken) {
-			color = color.darker(107);
-		} else {
-			// ###
-			if (false && option->state & QStyle::State_MouseOver) {
-				color = color.lighter(110);
-			} else {
-				color = color.lighter(107);
-			}
-		}
-#endif
-	}
-	painter->fillRect(option->rect, color);
-//	painter->fillRect(option->rect, Qt::red);
-}
-
-
-void paintScrollAreaCorner(QPainter *painter, const QStyleOption *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle */*style*/)
-{
-	QStyleOption opt;
-	opt = *option;
-	opt.type = QStyleOption::SO_Default;
-	if (widget && widget->inherits("QAbstractScrollArea")) {
-		opt.type = QStyleOption::SO_Slider;
-		opt.state &= ~QStyle::State_Enabled;
-		if (widget->isEnabled()) {
-			opt.state |= QStyle::State_Enabled;
-		}
-	}
-	paintScrollArea(painter, &opt);
-}
-
-
-extern void paintSliderGroove(QPainter *painter, QRect &rect, const QStyleOptionSlider *option);
-
-void paintScrollBarPage(QPainter *painter, const QStyleOptionSlider *option, QPalette::ColorRole /*bgrole*/)
-{
-	paintScrollArea(painter, option);
-	QRect rect = option->rect.adjusted(1, 1, -1, -1);
-	paintSliderGroove(painter, rect, option);
-}
-
-
-void paintScrollBarAddLine(QPainter *painter, const QStyleOptionSlider *option)
-{
-	paintScrollArea(painter, option);
-//	paintThinFrame(painter, option->rect, option->palette, -40, 120);
-	if (option->minimum != option->maximum) {
-		QStyleOptionSlider opt = *option;
-		opt.fontMetrics = QApplication::fontMetrics();
-		paintScrollArrow(painter, &opt, option->orientation == Qt::Horizontal ? (option->direction == Qt::RightToLeft ? Qt::LeftArrow : Qt::RightArrow) : Qt::DownArrow, false);
-	}
-}
-
-
-void paintScrollBarSubLine(QPainter *painter, const QStyleOptionSlider *option)
-{
-	paintScrollArea(painter, option);
-//	paintThinFrame(painter, option->rect, option->palette, -40, 120);
-	if (option->minimum != option->maximum) {
-		QStyleOptionSlider opt = *option;
-		opt.fontMetrics = QApplication::fontMetrics();
-		paintScrollArrow(painter, &opt, option->orientation == Qt::Horizontal ? (option->direction == Qt::RightToLeft ? Qt::RightArrow : Qt::LeftArrow) : Qt::UpArrow, false);
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintCachedGrip(QPainter *painter, const QStyleOption *option, QPalette::ColorRole bgrole = QPalette::Window);
-extern void paintSliderHandle(QPainter *painter, const QRect &rect, const QStyleOptionSlider *option);
-
-
-void paintScrollBarSlider(QPainter *painter, const QStyleOptionSlider *option)
-{
-	if (option->minimum == option->maximum) {
-		paintScrollArea(painter, option);
-		return;
-	}
-#if 0
-	// ### Qt behaviour differs between Slider and ScrollBar
-	QStyleOptionSlider aOption = *option;
-	if (!(option->activeSubControls & QStyle::SC_SliderHandle)) {
-		aOption.state &= ~QStyle::State_MouseOver;
-	}
-	paintSliderHandle(painter, option->rect, &aOption);
-#else
-	paintSliderHandle(painter, option->rect, option);
-#endif
-
-#if 0 // slider grip
-	QStyleOptionSlider grip = *option;
-	int d = (qMin(option->rect.width(), option->rect.height()) / 6) * 2 + 1;
-	grip.rect = QRect(option->rect.center() - QPoint(d / 2, d / 2), QSize(d, d));
-	paintCachedGrip(painter, &grip);
-#if 0
-	d += (d + 1) / 2;
-	if (option->orientation == Qt::Horizontal) {
-		grip.rect.adjust(d, 0, d, 0);
-		paintCachedGrip(painter, &grip);
-		grip.rect.adjust(- 2 * d, 0, - 2 * d, 0);
-		paintCachedGrip(painter, &grip);
-	} else {
-		grip.rect.adjust(0, d, 0, d);
-		paintCachedGrip(painter, &grip);
-		grip.rect.adjust(0, - 2 * d, 0, - 2 * d);
-		paintCachedGrip(painter, &grip);
-	}
-#endif
-#endif
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintScrollBar(QPainter *painter, const QStyleOptionSlider *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_ScrollBar, option, painter, widget);
-
-	QFrame *frame = 0;
-	if (widget && widget->parentWidget()) {
-		QWidget *container = widget->parentWidget();
-		if (container->inherits("Q3ListView")) {
-			if (option->orientation == Qt::Vertical) {
-				frame = qobject_cast<QFrame *>(container);
-			}
-		} else if (container->inherits("Q3Table")) {
-			frame = qobject_cast<QFrame *>(container);
-		} else if (container->parentWidget()) {
-			frame = qobject_cast<QAbstractScrollArea *>(container->parentWidget());
-		}
-	}
-	if (frame && frame->frameStyle() == (QFrame::StyledPanel | QFrame::Sunken)) {
-		QRect rect = option->rect;
-		if (option->orientation == Qt::Vertical) {
-			if (option->direction == Qt::LeftToRight) {
-				rect.adjust(-3, 0, 1, 0);
-			} else {
-				rect.adjust(-1, 0, 2, 0);
-			}
-			// ### temporary hack to detect corner widget
-			if (widget->height() == frame->height() - 4) {
-				rect.adjust(0, -1, 0, 1);
-			} else {
-				rect.adjust(0, -1, 0, 4);
-			}
-		} else {
-			rect.adjust(0, -3, 0, 1);
-			// ### temporary hack to detect corner widget
-			if (widget->width() == frame->width() - 4) {
-				rect.adjust(-1, 0, 1, 0);
-			} else {
-				if (option->direction == Qt::LeftToRight) {
-					rect.adjust(-1, 0, 4, 0);
-				} else {
-					rect.adjust(-4, 0, 1, 0);
-				}
-			}
-		}
-//		painter->fillRect(option->rect.adjusted(0, 0, 100, 100), Qt::red);
-//		return;
-#if 1
-		paintRecessedFrameShadow(painter, rect.adjusted(1, 1, -1, -1), RF_Small);
-#else
-		paintRecessedFrameShadow(painter, rect.adjusted(-1, 1, -1, -1), RF_Large);
-#endif
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-QRect subControlRectScrollBar(const QStyleOptionSlider *option, QStyle::SubControl subControl, const QWidget *widget, void */*data*/, int /*id*/, const QStyle *style)
-{
-	int maxsize;
-	if (option->orientation == Qt::Horizontal) {
-		maxsize = option->rect.width();
-	} else {
-		maxsize = option->rect.height();
-	}
-
-	int slidersize;
-	if (option->maximum != option->minimum) {
-		uint range = option->maximum - option->minimum;
-		slidersize = (qint64(option->pageStep) * maxsize) / (range + option->pageStep);
-
-		int slidermin = style->pixelMetric(QStyle::PM_ScrollBarSliderMin, option, widget);
-		if (slidermin > maxsize / 2) {
-			slidermin = maxsize / 2;
-		}
-		if (slidersize < slidermin || range > INT_MAX / 2) {
-			slidersize = slidermin;
-		}
-		if (slidersize > maxsize) {
-			slidersize = maxsize;
-		}
-	} else {
-		slidersize = maxsize;
-	}
-
-	int sliderpos = style->sliderPositionFromValue(option->minimum, option->maximum, option->sliderPosition, maxsize - slidersize, option->upsideDown);
-	int buttonsize = style->pixelMetric(QStyle::PM_ScrollBarExtent, option, widget);
-	buttonsize = qMin(maxsize / 2, buttonsize);
-	int pos, size;
-	switch (subControl) {
-		case QStyle::SC_ScrollBarGroove:
-			pos = 0;
-			size = maxsize;
-			break;
-		case QStyle::SC_ScrollBarSlider:
-			pos = sliderpos;
-			size = slidersize;
-			break;
-		case QStyle::SC_ScrollBarSubPage:
-			pos = buttonsize;
-			size = sliderpos - buttonsize;
-			break;
-		case QStyle::SC_ScrollBarAddPage:
-			pos = sliderpos + slidersize;
-			size = maxsize - sliderpos - slidersize - buttonsize;
-			break;
-		case QStyle::SC_ScrollBarSubLine:
-			pos = 0;
-			size = buttonsize;
-			//size = qMin(buttonsize, sliderpos);
-			break;
-		case QStyle::SC_ScrollBarAddLine:
-			size = buttonsize;
-			//size = qMin(buttonsize, maxsize - sliderpos - slidersize);
-			pos = maxsize - size;
-			break;
-		default:
-			pos = 0;
-			size = 0;
-			break;
-	}
-
-	QRect rect;
-	if (option->orientation == Qt::Horizontal) {
-		rect = QRect(pos, 0, size, option->rect.height());
-	} else {
-		rect = QRect(0, pos, option->rect.width(), size);
-	}
-	return style->visualRect(option->direction, option->rect, rect);
-}
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * Arrow positions:
- *	*    <*>    <*<>    *<>    <>*<>    <>*
- *
- */
-
-/*
- * skulpture_shadows.cpp
- *
- */
-
-#include "skulpture_p.h"
-//#include <QtGui/QFrame>
-#include <QtGui/QAbstractScrollArea>
-#include <QtGui/QMdiArea>
-//#include <q3scrollview.h>
-#include <QtGui/QApplication>
-#include <QtGui/QMouseEvent>
-#include <QtCore/QEvent>
-#include <QtGui/QPainter>
-#include <cstdio>
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * FrameShadow - overlay a shadow inside a frame
- *
- * This class is used to give the impression of sunken
- * frames that cast shadows over the contents inside.
- *
- * To create the shadow, call installFrameShadow()
- * on the sunken QFrame that you want the shadow
- * to be added to.
- *
- * Side-effects:
- *
- * Adds transparent widgets to the frame, which may
- * affect performance.
- *
- */
-
-FrameShadow::FrameShadow(QWidget *parent)
-	: QWidget(parent)
-{
-	init();
-}
-
-
-FrameShadow::FrameShadow(ShadowArea area, QWidget *parent)
-	: QWidget(parent)
-{
-	init();
-	area_ = area;
-}
-
-
-FrameShadow::~FrameShadow()
-{
-	/* */
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void SkulptureStyle::Private::installFrameShadow(QWidget *widget)
-{
-//	printf("adding shadow to %s\n", widget->metaObject()->className());
-	widget->installEventFilter(this);
-	removeFrameShadow(widget);
-	for (int i = 0; i < 4; ++i) {
-		FrameShadow *shadow = new FrameShadow(FrameShadow::ShadowArea(i));
-		shadow->hide();
-		shadow->setParent(widget);
-		shadow->updateGeometry();
-		shadow->show();
-	}
-}
-
-
-void SkulptureStyle::Private::removeFrameShadow(QWidget *widget)
-{
-	const QList<QObject *> shadows = widget->children();
-	foreach (QObject *child, shadows) {
-		FrameShadow *shadow;
-		if ((shadow = qobject_cast<FrameShadow *>(child))) {
-			shadow->hide();
-			shadow->setParent(0);
-			shadow->deleteLater();
-		}
-	}
-}
-
-
-void SkulptureStyle::Private::updateFrameShadow(QWidget *widget)
-{
-	const QList<QObject *> shadows = widget->children();
-	foreach (QObject *child, shadows) {
-		FrameShadow *shadow;
-		if ((shadow = qobject_cast<FrameShadow *>(child))) {
-			if (shadow->isVisible()) {
-				shadow->updateGeometry();
-			}
-		}
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-#define SHADOW_SIZE_TOP		4
-#define SHADOW_SIZE_BOTTOM	2
-#define SHADOW_SIZE_LEFT		4
-#define SHADOW_SIZE_RIGHT		4
-
-void FrameShadow::updateGeometry()
-{
-	QWidget *widget = parentWidget();
-	QRect cr = widget->contentsRect();
-
-//	printf("cr-top: %d in class %s\n", cr.top(), widget->metaObject()->className());
-	switch (shadowArea()) {
-		case FrameShadow::Top:
-			cr.setHeight(SHADOW_SIZE_TOP);
-			break;
-		case FrameShadow::Left:
-			cr.setWidth(SHADOW_SIZE_LEFT);
-			cr.adjust(0, SHADOW_SIZE_TOP, 0, -SHADOW_SIZE_BOTTOM);
-			break;
-		case FrameShadow::Bottom:
-			cr.setTop(cr.bottom() - SHADOW_SIZE_BOTTOM + 1);
-			break;
-		case FrameShadow::Right:
-			cr.setLeft(cr.right() - SHADOW_SIZE_RIGHT + 1);
-			cr.adjust(0, SHADOW_SIZE_TOP, 0, -SHADOW_SIZE_BOTTOM);
-			break;
-	}
-	setGeometry(cr);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-bool FrameShadow::event(QEvent *e)
-{
-	if (e->type() == QEvent::Paint) {
-		return QWidget::event(e);
-	}
-	QWidget *viewport = 0;
-	if (parentWidget()) {
-		if (QAbstractScrollArea *widget = qobject_cast<QAbstractScrollArea *>(parentWidget())) {
-			viewport = widget->viewport();
-		} else if (parentWidget()->inherits("Q3ScrollView")) {
-			// FIXME: get viewport? needs Qt3Support linkage!
-			viewport = 0;
-		} else {
-			viewport = 0;
-		}
-	}
-	if (!viewport) {
-		return false;
-	}
-
-#if 1
-	switch (e->type()) {
-		case QEvent::DragEnter:
-		case QEvent::DragMove:
-		case QEvent::DragLeave:
-			case QEvent::Drop: {
-				setAcceptDrops(viewport->acceptDrops());
-				QObject *o = viewport;
-				return o->event(e);
-			}
-			break;
-		case QEvent::Enter:
-			setCursor(viewport->cursor());
-			setAcceptDrops(viewport->acceptDrops());
-			break;
-			case QEvent::ContextMenu: {
-				QContextMenuEvent *me = reinterpret_cast<QContextMenuEvent *>(e);
-				QContextMenuEvent *ne = new QContextMenuEvent(me->reason(), parentWidget()->mapFromGlobal(me->globalPos()), me->globalPos());
-				QApplication::sendEvent(viewport, ne);
-				e->accept();
-				return true;
-			}
-			break;
-		case QEvent::MouseButtonPress:
-			releaseMouse();
-		case QEvent::MouseMove:
-			case QEvent::MouseButtonRelease: {
-				QMouseEvent *me = reinterpret_cast<QMouseEvent *>(e);
-				QMouseEvent *ne = new QMouseEvent(e->type(), parentWidget()->mapFromGlobal(me->globalPos()), me->globalPos(), me->button(), me->buttons(), me->modifiers());
-				QApplication::sendEvent(viewport, ne);
-				e->accept();
-				return true;
-			}
-			break;
-		case QEvent::Paint:
-			return QWidget::event(e);
-		default:
-			break;
-	}
-	e->ignore();
-	return false;
-#else
-	return QWidget::event(e);
-#endif
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void FrameShadow::paintEvent(QPaintEvent *)
-{
-	QPainter painter(this);
-	QWidget *parent = parentWidget();
-	QRect r = parent->contentsRect();
-	r.translate(mapFromParent(QPoint(0, 0)));
-//	painter.fillRect(QRect(-100, -100, 1000, 1000), Qt::red);
-	paintRecessedFrameShadow(&painter, r, RF_Large);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void FrameShadow::init()
-{
-//	setAttribute(Qt::WA_NoSystemBackground, true);
-//	setAttribute(Qt::WA_NoBackground, true);
-	setAttribute(Qt::WA_OpaquePaintEvent, false);
-	setFocusPolicy(Qt::NoFocus);
-	// TODO: check if this is private
-	setAttribute(Qt::WA_TransparentForMouseEvents, true);
-	setContextMenuPolicy(Qt::NoContextMenu);
-
-	QWidget *viewport;
-	if (parentWidget()) {
-		if (QAbstractScrollArea *widget = qobject_cast<QAbstractScrollArea *>(parentWidget())) {
-			setAcceptDrops(true);
-			viewport = widget->viewport();
-		} else if (parentWidget()->inherits("Q3ScrollView")) {
-			// FIXME: get viewport? needs Qt3Support linkage!
-			viewport = parentWidget();
-		} else {
-			viewport = 0;
-		}
-		if (viewport) {
-			setCursor(viewport->cursor());
-		}
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintRecessedFrameShadow(QPainter *painter, const QRect &rect, enum RecessedFrame rf)
-{
-	if (rf == RF_None) return;
-#if 1
-	int c1 = (rf == RF_Small) ? 10 : 10;
-	int c2 = (rf == RF_Small) ? 20 : 36;
-#else
-	int c1 = 0;
-	int c2 = 0;
-#endif
-#if 0
-	c1 += c1 >> 1;
-	c2 += c2 >> 1;
-	int intensityTop = c2;
-	int intensityLeft = c2;
-	int intensityBottom = c1;
-	int intensityRight = c1;
-#endif
-	QRect r = rect;
-	while (c1 > 3 || c2 > 3) {
-		QBrush brush1(QColor(0, 0, 0, c1));
-		QBrush brush2(QColor(0, 0, 0, c2));
-
-		painter->fillRect(QRect(rect.left(), r.top(), rect.width(), 1), brush2);
-		painter->fillRect(QRect(r.left(), rect.top(), 1, rect.height()), brush2);
-		painter->fillRect(QRect(rect.left(), r.bottom(), rect.width(), 1), brush1);
-		painter->fillRect(QRect(r.right(), rect.top(), 1, rect.height()), brush1);
-		c1 >>= 1; c2 >>= 1;
-//		c1 = int(c1 * 0.7); c2 = int(c2 * 0.7);
-		r.adjust(1, 1, -1, -1);
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * WidgetShadow - add a drop shadow to a widget
- *
- * This class renders a shadow below a widget, such
- * as a QMdiSubWindow.
- *
- */
-
-WidgetShadow::WidgetShadow(QWidget *parent)
-	: QWidget(parent)
-{
-	init();
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void WidgetShadow::init()
-{
-	setObjectName(QString::fromUtf8("WidgetShadow"));
-//	setAttribute(Qt::WA_NoSystemBackground, true);
-//	setAttribute(Qt::WA_NoBackground, true);
-	setAttribute(Qt::WA_OpaquePaintEvent, false);
-//	setAutoFillBackground(false);
-	setFocusPolicy(Qt::NoFocus);
-	// TODO: check if this is private
-	setAttribute(Qt::WA_TransparentForMouseEvents, true);
-//	setContextMenuPolicy(Qt::NoContextMenu);
-	widget_ = 0;
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-bool WidgetShadow::event(QEvent *e)
-{
-	switch (e->type())
-	{
-		case QEvent::Paint: if (widget_) {
-			QRect r(- 10, - 5, widget_->frameGeometry().width() + 20, widget_->frameGeometry().height() + 15);
-			r.translate(qMin(widget_->x(), 10), qMin(widget_->y(), 5));
-			QPainter p(this);
-			QRegion region(r);
-			region -= QRect(r.adjusted(10, 5, -10, -10));
-			p.setClipRegion(region);
-#if 0
-			for (int i = 0; i < 10; ++i) {
-			int k = 9 - i;
-			p.fillRect(r.adjusted(k, i, -k, -i), QColor(0, 0, 0, i));
-			p.fillRect(r.adjusted(i, k, -i, -k), QColor(0, 0, 0, i));
-		}
-#else
-			for (int i = 0; i < 10; ++i) {
-				p.fillRect(r, QColor(0, 0, 0, 2 + i));
-				r.adjust(1, 1, -1, -1);
-			}
-#endif
-			e->ignore();
-			return (true);
-		}
-		default:
-			break;
-	}
-	return QWidget::event(e);
-}
-
-
-void WidgetShadow::updateGeometry()
-{
-	if (widget_) {
-		if (widget_->isHidden()) {
-			hide();
-		} else {
-			QWidget *parent = parentWidget();
-			if (parent && !qobject_cast<QMdiArea *>(parent) && qobject_cast<QMdiArea *>(parent->parentWidget())) {
-				parent = parent->parentWidget();
-			}
-			if (parent) {
-				QRect geo(widget_->x() - 10, widget_->y() - 5, widget_->frameGeometry().width() + 20, widget_->frameGeometry().height() + 15);
-				setGeometry(geo & parent->rect());
-			}
-			show();
-		}
-	}
-}
-
-
-void WidgetShadow::updateZOrder()
-{
-	if (widget_) {
-		if (widget_->isHidden()) {
-			hide();
-		} else {
-			stackUnder(widget_);
-			QWidget *parent = parentWidget();
-			if (parent && !qobject_cast<QMdiArea *>(parent) && qobject_cast<QMdiArea *>(parent->parentWidget())) {
-				parent = parent->parentWidget();
-			}
-			if (parent) {
-				QRect geo(widget_->x() - 10, widget_->y() - 5, widget_->frameGeometry().width() + 20, widget_->frameGeometry().height() + 15);
-				setGeometry(geo & parent->rect());
-			}
-			show();
-		}
-	}
-}
-
-
-/*
- * skulpture_shortcuts.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QKeyEvent>
-#include <QtGui/QFocusEvent>
-#include <QtGui/QMenu>
-#include <QtGui/QMenuBar>
-#include <QtGui/QAbstractButton>
-#include <QtGui/QLabel>
-#include <QtGui/QDockWidget>
-#include <QtGui/QToolBox>
-#include <QtGui/QGroupBox>
-#include <QtGui/QTabBar>
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * Class to manage the applications keyboard shortcuts
- *
- * It acts as an eventfilter for the application, and does the following:
- *
- *	* the shortcuts are only underlined when the Alt key is pressed, and
- *		the underline is removed once it is released.
- *	* on many widgets the focus frame is not displayed if the focus was
- *		received using the mouse. It is, however, still displayed if
- *		you use the Tab key.
- *
- * Any other keyboard shortcut and focus issues should also be handled here.
- *
- */
-
-
-/*-----------------------------------------------------------------------*/
-
-bool ShortcutHandler::underlineShortcut(const QWidget *widget) const
-{
-	if (widget && widget->isEnabled()) {
-		if (alt_pressed.contains(widget->window())) {
-			return true;
-		}
-		if (qobject_cast<const QMenuBar *>(widget)) {
-			if (widget->hasFocus()) {
-				return true;
-			}
-			QList<QWidget *> children = qFindChildren<QWidget *>(widget);
-			foreach (QWidget *child, children) {
-				if (child->hasFocus()) {
-					return true;
-				}
-			}
-		}
-		if (qobject_cast<const QMenu *>(widget)) {
-			return true;
-		}
-	}
-	return false;
-}
-
-
-static inline bool hasShortcut(QWidget *widget)
-{
-	if (qobject_cast<const QAbstractButton *>(widget) // && (qobject_cast<const QAbstractButton *>(widget))->text.contains(QChar('&', 0))
-	 || qobject_cast<const QLabel *>(widget)
-	 || qobject_cast<const QDockWidget *>(widget)
-	 || qobject_cast<const QToolBox *>(widget)
-//	 || qobject_cast<const QMenu *>(widget)
-	 || qobject_cast<const QMenuBar *>(widget)
-	 || qobject_cast<const QGroupBox *>(widget) // && (qobject_cast<const QGroupBox *>(widget))->isCheckable()
-	 || qobject_cast<const QTabBar *>(widget)) {
-		return true;
-	}
-	return false;
-}
-
-
-static inline void updateShortcuts(QWidget *widget)
-{
-	QList<QWidget *> children = qFindChildren<QWidget *>(widget);
-	foreach (QWidget *child, children) {
-		if (child->isVisible() && hasShortcut(child)) {
-			child->update();
-		}
-	}
-}
-
-
-bool ShortcutHandler::eventFilter(QObject *watched, QEvent *event)
-{
-	// event filter may be called on the application, abort in this case
-	if (!watched->isWidgetType()) {
-		return QObject::eventFilter(watched, event);
-	}
-
-	QWidget *widget = reinterpret_cast<QWidget *>(watched);
-
-	switch (event->type()) {
-		case QEvent::FocusIn: {
-				Qt::FocusReason reason = ((QFocusEvent *) event)->reason();
-				if (reason != Qt::TabFocusReason && reason != Qt::BacktabFocusReason) {
-					QWidget *window = widget->window();
-					window->setAttribute(Qt::WA_KeyboardFocusChange, false);
-				}
-			}
-			break;
-		case QEvent::KeyPress:
-			if (((QKeyEvent *) event)->key() == Qt::Key_Alt) {
-				QWidget *window = widget->window();
-				if (!alt_pressed.contains(window)) {
-					alt_pressed.append(window);
-					window->installEventFilter(this);
-					updateShortcuts(window);
-				}
-			}
-			break;
-		case QEvent::Close:
-			if (widget->isWindow()) {
-				alt_pressed.removeAll(widget);
-				widget->removeEventFilter(this);
-			}
-			break;
-		case QEvent::WindowDeactivate:
-			if (widget->isWindow()) {
-				alt_pressed.removeAll(widget);
-				widget->removeEventFilter(this);
-				updateShortcuts(widget);
-			}
-			break;
-		case QEvent::KeyRelease:
-			if (((QKeyEvent *) event)->key() == Qt::Key_Alt) {
-				QWidget *window = widget->window();
-				if (alt_pressed.contains(window)) {
-					alt_pressed.removeAll(window);
-					window->removeEventFilter(this);
-					updateShortcuts(window);
-				}
-			}
-			break;
-		default:
-			break;
-	}
-	return QObject::eventFilter(watched, event);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-ShortcutHandler::ShortcutHandler(QObject *parent)
-	: QObject(parent)
-{
-	init();
-}
-
-
-ShortcutHandler::~ShortcutHandler()
-{
-
-}
-
-
-/*
- * skulpture_slider.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QAbstractSlider>
-#include <QtGui/QPainter>
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintSliderGroove(QPainter *painter, QRect &rect, const QStyleOptionSlider *option)
-{
-	if (option->orientation == Qt::Horizontal) {
-		int d = rect.height() / 2;
-		rect.adjust(0, d, 0, -d);
-	} else {
-		int d = rect.width() / 2;
-		rect.adjust(d, 0, -d, 0);
-	}
-	QColor color = option->palette.color(QPalette::Window);
-	if (option->state & QStyle::State_Enabled) {
-		color = color.dark(120);
-		painter->fillRect(rect, color);
-		paintThinFrame(painter, rect.adjusted(-1, -1, 1, 1), option->palette, -30, -90);
-	} else {
-		painter->fillRect(rect, color);
-		paintThinFrame(painter, rect.adjusted(-1, -1, 1, 1), option->palette, -20, -60);
-	}
-}
-
-
-void paintSliderHandle(QPainter *painter, const QRect &rect, const QStyleOptionSlider *option)
-{
-	// shadow
-	painter->fillRect(rect.adjusted(2, 2, 2, 2), QColor(0, 0, 0, 5));
-	painter->fillRect(rect.adjusted(1, 1, 1, 1), QColor(0, 0, 0, 8));
-	// slider color
-	QColor color = option->palette.color(QPalette::Button);
-	if (option->state & QStyle::State_Enabled) {
-		if (option->state & QStyle::State_Sunken) {
-			color = color.light(102);
-		} else if (option->state & QStyle::State_MouseOver) {
-			color = color.light(104);
-		}
-	} else {
-		color = option->palette.color(QPalette::Window);
-	}
-	painter->fillRect(rect, color);
-
-#if 1 // slider gradient
-	if ((option->state & QStyle::State_Enabled) && !(option->state & QStyle::State_Sunken)) {
-		QLinearGradient gradient;
-		gradient.setStart(rect.topLeft());
-		if (option->orientation == Qt::Horizontal) {
-			gradient.setFinalStop(rect.bottomLeft());
-		} else {
-			gradient.setFinalStop(rect.topRight());
-		}
-#if 1
-		// SkandaleStyle 0.0.2
-		gradient.setColorAt(0.0, shaded_color(color, 40));
-		gradient.setColorAt(0.5, shaded_color(color, -5));
-		gradient.setColorAt(1.0, shaded_color(color, 70));
-#else
-		// glassy
-		gradient.setColorAt(0.0, shaded_color(color, 40));
-		gradient.setColorAt(0.4, shaded_color(color, -5));
-		gradient.setColorAt(0.405, shaded_color(color, -15));
-		gradient.setColorAt(1.0, shaded_color(color, 70));
-#endif
-		painter->fillRect(rect, gradient);
-	}
-#endif
-	// slider frame
-	paintThinFrame(painter, rect, option->palette, -70, -20, QPalette::Button);
-	paintThinFrame(painter, rect.adjusted(1, 1, -1, -1), option->palette, -30, 130, QPalette::Button);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintSlider(QPainter *painter, const QStyleOptionSlider *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	// groove
-	if (option->subControls & QStyle::SC_SliderGroove) {
-	//	painter->fillRect(option->rect, option->palette.color(QPalette::Window).dark(105));
-	//	paintThinFrame(painter, option->rect, option->palette, 130, -30);
-#if 0
-		int handlesize = style->pixelMetric(QStyle::PM_SliderLength, option, widget);
-		int e = handlesize / 2 - 1;
-#else
-		int e = 1;
-#endif
-#if 0
-		QRect rect = option->rect;
-	//	QRect rect = style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderGroove, widget);
-		if (option->orientation == Qt::Horizontal) {
-			rect.adjust(e, 0, -e, 0);
-		} else {
-			rect.adjust(0, e, 0, -e);
-		}
-		paintSliderGroove(painter, rect, option);
-#else
-		QRect rect = style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderGroove, widget);
-		//QRect rect = option->rect;
-		QRect handle_rect = style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderHandle, widget);
-		QStyleOptionSlider aOption = *option;
-		aOption.palette.setColor(QPalette::Window, aOption.palette.color(QPalette::Highlight));
-		if (option->orientation == Qt::Horizontal) {
-			handle_rect.adjust(0, 2, 0, -2);
-			rect.adjust(e, 0, -e, 0);
-			rect.setWidth(handle_rect.left() - rect.left() - 1);
-			if (rect.width() > -3) {
-				paintSliderGroove(painter, rect, option->upsideDown ? option : &aOption);
-			}
-			rect.setLeft(handle_rect.right() + 2);
-			rect.setWidth(option->rect.right() - handle_rect.right() - 1 - e);
-			if (rect.width() > -3) {
-				paintSliderGroove(painter, rect, option->upsideDown ? &aOption : option);
-			}
-		} else {
-			handle_rect.adjust(2, 0, -2, 0);
-			rect.adjust(0, e, 0, -e);
-			rect.setHeight(handle_rect.top() - rect.top() - 1);
-			if (rect.height() > -3) {
-				paintSliderGroove(painter, rect, option->upsideDown ? option : &aOption);
-			}
-			rect.setTop(handle_rect.bottom() + 2);
-			rect.setHeight(option->rect.bottom() - handle_rect.bottom() - e);
-			if (rect.height() > -3) {
-				paintSliderGroove(painter, rect, option->upsideDown ? &aOption : option);
-			}
-		}
-#endif
-	}
-
-#if 1	// tickmarks
-	if (option->subControls & QStyle::SC_SliderTickmarks) {
-		qreal opacity = painter->opacity();
-		QStyleOptionSlider slider = *option;
-		slider.subControls = QStyle::SC_SliderTickmarks;
-		// ### for now, just use common tickmarks
-		painter->setOpacity(opacity * 0.2);
-		if (option->orientation == Qt::Horizontal) {
-			slider.rect.adjust(-1, 0, -1, 0);
-		} else {
-			slider.rect.adjust(0, -1, 0, -1);
-		}
-		((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_Slider, &slider, painter, widget);
-		slider.rect = option->rect;
-		QPalette palette = slider.palette;
-		palette.setColor(QPalette::WindowText, Qt::white);
-		slider.palette = palette;
-		painter->setOpacity(opacity * 0.3);
-		((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_Slider, &slider, painter, widget);
-		painter->setOpacity(opacity);
-	}
-#endif
-	// focus rect
-	if (option->state & QStyle::State_HasFocus) {
-		QStyleOptionFocusRect focus;
-		focus.QStyleOption::operator=(*option);
-		focus.rect = style->subElementRect(QStyle::SE_SliderFocusRect, option, widget);
-		focus.state |= QStyle::State_FocusAtBorder;
-		style->drawPrimitive(QStyle::PE_FrameFocusRect, &focus, painter, widget);
-	}
-
-	// handle
-	if (option->subControls & QStyle::SC_SliderHandle) {
-		QStyleOptionSlider aOption = *option;
-		if (!(option->activeSubControls & QStyle::SC_SliderHandle)) {
-			aOption.state &= ~QStyle::State_MouseOver;
-			aOption.state &= ~QStyle::State_Sunken;
-		}
-		QRect rect = style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderHandle, widget);
-		if (option->orientation == Qt::Horizontal) {
-			rect.adjust(0, 2, 0, -2);
-		} else {
-			rect.adjust(2, 0, -2, 0);
-		}
-#if 0
-		if (option->orientation == Qt::Horizontal) {
-			rect.setTop(option->rect.top());
-			rect.setHeight(option->rect.height());
-		//	rect.adjust(0, 1, 0, -1);
-		} else {
-			rect.setLeft(option->rect.left());
-			rect.setWidth(option->rect.width());
-		//	rect.adjust(1, 0, -1, 0);
-		}
-#endif
-	//	rect.adjust(0, 0, -1, -1);
-		paintSliderHandle(painter, rect, &aOption);
-	//	rect.adjust(0, 0, 1, 1);
-	//	paintThinFrame(painter, rect.adjusted(1, 1, 1, 1), option->palette, -20, 0);
-#if 0
-		// grip
-		const int o = 5;
-		const int s = 6;
-		if (option->orientation == Qt::Horizontal) {
-			int d = (rect.width() - 2) / 2;
-			rect.adjust(d, 0, -d, 0);
-			rect.translate(-s, 0);
-		} else {
-			int d = (rect.height() - 2) / 2;
-			rect.adjust(0, d, 0, -d);
-			rect.translate(0, -s);
-		}
-		for (int k = -1; k < 2; ++k) {
-			if (option->orientation == Qt::Horizontal) {
-				painter->fillRect(rect.adjusted(0, o, 0, -o), QColor(0, 0, 0, 30));
-				painter->fillRect(rect.adjusted(1, o, 1, -o), QColor(255, 255, 255, 80));
-				rect.translate(s, 0);
-			} else {
-				painter->fillRect(rect.adjusted(o, 0, -o, 0), QColor(0, 0, 0, 30));
-				painter->fillRect(rect.adjusted(o, 1, -o, 1), QColor(255, 255, 255, 80));
-				rect.translate(0, s);
-			}
-		}
-#endif
-	}
-#if 0
-	painter->fillRect(style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderGroove, widget), QColor(0, 0, 0, 70));
-	if (option->subControls & QStyle::SC_SliderGroove) {
-		painter->fillRect(style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderGroove, widget), QColor(255, 0, 0, 70));
-	}
-	if (option->subControls & QStyle::SC_SliderHandle) {
-		painter->fillRect(style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderHandle, widget), QColor(0, 100, 255, 70));
-	}
-	if (option->subControls & QStyle::SC_SliderTickmarks) {
-		painter->fillRect(style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderTickmarks, widget), QColor(0, 255, 0, 170));
-	}
-#endif
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-QRect subControlRectSlider(const QStyleOptionSlider *option, QStyle::SubControl subControl, const QWidget *widget, void */*data*/, int /*id*/, const QStyle *style)
-{
-	QRect rect = ((QCommonStyle *) style)->QCommonStyle::subControlRect(QStyle::CC_Slider, option, subControl, widget);
-	switch (subControl) {
-		case QStyle::SC_SliderGroove:
-		case QStyle::SC_SliderTickmarks:
-		case QStyle::SC_SliderHandle:
-		default:
-			break;
-	}
-	return rect;
-#if 0
-	/*
-	option->orientation
-	option->tickPosition: QSlider::TicksAbove | QSlider::TicksBelow
-	option->state
-	option->tickInterval
-	*/
-	switch (subControl) {
-		case SC_SliderGrove:
-		case SC_SliderTickmarks:
-		case SC_SliderHandle:
-	}
-#endif
-}
-
-
-/*
- * skulpture_spinbox.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QAbstractSpinBox>
-#include <QtGui/QPainter>
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintScrollArrow(QPainter *painter, const QStyleOption *option, Qt::ArrowType arrow, bool spin);
-
-void paintIndicatorSpinDown(QPainter *painter, const QStyleOption *option)
-{
-	paintScrollArrow(painter, option, Qt::DownArrow, true);
-}
-
-
-void paintIndicatorSpinUp(QPainter *painter, const QStyleOption *option)
-{
-	paintScrollArrow(painter, option, Qt::UpArrow, true);
-}
-
-
-void paintSpinBox(QPainter *painter, const QStyleOptionSpinBox *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	QStyleOption arrowOpt;
-
-	// arrow background
-	if (option->subControls & (QStyle::SC_SpinBoxUp | QStyle::SC_SpinBoxDown)) {
-		QRect r  = style->subControlRect(QStyle::CC_SpinBox, option, QStyle::SC_SpinBoxUp, widget);
-		r |= style->subControlRect(QStyle::CC_SpinBox, option, QStyle::SC_SpinBoxDown, widget);
-		QColor color = option->palette.color(QPalette::Base);
-		if (option->state & QStyle::State_Enabled) {
-			color = option->palette.color(QPalette::Window).lighter(107);
-		}
-		if (option->direction == Qt::LeftToRight) {
-			painter->fillRect(r.adjusted(0, 2, -2, -2), color);
-		} else {
-			painter->fillRect(r.adjusted(2, 2, 0, -2), color);
-		}
-	}
-
-	// arrows
-	if (true /* || option->state & QStyle::State_MouseOver && option->state & QStyle::State_Enabled*/) {
-		if (option->subControls & QStyle::SC_SpinBoxUp) {
-			arrowOpt.QStyleOption::operator=(*option);
-			arrowOpt.rect = style->subControlRect(QStyle::CC_SpinBox, option, QStyle::SC_SpinBoxUp, widget).adjusted(-1, 2, -2, -1);
-			if (!(option->stepEnabled & QAbstractSpinBox::StepUpEnabled)) {
-				arrowOpt.state &= ~(QStyle::State_Enabled | QStyle::State_MouseOver);
-				arrowOpt.palette.setCurrentColorGroup(QPalette::Disabled);
-			}
-			if (!(option->activeSubControls & QStyle::SC_SpinBoxUp)) {
-				arrowOpt.state &= ~(QStyle::State_Sunken | QStyle::State_On | QStyle::State_MouseOver);
-			}
-			if (option->direction == Qt::LeftToRight) {
-				arrowOpt.rect.adjust(1, 3, -2, 0);
-			} else {
-				arrowOpt.rect.adjust(4, 3, 1, 0);
-			}
-			style->drawPrimitive(option->buttonSymbols == QAbstractSpinBox::PlusMinus ? QStyle::PE_IndicatorSpinPlus : QStyle::PE_IndicatorSpinUp, &arrowOpt, painter, widget);
-		}
-		if (option->subControls & QStyle::SC_SpinBoxDown) {
-			arrowOpt.QStyleOption::operator=(*option);
-			arrowOpt.rect = style->subControlRect(QStyle::CC_SpinBox, option, QStyle::SC_SpinBoxDown, widget).adjusted(-1, 0, -2, -2);
-			if (!(option->stepEnabled & QAbstractSpinBox::StepDownEnabled)) {
-				arrowOpt.state &= ~(QStyle::State_Enabled | QStyle::State_MouseOver);
-				arrowOpt.palette.setCurrentColorGroup(QPalette::Disabled);
-			}
-			if (!(option->activeSubControls & QStyle::SC_SpinBoxDown)) {
-				arrowOpt.state &= ~(QStyle::State_Sunken | QStyle::State_On | QStyle::State_MouseOver);
-			}
-			if (option->direction == Qt::LeftToRight) {
-				arrowOpt.rect.adjust(1, 0, -2, -2);
-			} else {
-				arrowOpt.rect.adjust(4, 0, 1, -2);
-			}
-			style->drawPrimitive(option->buttonSymbols == QAbstractSpinBox::PlusMinus ? QStyle::PE_IndicatorSpinMinus : QStyle::PE_IndicatorSpinDown, &arrowOpt, painter, widget);
-		}
-	}
-
-	// frame
-	if (option->frame && (option->subControls & QStyle::SC_SpinBoxFrame)) {
-		QStyleOptionFrame frameOpt;
-		frameOpt.QStyleOption::operator=(*option);
-		frameOpt.rect = style->subControlRect(QStyle::CC_SpinBox, option, QStyle::SC_SpinBoxFrame, widget);
-		frameOpt.state |= QStyle::State_Sunken;
-		frameOpt.lineWidth = style->pixelMetric(QStyle::PM_SpinBoxFrameWidth, &frameOpt, widget);
-		frameOpt.midLineWidth = 0;
-		style->drawPrimitive(QStyle::PE_FrameLineEdit, &frameOpt, painter, widget);
-	}
-}
-
-
-/*
- * skulpture_tabs.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <cstdio>
-
-
-/*-----------------------------------------------------------------------*/
-
-enum Pos { North, South, West, East };
-
-static inline Pos tabPos(QTabBar::Shape shape)
-{
-	return Pos(int(shape) & 3);
-}
-
-static inline bool isVertical(QTabBar::Shape shape)
-{
-	return (int(shape) & 2);
-}
-
-struct Affinity {
-	int x1, y1, x2, y2;
-};
-
-static inline void tabAffinity(QTabBar::Shape shape, Affinity &affinity, int amount)
-{
-	affinity.x1 = affinity.y1 = affinity.x2 = affinity.y2 = 0;
-	switch (tabPos(shape)) {
-		case North:	affinity.y1 = amount;	break;
-		case South:	affinity.y2 = -amount;	break;
-		case West:	affinity.x1 = amount;	break;
-		case East:		affinity.x2 = -amount;	break;
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-static void paintTabBase(QPainter *painter, const QRect &rect, const QStyleOption *option, QTabBar::Shape shape)
-{
-	if (true /*option->state & QStyle::State_Enabled*/) {
-		QLinearGradient tabGradient(rect.topLeft(), isVertical(shape) ? rect.topRight() : rect.bottomLeft());
-		tabGradient.setColorAt(0.0, option->palette.color(QPalette::Window).darker(118));
-		tabGradient.setColorAt(1.0, option->palette.color(QPalette::Window).darker(105));
-		painter->fillRect(rect.adjusted(1, 1, -1, -1), tabGradient);
-	} else {
-		painter->fillRect(rect.adjusted(1, 1, -1, -1), option->palette.color(QPalette::Window).darker(106));
-	}
-	paintThinFrame(painter, rect.adjusted(1, 1, -1, -1), option->palette, -20, -40);
-	paintRecessedFrameShadow(painter, rect.adjusted(2, 2, -2, -2), RF_Small);
-}
-
-
-void paintFrameTabBarBase(QPainter *painter, const QStyleOptionTabBarBase *option)
-{
-	// ### remove clipping
-	painter->save();
-	QRect r = option->rect;
-	r = r.united(option->tabBarRect);
-	QRegion region(r);
-	region -= option->tabBarRect;
-	painter->setClipRegion(region);
-	paintTabBase(painter, r, option, option->shape);
-	QRect rect = r;
-#if 0
-	Affinity affinity;
-	tabAffinity(option->shape, affinity, 1);
-	rect.adjust(affinity.x2, affinity.y2, affinity.x1, affinity.y1);
-#endif
-	paintThinFrame(painter, rect, option->palette, 60, -20);
-	painter->restore();
-}
-
-
-void paintTabWidgetFrame(QPainter *painter, const QStyleOptionTabWidgetFrame *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget)
-{
-	Q_UNUSED(widget);
-
-	QRect base = option->rect;
-	int s = (isVertical(option->shape) ? option->tabBarSize.width() : option->tabBarSize.height());
-	if (s < 2) s = 2;
-	if (isVertical(option->shape)) {
-		base.setWidth(s);
-	} else {
-		base.setHeight(s);
-	}
-	const int overlap = 2;
-	switch (tabPos(option->shape)) {
-		case North:	base.translate(0, -(s - overlap));	break;
-		case West:	base.translate(-(s - overlap), 0);	break;
-		case South:	base.translate(0, option->rect.height() - overlap);	break;
-		case East:		base.translate(option->rect.width() - overlap, 0);	break;
-	}
-	if (s != 2) {
-		paintTabBase(painter, base, option, option->shape);
-	}
-
-	Affinity affinity;
-	tabAffinity(option->shape, affinity, -(s - overlap));
-//	painter->save();
-//	painter->setClipRect(base);
-	paintThinFrame(painter, option->rect.adjusted(affinity.x1, affinity.y1, affinity.x2, affinity.y2), option->palette, 60, -20);
-	paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -50, 160);
-#if 0
-	QRect r = option->rect.adjusted(2, 2, -2, -2);
-	painter->fillRect(r, option->palette.color(QPalette::Window));
-	QLinearGradient gradient(r.topLeft(), r.bottomLeft());
-	gradient.setColorAt(0.0, QColor(255, 255, 255, 0));
-	gradient.setColorAt(1.0, QColor(0, 0, 0, 20));
-	painter->fillRect(r, gradient);
-#endif
-//	painter->restore();
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-#define TAB_SHIFT 1
-
-void paintTabBarTabShape(QPainter *painter, const QStyleOptionTab *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	Q_UNUSED(style);
-	bool mouse = (option->state & QStyle::State_MouseOver) && !(option->state & QStyle::State_Selected) && (option->state & QStyle::State_Enabled);
-	QRect c_rect = option->rect;
-	bool konq = false;
-
-	if (widget && widget->parentWidget()) {
-		if (!qstrcmp(widget->metaObject()->className(), "KTabBar") && !qstrcmp(widget->parentWidget()->metaObject()->className(), "KonqFrameTabs")) {
-			konq = true;
-		}
-	}
-	if (konq || (widget && (!(widget->parentWidget()) || !(widget->parentWidget()->inherits("QTabWidget"))))) {
-		// ### remove clipping
-		painter->save();
-		painter->setClipRect(option->rect);
-		QRect rect = widget->rect();
-		if (konq) {
-			rect.adjust(-10, 0, 10, 0);
-		}
-		paintTabBase(painter, rect, option, option->shape);
-#if 0
-		Affinity affinity;
-		tabAffinity(option->shape, affinity, 1);
-		rect.adjust(affinity.x2, affinity.y2, affinity.x1, affinity.y1);
-#endif
-		paintThinFrame(painter, rect, option->palette, 60, -20);
-		painter->restore();
-	}
-
-	switch (tabPos(option->shape)) {
-	case North:
-		c_rect.adjust(1, 1, -2, 0);
-		if (option->position != QStyleOptionTab::Beginning
-		&& option->position != QStyleOptionTab::OnlyOneTab) {
-			c_rect.adjust(-1, 0, 0, 0);
-		}
-		if (option->state & QStyle::State_Selected) {
-			painter->fillRect(c_rect.adjusted(0, 0, -1, 0), option->palette.color(QPalette::Window));
-			if (option->state & QStyle::State_Enabled) {
-				QLinearGradient gradient(c_rect.topLeft(), c_rect.bottomLeft());
-#if 0
-				QColor c = option->palette.color(QPalette::Highlight);
-				gradient.setColorAt(0.0, c);
-				gradient.setColorAt(0.2, QColor(255, 255, 255, 20));
-				gradient.setColorAt(1.0, QColor(255, 255, 255, 0));
-#else
-				gradient.setColorAt(0.0, shaded_color(option->palette.color(QPalette::Window), 20));
-				gradient.setColorAt(1.0, shaded_color(option->palette.color(QPalette::Window), 0));
-#endif
-				painter->fillRect(c_rect.adjusted(0, 0, -1, 0), gradient);
-			}
-			// ### flat tabs: 50->20, 180->80
-		//	painter->fillRect(c_rect, QColor(255, 0, 0, 100));
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, 1);
-			paintThinFrame(painter, c_rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1), option->palette, -50, 180);
-			// shadows
-			painter->fillRect(QRect(c_rect.right() + 1, c_rect.top(), 1, c_rect.height()), QColor(0, 0, 0, 25));
-			painter->fillRect(QRect(c_rect.right() + 2, c_rect.top(), 1, c_rect.height()), QColor(0, 0, 0, 10));
-		} else {
-			// ### install clip
-			painter->save();
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, -1);
-			painter->setClipRect(option->rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1));
-
-			painter->fillRect(c_rect.adjusted(1, mouse ? 1 : 2, -1, -1), mouse ? option->palette.color(QPalette::Window).darker(104) : option->palette.color(QPalette::Window).darker(108));
-			paintThinFrame(painter, c_rect.adjusted(1, mouse ? 1 : 2, -1, 1), option->palette, -40, 90);
-			// shadows
-			painter->fillRect(QRect(c_rect.right(), c_rect.top() + 3, 1, c_rect.height() - 4), QColor(0, 0, 0, 15));
-			painter->fillRect(QRect(c_rect.right() + 1, c_rect.top() + 3, 1, c_rect.height() - 4), QColor(0, 0, 0, 5));
-
-			painter->restore();
-			// shadow below base
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.bottom() - 1, c_rect.width() - 2, 1), QColor(0, 0, 0, 10));
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.bottom() - 2, c_rect.width() - 2, 1), QColor(0, 0, 0, 4));
-		}
-		break;
-	case South:
-		c_rect.adjust(1, 0, -2, -1);
-		if (option->position != QStyleOptionTab::Beginning
-		 && option->position != QStyleOptionTab::OnlyOneTab) {
-			c_rect.adjust(-1, 0, 0, 0);
-		}
-		if (option->state & QStyle::State_Selected) {
-			painter->fillRect(c_rect.adjusted(0, 0, -1, 0), option->palette.color(QPalette::Window));
-			if (option->state & QStyle::State_Enabled) {
-				QLinearGradient gradient(c_rect.topLeft(), c_rect.bottomLeft());
-				gradient.setColorAt(0.0, shaded_color(option->palette.color(QPalette::Window), 0));
-				gradient.setColorAt(1.0, shaded_color(option->palette.color(QPalette::Window), -5));
-				painter->fillRect(c_rect.adjusted(0, 0, -1, 0), gradient);
-			}
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, 1);
-			paintThinFrame(painter, c_rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1), option->palette, -50, 180);
-			//paintThinFrame(painter, c_rect.adjusted(0, -1, 0, 0), option->palette, -50, 180);
-			// shadows
-			painter->fillRect(QRect(c_rect.right() + 1, c_rect.top() + 1, 1, c_rect.height() - 1), QColor(0, 0, 0, 25));
-			painter->fillRect(QRect(c_rect.right() + 2, c_rect.top() + 1, 1, c_rect.height() - 1), QColor(0, 0, 0, 10));
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.bottom() + 1, c_rect.width(), 1), QColor(0, 0, 0, 20));
-		} else {
-			// ### install clip
-			painter->save();
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, -1);
-			painter->setClipRect(option->rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1));
-
-			painter->fillRect(c_rect.adjusted(1, 1, -1, mouse ? -1 : -2), mouse ? option->palette.color(QPalette::Window).darker(104) : option->palette.color(QPalette::Window).darker(108));
-			paintThinFrame(painter, c_rect.adjusted(1, -1, -1, mouse ? -1 : -2), option->palette, -40, 90);
-			// shadows
-			painter->fillRect(QRect(c_rect.right(), c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 15));
-			painter->fillRect(QRect(c_rect.right() + 1, c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 5));
-			if (!mouse) {
-				painter->fillRect(QRect(c_rect.left() + 2, c_rect.bottom() - 1, c_rect.width() - 3, 1), QColor(0, 0, 0, 10));
-			}
-
-			painter->restore();
-			// shadow below base
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.top() + 1, c_rect.width() - 2, 1), QColor(0, 0, 0, 30));
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.top() + 2, c_rect.width() - 2, 1), QColor(0, 0, 0, 15));
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.top() + 3, c_rect.width() - 2, 1), QColor(0, 0, 0, 8));
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.top() + 4, c_rect.width() - 2, 1), QColor(0, 0, 0, 4));
-		}
-		break;
-	case West:
-		c_rect.adjust(1, 1, 0, -2);
-		if (option->state & QStyle::State_Selected) {
-			painter->fillRect(c_rect.adjusted(0, 0, 0, -1), option->palette.color(QPalette::Window));
-			if (option->state & QStyle::State_Enabled) {
-				QLinearGradient gradient(c_rect.topLeft(), c_rect.topRight());
-				gradient.setColorAt(0.0, shaded_color(option->palette.color(QPalette::Window), 20));
-				gradient.setColorAt(1.0, shaded_color(option->palette.color(QPalette::Window), 0));
-				painter->fillRect(c_rect.adjusted(0, 0, 0, -1), gradient);
-			}
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, 1);
-			paintThinFrame(painter, c_rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1), option->palette, -50, 180);
-			// shadows
-			painter->fillRect(QRect(c_rect.left(), c_rect.bottom() + 1, c_rect.width(), 1), QColor(0, 0, 0, 25));
-			painter->fillRect(QRect(c_rect.left(), c_rect.bottom() + 2, c_rect.width(), 1), QColor(0, 0, 0, 10));
-		} else {
-			// ### install clip
-			painter->save();
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, -1);
-			painter->setClipRect(option->rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1));
-			painter->fillRect(c_rect.adjusted(mouse ? 1 : 2, 1, 1, -1), mouse ? option->palette.color(QPalette::Window).darker(104) : option->palette.color(QPalette::Window).darker(108));
-			paintThinFrame(painter, c_rect.adjusted(mouse ? 1 : 2, 1, 1, -1), option->palette, -40, 90);
-			// shadows
-			painter->fillRect(QRect(c_rect.left() + 2, c_rect.bottom() + 0, c_rect.width() - 3, 1), QColor(0, 0, 0, 15));
-			painter->fillRect(QRect(c_rect.left() + 2, c_rect.bottom() + 1, c_rect.width() - 3, 1), QColor(0, 0, 0, 5));
-
-			painter->restore();
-			// shadow below base
-			painter->fillRect(QRect(c_rect.right() - 1, c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 10));
-			painter->fillRect(QRect(c_rect.right() - 2, c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 4));
-		}
-		break;
-	case East:
-		c_rect.adjust(0, 1, -1, -2);
-		if (option->state & QStyle::State_Selected) {
-			painter->fillRect(c_rect.adjusted(0, 0, 0, -1), option->palette.color(QPalette::Window));
-			if (option->state & QStyle::State_Enabled) {
-				QLinearGradient gradient(c_rect.topLeft(), c_rect.topRight());
-				gradient.setColorAt(0.0, shaded_color(option->palette.color(QPalette::Window), 0));
-				gradient.setColorAt(1.0, shaded_color(option->palette.color(QPalette::Window), 10));
-				painter->fillRect(c_rect.adjusted(0, 0, 0, -1), gradient);
-			}
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, 1);
-			paintThinFrame(painter, c_rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1), option->palette, -50, 180);
-			// shadows
-			painter->fillRect(QRect(c_rect.left(), c_rect.bottom() + 1, c_rect.width(), 1), QColor(0, 0, 0, 25));
-			painter->fillRect(QRect(c_rect.left(), c_rect.bottom() + 2, c_rect.width(), 1), QColor(0, 0, 0, 10));
-			painter->fillRect(QRect(c_rect.right() + 1, c_rect.top() + 1, 1, c_rect.height()), QColor(0, 0, 0, 20));
-		} else {
-			// ### install clip
-			painter->save();
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, -1);
-			painter->setClipRect(option->rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1));
-			painter->fillRect(c_rect.adjusted(-2, 1, mouse ? -1 : -2, -1), mouse ? option->palette.color(QPalette::Window).darker(104) : option->palette.color(QPalette::Window).darker(108));
-			paintThinFrame(painter, c_rect.adjusted(-2, 1, mouse ? -1 : -2, -1), option->palette, -40, 90);
-			// shadows
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.bottom() + 0, c_rect.width() - 3, 1), QColor(0, 0, 0, 15));
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.bottom() + 1, c_rect.width() - 3, 1), QColor(0, 0, 0, 5));
-
-			painter->restore();
-			// shadow below base
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 20));
-			painter->fillRect(QRect(c_rect.left() + 2, c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 10));
-			painter->fillRect(QRect(c_rect.left() + 3, c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 5));
-		//	painter->fillRect(QRect(c_rect.left() + 4, c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 4));
-		}
-		break;
-	}
-}
-
-
-void paintTabBarTabLabel(QPainter *painter, const QStyleOptionTab *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-//	bool mouse = (option->state & QStyle::State_MouseOver) && !(option->state & QStyle::State_Selected) && (option->state & QStyle::State_Enabled);
-//	painter->save();
-#if 0
-	if (!(option->state & QStyle::State_Selected)) {
-		if (mouse) {
-			painter->setOpacity(0.7);
-		} else {
-			painter->setOpacity(0.5);
-		}
-	} else {
-		painter->setOpacity(0.8);
-	}
-//	QFont font(painter->font());
-//	font.setBold(true);
-//	painter->setFont(font);
-#endif
-	QStyleOptionTabV2 opt;
-
-	int offset = TAB_SHIFT;
-	if (option->state & QStyle::State_Selected || (option->state & QStyle::State_MouseOver && option->state & QStyle::State_Enabled)) {
-		offset = 0;
-	}
-
-	if (option->version > 1) {
-		opt = *((QStyleOptionTabV2 *) option);
-	} else {
-		opt = *option;
-	}
-	Affinity affinity;
-	tabAffinity(option->shape, affinity, offset);
-	opt.rect.translate(affinity.x1 + affinity.x2, affinity.y1 + affinity.y2);
-	switch (tabPos(option->shape)) {
-	case North:
-		opt.rect.adjust(3, 1, -6, 1);
-		break;
-	case South:
-		opt.rect.adjust(3, 0, -6, 0);
-		break;
-	case West:
-	case East:
-		painter->save();
-		QMatrix mat;
-		if (tabPos(option->shape) == West) {
-			opt.rect.adjust(3, 4, 3, -4);
-		} else {
-			opt.rect.adjust(-1, 4, -1, -4);
-		}
-		QPointF c = opt.rect.center();
-		mat.translate(c.x(), c.y());
-		mat.rotate(tabPos(option->shape) == West ? -90 : 90);
-		mat.translate(-c.x(), -c.y());
-		opt.rect = mat.mapRect(opt.rect);
-		painter->setMatrix(mat, true);
-		opt.shape = (QTabBar::Shape) 0;
-		break;
-	}
-	((QCommonStyle *) style)->QCommonStyle::drawControl(QStyle::CE_TabBarTabLabel, &opt, painter, widget);
-	if (isVertical(option->shape)) {
-		painter->restore();
-	}
-}
-
-/*-----------------------------------------------------------------------*/
-#if 0
-class IconTextLabel
-{
-	QString text;
-	QIcon icon;
-	QSize iconSize;
-	Qt::Orientation orientation;
-};
-
-
-static void paintIconTextLabel(QPainter *painter, const QRect &rect, const IconTextLabel &label)
-{
-
-}
-#endif
-
-/*
- * skulpture_text.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QTextEdit>
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-#include <QtGui/QPlainTextEdit>
-#endif
-#include <QtGui/QTextBrowser>
-#include <QtGui/QTextFrame>
-#include <QtGui/QScrollBar>
-#include <cstdio>
-
-
-/*-----------------------------------------------------------------------*/
-
-#define HIGHLIGHT_VMARGIN	2
-
-void SkulptureStyle::Private::highlightCurrentEditLine(QAbstractScrollArea *edit, const QRect &cursorRect)
-{
-	QRect cursorLine = cursorRect;
-	cursorLine.setLeft(0);
-	cursorLine.setWidth(edit->viewport()->width());
-	cursorLine.adjust(0, - HIGHLIGHT_VMARGIN, 0, HIGHLIGHT_VMARGIN);
-	cursorLine.translate(edit->horizontalScrollBar()->value(), edit->verticalScrollBar()->value());
-	cursorLine.moveTop(cursorLine.top() % edit->height());
-	if (cursorRect.top() < HIGHLIGHT_VMARGIN) {
-		cursorLine.setTop(cursorLine.top() + HIGHLIGHT_VMARGIN - cursorRect.top());
-	}
-	if (cursorRect.bottom() + HIGHLIGHT_VMARGIN > edit->rect().bottom()) {
-		cursorLine.setBottom(cursorLine.bottom() - cursorRect.bottom() - HIGHLIGHT_VMARGIN + edit->rect().bottom());
-	}
-	if (edit != oldEdit || cursorLine.top() != oldCursorTop
-		   || cursorLine.width() != oldCursorWidth
-		   || cursorLine.height() != oldCursorHeight
-		   || edit->viewport()->height() != oldHeight
-		   || edit->palette() != oldPalette) {
-		oldEdit = edit;
-		oldCursorTop = cursorLine.top();
-		oldCursorWidth = cursorLine.width();
-		oldCursorHeight = cursorLine.height();
-		oldHeight = edit->viewport()->height();
-		oldPalette = edit->palette();
-		QPixmap pixmap(edit->size());
-		QPalette palette = edit->palette();
-		pixmap.fill(palette.color(QPalette::Base));
-		QPainter painter(&pixmap);
-		QColor color;
-		bool wrap = false;
-		do {
-			color = palette.color(QPalette::Highlight);
-			color.setAlpha(40);
-		//	color.setHsvF(palette.color(QPalette::Highlight).hueF(), 0.05, 0.97);
-			painter.fillRect(cursorLine, color);
-			if (edit->window()->testAttribute(Qt::WA_KeyboardFocusChange)) {
-				color = palette.color(QPalette::Highlight).dark(120);
-				color.setAlpha(120);
-				painter.fillRect(cursorLine.adjusted(0, cursorLine.height() - 3, 0, -2), color);
-			}
-			if (!wrap) {
-				if (cursorLine.bottom() > edit->rect().bottom()) {
-					cursorLine.translate(0, -edit->height());
-					wrap = true;
-				}
-			} else {
-				wrap = false;
-			}
-		} while (wrap);
-		QBrush brush(pixmap);
-		palette.setBrush(QPalette::Base, brush);
-		edit->viewport()->setPalette(palette);
-	}
-}
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-void SkulptureStyle::Private::highlightCurrentEditLine(QPlainTextEdit *edit)
-{
-	if (edit->hasFocus() && !edit->isReadOnly() && edit->cursorRect().intersects(edit->rect())) {
-		QStyleOption option;
-		option.initFrom(edit);
-		int cursorWidth = q->SkulptureStyle::pixelMetric(PM_TextCursorWidth, &option, edit);
-		if (edit->cursorWidth() != cursorWidth) {
-			edit->setCursorWidth(cursorWidth);
-		}
-		highlightCurrentEditLine(edit, edit->cursorRect());
-	} else {
-		QPalette palette = edit->palette();
-		edit->viewport()->setPalette(palette);
-		oldEdit = 0;
-	}
-}
-#endif
-
-void SkulptureStyle::Private::highlightCurrentEditLine(QTextEdit *edit)
-{
-	if (edit->hasFocus() && !edit->isReadOnly() && edit->cursorRect().intersects(edit->rect())) {
-		QStyleOption option;
-		option.initFrom(edit);
-		int cursorWidth = q->SkulptureStyle::pixelMetric(PM_TextCursorWidth, &option, edit);
-		if (edit->cursorWidth() != cursorWidth) {
-			edit->setCursorWidth(cursorWidth);
-		}
-		highlightCurrentEditLine(edit, edit->cursorRect());
-	} else {
-		QPalette palette = edit->palette();
-		edit->viewport()->setPalette(palette);
-		oldEdit = 0;
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void SkulptureStyle::Private::updateTextEditMargins(QTextEdit *edit)
-{
-	int margin = 1 + edit->fontMetrics().height() / 5;
-	if (margin > 4) margin = 4;
-	if (qobject_cast<QTextBrowser *>(edit)) {
-		margin = edit->fontMetrics().height();
-		if (margin < 4 || edit->height() < 4 * edit->fontMetrics().height()) {
-			margin = 4;
-		}
-	}
-	if (margin < 2 || edit->height() < 2 * edit->fontMetrics().height()) {
-		margin = 2;
-	}
-	QTextDocument *doc = edit->document();
-//	printf("doc: %p\n", doc);
-	if (!doc) return;
-	if (doc->isEmpty()) {
-		// create valid root frame
-		QTextCursor cursor(doc);
-	}
-
-	QTextFrame *root = doc->rootFrame();
-//	printf("root: %p\n", root);
-	if (!root) return;
-
-	QTextFrameFormat format = root->frameFormat();
-	if (!format.isValid()) return;
-
-	if (format.margin() == 2.0 && margin != 2) {
-	//	printf("set margin %d\n", margin);
-		// ### crash on setText(), disable signals
-		disconnect(edit, SIGNAL(textChanged()), &mapper, SLOT(map()));
-		doc->blockSignals(true);
-		format.setMargin(margin);
-		root->setFrameFormat(format);
-	//	edit->insertPlainText(QString::fromUtf8(""));
-	//	edit->update();
-		doc->blockSignals(false);
-		connect(edit, SIGNAL(textChanged()), &mapper, SLOT(map()));
-		// clear undo buffer
-		bool undo = edit->isUndoRedoEnabled();
-		edit->setUndoRedoEnabled(false);
-		doc->setModified(false);
-	//	emit doc->contentsChanged();
-		edit->setUndoRedoEnabled(undo);
-		// force relayout
-		edit->resize(edit->size() + QSize(-1, 0));
-		edit->resize(edit->size() + QSize(1, 0));
-	}
-}
-
-
-void SkulptureStyle::Private::textEditSourceChanged(QWidget *widget)
-{
-	if (QTextEdit *edit = qobject_cast<QTextEdit *>(widget)) {
-		updateTextEditMargins(edit);
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-QRect SkulptureStyle::itemTextRect(const QFontMetrics &metrics, const QRect &rectangle, int alignment, bool enabled, const QString &text) const
-{
-	Q_UNUSED(enabled);
-	return ParentStyle::itemTextRect(metrics, rectangle, alignment, true, text);
-//	return ParentStyle::itemTextRect(metrics, rectangle, alignment, enabled, text);
-}
-
-
-void SkulptureStyle::drawItemText(QPainter * painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString &text, QPalette::ColorRole textRole) const
-{
-	if (1 || enabled) {
-	//	painter->save();
-	//	QFont font = painter->font();
-	//	font.setStretch(600);
-	//	painter->setFont(font);
-	//	painter->scale(1/24.0, 1);
-#if 0
-		if (enabled) {
-			painter->save();
-			painter->setPen(QColor(255, 255, 255, 100));
-			ParentStyle::drawItemText(painter, rectangle.adjusted(1, 1, 1, 1), alignment, palette, enabled, text, QPalette::NoRole);
-			painter->restore();
-		}
-#endif
-		ParentStyle::drawItemText(painter, rectangle, alignment, palette, enabled, text, textRole);
-	//	painter->restore();
-	} else {
-		QImage image(rectangle.size() + QSize(4, 4), QImage::Format_ARGB32_Premultiplied);
-		image.fill(0);
-		QPainter p(&image);
-		p.setFont(painter->font());
-		p.setPen(painter->pen());
-
-		ParentStyle::drawItemText(&p, QRect(QPoint(3, 3), rectangle.size()), alignment, palette, enabled, text, QPalette::Light);
-//		ParentStyle::drawItemText(&p, QRect(QPoint(1, 3), rectangle.size()), alignment, palette, enabled, text, QPalette::Light);
-//		ParentStyle::drawItemText(&p, QRect(QPoint(3, 1), rectangle.size()), alignment, palette, enabled, text, QPalette::Light);
-//		ParentStyle::drawItemText(&p, QRect(QPoint(1, 1), rectangle.size()), alignment, palette, enabled, text, QPalette::Light);
-//		filterImage(image, 0.5);
-		ParentStyle::drawItemText(&p, QRect(QPoint(2, 2), rectangle.size()), alignment, palette, enabled, text, textRole);
-//		filterImage(image, 0.75);
-		painter->drawImage(rectangle.topLeft() - QPoint(2, 2), image);
-	}
-}
-
-
-/*
- * skulpture_toolbar.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QToolBar>
-#include <QtGui/QToolButton>
-#include <QtGui/QTabBar>
-#include <cstdio>
-
-
-/*-----------------------------------------------------------------------*/
-
-#define PAINT_SEPARATOR 0
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintToolBarSeparator(QPainter *painter, const QStyleOptionToolBar *option)
-{
-#if PAINT_SEPARATOR
-	QRect rect = option->rect;
-
-	if (option->state & QStyle::State_Horizontal) {
-	//	rect.adjust(2, 3, -2, -3);
-		rect.adjust(2, -1, -2, 1);
-	} else {
-	//	rect.adjust(3, 2, -3, -2);
-		rect.adjust(-1, 2, 1, -2);
-	}
-	paintThinFrame(painter, rect, option->palette, 60, -20);
-#else
-	Q_UNUSED(painter);
-	Q_UNUSED(option);
-#endif
-}
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintCachedGrip(QPainter *painter, const QStyleOption *option, QPalette::ColorRole bgrole);
-
-void paintToolBarHandle(QPainter *painter, const QStyleOptionToolBar *option)
-{
-#if 1
-	int d = 5;
-	QRect rect(QRect(option->rect).center() - QPoint(d / 2, d / 2), QSize(d, d));
-	QStyleOption iOption;
-	iOption.QStyleOption::operator=(*option);
-	iOption.rect = rect;
-	iOption.palette.setCurrentColorGroup(QPalette::Disabled);
-//	iOption.state &= ~QStyle::State_Enabled;
-	iOption.palette.setColor(QPalette::Button, iOption.palette.color(QPalette::Window));
-	paintCachedGrip(painter, &iOption, QPalette::Window);
-#else
-	QRect rect = option->rect;
-
-	if (option->state & QStyle::State_Horizontal) {
-		rect.adjust(2, 2, -2, -2);
-#if PAINT_SEPARATOR
-		rect.adjust(0, 1, 0, 1);
-#endif
-	} else {
-		rect.adjust(2, 2, -2, -2);
-#if PAINT_SEPARATOR
-		rect.adjust(1, 0, 1, 0);
-#endif
-	}
-	paintThinFrame(painter, rect.adjusted(-1, -1, 1, 1), option->palette, 60, -20);
-	paintThinFrame(painter, rect, option->palette, -30, 80);
-#endif
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintPanelToolBar(QPainter *painter, const QStyleOptionToolBar *option)
-{
-//	painter->fillRect(option->rect, option->palette.color(QPalette::Window));
-//	paintThinFrame(painter, option->rect, option->palette, -20, 60);
-#if PAINT_SEPARATOR
-	QRect r = option->rect;
-	if (option->state & QStyle::State_Horizontal) {
-		r.setHeight(2);
-	} else {
-		r.setWidth(2);
-	}
-	paintThinFrame(painter, r, option->palette, 60, -20);
-#else
-	Q_UNUSED(painter);
-	Q_UNUSED(option);
-#endif
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-static inline bool inVerticalToolBar(const QStyleOption *option, const QWidget *widget)
-{
-	// ### option->state does not reflect orientation
-	Q_UNUSED(option);
-	bool verticalBar = false;
-
-	if (widget && widget->parentWidget()) {
-		const QToolBar *toolBar = qobject_cast<const QToolBar *>(widget->parentWidget());
-		//	printf("toolbar: %p\n", toolBar);
-		if (toolBar && toolBar->orientation() == Qt::Vertical) {
-			verticalBar = true;
-		}
-	}
-	return verticalBar;
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintToolButton(QPainter *painter, const QStyleOptionToolButton *option, QPalette::ColorRole bgrole, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style)
-{
-	Q_UNUSED(bgrole);
-
-	if (widget) {
-		QTabBar *bar = qobject_cast<QTabBar *>(widget->parentWidget());
-		if (bar) {
-			// tabbar scroll button
-			QStyleOptionToolButton opt = *option;
-			if (int(bar->shape()) & 2) {
-				opt.rect.adjust(4, 0, -4, -1);
-			} else {
-				opt.rect.adjust(0, 4, 0, -3);
-			}
-			painter->save();
-			painter->setClipRect(opt.rect);
-			painter->fillRect(opt.rect, option->palette.color(QPalette::Window));
-			((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_ToolButton, &opt, painter, widget);
-			painter->restore();
-			return;
-		} else if (widget->objectName() == QLatin1String("qt_menubar_ext_button") || widget->objectName() == QLatin1String("qt_toolbar_ext_button")) {
-			QStyleOptionToolButton opt = *option;
-			/* do not render menu arrow, because extension buttons already have an arrow */
-			opt.features &= ~(QStyleOptionToolButton::Menu | QStyleOptionToolButton::HasMenu);
-			((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_ToolButton, &opt, painter, widget);
-			return;
-		}
-	}
-	if (option->features & QStyleOptionToolButton::HasMenu) {
-		if (option->features & QStyleOptionToolButton::Menu) {
-			if (option->subControls & QStyle::SC_ToolButton) {
-				painter->save();
-				QStyleOptionToolButton opt = *option;
-				opt.rect = style->subControlRect(QStyle::CC_ToolButton, option, QStyle::SC_ToolButton, widget);
-				// opt.features &= ~(QStyleOptionToolButton::Menu | QStyleOptionToolButton::HasMenu | QStyleOptionToolButton::Arrow);
-				opt.arrowType = Qt::NoArrow;
-				opt.features = 0;
-				opt.subControls &= ~(QStyle::SC_ToolButtonMenu);
-				opt.activeSubControls &= ~(QStyle::SC_ToolButtonMenu);
-				if (inVerticalToolBar(option, widget)) {
-					painter->setClipRect(opt.rect.adjusted(0, 0, 0, -1));
-				} else {
-					painter->setClipRect(opt.rect.adjusted(option->direction == Qt::LeftToRight ? 0 : 1, 0, option->direction == Qt::LeftToRight ? -1 : 0, 0));
-				}
-				((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_ToolButton, &opt, painter, widget);
-				painter->restore();
-			}
-			if (option->subControls & QStyle::SC_ToolButtonMenu) {
-				painter->save();
-				QStyleOptionToolButton opt = *option;
-				opt.rect = style->subControlRect(QStyle::CC_ToolButton, option, QStyle::SC_ToolButtonMenu, widget);
-				QStyle::State state = option->state;
-				state &= ~(QStyle::State_Sunken | QStyle::State_Raised);
-				if (!(state & QStyle::State_AutoRaise) || (state & QStyle::State_MouseOver)) {
-					state |= QStyle::State_Raised;
-				}
-				if (option->activeSubControls & QStyle::SC_ToolButtonMenu) {
-					state |= QStyle::State_Sunken;
-				}
-				opt.state = state;
-				if (inVerticalToolBar(option, widget)) {
-					painter->setClipRect(opt.rect.adjusted(0, 1, 0, 0));
-				} else {
-					painter->setClipRect(opt.rect.adjusted(option->direction == Qt::LeftToRight ? 1 : 0, 0, option->direction == Qt::LeftToRight ? 0 : -1, 0));
-				}
-				if (state & (QStyle::State_Sunken | QStyle::State_On | QStyle::State_Raised)) {
-					style->drawPrimitive(QStyle::PE_PanelButtonTool, &opt, painter, widget);
-				}
-				painter->restore();
-				QRect r;
-				if (inVerticalToolBar(option, widget)) {
-					if (option->direction == Qt::LeftToRight) {
-						r = QRect(opt.rect.right() - 9, opt.rect.top(), 7, opt.rect.height());
-					} else {
-						r = QRect(3, opt.rect.top(), 7, opt.rect.height());
-					}
-				} else {
-					r = QRect(opt.rect.left(), opt.rect.bottom() - 9, opt.rect.width(), 7);
-				}
-				if (option->state & QStyle::State_Sunken) {
-					if (option->direction == Qt::LeftToRight) {
-						r.adjust(1, 1, 1, 1);
-					} else {
-						r.adjust(-1, 1, -1, 1);
-					}
-				}
-				QFont font;
-				font.setPixelSize(9);
-				opt.fontMetrics = QFontMetrics(font);
-				opt.rect = r;
-				style->drawPrimitive(inVerticalToolBar(option, widget) ? QStyle::PE_IndicatorArrowRight : QStyle::PE_IndicatorArrowDown, &opt, painter, widget);
-			}
-		//	painter->fillRect(opt.rect.adjusted(3, 3, -3, -3), Qt::red);
-		} else {
-			QStyleOptionToolButton opt = *option;
-			opt.features &= ~QStyleOptionToolButton::HasMenu;
-			((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_ToolButton, &opt, painter, widget);
-			QRect r;
-			if (option->direction == Qt::LeftToRight) {
-				r = QRect(option->rect.right() - 6, option->rect.bottom() - 6, 5, 5);
-				if (option->state & QStyle::State_Sunken) {
-					r.adjust(1, 1, 1, 1);
-				}
-			} else {
-				r = QRect(2, option->rect.bottom() - 6, 5, 5);
-				if (option->state & QStyle::State_Sunken) {
-					r.adjust(-1, 1, -1, 1);
-				}
-			}
-			QFont font;
-			font.setPixelSize(7);
-			opt.fontMetrics = QFontMetrics(font);
-			opt.rect = r;
-			style->drawPrimitive(inVerticalToolBar(option, widget) ? QStyle::PE_IndicatorArrowRight : QStyle::PE_IndicatorArrowDown, &opt, painter, widget);
-		}
-	} else {
-		((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_ToolButton, option, painter, widget);
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-QRect subControlRectToolButton(const QStyleOptionToolButton *option, QStyle::SubControl subControl, const QWidget *widget, void */*data*/, int /*id*/, const QStyle *style)
-{
-	QRect r = option->rect;
-
-	if (option->features & QStyleOptionToolButton::Menu) {
-		int pm = style->pixelMetric(QStyle::PM_MenuButtonIndicator, option, widget) - 2;
-		bool verticalBar = inVerticalToolBar(option, widget);
-		switch (subControl) {
-			case QStyle::SC_ToolButton:
-				if (verticalBar) {
-					r.adjust(0, 0, 0, -pm);
-				} else {
-					r.adjust(0, 0, -pm, 0);
-				}
-				break;
-			case QStyle::SC_ToolButtonMenu:
-				if (verticalBar) {
-					r.adjust(0, r.height() - pm - 2, 0, 0);
-				} else {
-					r.adjust(r.width() - pm - 2, 0, 0, 0);
-				}
-				break;
-			default:
-				break;
-		}
-		return style->visualRect(option->direction, option->rect, r);
-	}
-	return ((QPlastiqueStyle *) style)->QPlastiqueStyle::subControlRect(QStyle::CC_ToolButton, option, subControl, widget);
-}
-
-
-extern QSize sizeFromContentsToolButton(const QStyleOptionToolButton *option, const QSize &contentsSize, const QWidget *widget, const QStyle *style)
-{
-	QSize size = ((QPlastiqueStyle *) style)->QPlastiqueStyle::sizeFromContents(QStyle::CT_ToolButton, option, contentsSize, widget);
-
-	if (widget && !qstrcmp(widget->metaObject()->className(), "KAnimatedButton")) {
-		return size - QSize(4, 4);
-	}
-	if (option->features & QStyleOptionToolButton::Menu) {
-		int pm = style->pixelMetric(QStyle::PM_MenuButtonIndicator, option, widget);
-		size -= QSize(pm, 0);
-		pm -= 2;
-		bool verticalBar = inVerticalToolBar(option, widget);
-
-		if (verticalBar) {
-			size += QSize(0, pm);
-		} else {
-			size += QSize(pm, 0);
-		}
-	}
-	return size;
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void SkulptureStyle::Private::updateToolBarOrientation(Qt::Orientation /*orientation */)
-{
-	QToolBar *toolbar = static_cast<QToolBar *>(sender());
-	QList<QToolButton *> toolbuttons = toolbar->findChildren<QToolButton *>();
-	bool changed = false;
-
-	foreach (QToolButton *toolbutton, toolbuttons) {
-		if (toolbutton->popupMode() == QToolButton::MenuButtonPopup) {
-			// ### this hack forces Qt to invalidate the size hint
-			Qt::ToolButtonStyle oldstyle = toolbutton->toolButtonStyle();
-			Qt::ToolButtonStyle newstyle;
-			if (oldstyle == Qt::ToolButtonIconOnly) {
-				newstyle = Qt::ToolButtonTextOnly;
-			} else {
-				newstyle = Qt::ToolButtonIconOnly;
-			}
-			toolbutton->setToolButtonStyle(newstyle);
-			toolbutton->setToolButtonStyle(oldstyle);
-			changed = true;
-		}
-	}
-	if (changed) {
-		// ### Qt does not update dragged toolbars...
-		toolbar->updateGeometry();
-	}
-}
-
-
-/*
- * skulpture_p.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtCore/QSettings>
-#include <QtCore/QLocale>
-#include <QtGui/QFrame>
-#include <QtGui/QMainWindow>
-#include <QtGui/QApplication>
-#include <QtGui/QToolBar>
-#include <cstdio>
-
-
-/*-----------------------------------------------------------------------*/
-
-struct StyleSetting
-{
-	enum Type {
-		Bool,
-  		Char,
-    		Frame,
-       		Alignment,
-	  	Orientation,
-     		Pixels,
-        	Points,
-	  	Milliseconds,
-     		Color,
-       		Size,
-	 	Parent,
-   		Value
-	};
-
-	const char * const label;
-	int id;
-	int type;
-	int value;
-};
-
-
-static const struct StyleSetting styleSettings[] =
-{
-// changed from defaults
-// { "TabWidget/TabBarAlignment", QStyle::SH_TabBar_Alignment, StyleSetting::Alignment, Qt::AlignCenter },
-// { "GroupBox/TextLabelColor", QStyle::SH_GroupBox_TextLabelColor, StyleSetting::Color, 0xFF000000 },
-// { "ItemView/GridLineColor", QStyle::SH_Table_GridLineColor, StyleSetting::Color, 0xFFD0D0D0 },
- { "Menu/SubMenuPopupDelay", QStyle::SH_Menu_SubMenuPopupDelay, StyleSetting::Milliseconds, 80 },
-// { "General/FullWidthSelection", QStyle::SH_RichText_FullWidthSelection, StyleSetting::Bool, 1 },
- { "LineEdit/PasswordCharacter", QStyle::SH_LineEdit_PasswordCharacter, StyleSetting::Char, 10039 },  /* other useful values: 9096; 10039; 9679; 8226; 9055; 9675; 9642; 9643; 9674; 9675; 9688; 9689; 9633; 9632; 9702; 9733; 9830; 9786; */
-// { "Dialog/ButtonsHaveIcons", QStyle::SH_DialogButtonBox_ButtonsHaveIcons, StyleSetting::Bool, 0 },
-// { "ItemView/ActivateItemOnSingleClick", QStyle::SH_ItemView_ActivateItemOnSingleClick, StyleSetting::Bool, 1 },
-// { "ItemView/FrameOnlyAroundContents", QStyle::SH_ScrollView_FrameOnlyAroundContents, StyleSetting::Bool, 0 },
-// { "General/UnderlineShortcut", QStyle::SH_UnderlineShortcut, StyleSetting::Bool, 0 },
-// { "ToolBox/SelectedPageTitleBold", QStyle::SH_ToolBox_SelectedPageTitleBold, StyleSetting::Bool, false },
-#if 0 // configurable
- { "General/EtchDisabledText", QStyle::SH_EtchDisabledText, StyleSetting::Parent, 0 },
- { "General/DitherDisabledText", QStyle::SH_DitherDisabledText, StyleSetting::Parent, 0 },
- { "ScrollBar/ContextMenu", QStyle::SH_ScrollBar_ContextMenu, StyleSetting::Parent, 0 },
- { "ScrollBar/MiddleClickAbsolutePosition", QStyle::SH_ScrollBar_MiddleClickAbsolutePosition, StyleSetting::Parent, 0 },
- { "ScrollBar/LeftClickAbsolutePosition", QStyle::SH_ScrollBar_LeftClickAbsolutePosition, StyleSetting::Parent, 0 },
- { "ScrollBar/ScrollWhenPointerLeavesControl", QStyle::SH_ScrollBar_ScrollWhenPointerLeavesControl, StyleSetting::Parent, 0 },
- { "ScrollBar/RollBetweenButtons", QStyle::SH_ScrollBar_RollBetweenButtons, StyleSetting::Parent, 0 },
- { "TabWidget/TabBarAlignment", QStyle::SH_TabBar_Alignment, StyleSetting::Parent, 0 },
- { "ItemView/HeaderArrowAlignment", QStyle::SH_Header_ArrowAlignment, StyleSetting::Parent, 0 },
- { "Slider/SnapToValue", QStyle::SH_Slider_SnapToValue, StyleSetting::Parent, 0 },
- { "Slider/SloppyKeyEvents", QStyle::SH_Slider_SloppyKeyEvents, StyleSetting::Parent, 0 },
- { "ProgressDialog/CenterCancelButton", QStyle::SH_ProgressDialog_CenterCancelButton, StyleSetting::Parent, 0 },
- { "ProgressDialog/TextLabelAlignment", QStyle::SH_ProgressDialog_TextLabelAlignment, StyleSetting::Parent, 0 },
- { "PrintDialog/RightAlignButtons", QStyle::SH_PrintDialog_RightAlignButtons, StyleSetting::Parent, 0 },
- { "Window/SpaceBelowMenuBar", QStyle::SH_MainWindow_SpaceBelowMenuBar, StyleSetting::Parent, 0 },
- { "FontDialog/SelectAssociatedText", QStyle::SH_FontDialog_SelectAssociatedText, StyleSetting::Parent, 0 },
- { "Menu/KeyboardSearch", QStyle::SH_Menu_KeyboardSearch, StyleSetting::Parent, 0 },
- { "Menu/AllowActiveAndDisabled", QStyle::SH_Menu_AllowActiveAndDisabled, StyleSetting::Parent, 0 },
- { "Menu/SpaceActivatesItem", QStyle::SH_Menu_SpaceActivatesItem, StyleSetting::Parent, 0 },
- { "Menu/Scrollable", QStyle::SH_Menu_Scrollable, StyleSetting::Parent, 0 },
- { "Menu/SloppySubMenus", QStyle::SH_Menu_SloppySubMenus, StyleSetting::Parent, 0 },
- { "Menu/AltKeyNavigation", QStyle::SH_MenuBar_AltKeyNavigation, StyleSetting::Parent, 0 },
- { "ComboBox/ListMouseTracking", QStyle::SH_ComboBox_ListMouseTracking, StyleSetting::Parent, 0 },
- { "Menu/MouseTracking", QStyle::SH_Menu_MouseTracking, StyleSetting::Parent, 0 },
- { "Menu/BarMouseTracking", QStyle::SH_MenuBar_MouseTracking, StyleSetting::Parent, 0 },
- { "Menu/FillScreenWithScroll", QStyle::SH_Menu_FillScreenWithScroll, StyleSetting::Parent, 0 },
- { "Menu/SelectionWrap", QStyle::SH_Menu_SelectionWrap, StyleSetting::Parent, 0 },
- { "ItemView/ChangeHighlightOnFocus", QStyle::SH_ItemView_ChangeHighlightOnFocus, StyleSetting::Parent, 0 },
- { "Window/ShareActivation", QStyle::SH_Widget_ShareActivation, StyleSetting::Parent, 0 },
- { "TabWidget/SelectMouseType", QStyle::SH_TabBar_SelectMouseType, StyleSetting::Parent, 0 },
- { "ItemView/Compat/ExpansionSelectMouseType", QStyle::SH_Q3ListViewExpand_SelectMouseType, StyleSetting::Parent, 0 },
- { "TabWidget/TabBarPreferNoArrows", QStyle::SH_TabBar_PreferNoArrows, StyleSetting::Parent, 0 },
- { "ComboBox/Popup", QStyle::SH_ComboBox_Popup, StyleSetting::Parent, 0 },
- { "MDI/Workspace/FillSpaceOnMaximize", QStyle::SH_Workspace_FillSpaceOnMaximize, StyleSetting::Parent, 0 },
- { "Slider/StopMouseOverSlider", QStyle::SH_Slider_StopMouseOverSlider, StyleSetting::Parent, 0 },
- { "General/BlinkCursorWhenTextSelected", QStyle::SH_BlinkCursorWhenTextSelected, StyleSetting::Parent, 0 },
- { "GroupBox/TextLabelVerticalAlignment", QStyle::SH_GroupBox_TextLabelVerticalAlignment, StyleSetting::Parent, 0 },
- { "Dialog/DefaultButton", QStyle::SH_DialogButtons_DefaultButton, StyleSetting::Parent, 0 },
- { "General/SpellCheckUnderlineStyle", QStyle::SH_SpellCheckUnderlineStyle, StyleSetting::Parent, 0 },
- { "SpinBox/AnimateButton", QStyle::SH_SpinBox_AnimateButton, StyleSetting::Parent, 0 },
- { "SpinBox/KeyPressAutoRepeatRate", QStyle::SH_SpinBox_KeyPressAutoRepeatRate, StyleSetting::Parent, 0 },
- { "SpinBox/ClickAutoRepeatRate", QStyle::SH_SpinBox_ClickAutoRepeatRate, StyleSetting::Parent, 0 },
- { "ToolTip/Opacity", QStyle::SH_ToolTipLabel_Opacity, StyleSetting::Parent, 0 },
- { "Menu/DrawMenuBarSeparator", QStyle::SH_DrawMenuBarSeparator, StyleSetting::Parent, 0 },
- { "MDI/TitleBar/ModifyNotification", QStyle::SH_TitleBar_ModifyNotification, StyleSetting::Parent, 0 },
- { "Button/FocusPolicy", QStyle::SH_Button_FocusPolicy, StyleSetting::Parent, 0 },
- { "Menu/DismissOnSecondClick", QStyle::SH_MenuBar_DismissOnSecondClick, StyleSetting::Parent, 0 },
- { "MessageBox/UseBorderForButtonSpacing", QStyle::SH_MessageBox_UseBorderForButtonSpacing, StyleSetting::Parent, 0 },
- { "MessageBox/CenterButtons", QStyle::SH_MessageBox_CenterButtons, StyleSetting::Parent, 0 },
- { "MessageBox/AllowTextInteraction", QStyle::SH_MessageBox_TextInteractionFlags, StyleSetting::Parent, 0 },
- { "MDI/TitleBar/AutoRaise", QStyle::SH_TitleBar_AutoRaise, StyleSetting::Parent, 0 },
- { "ToolBar/PopupDelay", QStyle::SH_ToolButton_PopupDelay, StyleSetting::Parent, 0 },
- { "SpinBox/DisableControlsOnBounds", QStyle::SH_SpinControls_DisableOnBounds, StyleSetting::Parent, 0 },
- { "ComboBox/LayoutDirection", QStyle::SH_ComboBox_LayoutDirection, StyleSetting::Parent, 0 },
- { "ItemView/EllipsisLocation", QStyle::SH_ItemView_EllipsisLocation, StyleSetting::Parent, 0 },
- { "ItemView/ShowDecorationSelected", QStyle::SH_ItemView_ShowDecorationSelected, StyleSetting::Parent, 0 },
- { "Slider/AbsoluteSetButtons", QStyle::SH_Slider_AbsoluteSetButtons, StyleSetting::Parent, 0 },
- { "Slider/PageSetButtons", QStyle::SH_Slider_PageSetButtons, StyleSetting::Parent, 0 },
- { "TabWidget/ElideMode", QStyle::SH_TabBar_ElideMode, StyleSetting::Parent, 0 },
- { "Dialog/ButtonLayout", QStyle::SH_DialogButtonLayout, StyleSetting::Parent, 0 },
- { "ComboBox/PopupFrameStyle", QStyle::SH_ComboBox_PopupFrameStyle, StyleSetting::Parent, 0 },
- { "ItemView/MovementWithoutUpdatingSelection", QStyle::SH_ItemView_MovementWithoutUpdatingSelection, StyleSetting::Parent, 0 },
- { "General/FocusFrameAboveWidget", QStyle::SH_FocusFrame_AboveWidget, StyleSetting::Parent, 0 },
- { "General/FocusIndicatorTextCharFormat", QStyle::SH_TextControl_FocusIndicatorTextCharFormat, StyleSetting::Parent, 0 },
-#endif
-#if 0 // not configurable
-// GUIStyle ???
- { "General/FocusFrameMask", QStyle::SH_FocusFrame_Mask, StyleSetting::Parent, 0 },
- { "General/RubberBandMask", QStyle::SH_RubberBand_Mask, StyleSetting::Parent, 0 },
- { "General/WindowFrameMask", QStyle::SH_WindowFrame_Mask, StyleSetting::Parent, 0 },
- { "MDI/TitleBar/NoBorder", QStyle::SH_TitleBar_NoBorder, StyleSetting::Parent, 0 },
- { "Dial/BackgroundRole", QStyle::SH_Dial_BackgroundRole, StyleSetting::Parent, 0 },
- { "ScrollBar/BackgroundMode", QStyle::SH_ScrollBar_BackgroundMode, StyleSetting::Parent, 0 },
- { "General/ToolTipMask", QStyle::SH_ToolTip_Mask, StyleSetting::Parent, 0 },
-#endif
-#if 0
- // New for SkulptureStyle (not supported yet)
- { "LineEdit/EnableClearButton", -1, StyleSetting::Bool, 1 },
- { "LineEdit/ClearButtonExtent", -1, StyleSetting::Pixels, 20 },
- { "LineEdit/ClearButtonIconSize", -1, StyleSetting::Size, 12 },
- { "General/HighlightCursorLine", -1, StyleSetting::Bool, 1 },
- { "General/HighlightCursorLineWithoutFocus", -1, StyleSetting::Bool, 1 },
- { "General/UnderlineShortcutWhenAltPressed", -1, StyleSetting::Bool, 1 },
-#endif
- { 0, -1, 0, 0 }
-};
-
-
-extern int getRubberBandMask(QStyleHintReturnMask *mask, const QStyleOption *option, const QWidget *widget);
-extern int getWindowFrameMask(QStyleHintReturnMask *mask, const QStyleOptionTitleBar *option, const QWidget *widget);
-
-int SkulptureStyle::styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const
-{
-//	return ParentStyle::styleHint(hint, option, widget, returnData);
-	// TODO implement caching
-	const StyleSetting *setting = &styleSettings[0];
-	QVariant value;
-
-	switch (hint) {
-		case QStyle::SH_Table_GridLineColor: {
-				QColor bgcolor;
-				if (option) {
-					bgcolor = option->palette.color(QPalette::Base);
-				} else {
-					bgcolor = QApplication::palette().color(QPalette::Base);
-				}
-				QColor color = bgcolor.dark(120);
-				int r, g, b, a;
-				color.getRgb(&r, &g, &b, &a);
-				return (int) qRgba(r, g, b, a);
-			}
-/*		case QStyle::SH_ComboBox_ListMouseTracking:
-			return true;
-*/		case QStyle::SH_UnderlineShortcut:
-			if (d->hideShortcutUnderlines) {
-				return (d->shortcut_handler->underlineShortcut(widget));
-			} else {
-				return true;
-			}
-		case QStyle::SH_TitleBar_NoBorder:
-			return 0;
-		case QStyle::SH_RubberBand_Mask: {
-				QStyleHintReturnMask *mask = qstyleoption_cast<QStyleHintReturnMask *>(returnData);
-				if (mask) {
-					return getRubberBandMask(mask, option, widget);
-				}
-			}
-			return 0;
-		case QStyle::SH_WindowFrame_Mask: {
-				QStyleHintReturnMask *mask = qstyleoption_cast<QStyleHintReturnMask *>(returnData);
-				const QStyleOptionTitleBar *titleBarOption = qstyleoption_cast<const QStyleOptionTitleBar *>(option);
-				if (mask && titleBarOption) {
-					return getWindowFrameMask(mask, titleBarOption, widget);
-				}
-			}
-			return 0;
-		case QStyle::SH_MainWindow_SpaceBelowMenuBar: {
-#if 0
-				if (widget) {
-					QMainWindow *window = qobject_cast<QMainWindow *>(widget->parentWidget());
-					if (window) {
-						QList<QToolBar *> toolBars = window->findChildren<QToolBar *>();
-						foreach (QToolBar *toolBar, toolBars) {
-							if (window->toolBarArea(toolBar) == Qt::TopToolBarArea) {
-								if (!toolBar->isFloating()) {
-									printf("has top toolbar\n");
-									return 2;
-								}
-							}
-						}
-					}
-				}
-#endif
-			}
-			return 0;
-		default:
-			break;
-	}
-
-	while (setting->label) {
-		if (setting->id == int(hint)) {
-			break;
-		}
-		++setting;
-	}
-	if (setting->label) {
-		value = setting->value;
-		switch (setting->type) {
-			case StyleSetting::Parent:
-				value = ParentStyle::styleHint(hint, option, widget, returnData);
-				break;
-			case StyleSetting::Bool:
-				value = setting->value != 0;
-				break;
-			case StyleSetting::Char:
-				value = QString(QChar(setting->value));
-				break;
-			case StyleSetting::Color:
-				value = QChar('#', 0) + QString::number(value.toInt() - qRgba(0, 0, 0, 255), 16);
-				break;
-		}
-	} else {
-		value = ParentStyle::styleHint(hint, option, widget, returnData);
-		setting = 0;
-	}
-#if 1
-	if (setting && d->settings && setting->type != StyleSetting::Parent && !d->settings->contains(QString::fromAscii(setting->label))) {
-		d->settings->setValue(QString::fromAscii(setting->label), value);
-	}
-#endif
-	if (setting) {
-		if (d->settings) {
-			value = d->settings->value(QString::fromAscii(setting->label), value);
-		}
-		switch (setting->type) {
-			case StyleSetting::Color:
-				value = qRgba(0, 0, 0, 255) + QLocale::c().toInt(value.toString().mid(1), 0, 16);
-				break;
-			case StyleSetting::Bool:
-				value = value.toBool();
-				break;
-			case StyleSetting::Char:
-				QString s = value.toString();
-				if (s.size() == 1) {
-					return s.at(0).unicode();
-				}
-				return setting->value;
-		}
-	}
-	return value.toInt();
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintNothing(QPainter */*painter*/, const QStyleOption */*option*/)
-{
-	//
-}
-
-
-void paintDefault(QPainter */*painter*/, const QStyleOption */*option*/)
-{
-	//
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintCommandButtonPanel(QPainter *painter, const QStyleOptionButton *option, QPalette::ColorRole bgrole);
-void paintPushButtonBevel(QPainter *painter, const QStyleOptionButton *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole fgrole, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintTabWidgetFrame(QPainter *painter, const QStyleOptionTabWidgetFrame *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget);
-void paintIndicatorCheckBox(QPainter *painter, const QStyleOptionButton *option);
-void paintIndicatorRadioButton(QPainter *painter, const QStyleOptionButton *option);
-void paintIndicatorSpinDown(QPainter *painter, const QStyleOption *option);
-void paintIndicatorSpinUp(QPainter *painter, const QStyleOption *option);
-void paintIndicatorArrowDown(QPainter *painter, const QStyleOption *option);
-void paintIndicatorArrowLeft(QPainter *painter, const QStyleOption *option);
-void paintIndicatorArrowRight(QPainter *painter, const QStyleOption *option);
-void paintIndicatorArrowUp(QPainter *painter, const QStyleOption *option);
-void paintHeaderSortIndicator(QPainter *painter, const QStyleOptionHeader *option);
-void paintStyledFrame(QPainter *painter, const QStyleOptionFrame *frame, QPalette::ColorRole bgrole, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintFrameLineEdit(QPainter *painter, const QStyleOptionFrame *frame);
-void paintPanelLineEdit(QPainter *painter, const QStyleOptionFrame *frame, QPalette::ColorRole bgrole, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget);
-void paintFrameDockWidget(QPainter *painter, const QStyleOptionFrame *frame);
-void paintFrameWindow(QPainter *painter, const QStyleOptionFrame *frame);
-void paintToolBarSeparator(QPainter *painter, const QStyleOptionToolBar *option);
-void paintToolBarHandle(QPainter *painter, const QStyleOptionToolBar *option);
-void paintScrollArea(QPainter *painter, const QStyleOption *option);
-void paintPanelToolBar(QPainter *painter, const QStyleOptionToolBar *option);
-void paintIndicatorMenuCheckMark(QPainter *painter, const QStyleOptionMenuItem *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintFrameGroupBox(QPainter *painter, const QStyleOptionFrame *option);
-void paintFrameFocusRect(QPainter *painter, const QStyleOptionFocusRect *option);
-void paintPanelButtonTool(QPainter *painter, const QStyleOption *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintSizeGrip(QPainter *painter, const QStyleOptionSizeGrip *option);
-void paintScrollAreaCorner(QPainter *painter, const QStyleOption *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-void paintPanelItemViewItem(QPainter *painter, const QStyleOptionViewItemV4 *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-#endif
-
-void paintMenuBarEmptyArea(QPainter *painter, const QStyleOption *option);
-void paintPanelMenuBar(QPainter *painter, const QStyleOptionFrame *frame);
-void paintMenuBarItem(QPainter *painter, const QStyleOptionMenuItem *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintFrameMenu(QPainter *painter, const QStyleOptionFrame *frame);
-void paintMenuItem(QPainter *painter, const QStyleOptionMenuItem *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-
-void paintTabBarTabShape(QPainter *painter, const QStyleOptionTab *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintTabBarTabLabel(QPainter *painter, const QStyleOptionTab *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintFrameTabBarBase(QPainter *painter, const QStyleOptionTabBarBase *option);
-void paintToolBoxTabShape(QPainter *painter, const QStyleOptionToolBoxV2 *option);
-void paintHeaderEmptyArea(QPainter *painter, const QStyleOption *option);
-void paintHeaderSection(QPainter *painter, const QStyleOptionHeader *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintHeaderLabel(QPainter *painter, const QStyleOptionHeader *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintIndicatorBranch(QPainter *painter, const QStyleOption *option);
-
-void paintScrollBarSlider(QPainter *painter, const QStyleOptionSlider *option);
-void paintScrollBarAddLine(QPainter *painter, const QStyleOptionSlider *option);
-void paintScrollBarSubLine(QPainter *painter, const QStyleOptionSlider *option);
-void paintScrollBarPage(QPainter *painter, const QStyleOptionSlider *option, QPalette::ColorRole bgrole);
-void paintProgressBarGroove(QPainter *painter, const QStyleOptionProgressBar *option);
-void paintProgressBarContents(QPainter *painter, const QStyleOptionProgressBar *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintProgressBarLabel(QPainter *painter, const QStyleOptionProgressBarV2 *option);
-void paintSplitter(QPainter *painter, const QStyleOption *option);
-void paintDockWidgetTitle(QPainter *painter, const QStyleOptionDockWidget *option, QPalette::ColorRole bgrole, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintRubberBand(QPainter *paint, const QStyleOptionRubberBand *option);
-
-void paintSpinBox(QPainter *painter, const QStyleOptionSpinBox *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintComboBox(QPainter *painter, const QStyleOptionComboBox *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintComboBoxLabel(QPainter *painter, const QStyleOptionComboBox *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintDial(QPainter *painter, const QStyleOptionSlider *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintSlider(QPainter *painter, const QStyleOptionSlider *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintScrollBar(QPainter *painter, const QStyleOptionSlider *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-//void paintGroupBox(QPainter *painter, const QStyleOptionGroupBox *option);
-void paintTitleBar(QPainter *painter, const QStyleOptionTitleBar *option, QPalette::ColorRole /*bgrole*/, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-void paintToolButton(QPainter *painter, const QStyleOptionToolButton *option, QPalette::ColorRole bgrole, QPalette::ColorRole /*fgrole*/, void */*data*/, int /*id*/, const QWidget *widget, const QStyle *style);
-
-
-/*-----------------------------------------------------------------------*/
-
-void SkulptureStyle::Private::readSettings(const QSettings &s)
-{
-	animateProgressBars = s.value(QString::fromAscii("ProgressBar/AnimateProgressBars"), true).toBool();
-	allowScrollBarSliderToCoverArrows = s.value(QString::fromAscii("ScrollBar/AllowScrollBarSliderToCoverArrows"), true).toBool();
-	hideShortcutUnderlines = s.value(QString::fromAscii("General/HideShortcutUnderlines"), true).toBool();
-}
-
-
-int SkulptureStyle::skulpturePrivateMethod(SkulptureStyle::SkulpturePrivateMethod id, void *data)
-{
-	switch (id) {
-		case SPM_SupportedMethods:
-			return SPM_SetSettingsFileName;
-		case SPM_SetSettingsFileName: {
-				SkMethodDataSetSettingsFileName *md = (SkMethodDataSetSettingsFileName *) data;
-				if (md && md->version >= 1) {
-					QSettings s(md->fileName, QSettings::IniFormat);
-					if (s.status() == QSettings::NoError) {
-						d->readSettings(s);
-						return 1;
-					}
-				}
-			}
-			return 0;
-		default:
-			break;
-	}
-	return 0;
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-SkulptureStyle::Private::Private()
-{
-	init();
-}
-
-
-SkulptureStyle::Private::~Private()
-{
-	delete shortcut_handler;
-	delete settings;
-	QList<int> keys = draw_hash.keys();
-	for (int i=0; i<keys.size(); i++)
-		delete draw_hash.take(keys.value(i));
-}
-
-
-void SkulptureStyle::Private::register_draw(DrawElement type, int which, drawElementFunc *func, int option_type, void *data, int id)
-{
-	DrawElementEntry *e = new DrawElementEntry;
-
-	if (e) {
-		e->type = option_type;
-		e->func = func;
-		e->id = id;
-		e->data = data;
-		draw_hash.insert(type + which, e);
-	}
-}
-
-
-void SkulptureStyle::Private::init()
-{
-	shortcut_handler = new ShortcutHandler(this);
-	timer = 0;
-	updatingShadows = false;
-#if 0
-	settings = new QSettings(QSettings::IniFormat,
-		QSettings::UserScope,
-		QString::fromUtf8("SkulptureStyle"),
-		QString::fromUtf8(""));
-#else
-	settings = 0;
-#endif
-
-	QSettings s(QSettings::IniFormat, QSettings::UserScope, QString::fromUtf8("SkulptureStyle"), QString::fromUtf8(""));
-	readSettings(s);
-
-#define primitive(p, f, so) register_draw(DE_Primitive, QStyle::PE_ ## p, (drawElementFunc *) paint ## f, QStyleOption::SO_ ## so)
-
-/* PRIMITIVE ELEMENT */
-// Qt 3.x compatibility
-//	primitive(Q3CheckListController, Default, Default);
-//	primitive(Q3CheckListExclusiveIndicator, Default, Default);
-//	primitive(Q3CheckListIndicator, Default, Default);
-	primitive(Q3DockWindowSeparator, Nothing, DockWidget);
-//	primitive(Q3Separator, Default, Default);
-// Qt 4.0 Frames
-	primitive(Frame, StyledFrame, Frame);
-	primitive(FrameDefaultButton, Nothing, Button);
-	primitive(FrameDockWidget, FrameDockWidget, Frame);
-	primitive(FrameFocusRect, FrameFocusRect, FocusRect);
-	primitive(FrameGroupBox, FrameGroupBox, Frame);
-	primitive(FrameLineEdit, FrameLineEdit, Frame);
-	/// Qt 4.3 calls FrameMenu with SO_ToolBar for a toolbar
-	primitive(FrameMenu, FrameMenu, Default);
-	primitive(FrameStatusBar, Nothing, Default);
-	primitive(FrameTabWidget, TabWidgetFrame, TabWidgetFrame);
-	primitive(FrameWindow, FrameWindow, Frame);
-//	primitive(FrameButtonBevel, FrameButtonBevel, Frame);
-//	primitive(FrameButtonTool, FrameButtonTool, Frame);
-	primitive(FrameTabBarBase, FrameTabBarBase, TabBarBase);
-// Qt 4.0 Panels
-	register_draw(DE_Primitive, QStyle::PE_PanelButtonCommand, (drawElementFunc *) paintCommandButtonPanel, QStyleOption::SO_Button);
-	register_draw(DE_Primitive, QStyle::PE_PanelButtonBevel, (drawElementFunc *) paintPanelButtonTool, QStyleOption::SO_Default);
-	register_draw(DE_Primitive, QStyle::PE_PanelButtonTool, (drawElementFunc *) paintPanelButtonTool, QStyleOption::SO_Default);
-	register_draw(DE_Primitive, QStyle::PE_PanelMenuBar, (drawElementFunc *) paintPanelMenuBar, QStyleOption::SO_Frame);
-	register_draw(DE_Primitive, QStyle::PE_PanelToolBar, (drawElementFunc *) paintPanelToolBar, QStyleOption::SO_Frame);
-	register_draw(DE_Primitive, QStyle::PE_PanelLineEdit, (drawElementFunc *) paintPanelLineEdit, QStyleOption::SO_Frame);
-// Qt 4.0 Indicators
-	register_draw(DE_Primitive, QStyle::PE_IndicatorArrowDown, (drawElementFunc *) paintIndicatorArrowDown, QStyleOption::SO_Default);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorArrowLeft, (drawElementFunc *) paintIndicatorArrowLeft, QStyleOption::SO_Default);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorArrowRight, (drawElementFunc *) paintIndicatorArrowRight, QStyleOption::SO_Default);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorArrowUp, (drawElementFunc *) paintIndicatorArrowUp, QStyleOption::SO_Default);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorBranch, (drawElementFunc *) paintIndicatorBranch, QStyleOption::SO_Default);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorButtonDropDown, (drawElementFunc *) paintPanelButtonTool, QStyleOption::SO_Default);
-//	register_draw(DE_Primitive, QStyle::PE_IndicatorViewItemCheck, (drawElementFunc *) paint, QStyleOption::SO_);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorCheckBox, (drawElementFunc *) paintIndicatorCheckBox, QStyleOption::SO_Button);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorDockWidgetResizeHandle, (drawElementFunc *) paintSplitter, QStyleOption::SO_Default);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorHeaderArrow, (drawElementFunc *) paintHeaderSortIndicator, QStyleOption::SO_Header);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorMenuCheckMark, (drawElementFunc *) paintIndicatorMenuCheckMark, QStyleOption::SO_MenuItem);
-//	register_draw(DE_Primitive, QStyle::PE_IndicatorProgressChunk, (drawElementFunc *) paint, QStyleOption::SO_);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorRadioButton, (drawElementFunc *) paintIndicatorRadioButton, QStyleOption::SO_Button);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorSpinDown, (drawElementFunc *) paintIndicatorSpinDown, QStyleOption::SO_Default);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorSpinMinus, (drawElementFunc *) paintIndicatorSpinDown, QStyleOption::SO_Default);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorSpinPlus, (drawElementFunc *) paintIndicatorSpinUp, QStyleOption::SO_Default);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorSpinUp, (drawElementFunc *) paintIndicatorSpinUp, QStyleOption::SO_Default);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorToolBarHandle, (drawElementFunc *) paintToolBarHandle, QStyleOption::SO_ToolBar);
-	register_draw(DE_Primitive, QStyle::PE_IndicatorToolBarSeparator, (drawElementFunc *) paintToolBarSeparator);
-// ### which are Qt 4.1 / Qt 4.2 additions ?
-//	register_draw(DE_Primitive, QStyle::PE_PanelTipLabel, (drawElementFunc *) paint, QStyleOption::SO_);
-//	register_draw(DE_Primitive, QStyle::PE_IndicatorTabTear, (drawElementFunc *) paint, QStyleOption::SO_);
-	register_draw(DE_Primitive, QStyle::PE_PanelScrollAreaCorner, (drawElementFunc *) paintScrollAreaCorner);
-//	register_draw(DE_Primitive, QStyle::PE_Widget, (drawElementFunc *) paint, QStyleOption::SO_);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-// Qt 4.3 additions
-//	register_draw(DE_Primitive, QStyle::PE_IndicatorColumnViewArrow, (drawElementFunc *) paint, QStyleOption::SO_);
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-// Qt 4.4 additions
-	register_draw(DE_Primitive, QStyle::PE_PanelItemViewItem, (drawElementFunc *) paintPanelItemViewItem, QStyleOption::SO_ViewItem);
-//	register_draw(DE_Primitive, QStyle::PE_PanelStatusBar, (drawElementFunc *) paint, QStyleOption::SO_);
-#endif
-
-/* CONTROL ELEMENT */
-// Qt 4.0 Buttons
-//	register_draw(DE_Element, QStyle::CE_PushButton, (drawElementFunc *) paint, QStyleOption::SO_);
-	register_draw(DE_Element, QStyle::CE_PushButtonBevel, (drawElementFunc *) paintPushButtonBevel, QStyleOption::SO_Button);
-//	register_draw(DE_Element, QStyle::CE_PushButtonLabel, (drawElementFunc *) paint, QStyleOption::SO_);
-//	register_draw(DE_Element, QStyle::CE_CheckBox, (drawElementFunc *) paint, QStyleOption::SO_);
-//	register_draw(DE_Element, QStyle::CE_CheckBoxLabel, (drawElementFunc *) paint, QStyleOption::SO_);
-//	register_draw(DE_Element, QStyle::CE_RadioButton, (drawElementFunc *) paint, QStyleOption::SO_);
-//	register_draw(DE_Element, QStyle::CE_RadioButtonLabel, (drawElementFunc *) paint, QStyleOption::SO_);
-// Qt 4.0 Controls
-//	register_draw(DE_Element, QStyle::CE_TabBarTab, (drawElementFunc *) paint, QStyleOption::SO_);
-	register_draw(DE_Element, QStyle::CE_TabBarTabShape, (drawElementFunc *) paintTabBarTabShape, QStyleOption::SO_Tab);
-	register_draw(DE_Element, QStyle::CE_TabBarTabLabel, (drawElementFunc *) paintTabBarTabLabel, QStyleOption::SO_Tab);
-//	register_draw(DE_Element, QStyle::CE_ProgressBar, (drawElementFunc *) paint, QStyleOption::SO_ProgressBar);
-	register_draw(DE_Element, QStyle::CE_ProgressBarGroove, (drawElementFunc *) paintProgressBarGroove, QStyleOption::SO_ProgressBar);
-	register_draw(DE_Element, QStyle::CE_ProgressBarContents, (drawElementFunc *) paintProgressBarContents, QStyleOption::SO_ProgressBar);
-	register_draw(DE_Element, QStyle::CE_ProgressBarLabel, (drawElementFunc *) paintProgressBarLabel, QStyleOption::SO_ProgressBar);
-// Qt 4.0 Menus
-/*/*/	register_draw(DE_Element, QStyle::CE_MenuItem, (drawElementFunc *) paintMenuItem, QStyleOption::SO_MenuItem);
-//	register_draw(DE_Element, QStyle::CE_MenuScroller, (drawElementFunc *) paint, QStyleOption::SO_);
-//	register_draw(DE_Element, QStyle::CE_MenuVMargin, (drawElementFunc *) paint, QStyleOption::SO_);
-//	register_draw(DE_Element, QStyle::CE_MenuHMargin, (drawElementFunc *) paint, QStyleOption::SO_);
-//	register_draw(DE_Element, QStyle::CE_MenuTearoff, (drawElementFunc *) paint, QStyleOption::SO_);
-/*/*/	register_draw(DE_Element, QStyle::CE_MenuEmptyArea, (drawElementFunc *) paintNothing);
-/*/*/	register_draw(DE_Element, QStyle::CE_MenuBarItem, (drawElementFunc *) paintMenuBarItem, QStyleOption::SO_MenuItem);
-	register_draw(DE_Element, QStyle::CE_MenuBarEmptyArea, (drawElementFunc *) paintMenuBarEmptyArea);
-// Qt 4.0 more Controls
-//	register_draw(DE_Element, QStyle::CE_ToolButtonLabel, (drawElementFunc *) paint, QStyleOption::SO_);
-//	register_draw(DE_Element, QStyle::CE_Header, (drawElementFunc *) paint, QStyleOption::SO_);
-	register_draw(DE_Element, QStyle::CE_HeaderSection, (drawElementFunc *) paintHeaderSection, QStyleOption::SO_Header);
-	register_draw(DE_Element, QStyle::CE_HeaderLabel, (drawElementFunc *) paintHeaderLabel, QStyleOption::SO_Header);
-//	register_draw(DE_Element, QStyle::CE_Q3DockWindowEmptyArea, (drawElementFunc *) paint, QStyleOption::SO_);
-//	register_draw(DE_Element, QStyle::CE_ToolBoxTab, (drawElementFunc *) paint, QStyleOption::SO_ToolBox);
-	register_draw(DE_Element, QStyle::CE_SizeGrip, (drawElementFunc *) paintSizeGrip, QStyleOption::SO_SizeGrip);
-	register_draw(DE_Element, QStyle::CE_Splitter, (drawElementFunc *) paintSplitter);
-	register_draw(DE_Element, QStyle::CE_RubberBand, (drawElementFunc *) paintRubberBand, QStyleOption::SO_RubberBand);
-	register_draw(DE_Element, QStyle::CE_DockWidgetTitle, (drawElementFunc *) paintDockWidgetTitle, QStyleOption::SO_DockWidget);
-// Qt 4.0 ScrollBar
-	register_draw(DE_Element, QStyle::CE_ScrollBarAddLine, (drawElementFunc *) paintScrollBarAddLine, QStyleOption::SO_Slider);
-	register_draw(DE_Element, QStyle::CE_ScrollBarSubLine, (drawElementFunc *) paintScrollBarSubLine, QStyleOption::SO_Slider);
-	register_draw(DE_Element, QStyle::CE_ScrollBarAddPage, (drawElementFunc *) paintScrollBarPage, QStyleOption::SO_Slider);
-	register_draw(DE_Element, QStyle::CE_ScrollBarSubPage, (drawElementFunc *) paintScrollBarPage, QStyleOption::SO_Slider);
-	register_draw(DE_Element, QStyle::CE_ScrollBarSlider, (drawElementFunc *) paintScrollBarSlider, QStyleOption::SO_Slider);
-//	register_draw(DE_Element, QStyle::CE_ScrollBarFirst, (drawElementFunc *) paint, QStyleOption::SO_);
-//	register_draw(DE_Element, QStyle::CE_ScrollBarLast, (drawElementFunc *) paint, QStyleOption::SO_);
-// Qt 4.0 even more Controls
-//	register_draw(DE_Element, QStyle::CE_FocusFrame, (drawElementFunc *) paint, QStyleOption::SO_);
-	register_draw(DE_Element, QStyle::CE_ComboBoxLabel, (drawElementFunc *) paintComboBoxLabel, QStyleOption::SO_ComboBox);
-	register_draw(DE_Element, QStyle::CE_ToolBar, (drawElementFunc *) paintPanelToolBar, QStyleOption::SO_ToolBar);
-	register_draw(DE_Element, QStyle::CE_ToolBoxTabShape, (drawElementFunc *) paintToolBoxTabShape, QStyleOption::SO_ToolBox);
-//	register_draw(DE_Element, QStyle::CE_ToolBoxTabLabel, (drawElementFunc *) paint, QStyleOption::SO_);
-	register_draw(DE_Element, QStyle::CE_HeaderEmptyArea, (drawElementFunc *) paintHeaderEmptyArea, QStyleOption::SO_Default);
-// Qt 4.3 additions
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-	register_draw(DE_Element, QStyle::CE_ColumnViewGrip, (drawElementFunc *) paintSplitter, QStyleOption::SO_Default);
-#endif
-// Qt 4.4 additions
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-//	register_draw(DE_Element, QStyle::CE_ItemViewItem, (drawElementFunc *) paint, QStyleOption::SO_);
-#endif
-//	register_draw(DE_Element, QStyle::CE_, (drawElementFunc *) paint, QStyleOption::SO_);
-
-/* COMPLEX CONTROL */
-	/**
-	 * must override QCommonStyle, because of:
-	 *
-	 *	ComboBox: not handled
-	 *	SpinBox: qDrawWinPanel
-	 *	Dial: ugly rendering
-	 *	Slider: only draws the tickmarks
-	 *	Q3ListView: only draws the background
-	 *
-	 * must override QWindowsStyle, because of:
-	 *
-	 *	ComboBox: qDrawWinButton
-	 *	Slider: fixed slider
-	 *	SpinBox: qDrawWinPanel
-	 *
-	 **/
-// Qt 4.0 Controls
-	register_draw(DE_Complex, QStyle::CC_SpinBox, (drawElementFunc *) paintSpinBox, QStyleOption::SO_SpinBox);
-	register_draw(DE_Complex, QStyle::CC_ComboBox, (drawElementFunc *) paintComboBox, QStyleOption::SO_ComboBox);
-	register_draw(DE_Complex, QStyle::CC_ScrollBar, (drawElementFunc *) paintScrollBar, QStyleOption::SO_Slider);
-	register_draw(DE_Complex, QStyle::CC_Slider, (drawElementFunc *) paintSlider, QStyleOption::SO_Slider);
-	register_draw(DE_Complex, QStyle::CC_ToolButton, (drawElementFunc *) paintToolButton, QStyleOption::SO_ToolButton);
-	register_draw(DE_Complex, QStyle::CC_TitleBar, (drawElementFunc *) paintTitleBar, QStyleOption::SO_TitleBar);
-//	register_draw(DE_Complex, QStyle::CC_Q3ListView, (drawElementFunc *) paint, QStyleOption::SO_);
-	register_draw(DE_Complex, QStyle::CC_Dial, (drawElementFunc *) paintDial, QStyleOption::SO_Slider);
-//	register_draw(DE_Complex, QStyle::CC_GroupBox, (drawElementFunc *) paintGroupBox, QStyleOption::SO_GroupBox);
-// Qt 4.3 additions
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-//	register_draw(DE_Complex, QStyle::CC_MdiControls, (drawElementFunc *) paint, QStyleOption::SO_);
-#endif
-//	register_draw(DE_Complex, QStyle::CC_, (drawElementFunc *) paint, QStyleOption::SO_);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-//#include "skulpture_p.moc"
-
-
diff --git a/plugins/qtstyle/skulpture/skulpture.h b/plugins/qtstyle/skulpture/skulpture.h
deleted file mode 100644
index 75cc26e..0000000
--- a/plugins/qtstyle/skulpture/skulpture.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * skulpture.h
- *
- */
-
-#ifndef SKULPTURE_H
-#define SKULPTURE_H 1
-
-
-/*-----------------------------------------------------------------------*/
-
-#include <QtGui/QPlastiqueStyle>
-
-class SkulptureStyle : public QPlastiqueStyle
-{
-	Q_OBJECT
-
-	typedef QPlastiqueStyle ParentStyle;
-//	typedef QCommonStyle ParentStyle;
-
-	public:
-		SkulptureStyle();
-		virtual ~SkulptureStyle();
-
-		QPalette standardPalette() const;
-		void polish(QPalette &palette);
-
-		void polish(QWidget *widget);
-		void unpolish(QWidget *widget);
-		void polish(QApplication *application);
-		void unpolish(QApplication *application);
-
-		void drawItemPixmap(QPainter *painter, const QRect &rectangle, int alignment, const QPixmap &pixmap) const;
-		void drawItemText(QPainter * painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const;
-		QRect itemPixmapRect(const QRect &rectangle, int alignment, const QPixmap & pixmap) const;
-		QRect itemTextRect(const QFontMetrics &metrics, const QRect &rectangle, int alignment, bool enabled, const QString &text ) const;
-
-		int styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const;
-		int pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const;
-		QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const;
-		QSize sizeFromContents (ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget) const;
-		QRect subControlRect(ComplexControl control, const QStyleOptionComplex *option, SubControl subControl, const QWidget *widget) const;
-		SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, const QPoint &position, const QWidget *widget) const;
-
-		QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *option) const;
-		QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *option, const QWidget *widget) const;
-
-		void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const;
-		void drawControl(ControlElement control, const QStyleOption *option, QPainter *painter, const QWidget *widget) const;
-		void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const;
-
-	public:
-		// internal, reserved for future use
-		enum SkulpturePrivateMethod {
-			SPM_SupportedMethods = 0,
-			SPM_SetSettingsFileName = 1,
-		};
-
-	public Q_SLOTS:
-		int skulpturePrivateMethod(SkulpturePrivateMethod id, void *data = 0);
-
-	protected Q_SLOTS:
-//#if (QT_VERSION >= QT_VERSION_CHECK(4, 1, 0))
-		QIcon standardIconImplementation(StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const;
-//#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-		int layoutSpacingImplementation(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option, const QWidget *widget) const;
-#endif
-
-	private:
-		void init();
-
-		class Private;
-		Private * const d;
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-#endif
-
-
diff --git a/plugins/qtstyle/skulpture/skulpture_p.h b/plugins/qtstyle/skulpture/skulpture_p.h
deleted file mode 100644
index 5461576..0000000
--- a/plugins/qtstyle/skulpture/skulpture_p.h
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * skulpture_p.h
- *
- */
-
-#ifndef SKULPTURE_PRIVATE_H
-#define SKULPTURE_PRIVATE_H 1
-
-
-/*-----------------------------------------------------------------------*/
-
-#include <QtCore/QObject>
-class QWidget;
-
-class ShortcutHandler : public QObject
-{
-	Q_OBJECT
-
-	public:
-		explicit ShortcutHandler(QObject *parent = 0);
-		virtual ~ShortcutHandler();
-
-		bool underlineShortcut(const QWidget *widget) const;
-
-	protected:
-		bool eventFilter(QObject *watched, QEvent *event);
-
-	private:
-		void init() { }
-
-	private:
-		QList<QWidget *> alt_pressed;
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-#include "skulpture.h"
-#include <QtCore/QSignalMapper>
-#include <QtCore/QHash>
-#include <QtCore/QSet>
-#include <QtGui/QStyleOption>
-class QPainter;
-class QSettings;
-class QTextEdit;
-class QPlainTextEdit;
-class QAbstractScrollArea;
-
-class SkulptureStyle::Private : public QObject
-{
-	Q_OBJECT
-
-	public:
-		Private();
-		~Private();
-
-		SkulptureStyle *q;
-
-		void setAnimated(QWidget *widget, bool animated);
-		bool isAnimated(QWidget *widget);
-
-	private:
-		QSet<QWidget *> animations;
-		int timer;
-
-	public:
-		void readSettings(const QSettings &s);
-		QSettings *settings;
-
-		bool animateProgressBars;
-		bool allowScrollBarSliderToCoverArrows;
-		bool hideShortcutUnderlines;
-
-		enum Settings {
-			Style,
-			Metric,
-			Icon,
-		};
-
-		enum DrawElement {
-			DE_Primitive = 0xF1000100,
-			DE_Element = 0xF2000200,
-			DE_Complex = 0xF3000300
-		};
-
-		typedef void (drawElementFunc)(
-			QPainter *painter,
-			const QStyleOption *option,
-			int bgrole, int fgrole,	// not in QStyleOption
-			void *data, int id,
-			const QWidget *widget,
-			const QStyle *style
-		);
-
-		struct DrawElementEntry
-		{
-			int type;
-			drawElementFunc *func;
-			int id;
-			void *data;
-		};
-
-		void register_settings(const char *label, ...);
-
-		QSignalMapper mapper;
-
-		QHash<int, DrawElementEntry *> draw_hash;
-
-		ShortcutHandler *shortcut_handler;
-
-		void register_draw(DrawElement type, int which, drawElementFunc *func, int option_type = QStyleOption::SO_Default, void *data = 0, int id = 0);
-
-		void installFrameShadow(QWidget *widget);
-		void removeFrameShadow(QWidget *widget);
-		void updateFrameShadow(QWidget *widget);
-
-		void updateTextEditMargins(QTextEdit *edit);
-
-		void highlightCurrentEditLine(QAbstractScrollArea *edit, const QRect &cursorRect);
-		void highlightCurrentEditLine(QTextEdit *edit);
-		void highlightCurrentEditLine(QPlainTextEdit *edit);
-
-		QAbstractScrollArea *oldEdit;
-		int oldCursorTop;
-		int oldCursorWidth;
-		int oldCursorHeight;
-		int oldHeight;
-		QPalette oldPalette;
-
-		bool updatingShadows;
-
-	protected:
-		void timerEvent(QTimerEvent *event);
-		bool eventFilter(QObject *watched, QEvent *event);
-
-	protected Q_SLOTS:
-		void textEditSourceChanged(QWidget *);
-		void updateToolBarOrientation(Qt::Orientation);
-
-	private:
-		void init();
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-class FrameShadow : public QWidget
-{
-	Q_OBJECT
-
-	public:
-		enum ShadowArea { Left, Top, Right, Bottom };
-
-	public:
-		explicit FrameShadow(QWidget *parent = 0);
-		explicit FrameShadow(ShadowArea area, QWidget *parent = 0);
-		virtual ~FrameShadow();
-
-		void setShadowArea(ShadowArea area) { area_ = area; }
-		ShadowArea shadowArea() const { return area_; }
-
-		void updateGeometry();
-
-	protected:
-		bool event(QEvent *e);
-		void paintEvent(QPaintEvent *);
-
-	private:
-		void init();
-
-	private:
-		ShadowArea area_;
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-class WidgetShadow : public QWidget
-{
-	Q_OBJECT
-
-	public:
-		explicit WidgetShadow(QWidget *parent = 0);
-
-		void setWidget(QWidget *w) { widget_ = w; }
-		QWidget *widget() const { return widget_; }
-
-		void updateGeometry();
-		void updateZOrder();
-
-	public:
-		bool event(QEvent *e);
-
-	private:
-		void init();
-
-	private:
-		QWidget *widget_;
-};
-
-
-/*-----------------------------------------------------------------------*/
-// ### Remove for 4.4
-
-#if (QT_VERSION < QT_VERSION_CHECK(4, 4, 0))
-#define PM_TabBar_ScrollButtonOverlap	(QStyle::PixelMetric(int(PM_LayoutVerticalSpacing) + 1))
-#define PM_TextCursorWidth			(QStyle::PixelMetric(int(PM_LayoutVerticalSpacing) + 2))
-#endif
-
-// ### does not work
-//#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-//#if QT_PACKAGEDATE_STR < "2008-03"
-//#error If you build with Qt 4.4.0, you have to use a more recent version.
-//#endif
-//#endif
-
-
-/*-----------------------------------------------------------------------*/
-
-struct SkMethodData
-{
-	int version;
-};
-
-
-struct SkMethodDataSetSettingsFileName : public SkMethodData
-{
-	// in version 1
-	QString fileName;
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-QColor shaded_color(const QColor &color, int shade);
-QColor blend_color(const QColor &c0, const QColor &c1, qreal blend);
-QGradient path_edge_gradient(const QRectF &rect, const QStyleOption *option, const QPainterPath &path, const QColor &color2, const QColor &color1);
-
-void paintThinFrame(QPainter *painter, const QRect &rect, const QPalette &palette, int dark, int light, QPalette::ColorRole bgrole = QPalette::Window);
-
-enum RecessedFrame { RF_Small, RF_Large, RF_None };
-
-void paintRecessedFrame(QPainter *painter, const QRect &rect, const QPalette &palette, enum RecessedFrame rf, QPalette::ColorRole bgrole = QPalette::Window);
-void paintRecessedFrameShadow(QPainter *painter, const QRect &rect, enum RecessedFrame rf);
-
-
-/*-----------------------------------------------------------------------*/
-
-#endif
-
-
diff --git a/plugins/qtstyle/skulpture22/sk_effects.h b/plugins/qtstyle/skulpture22/sk_effects.h
deleted file mode 100644
index cdaae06..0000000
--- a/plugins/qtstyle/skulpture22/sk_effects.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * sk_effects.h - Classical Three-Dimensional Artwork for Qt 4
- *
- * Copyright (c) 2008 Christoph Feck <christoph at maxiom.de>
- *
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifndef SKULPTURE_EFFECTS_H
-#define SKULPTURE_EFFECTS_H 1
-
-
-/*-----------------------------------------------------------------------*/
-
-#include <QtGui/QRgb>
-
-#define F_SHIFT 11
-
-void filterRgbPixels(QRgb *rgb, int w, int h, int stride, int f);
-
-
-/*-----------------------------------------------------------------------*/
-
-#include <QtGui/QImage>
-#include <cmath>
-
-static inline void filterImage(QImage &im, double f)
-{
-	filterRgbPixels((QRgb *) im.bits(), im.width(), im.height(), im.bytesPerLine() / sizeof(QRgb), int((1 << F_SHIFT) * f));
-}
-
-
-static inline void blurImage(QImage &im, int radius)
-{
-	if (radius >= 1) {
-		double f = 1.0 - exp(-2.3 / (radius + 1.0));
-		filterImage(im, f);
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-#endif
-
-
diff --git a/plugins/qtstyle/skulpture22/sk_factory.h b/plugins/qtstyle/skulpture22/sk_factory.h
deleted file mode 100644
index 0897861..0000000
--- a/plugins/qtstyle/skulpture22/sk_factory.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * skulpture_factory.h - Classical Three-Dimensional Artwork for Qt 4
- *
- * Copyright (c) 2008 Christoph Feck <christoph at maxiom.de>
- *
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifndef SKULPTURE_FACTORY_H
-#define SKULPTURE_FACTORY_H 1
-
-
-/*-----------------------------------------------------------------------*/
-
-#include <QtGui/QPainterPath>
-#include <QtGui/QLinearGradient>
-#include <QtGui/QColor>
-
-class AbstractFactory
-{
-	public:
-		typedef qint8 Code;
-		typedef const Code *Description;
-
-		static const int MinVar = 1;
-		static const int MaxVar = 9;
-
-	public:
-		enum OpCode
-		{
-			/* Values */
-			MinVal = -100, MaxVal = 100,
-			GetVar = 100,
-			Add = 110, Sub, Mul, Div, Min, Max, Mix, Cond,
-
-			/* Colors */
-			RGB = 0, RGBA, RGBAf, Blend, Palette, Shade, Darker, Lighter,
-
-			/* Conditions */
-			EQ = 0, NE, LT, GE, GT, LE, Or, And, Not, FactoryVersion,
-			OptionVersion, OptionType, OptionComplex, OptionState, OptionRTL,
-
-			/* Instructions */
-			SetVar = 100,
-/* Shape */		Move = 121, Line, Quad, Cubic, Close,
-/* Gradient */	ColorAt = 121,
-/* Frame */
-/* Panel */
-/* Primitive */
-/* Control */
-			Begin = 118, Else = 119, End = 120, If = 126, While = 127, Nop = 0
-		};
-
-	protected:
-		AbstractFactory() : p(0), opt(0) { }
-		virtual ~AbstractFactory() { }
-
-	protected:
-		void setDescription(Description description) { p = description; }
-		void setOption(const QStyleOption *option) { opt = option; }
-
-		void setVar(int n, qreal value) { var[n] = value; }
-		qreal getVar(int n) const { return var[n]; }
-
-		void create();
-
-	protected:
-		virtual void QT_FASTCALL executeCode(Code code);
-		virtual void QT_FASTCALL skipCode(Code code);
-		virtual int QT_FASTCALL version() { return 0; }
-
-	protected:
-		qreal QT_FASTCALL evalValue();
-		QColor QT_FASTCALL evalColor();
-		void QT_FASTCALL skipValue();
-		void QT_FASTCALL skipColor();
-
-	private:
-		bool QT_FASTCALL evalCondition();
-		void QT_FASTCALL skipCondition();
-
-	private:
-		Description p;
-		const QStyleOption *opt;
-		qreal var[MaxVar + 1];
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-class ShapeFactory : public AbstractFactory
-{
-	public:
-		static QPainterPath createShape(Description description, qreal var[]);
-		static QPainterPath createShape(Description description);
-
-	protected:
-		ShapeFactory() : AbstractFactory() { }
-		virtual ~ShapeFactory() { }
-
-		void clear() { path = QPainterPath(); }
-		const QPainterPath &getPath() const { return path; }
-
-	protected:
-		virtual void QT_FASTCALL executeCode(Code code);
-		virtual void QT_FASTCALL skipCode(Code code);
-
-	private:
-		QPainterPath path;
-};
-
-
-#define Pvalue(v) int(100 * (v) + 0.5)
-
-#define Pmove(x,y) ShapeFactory::Move, Pvalue(x), Pvalue(y)
-#define Pline(x,y) ShapeFactory::Line, Pvalue(x), Pvalue(y)
-#define Pquad(x,y,a,b) ShapeFactory::Quad, Pvalue(x), Pvalue(y), Pvalue(a), Pvalue(b)
-#define Pcubic(x,y,a,b,c,d) ShapeFactory::Cubic, Pvalue(x), Pvalue(y), Pvalue(a), Pvalue(b), Pvalue(c), Pvalue(d)
-#define Pend ShapeFactory::Close, ShapeFactory::End
-#define Pclose ShapeFactory::Close
-
-
-/*-----------------------------------------------------------------------*/
-
-class GradientFactory : public AbstractFactory
-{
-	public:
-		static QGradient createGradient(Description description, qreal var[]);
-		static QGradient createGradient(Description description);
-
-	protected:
-		GradientFactory() : AbstractFactory() { }
-		virtual ~GradientFactory() { }
-
-	protected:
-		void clear() { gradient.setStops(QGradientStops()); }
-		const QGradient &getGradient() const { return gradient; }
-
-	protected:
-		virtual void QT_FASTCALL executeCode(Code code);
-		virtual void QT_FASTCALL skipCode(Code code);
-
-	private:
-		QGradient gradient;
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-#endif
-
-
diff --git a/plugins/qtstyle/skulpture22/skulpture.cpp b/plugins/qtstyle/skulpture22/skulpture.cpp
deleted file mode 100644
index 4b2a6e0..0000000
--- a/plugins/qtstyle/skulpture22/skulpture.cpp
+++ /dev/null
@@ -1,10757 +0,0 @@
-/*
- * Skulpture - Classical Three-Dimensional Artwork for Qt 4
- *
- * Copyright (c) 2007-2009 Christoph Feck <christoph at maxiom.de>
- *
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-// ### This file is a mess
-
-#include "skulpture_p.h"
-#include <QtGui/QLayout>
-#include <QtGui/QLCDNumber>
-#include <QtGui/QPainter>
-#include <QtGui/QLabel>
-#include <QtGui/QProgressBar>
-#include <QtGui/QScrollBar>
-#include <QtGui/QIcon>
-#include <QtGui/QStatusBar>
-#include <QtGui/QAbstractScrollArea>
-#include <QtGui/QScrollArea>
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-#include <QtGui/QMdiArea>
-#include <QtGui/QMdiSubWindow>
-#endif
-#include <QtGui/QMenu>
-#include <QtGui/QMenuBar>
-#include <QtGui/QWorkspace>
-#include <QtGui/QHeaderView>
-#include <QtGui/QListView>
-#include <QtGui/QTreeView>
-#include <QtGui/QTableView>
-#include <QtGui/QMainWindow>
-#include <QtGui/QSplitter>
-#include <QtGui/QPainterPath>
-#include <QtGui/QGroupBox>
-#include <QtGui/QDockWidget>
-#include <QtGui/QToolButton>
-#include <QtGui/QTextEdit>
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-#include <QtGui/QPlainTextEdit>
-#include <QtGui/QFormLayout>
-#endif
-#include <QtGui/QStackedLayout>
-#include <QtGui/QGridLayout>
-#include <QtGui/QBoxLayout>
-#include <QtGui/QComboBox>
-#include <QtGui/QDial>
-#include <QtGui/QRadioButton>
-#include <QtGui/QCheckBox>
-#include <QtGui/QToolBox>
-#include <QtGui/QToolBar>
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QLineEdit>
-#include <QtGui/QDialog>
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
-#include <QtGui/QKeyEvent>
-#include <QtCore/QList>
-#include <QtCore/QTimer>
-#include <cstdio>
-#include <QtCore/QDebug>
-
-/*-----------------------------------------------------------------------*/
-
-#include <QtGui/QStylePlugin>
-
-class SkulptureStylePlugin : public QStylePlugin
-{
-	public:
-		QStringList keys() const {
-			return QStringList(QLatin1String("Skulpture"));
-		}
-
-		QStyle *create(const QString &key) {
-			if (key.toLower() == QLatin1String("skulpture")) {
-				return new SkulptureStyle;
-			}
-			return 0;
-		}
-};
-
-
-Q_EXPORT_PLUGIN2(skulpture, SkulptureStylePlugin)
-
-
-/*-----------------------------------------------------------------------*/
-
-SkulptureStyle::SkulptureStyle()
-	: d(new Private)
-{
-	d->q = this;
-}
-
-
-SkulptureStyle::~SkulptureStyle()
-{
-	delete d;
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void SkulptureStyle::polish(QApplication *application)
-{
-//	ParentStyle::polish(application);
-//	return;
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-    QString recursionCheck = QLatin1String("\n/* -skulpture-recursion-check- */\n");
-    if (!d->styleSheetFileName.isEmpty()) {
-        QString oldStyle = application->styleSheet();
-        if (!oldStyle.contains(recursionCheck)) {
-            QFile file(d->styleSheetFileName);
-            if (file.open(QIODevice::ReadOnly)) {
-                QTextStream stream(&file);
-                QString newStyle = stream.readAll();
-                application->setStyleSheet(newStyle + recursionCheck + oldStyle);
-            }
-        }
-    }
-#endif
-	ParentStyle::polish(application);
-	application->installEventFilter(d->shortcut_handler);
-#if 0
-	QPalette palette;
-	polish(palette);
-	application->setPalette(palette);
-#endif
-//	if (application->inherits("KApplication")) {
-//		qDebug() << "KApplication is a" << application->metaObject()->className() << "(" << "object name:" << application->objectName() << ")";
-//	}
-//        QFontMetrics fm = QFontMetrics(QFont());
-//        printf("h:%d, s:%d, xh:%d, xb:%d, Xb:%d, Xyb: %d\n", fm.height(), fm.lineSpacing(), fm.xHeight(), fm.boundingRect(QChar('x', 0)).height(), fm.boundingRect(QChar('X', 0)).height(), fm.boundingRect(QLatin1String("Xy")).height());
-}
-
-
-void SkulptureStyle::unpolish(QApplication *application)
-{
-	application->removeEventFilter(d->shortcut_handler);
-	ParentStyle::unpolish(application);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-enum SidebarViewMode {
-    DefaultSidebar,
-    TransparentSidebar
-};
-
-
-static void polishSidebarView(QAbstractItemView *view, SidebarViewMode viewMode)
-{
-    QWidget *viewport = view->viewport();
-    QPalette palette = view->palette();
-
-    if (viewMode == TransparentSidebar) {
-        if (viewport->autoFillBackground()) {
-            viewport->setAutoFillBackground(false);
-            QPalette::ColorRole textRole = viewport->foregroundRole();
-            if (textRole != QPalette::WindowText) {
-                palette.setBrush(QPalette::Active, textRole, palette.brush(QPalette::Active, QPalette::WindowText));
-                palette.setBrush(QPalette::Inactive, textRole, palette.brush(QPalette::Inactive, QPalette::WindowText));
-                palette.setBrush(QPalette::Disabled, textRole, palette.brush(QPalette::Disabled, QPalette::WindowText));
-                viewport->setPalette(palette);
-            }
-        }
-        view->setFrameStyle(QFrame::StyledPanel | QFrame::Plain);
-    } else {
-        if (viewport->autoFillBackground()) {
-            palette.setBrush(QPalette::Active, QPalette::Window, palette.brush(QPalette::Active, QPalette::Base));
-            palette.setBrush(QPalette::Inactive, QPalette::Window, palette.brush(QPalette::Inactive, QPalette::Base));
-            palette.setBrush(QPalette::Disabled, QPalette::Window, palette.brush(QPalette::Disabled, QPalette::Base));
-        } else {
-            viewport->setAutoFillBackground(true);
-        }
-        view->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
-        viewport->setPalette(palette);
-    }
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-static WidgetShadow *findShadow(QWidget *widget)
-{
-	QWidget *parent = widget->parentWidget();
-	if (parent) {
-		QList<WidgetShadow *> shadows = parent->findChildren<WidgetShadow *>();
-
-		Q_FOREACH (WidgetShadow *shadow, shadows) {
-			if (shadow->widget() == widget) {
-				return shadow;
-			}
-		}
-	}
-	return 0;
-}
-#endif
-
-void SkulptureStyle::polish(QWidget *widget)
-{
-//	ParentStyle::polish(widget);
-//	return;
-#if 1
-	//printf("polishing a \"%s\" (which is a \"%s\")\n", widget->metaObject()->className(), widget->metaObject()->superClass()->className());
-#if 0
-	QPalette palette = widget->palette();
-	polish(palette);
-	widget->setPalette(palette);
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-	if (QMdiArea *area = qobject_cast<QMdiArea *>(widget)) {
-		area->installEventFilter(d);
-	}
-	if (qobject_cast<QMdiSubWindow *>(widget)) {
-		WidgetShadow *shadow = findShadow(widget);
-		if (!shadow) {
-			widget->installEventFilter(d);
-			if (widget->parentWidget()) {
-				WidgetShadow *shadow = new WidgetShadow(widget->parentWidget());
-				shadow->setWidget(widget);
-				shadow->updateZOrder();
-				shadow->show();
-			}
-		}
-	}
-#endif
-#if 1
-	if (QLCDNumber *lcd = qobject_cast<QLCDNumber *>(widget)) {
-		QPalette palette;
-		palette.setColor(QPalette::Base, QColor(220, 230, 210));
-		palette.setColor(QPalette::WindowText, QColor(60, 60, 60));
-	//	lcd->setPalette(palette);
-	//	lcd->installEventFilter(d);
-	//	lcd->setContentsMargins(8, 8, 8, 8);
-		lcd->setFrameStyle(QFrame::StyledPanel | QFrame::Plain);
-		lcd->setSegmentStyle(QLCDNumber::Flat);
-	}
-#endif
-#if 1
-	if (QDialog *dialog = qobject_cast<QDialog *>(widget)) {
-		dialog->installEventFilter(d);
-	}
-#endif
-#if 0
-	if (QMainWindow *window = qobject_cast<QMainWindow *>(widget)) {
-		window->setBackgroundRole(QPalette::Dark);
-	}
-	if (QDockWidget *dock = qobject_cast<QDockWidget *>(widget)) {
-		dock->installEventFilter(d);
-	}
-	if (QStatusBar *bar = qobject_cast<QStatusBar *>(widget)) {
-		bar->installEventFilter(d);
-	}
-#endif
-	if (QToolBox *toolBox = qobject_cast<QToolBox *>(widget)) {
-		toolBox->setBackgroundRole(QPalette::Window);
-	//	toolBox->setContentsMargins(2, 2, 2, 2);
-	//	toolBox->installEventFilter(d);
-		toolBox->layout()->setSpacing(0);
-	}
-	if (widget->inherits("KTitleWidget")) {
-//            widget->setMaximumHeight(0);
-#if 0
-		QPalette palette = widget->palette();
-		palette.setColor(QPalette::Base, palette.color(QPalette::Window));
-		palette.setColor(QPalette::Text, palette.color(QPalette::WindowText));
-		widget->setPalette(palette);
-#endif
-        }
-        if (qobject_cast<QScrollBar *>(widget)) {
-                widget->installEventFilter(d);
-        }
-        if (QFrame *frame = qobject_cast<QFrame *>(widget)) {
-		switch (frame->frameShape()) {
-			case QFrame::Panel:
-			case QFrame::WinPanel:
-			case QFrame::Box:
-				frame->setFrameShape(QFrame::StyledPanel);
-				break;
-			case QFrame::HLine:
-			case QFrame::VLine:
-				frame->setEnabled(false);
-				break;
-			default:
-				break;
-		}
-		if (frame->frameShadow() == QFrame::Plain && frame->backgroundRole() == QPalette::Base) {
-			if (frame->parentWidget() && frame->parentWidget()->inherits("KTitleWidget")) {
-				frame->setBackgroundRole(QPalette::Window);
-			}
-		}
-#if 1
-                if (!strcmp(widget->metaObject()->className(), "QListWidget")
-                    && widget->parentWidget()
-                    && !strcmp(widget->parentWidget()->metaObject()->className(), "Sidebar")) {
-                    //(static_cast<QAbstractItemView *>(widget))->setFrameStyle(QFrame::Plain | QFrame::StyledPanel);
-                    (static_cast<QAbstractItemView *>(widget))->setFrameStyle(QFrame::NoFrame);
-                }
-                if (!strcmp(widget->metaObject()->className(), "Kontact::Navigator")) {
-                    // (static_cast<QAbstractItemView *>(widget))->viewport()->setBackgroundRole(QPalette::Base);
-                    // (static_cast<QAbstractItemView *>(widget))->viewport()->setAutoFillBackground(true);
-                    (static_cast<QAbstractItemView *>(widget))->setFrameStyle(QFrame::Plain | QFrame::StyledPanel);
-                    // polishSidebarView(static_cast<QAbstractItemView *>(widget), d->transparentPlacesPanel ? TransparentSidebar : DefaultSidebar);
-                }
-		if (widget->inherits("SidebarTreeView")) {
-                    polishSidebarView(static_cast<QAbstractItemView *>(widget), DefaultSidebar);
-                }
-		if (widget->inherits("KHTMLView")) {
-		//	QPalette palette = widget->palette();
-		//	palette.setColor(QPalette::Window, palette.color(QPalette::Base));
-		//	((QAbstractScrollArea *) widget)->viewport()->setPalette(palette);
-		//	printf("frame style is 0x%08x\n", ((QFrame *) widget)->frameStyle());
-			((QFrame *) widget)->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
-		}
-#endif
-#if 1
-		if (widget->inherits("KFilePlacesView")) {
-                    polishSidebarView(static_cast<QAbstractItemView *>(widget), d->transparentPlacesPanel ? TransparentSidebar : DefaultSidebar);
-		}
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-		if (widget->inherits("QPlainTextEdit")) {
-			QPlainTextEdit *edit = static_cast<QPlainTextEdit *>(widget);
-		//	QPalette palette = edit->palette();
-		//	palette.setColor(QPalette::Window, QColor(245, 245, 245));
-		//	edit->setPalette(palette);
-		//	edit->viewport()->setPalette(palette);
-			edit->setBackgroundVisible(false);
-			edit->viewport()->installEventFilter(d);
-                        edit->installEventFilter(d);
-                        widget->setAttribute(Qt::WA_Hover, true);
-		}
-#endif
-#if 1
-		if (QTextEdit *edit = qobject_cast<QTextEdit *>(widget)) {
-			if (!qstrcmp(widget->metaObject()->className(), "SampleEdit")) {
-				QWidget *bg = new QWidget(widget);
-				bg->lower();
-				bg->setObjectName(QLatin1String("sample_background"));
-				bg->setGeometry(2, 2, widget->width() - 4, widget->height() - 4);
-				bg->setAutoFillBackground(true);
-				bg->show();
-			} else {
-				d->mapper.setMapping(edit, edit);
-				connect(edit, SIGNAL(textChanged()), &d->mapper, SLOT(map()));
-				connect(&d->mapper, SIGNAL(mapped(QWidget *)), d, SLOT(textEditSourceChanged(QWidget *)));
-				d->updateTextEditMargins(edit);
-			}
-			edit->viewport()->installEventFilter(d);
-                        edit->installEventFilter(d);
-                        widget->setAttribute(Qt::WA_Hover, true);
-			edit->setTabChangesFocus(true);
-#if 0
-			if (QTextBrowser *browser = qobject_cast<QTextBrowser *>(widget)) {
-				connect(browser, SIGNAL(sourceChanged()), &d->mapper, SLOT(map()));
-			}
-#endif
-		}
-#endif
-	}
-#if 0
-	if (QComboBox *combo = qobject_cast<QComboBox *>(widget)) {
-		if (!combo->isEditable()) {
-			combo->setBackgroundRole(QPalette::Button);
-			combo->setForegroundRole(QPalette::ButtonText);
-		}
-	}
-	if (qobject_cast<QCheckBox *>(widget)
-	 || qobject_cast<QRadioButton *>(widget)) {
-		widget->setBackgroundRole(QPalette::Window);
-		widget->setForegroundRole(QPalette::WindowText);
-	}
-#endif
-	if (qobject_cast<QScrollBar *>(widget)
-	 || qobject_cast<QSlider *>(widget)
-	 || qobject_cast<QDial *>(widget)
-	 || qobject_cast<QLineEdit *>(widget)
-	 || qobject_cast<QAbstractSpinBox *>(widget)
-	 || qobject_cast<QHeaderView*>(widget)
-	 || qobject_cast<QTabBar *>(widget)
-	 || qobject_cast<QSplitterHandle *>(widget)
-	 || qobject_cast<QPushButton *>(widget)
-	 || qobject_cast<QComboBox *>(widget)
-	 || qobject_cast<QCheckBox *>(widget)
-	 || qobject_cast<QRadioButton *>(widget)
-	 || qobject_cast<QGroupBox *>(widget)
-	 || qobject_cast<QToolButton *>(widget)) {
-		widget->setAttribute(Qt::WA_Hover, true);
-	}
-#if 0
-	if (d->allowScrollBarSliderToCoverArrows && qobject_cast<QScrollBar *>(widget)) {
-		widget->installEventFilter(d);
-	}
-#endif
-#if 0
-        if (widget->inherits("Q3ProgressBar")) {
-            widget->installEventFilter(d);
-            if (widget->isVisible()) {
-                d->setAnimated(widget, true);
-            }
-        }
-#endif
-	if (QProgressBar *pbar = qobject_cast<QProgressBar *>(widget)) {
-		pbar->installEventFilter(d);
-		if (pbar->isVisible() && !widget->inherits("StatusBarSpaceInfo")) {
-			d->setAnimated(pbar, true);
-		}
-	}
-#if 1
-        if (qobject_cast<QMenu *>(widget)) {
-            widget->installEventFilter(d);
-        }
-	if (QToolBar *toolbar = qobject_cast<QToolBar *>(widget)) {
-		QFont font;
-		font.setPointSizeF(font.pointSizeF() / (1.19));
-		QList<QToolButton *> children = toolbar->findChildren<QToolButton *>();
-		Q_FOREACH (QToolButton *child, children) {
-			if (!child->icon().isNull()) {
-				child->setFont(font);
-			}
-		}
-		connect(toolbar, SIGNAL(orientationChanged(Qt::Orientation)), d, SLOT(updateToolBarOrientation(Qt::Orientation)));
-                toolbar->setBackgroundRole(QPalette::Window);
-        }
-        if (widget->inherits("Q3ToolBar")) {
-            widget->setBackgroundRole(QPalette::Window);
-        }
-#endif
-#if 0
-	// FIXME does not work
-	if (QMenu *menu = qobject_cast<QMenu *>(widget)) {
-#if 1
-		QFont font;
-		QFont oldfont;
-		oldfont.setPointSizeF(oldfont.pointSizeF() * 1.0001);
-		font.setPointSizeF(font.pointSizeF() / (1.19 /* * 1.19*/));
-		font.setBold(true);
-		menu->setFont(font);
-	/*	QAction *action = menu->menuAction();
-		action->setFont(oldfont);
-		QList<QAction *> children = action->findChildren<QAction *>();
-		Q_FOREACH (QAction *child, children) {
-			child->setFont(oldfont);
-		}*/
-#else
-		menu->setStyleSheet(QLatin1String("font-size: 6.5")/*.arg(menu->font().pointSizeF() / (1.19 * 1.19))*/);
-#endif
-	}
-#endif
-#if 0
-	// FIXME does not work
-	if (QGroupBox *group = qobject_cast<QGroupBox *>(widget)) {
-		QFont oldfont;
-#if 0
-		if (group->testAttribute(Qt::WA_SetFont)) {
-			QFont oldfont = group->fontInfo();
-		}
-#endif
-		QFont font = oldfont;
-		font.setPointSizeF(font.pointSizeF() * 1.19);
-		font.setBold(true);
-		group->setFont(font);
-		QList<QWidget *> children = group->findChildren<QWidget *>();
-		Q_FOREACH (QWidget *child, children) {
-			if (1 || !(child->testAttribute(Qt::WA_SetFont))) {
-				printf("reset\n");
-				child->setFont(oldfont);
-			}
-		}
-	}
-#endif
-#if 1
-	if (widget->inherits("Q3Header")) {
-		QFont font;
-		font.setPointSizeF(font.pointSizeF() / (1.19 /* 1.19*/));
-		font.setBold(true);
-		widget->setFont(font);
-	}
-#endif
-	if (QAbstractScrollArea *area = qobject_cast<QAbstractScrollArea *>(widget)) {
-		if (QAbstractItemView *iv = qobject_cast<QAbstractItemView *>(widget)) {
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-			// ### Qt issue
-		//	iv->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
-		//	iv->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
-		//	QApplication::setWheelScrollLines(64);
-			iv = iv;
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-			iv->viewport()->setAttribute(Qt::WA_Hover);
-                        if (QTreeView *tree = qobject_cast<QTreeView *>(widget)) {
-                            iv->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
-                            if (tree->uniformRowHeights()) {
-                                iv->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
-                            }
-                        } else if (QListView *list = qobject_cast<QListView *>(widget)) {
-                            if (list->uniformItemSizes()) {
-                                iv->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
-                                iv->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
-                            }
-                        } else if (qobject_cast<QTableView *>(widget)) {
-                            iv->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
-                            iv->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
-                        }
-#endif
-
-#if 1
-			if (QHeaderView *header = qobject_cast<QHeaderView *>(widget)) {
-				QFont font;
-				font.setPointSizeF(font.pointSizeF() / (1.19 /* 1.19*/));
-				font.setBold(true);
-				header->setFont(font);
-				// FIXME workaround for Qt 4.3
-				header->headerDataChanged(header->orientation(), 0, 0);
-				header->updateGeometry();
-			}
-#endif
-		}
-		if (area->frameStyle() == (QFrame::StyledPanel | QFrame::Sunken)) {
-			d->installFrameShadow(area);
-		}
-	}
-#if 1
-	if (widget->inherits("Konsole::TerminalDisplay")
-	 || widget->inherits("KTextEditor::View")
-	 || widget->inherits("KHTMLView")) {
-	//	((QFrame *) widget)->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
-		d->installFrameShadow(widget);
-	}
-#endif
-#if 0
-	if (widget->inherits("KTextEditor::View")) {
-		QWidget *parent = widget->parentWidget();
-		if (parent) {
-			QFrame *frame = new QFrame(parent);
-			if (frame) {
-				frame->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
-				widget->setParent(frame);
-			}
-		}
-	}
-#endif
-#if 1
-	if (widget->inherits("KCharSelectTable")) {
-		QPalette palette;
-		widget->setPalette(palette);
-	}
-#endif
-#if 1
-	if (widget->inherits("KFadeWidgetEffect")) {
-		widget->installEventFilter(d);
-	}
-#endif
-	if (widget->inherits("Q3ScrollView")) {
-		QFrame *frame = qobject_cast<QFrame *>(widget);
-		if (frame && frame->frameStyle() == (QFrame::StyledPanel | QFrame::Sunken)) {
-			d->installFrameShadow(widget);
-		}
-	}
-#endif
-#if 0
-	if (QTabWidget *tab = qobject_cast<QTabWidget *>(widget)) {
-		if (QToolButton *button = qobject_cast<QToolButton *>(tab->cornerWidget(Qt::TopRightCorner))) {
-			button->setAutoRaise(true);
-		}
-		if (QToolButton *button = qobject_cast<QToolButton *>(tab->cornerWidget(Qt::TopLeftCorner))) {
-			button->setAutoRaise(true);
-		}
-	}
-#endif
-#if 1
-	if (QToolButton *button = qobject_cast<QToolButton *>(widget)) {
-		if (qobject_cast<QTabWidget *>(button->parentWidget())) {
-			button->setAutoRaise(true);
-		}
-	}
-#endif
-	if (!qstrcmp(widget->metaObject()->className(), "QToolBoxButton")) {
-		widget->setAttribute(Qt::WA_Hover, true);
-	}
-	if (!qstrcmp(widget->metaObject()->className(), "KLineEditButton")) {
-		widget->installEventFilter(d);
-		widget->setAttribute(Qt::WA_Hover, true);
-	}
-        if (qobject_cast<QLineEdit *>(widget)) {
-            widget->unsetCursor();
-            widget->installEventFilter(d);
-            widget->setMouseTracking(true);
-        }
-        if (QLayout *layout = widget->layout()) {
-            // explicitely check public layout classes, QMainWindowLayout doesn't work here
-            if (qobject_cast<QBoxLayout *>(layout)
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-             || qobject_cast<QFormLayout *>(layout)
-#endif
-             || qobject_cast<QGridLayout *>(layout)
-             || qobject_cast<QStackedLayout *>(layout)) {
-                d->polishLayout(layout);
-             }
-        }
-        if (!qstrcmp(widget->metaObject()->className(), "InfoSidebarPage")) {
-            widget->installEventFilter(d);
-        }
-#if 0//(QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-        if (widget->inherits("KTabWidget") && widget->property("closeButtonEnabled").toBool()) {
-            widget->setProperty("tabsClosable", true);
-            widget->setProperty("closeButtonEnabled", false);
-            connect(widget, SIGNAL(tabCloseRequested(int)), widget, SIGNAL(closeRequest(int)));
-        }
-        if (widget->inherits("KTabBar")) {
-            widget->setProperty("tabsClosable", true);
-            connect(widget, SIGNAL(tabCloseRequested(int)), widget, SIGNAL(closeRequest(int)));
-        }
-#endif
-        ParentStyle::polish(widget);
-}
-
-
-void SkulptureStyle::unpolish(QWidget *widget)
-{
-	ParentStyle::unpolish(widget);
-//	return;
-	if (qobject_cast<QScrollBar *>(widget)
-	 || qobject_cast<QSlider *>(widget)
-	 || qobject_cast<QDial *>(widget)
-//	 || qobject_cast<QLineEdit *>(widget)
-	 || qobject_cast<QAbstractSpinBox *>(widget)
-	 || qobject_cast<QHeaderView*>(widget)
-	 || qobject_cast<QTabBar *>(widget)
-	 || qobject_cast<QSplitterHandle *>(widget)
-	 || qobject_cast<QPushButton *>(widget)
-	 || qobject_cast<QComboBox *>(widget)
-	 || qobject_cast<QCheckBox *>(widget)
-	 || qobject_cast<QRadioButton *>(widget)
-	 || qobject_cast<QGroupBox *>(widget)
-	 || qobject_cast<QToolButton *>(widget)) {
-		widget->setAttribute(Qt::WA_Hover, false);
-	}
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-	if (qobject_cast<QMdiArea *>(widget)) {
-		widget->removeEventFilter(d);
-	}
-	if (QMdiSubWindow *win = qobject_cast<QMdiSubWindow *>(widget)) {
-		win->removeEventFilter(d);
-		WidgetShadow *shadow = findShadow(win);
-		if (shadow) {
-			shadow->hide();
-			shadow->setParent(0);
-			shadow->deleteLater();
-		}
-	}
-#endif
-#if 1
-	if (QDialog *dialog = qobject_cast<QDialog *>(widget)) {
-		dialog->removeEventFilter(d);
-	}
-#endif
-#if 0
-	if (QLCDNumber *lcd = qobject_cast<QLCDNumber *>(widget)) {
-		lcd->removeEventFilter(d);
-	}
-	if (QToolBox *toolBox = qobject_cast<QToolBox *>(widget)) {
-		toolBox->removeEventFilter(d);
-	}
-	if (QDockWidget *dock = qobject_cast<QDockWidget *>(widget)) {
-		dock->removeEventFilter(d);
-	}
-	if (QStatusBar *status = qobject_cast<QStatusBar *>(widget)) {
-		status->removeEventFilter(d);
-	}
-#endif
-#if 0
-	if (/*d->allowScrollBarSliderToCoverArrows &&*/ qobject_cast<QScrollBar *>(widget)) {
-		widget->installEventFilter(d);
-	}
-#endif
-	if (QProgressBar *pbar = qobject_cast<QProgressBar *>(widget)) {
-		pbar->removeEventFilter(d);
-		d->setAnimated(pbar, false);
-		return;
-	}
-	if (QAbstractScrollArea *area = qobject_cast<QAbstractScrollArea *>(widget)) {
-		area->removeEventFilter(d);
-		if (/*QAbstractItemView *iv =*/qobject_cast<QAbstractItemView *>(widget)) {
-#if 1
-			if (QHeaderView *header = qobject_cast<QHeaderView *>(widget)) {
-				QFont font;
-			//	font.setPointSizeF(font.pointSizeF() / (1.19 * 1.19));
-			//	font.setBold(true);
-				header->setFont(font);
-				// FIXME workaround for Qt 4.3
-				header->headerDataChanged(header->orientation(), 0, 0);
-				header->updateGeometry();
-			}
-#endif
-		}
-	/*	if (QMdiArea *area = qobject_cast<QMdiArea *>(widget)) {
-			area->viewport()->removeEventFilter(d);
-		}
-	*/
-		d->removeFrameShadow(area);
-	}
-#if 1
-	if (widget->inherits("Konsole::TerminalDisplay")
-	 || widget->inherits("KTextEditor::View")
-	 || widget->inherits("KHTMLView")) {
-		widget->removeEventFilter(d);
-		d->removeFrameShadow(widget);
-	}
-#endif
-	if (widget->inherits("Q3ScrollView")) {
-		widget->removeEventFilter(d);
-		d->removeFrameShadow(widget);
-	}
-#if 1
-	if (widget->inherits("KFadeWidgetEffect")) {
-		widget->removeEventFilter(d);
-	}
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-	if (widget->inherits("QPlainTextEdit")) {
-		QPlainTextEdit *edit = static_cast<QPlainTextEdit *>(widget);
-		edit->viewport()->removeEventFilter(d);
-                edit->removeEventFilter(d);
-        }
-#endif
-        if (qobject_cast<QScrollBar *>(widget)) {
-            widget->removeEventFilter(d);
-        }
-	if (QTextEdit *edit = qobject_cast<QTextEdit *>(widget)) {
-		if (!qstrcmp(widget->metaObject()->className(), "SampleEdit")) {
-			QList<QObject *> children = widget->children();
-			Q_FOREACH (QObject *child, children) {
-				if (child->objectName() == QLatin1String("sample_background")) {
-					child->setParent(0);
-					child->deleteLater();
-				}
-			}
-		} else {
-			d->mapper.removeMappings(edit);
-		}
-		edit->viewport()->removeEventFilter(d);
-                edit->removeEventFilter(d);
-        }
-	if (QToolBar *toolbar = qobject_cast<QToolBar *>(widget)) {
-		QFont font;
-	//	font.setPointSizeF(font.pointSizeF() / (1.19));
-		QList<QToolButton *> children = toolbar->findChildren<QToolButton *>();
-		Q_FOREACH (QToolButton *child, children) {
-			if (!child->icon().isNull()) {
-				child->setFont(font);
-			}
-		}
-		disconnect(toolbar, SIGNAL(orientationChanged(Qt::Orientation)), d, SLOT(updateToolBarOrientation(Qt::Orientation)));
-	}
-	if (!qstrcmp(widget->metaObject()->className(), "KLineEditButton")) {
-		widget->removeEventFilter(d);
-	}
-        if (qobject_cast<QLineEdit *>(widget)) {
-            widget->setMouseTracking(false);
-            widget->removeEventFilter(d);
-            widget->setCursor(Qt::IBeamCursor);
-        }
-        if (!d->postEventWidgets.isEmpty()) {
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-            d->postEventWidgets.removeOne(widget);
-#else
-            d->postEventWidgets.removeAll(widget);
-#endif
-        }
-        if ((QWidget *) d->oldEdit == widget) {
-            d->oldEdit = 0;
-        }
-        if (!qstrcmp(widget->metaObject()->className(), "InfoSidebarPage")) {
-            widget->removeEventFilter(d);
-        }
-        if (qobject_cast<QMenu *>(widget)) {
-            widget->removeEventFilter(d);
-        }
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void lineEditMouseMoved(QLineEdit *lineEdit, QMouseEvent *event);
-
-void SkulptureStyle::Private::processPostEventWidgets()
-{
-    QWidget *widget;
-
-    while (!postEventWidgets.isEmpty() && (widget = postEventWidgets.takeFirst())) {
-        if (QTextEdit *edit = qobject_cast<QTextEdit *>(widget)) {
-            handleCursor(edit);
-        }
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-        else if (QPlainTextEdit *edit = qobject_cast<QPlainTextEdit *>(widget)) {
-            handleCursor(edit);
-        }
-#endif
-    }
-}
-
-
-void SkulptureStyle::Private::addPostEventWidget(QWidget *widget)
-{
-    if (qobject_cast<QTextEdit *>(widget)
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-        || qobject_cast<QPlainTextEdit *>(widget)
-#endif
-    ) {
-        if (!postEventWidgets.contains(widget)) {
-            bool signal = postEventWidgets.isEmpty();
-            postEventWidgets.append(widget);
-            if (signal) {
-                QTimer::singleShot(0, this, SLOT(processPostEventWidgets()));
-            }
-        }
-    }
-}
-
-
-bool SkulptureStyle::Private::eventFilter(QObject *watched, QEvent *event)
-{
-#if 0
-	// can't happen, because widgets are the only ones to install it
-	if (!watched->isWidgetType()) {
-		return QObject::eventFilter(watched, event);
-	}
-#endif
-	QWidget *widget = reinterpret_cast<QWidget *>(watched);
-#if 0
-        if (event->type() != QEvent::UpdateRequest && event->type() != QEvent::Paint) {
-            qDebug() << "handling" << event->type() << "for object" << widget->objectName() << "which is a" << widget->metaObject()->className() << " which is a" << widget->metaObject()->superClass()->className();
-        }
-#endif
-        if (QMenu *menu = qobject_cast<QMenu *>(widget)) {
-            return menuEventFilter(menu, event);
-        }
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-	if (qobject_cast<QMdiSubWindow *>(widget)) {
-		WidgetShadow *shadow = findShadow(widget);
-		switch (event->type()) {
-			case QEvent::Move:
-			case QEvent::Resize:
-				if (shadow) {
-					shadow->updateGeometry();
-				}
-				break;
-			case QEvent::ZOrderChange:
-				if (shadow) {
-					shadow->updateZOrder();
-				}
-				break;
-			case QEvent::Hide:
-				if (shadow) {
-					shadow->setParent(0);
-					shadow->hide();
-					shadow->deleteLater();
-				}
-				break;
-			case QEvent::Show:
-				if (!shadow) {
-					if (widget->parentWidget()) {
-						shadow = new WidgetShadow(widget->parentWidget());
-						shadow->setWidget(widget);
-						shadow->updateZOrder();
-					}
-				} else {
-					shadow->updateZOrder();
-				}
-			default:
-				break;
-		}
-	}
-#endif
-        if (event->type() == QEvent::Hide || event->type() == QEvent::Destroy) {
-            if (!postEventWidgets.isEmpty()) {
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-                postEventWidgets.removeOne(widget);
-#else
-                postEventWidgets.removeAll(widget);
-#endif
-            }
-            if ((QWidget *) oldEdit == widget) {
-                oldEdit = 0;
-            }
-        } else if (event->type() != QEvent::Paint) {
-            addPostEventWidget(widget);
-            if (QWidget *parent = widget->parentWidget()) {
-                addPostEventWidget(parent);
-                if ((parent = parent->parentWidget())) {
-                    addPostEventWidget(parent);
-                }
-            }
-        }
-        switch (event->type()) {
-		case QEvent::Paint:
-#if 1 // highlight current line in QTextEdit / QPlainTextEdit
-			if (widget->objectName() == QLatin1String("qt_scrollarea_viewport")) {
-				if (QTextEdit *edit = qobject_cast<QTextEdit *>(widget->parent())) {
-					if (!qstrcmp(edit->metaObject()->className(), "SampleEdit")) {
-						QList<QObject *> children = edit->children();
-						Q_FOREACH (QObject *child, children) {
-							if (child->objectName() == QLatin1String("sample_background")) {
-								QWidget *bg = qobject_cast<QWidget *>(child);
-								if (bg) {
-									QPalette palette = edit->palette();
-									palette.setColor(QPalette::Window, palette.color(QPalette::Base));
-									bg->setPalette(palette);
-								}
-							}
-						}
-					}
-				//	updateTextEditMargins(edit);
-					paintCursorLine(edit);
-				}
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-				else if (widget->parent()->inherits("QPlainTextEdit")) {
-					paintCursorLine(static_cast<QPlainTextEdit *>(widget->parent()));
-				}
-#endif
-			}
-#endif
-#if 0
-			if (QDialog *dialog = qobject_cast<QDialog *>(widget)) {
-				QPainter painter(dialog);
-				QRect r = dialog->rect();
-				QLinearGradient dialogGradient1(r.topLeft(), r.bottomRight());
-				dialogGradient1.setColorAt(0.0, QColor(255, 255, 255, 30));
-				dialogGradient1.setColorAt(1.0, QColor(0, 0, 0, 10));
-			//	painter.fillRect(r, dialogGradient1);
-
-				QRadialGradient dialogGradient2(r.left() + r.width() / 2, r.top(), r.height());
-				dialogGradient2.setColorAt(0.0, QColor(255, 255, 225, 160));
-				dialogGradient2.setColorAt(1.0, QColor(0, 0, 0, 0));
-			//	painter.fillRect(r, dialogGradient2);
-
-				QLinearGradient dialogGradient3(r.topLeft(), r.bottomLeft());
-				dialogGradient3.setColorAt(0.0, QColor(255, 255, 255, 30));
-				dialogGradient3.setColorAt(1.0, QColor(0, 0, 0, 20));
-				painter.fillRect(r, dialogGradient3);
-
-				paintThinFrame(&painter, dialog->rect().adjusted(0, 0, 0, 0), dialog->palette(), 60, -20);
-				paintThinFrame(&painter, dialog->rect().adjusted(1, 1, -1, -1), dialog->palette(), -20, 60);
-			}
-#endif
-#if 0
-			if (QStatusBar *status = qobject_cast<QStatusBar *>(widget)) {
-				QPainter painter(status);
-				paintThinFrame(&painter, status->rect(), status->palette(), -20, 60);
-			}
-			if (QToolBox *toolBox = qobject_cast<QToolBox *>(widget)) {
-				QPainter painter(toolBox);
-				paintThinFrame(&painter, toolBox->rect(), toolBox->palette(), 60, -20);
-				paintThinFrame(&painter, toolBox->rect().adjusted(1, 1, -1, -1), toolBox->palette(), -60, 140);
-			}
-			if (QLCDNumber *lcd = qobject_cast<QLCDNumber *>(watched)) {
-				// TODO nicer digits, antialiased, slight italics
-			}
-			if (QDockWidget *dock = qobject_cast<QDockWidget *>(widget)) {
-				// ### rendering a frame around dock widgets does not work, because
-				// the subwidgets are placed at the edges.
-			}
-#endif
-                        if (!qstrcmp(widget->metaObject()->className(), "InfoSidebarPage")) {
-                            QPainter painter(widget);
-                            paintThinFrame(&painter, widget->rect().adjusted(0, 0, 0, 0), widget->palette(), 60, -20);
-                            paintThinFrame(&painter, widget->rect().adjusted(1, 1, -1, -1), widget->palette(), -20, 60);
-                        }
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-			if (!qstrcmp(widget->metaObject()->className(), "KLineEditButton")) {
-				QPainter painter(widget);
-				QStyleOption option;
-				option.initFrom(widget);
-                                QIcon::Mode iconMode = QIcon::Normal;
-				if (option.state & QStyle::State_Enabled && option.state & QStyle::State_MouseOver) {
-                                    //iconMode = QIcon::Active;
-				//	painter.fillRect(widget->rect(), Qt::red);
-				} else {
-                                    //iconMode = QIcon::Disabled;
-					painter.setOpacity(0.2);
-				}
-				QRect r = QRect(widget->rect().center() - QPoint(6, 5), QSize(12, 12));
-				painter.drawPixmap(r, q->standardIcon(QStyle::SP_TitleBarCloseButton, &option, widget).pixmap(12, 12, iconMode));
-				event->accept();
-				return true;
-			}
-			if (widget->inherits("KFadeWidgetEffect")) {
-			//	widget->hide();
-				event->accept();
-			//	widget->removeEventFilter(this);
-				return true;
-			}
-			break;
-#endif
-                case QEvent::MouseMove:
-                    if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(watched)) {
-                        lineEditMouseMoved(lineEdit, static_cast<QMouseEvent *>(event));
-                    }
-                    break;
-		case QEvent::Show:
-			if (QProgressBar *pbar = qobject_cast<QProgressBar *>(watched)) {
-				if (!widget->inherits("StatusBarSpaceInfo")) {
-					setAnimated(pbar, true);
-				}
-			}
-			/* fall through */
-		case QEvent::Move:
-		case QEvent::Resize:
-			if (QTextEdit *edit = qobject_cast<QTextEdit *>(widget)) {
-				if (!qstrcmp(widget->metaObject()->className(), "SampleEdit")) {
-					QList<QObject *> children = widget->children();
-					Q_FOREACH (QObject *child, children) {
-						if (child->objectName() == QLatin1String("sample_background")) {
-							QWidget *bg = qobject_cast<QWidget *>(child);
-							if (bg) {
-								bg->setGeometry(2, 2, widget->width() - 4, widget->height() - 4);
-							}
-						}
-					}
-				} else {
-					textEditSourceChanged(edit);
-				}
-			}
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-			else if (qobject_cast<QMdiArea *>(widget)) {
-				QList<WidgetShadow *> shadows = widget->findChildren<WidgetShadow *>();
-				Q_FOREACH (WidgetShadow *shadow, shadows) {
-					shadow->updateGeometry();
-				}
-			}
-#endif
-			if (qobject_cast<QAbstractScrollArea *>(widget)
-			 || widget->inherits("Q3ScrollView")
-#if 1
-			 || widget->inherits("Konsole::TerminalDisplay")
-			 || widget->inherits("KTextEditor::View")
-			 || widget->inherits("KHTMLView")
-#endif
-			   ) {
-				updateFrameShadow(widget);
-			}
-			break;
-		case QEvent::Destroy:
-		case QEvent::Hide:
-			setAnimated(reinterpret_cast<QProgressBar *>(watched), false);
-			break;
-#if 0
-		case QEvent::MouseButtonRelease:
-			if (allowScrollBarSliderToCoverArrows && qobject_cast<QScrollBar *>(widget)) {
-				widget->update();
-			}
-			break;
-#endif
-		default:
-			break;
-	}
-	return QObject::eventFilter(watched, event);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-#define SkulptureDrawFunction(function, selectortype, optiontype, array) \
-\
-void SkulptureStyle::function(selectortype element, const optiontype *option, QPainter *painter, const QWidget *widget) const \
-{ \
-	if (uint(element) < array_elements(array)) { \
-		const Private::DrawElementEntry *entry = &array[element]; \
-		if (entry->func && option && (!entry->type || option->type == entry->type)) { \
-			entry->func(painter, option, widget, this); \
-			return; \
-		} \
-	} \
-	ParentStyle::function(element, option, painter, widget); \
-}
-
-SkulptureDrawFunction(drawPrimitive, PrimitiveElement, QStyleOption, d->draw_primitive_entry)
-SkulptureDrawFunction(drawControl, ControlElement, QStyleOption, d->draw_element_entry)
-//SkulptureDrawFunction(drawComplexControl, ComplexControl, QStyleOptionComplex, d->draw_complex_entry)
-
-
-/*-----------------------------------------------------------------------*/
-
-//#include "skulpture.moc"
-
-
-/*
- * skulpture_animations.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QProgressBar>
-#include <QtCore/QTimerEvent>
-
-
-/*-----------------------------------------------------------------------*/
-
-void SkulptureStyle::Private::setAnimated(QWidget *widget, bool animated)
-{
-	if (!widget) {
-		return;
-	}
-
-	animations.removeAll(widget);
-	if (animated && animateProgressBars) {
-		animations.prepend(widget);
-		if (!timer) {
-			timer = startTimer(60);
-		}
-	} else {
-		if (animations.isEmpty()) {
-			if (timer) {
-				killTimer(timer);
-				timer = 0;
-			}
-		}
-	}
-}
-
-
-bool SkulptureStyle::Private::isAnimated(QWidget *widget)
-{
-	if (!widget || !timer) {
-		return false;
-	}
-
-	return animations.contains(widget);
-}
-
-
-void SkulptureStyle::Private::timerEvent(QTimerEvent *event)
-{
-	if (event->timerId() == timer) {
-		Q_FOREACH (QWidget *widget, animations) {
-			// FIXME: move this logic to progressbar
-			QProgressBar *bar = qobject_cast<QProgressBar *>(widget);
-			if (bar) {
-				if (bar->minimum() >= bar->maximum()
-				 || bar->value() < bar->maximum()) {
-					bar->update();
-				}
-			} else {
-				widget->update();
-			}
-		}
-	}
-	event->ignore();
-}
-
-
-/*
- * skulpture_arrows.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include "sk_factory.h"
-#include <QtGui/QPainter>
-
-
-/*-----------------------------------------------------------------------*/
-
-#define awf 0.8 /* width of inner arrow 0 ... 1 */
-#define ahf 0.2 /* position of inner arrow, -1 ... 1 */
-#define spf 0.2 /* position of spin plus/minus edges */
-#define swf 0.8 /* width of spin plus/minus sign */
-#define shf 1.0 /* height of spin plus/minus sign */
-
-static const ShapeFactory::Code arrowShapeDescription[] = {
-    Pmove(-1, 1), Pline(-awf, 1), Pline(0, ahf), Pline(awf, 1), Pline(1, 1), Pline(0, -1), Pend
-};
-
-static const ShapeFactory::Code spinPlusDescription[] = {
-    Pmove(-swf, spf), Pline(-spf, spf), Pline(-spf, shf), Pline(spf, shf), Pline(spf, spf), Pline(swf, spf),
-           Pline(swf, -spf), Pline(spf, -spf), Pline(spf, -shf), Pline(-spf, -shf), Pline(-spf, -spf), Pline(-swf, -spf), Pend
-};
-
-static const ShapeFactory::Code spinMinusDescription[] = {
-    Pmove(-swf, spf), Pline(swf, spf), Pline(swf, -spf), Pline(-swf, -spf), Pend
-};
-
-static const ShapeFactory::Code sortIndicatorShapeDescription[] = {
-    Pmove(-1, 1), Pline(1, 1), Pline(0, -1), Pend
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-static inline QPainterPath arrowPath(const QStyleOption *option, Qt::ArrowType arrow, bool spin)
-{
-	qreal var[ShapeFactory::MaxVar + 1];
-	var[1] = 0.01 * arrow;
-	var[2] = spin ? 1.0 : 0.0;
-	var[3] = option->fontMetrics.height();
-	var[4] = 0.0;
-	QPainterPath shape = ShapeFactory::createShape(
-         spin && arrow == Qt::LeftArrow ? spinMinusDescription :
-         spin && arrow == Qt::RightArrow ? spinPlusDescription :
-        arrowShapeDescription, var);
-	if (var[4] != 0.0) {
-		shape.setFillRule(Qt::WindingFill);
-	}
-
-	qreal h = 2.0 + var[3] * (spin ? 2.0 : 3.0) / 9.0;
-	qreal w = 2.0 + var[3] / 3.0;
-	h /= 2; w /= 2;
-	if (arrow == Qt::DownArrow || arrow == Qt::RightArrow) {
-		h = -h;
-	}
-	bool horiz = !spin && (arrow == Qt::LeftArrow || arrow == Qt::RightArrow);
-	QMatrix arrowMatrix(horiz ? 0 : w, horiz ? w : 0, horiz ? h : 0 , horiz ? 0 : h, 0, 0);
-	return arrowMatrix.map(shape);
-}
-
-
-void paintScrollArrow(QPainter *painter, const QStyleOption *option, Qt::ArrowType arrow, bool spin)
-{
-	painter->save();
-	// FIXME: combine translations with path matrix
-	painter->translate(option->rect.center());
-#if 1
-	painter->setRenderHint(QPainter::Antialiasing, true);
-#else
-	painter->setRenderHint(QPainter::Antialiasing, false);
-#endif
-	if (painter->renderHints() & QPainter::Antialiasing) {
-		painter->translate(0.5, 0.5);
-	}
-#if 1
-	switch (arrow) {
-		case Qt::UpArrow:
-			painter->translate(0, -0.5);
-			break;
-		case Qt::DownArrow:
-			painter->translate(0, 0.5);
-			break;
-		case Qt::LeftArrow:
-                    if (!spin) {
-                        painter->translate(-0.5, 0);
-                    }
-			break;
-		case Qt::RightArrow:
-                    if (!spin) {
-                        painter->translate(0.5, 0);
-                    }
-			break;
-		case Qt::NoArrow:
-			break;
-	}
-#endif
-	painter->setPen(Qt::NoPen);
-        QColor color = option->palette.color(spin ? (option->state & QStyle::State_Enabled ? QPalette::WindowText : QPalette::Text) : QPalette::ButtonText);
-	if ((option->state & QStyle::State_MouseOver) && option->state & QStyle::State_Enabled /* && !(option->state & QStyle::State_Sunken)*/) {
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-		color = option->palette.color(QPalette::Highlight).darker(200);
-#else
-                color = option->palette.color(QPalette::Highlight).dark(200);
-#endif
-	//	painter->setPen(QPen(Qt::white, 1.0));
-	} else {
-	//	painter->setPen(QPen(Qt::white, 0.5));
-	}
-	color.setAlpha((179 * color.alpha()) >> 8);
-	painter->setBrush(color);
-	painter->drawPath(arrowPath(option, arrow, spin));
-	painter->restore();
-}
-
-
-void paintIndicatorArrowDown(QPainter *painter, const QStyleOption *option)
-{
-	paintScrollArrow(painter, option, Qt::DownArrow, false);
-}
-
-
-void paintIndicatorArrowLeft(QPainter *painter, const QStyleOption *option)
-{
-	paintScrollArrow(painter, option, Qt::LeftArrow, false);
-}
-
-
-void paintIndicatorArrowRight(QPainter *painter, const QStyleOption *option)
-{
-	paintScrollArrow(painter, option, Qt::RightArrow, false);
-}
-
-
-void paintIndicatorArrowUp(QPainter *painter, const QStyleOption *option)
-{
-	paintScrollArrow(painter, option, Qt::UpArrow, false);
-}
-
-
-/*
- * skulpture_buttons.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QPainterPath>
-
-
-static QPainterPath button_path(const QRectF &rect, qreal k)
-{
-	k *= 0.1;
-	const qreal tlh_edge = 6.0 * k;
-	const qreal tlv_edge = 6.0 * k;
-	const qreal tlh_control = 4.0 * k;
-	const qreal tlv_control = 4.0 * k;
-	const qreal blh_edge = 6.0 * k;
-	const qreal blv_edge = 6.0 * k;
-	const qreal blh_control = 4.0 * k;
-	const qreal blv_control = 4.0 * k;
-	const qreal trh_edge = 6.0 * k;
-	const qreal trv_edge = 6.0 * k;
-	const qreal trh_control = 4.0 * k;
-	const qreal trv_control = 4.0 * k;
-	const qreal brh_edge = 6.0 * k;
-	const qreal brv_edge = 6.0 * k;
-	const qreal brh_control = 4.0 * k;
-	const qreal brv_control = 4.0 * k;
-	QPainterPath path;
-	path.moveTo(rect.left() + tlh_edge, rect.top());
-	path.lineTo(rect.right() - trh_edge, rect.top());
-	path.cubicTo(rect.right() - trh_edge + trh_control, rect.top(), rect.right(), rect.top() + trv_edge - trv_control, rect.right(), rect.top() + trv_edge);
-	path.lineTo(rect.right(), rect.bottom() - brv_edge);
-	path.cubicTo(rect.right(), rect.bottom() - brv_edge + brv_control, rect.right() - brh_edge + brh_control, rect.bottom(), rect.right() - brh_edge, rect.bottom());
-	path.lineTo(rect.left() + blh_edge, rect.bottom());
-	path.cubicTo(rect.left() + blh_edge - blh_control, rect.bottom(), rect.left(), rect.bottom() - blv_edge + blv_control, rect.left(), rect.bottom() - blv_edge);
-	path.lineTo(rect.left(), rect.top() + tlv_edge);
-	path.cubicTo(rect.left(), rect.top() + tlv_edge - tlv_control, rect.left() + tlh_edge - tlh_control, rect.top(), rect.left() + tlh_edge, rect.top());
-	return path;
-}
-
-
-static QBrush button_gradient(const QRectF &rect, const QColor &color, const QStyleOptionButton *option)
-{
-	Q_UNUSED(option)
-    qreal ch = color.hueF();
-    qreal cs = color.saturationF() * 1.0;
-    qreal cv = color.valueF() * 1.0;
-    int ca = color.alpha();
-    QColor col;
-
-    if (rect.height() > 64) {
-        return QColor(color);
-    }
-    QLinearGradient gradient(rect.topLeft(), rect.bottomLeft());
-    col.setHsvF(ch, cs, qMax(0.0, cv - 0.02));
-    col.setAlpha(ca);
-    gradient.setColorAt(0.0, col);
-    col.setHsvF(ch, cs, qMin(1.0, cv + 0.03));
-    col.setAlpha(ca);
-    gradient.setColorAt(1.0, col);
-    return gradient;
-}
-
-
-void paintButtonPanel(QPainter *painter, const QStyleOptionButton *option, QPalette::ColorRole bgrole)
-{
-	const QRectF &c_rect = option->rect;
-	const qreal t = 1.0;
-	QRectF rect = c_rect;
-	bool frame = true;
-	if (option->features & QStyleOptionButton::Flat && !(option->state & QStyle::State_Sunken)) {
-		frame = false;
-	}
-	painter->setPen(Qt::NoPen);
-	if ((option->features & QStyleOptionButton::DefaultButton) && (option->state & QStyle::State_Enabled)) {
-		painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 1.3), blend_color(QColor(0, 0, 0, 10), option->palette.color(QPalette::Highlight).lighter(110), 0.2), blend_color(QColor(0, 0, 0, 15), option->palette.color(QPalette::Highlight).lighter(110), 0.2)));
-	} else {
-		painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 1.3), shaded_color(option->palette.color(QPalette::Window), -10), shaded_color(option->palette.color(QPalette::Window), -15)));
-	}
-	painter->drawPath(button_path(rect, 1.5));
-	rect.adjust(t, t, -t, -t);
-	QBrush bgbrush = option->palette.brush(option->state & QStyle::State_Enabled ? (bgrole == QPalette::NoRole ? QPalette::Button : bgrole) : QPalette::Button);
-	if (bgbrush.style() == Qt::SolidPattern && bgbrush.color().alpha() == 0) {
-		QColor color = option->palette.color(QPalette::Window);
-		color.setAlpha(0);
-		bgbrush = color;
-	}
-	if (frame) {
-		if (option->state & QStyle::State_Enabled) {
-                        if (option->state & QStyle::State_Sunken || option->state & QStyle::State_On) {
-				painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 1.1), shaded_color(option->palette.color(QPalette::Window), -35), shaded_color(option->palette.color(QPalette::Window), -75)));
-			} else {
-				painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 1.1), shaded_color(option->palette.color(QPalette::Window), -75), shaded_color(option->palette.color(QPalette::Window), -45)));
-			}
-		} else {
-			painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 1.1), shaded_color(option->palette.color(QPalette::Window), -35), shaded_color(option->palette.color(QPalette::Window), -35)));
-		}
-		painter->drawPath(button_path(rect, 1.3));
-		rect.adjust(t, t, -t, -t);
-
-		if (bgbrush.style() == Qt::SolidPattern) {
-			QColor bgcolor = bgbrush.color();
-			if (option->state & QStyle::State_On) {
-				bgcolor = blend_color(bgcolor, option->palette.color(QPalette::Highlight), 0.2);
-				bgbrush = button_gradient(rect, bgcolor, option);
-			}
-			if (option->state & QStyle::State_Enabled) {
-				if (option->state & QStyle::State_Sunken) {
-					bgcolor = bgcolor.lighter(102);
-				} else if (option->state & QStyle::State_MouseOver) {
-					bgcolor = bgcolor.lighter(104);
-				}
-				bgbrush = button_gradient(rect, bgcolor, option);
-			}
-			painter->setBrush(bgbrush);
-		//	painter->setBrush(option->palette.color(QPalette::Button));
-			painter->drawPath(button_path(rect, 1.1));
-			if (option->state  & QStyle::State_Enabled) {
-				if (option->state & QStyle::State_Sunken || option->state & QStyle::State_On) {
-					painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 0.9), shaded_color(bgcolor, -10), shaded_color(bgcolor, -20)));
-				} else {
-					painter->setBrush(path_edge_gradient(rect, option, button_path(rect, 0.9), shaded_color(bgcolor, -20), shaded_color(bgcolor, 160)));
-				}
-				painter->drawPath(button_path(rect, 1.1));
-			}
-		}
-		painter->setBrush(bgbrush);
-	} else {
-		QColor bgcolor = option->palette.color(QPalette::Window);
-		if (option->state & QStyle::State_MouseOver) {
-			bgcolor = bgcolor.lighter(104);
-		}
-		if (option->state & QStyle::State_On) {
-			bgcolor = blend_color(bgcolor, option->palette.color(QPalette::Highlight), 0.2);
-		}
-		painter->setBrush(bgcolor);
-	}
-	rect.adjust(t, t, -t, -t);
-	painter->save();
-	// make transparent buttons appear transparent
-	painter->setCompositionMode(QPainter::CompositionMode_DestinationOut);
-        painter->setBrush(Qt::black);
-	painter->drawPath(button_path(rect, 0.9));
-	painter->restore();
-	painter->drawPath(button_path(rect, 0.9));
-}
-
-
-void paintPushButtonBevel(QPainter *painter, const QStyleOptionButton *option, const QWidget *widget, const QStyle *style)
-{
-	QStyleOptionButton opt = *option;
-
-	opt.features &= ~(QStyleOptionButton::HasMenu);
-	((QCommonStyle *) style)->QCommonStyle::drawControl(QStyle::CE_PushButtonBevel, &opt, painter, widget);
-	if (option->features & QStyleOptionButton::Flat) {
-		if (!(option->state & (QStyle::State_Sunken | QStyle::State_On))) {
-			if (option->state & QStyle::State_MouseOver) {
-				painter->fillRect(option->rect.adjusted(2, 2, -2, -2), QColor(255, 255, 255, 60));
-			}
-		}
-	}
-	if (option->features & QStyleOptionButton::HasMenu) {
-		int size = style->pixelMetric(QStyle::PM_MenuButtonIndicator, &opt, widget);
-		opt.palette.setColor(QPalette::WindowText, opt.palette.color(widget ? widget->foregroundRole() : QPalette::ButtonText));
-		opt.state &= ~(QStyle::State_MouseOver);
-		if (option->direction == Qt::LeftToRight) {
-			opt.rect = QRect(option->rect.right() - size - 2, option->rect.top(), size, option->rect.height());
-		} else {
-			opt.rect = QRect(option->rect.left() + 4, option->rect.top(), size, option->rect.height());
-		}
-		if (option->state & (QStyle::State_Sunken | QStyle::State_On)) {
-			opt.rect.translate(style->pixelMetric(QStyle::PM_ButtonShiftHorizontal, &opt, widget), style->pixelMetric(QStyle::PM_ButtonShiftVertical, &opt, widget));
-		}
-		style->drawPrimitive(QStyle::PE_IndicatorArrowDown, &opt, painter, widget);
-	}
-}
-
-
-/*
- * skulpture_cache.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPixmapCache>
-#include <QtGui/QGradient>
-#include <QtGui/QPainter>
-#include <QtGui/QPainterPath>
-#include "sk_factory.h"
-#include <cmath>
-
-// FIXME
-#if (QT_VERSION < QT_VERSION_CHECK(4, 3, 0))
-#define cacheKey serialNumber
-#endif
-
-
-/*-----------------------------------------------------------------------*/
-
-static const bool UsePixmapCache = true;
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * paint a pushbutton to painter
- *
- */
-
-extern void paintButtonPanel(QPainter *painter, const QStyleOptionButton *option, QPalette::ColorRole bgrole);
-
-static const int button_edge_size = 16;
-static const int button_inner_width = 32;
-
-void paintCommandButtonPanel(QPainter *painter, const QStyleOptionButton *option, const QWidget *widget)
-{
-	Q_UNUSED(widget);
-	QPalette::ColorRole bgrole = /*widget ? widget->backgroundRole() : */QPalette::Button;
-
-	bool useCache = UsePixmapCache;
-	QString pixmapName;
-	QPixmap pixmap;
-	QRect r = option->rect;
-	r.setWidth(button_inner_width + 2 * button_edge_size);
-
-	if (/*option->state & (QStyle::State_HasFocus | QStyle::State_MouseOver) ||*/ r.height() > 64) {
-		useCache = false;
-	}
-	if (useCache) {
-		uint state = uint(option->state) & (QStyle::State_Enabled | QStyle::State_On | QStyle::State_MouseOver | QStyle::State_Sunken | QStyle::State_HasFocus);
-		uint features = uint(option->features) & (QStyleOptionButton::Flat | QStyleOptionButton::DefaultButton);
-		if (!(state & QStyle::State_Enabled)) {
-			state &= ~(QStyle::State_MouseOver | QStyle::State_HasFocus);
-		}
-		pixmapName.sprintf("scp-cbp-%x-%x-%x-%x-%llx-%x", features, uint(bgrole), state, option->direction, option->palette.cacheKey(), r.height());
-	}
-	if (!useCache || !QPixmapCache::find(pixmapName, pixmap)) {
-		pixmap =  QPixmap(r.size());
-		pixmap.fill(Qt::transparent);
-	//	pixmap.fill(Qt::red);
-		QPainter p(&pixmap);
-		QStyleOptionButton but = *option;
-		but.rect = QRect(QPoint(0, 0), r.size());
-	//	### neither Clear nor Source works?
-	//	p.setCompositionMode(QPainter::CompositionMode_Clear);
-	//	p.setCompositionMode(QPainter::CompositionMode_Source);
-	//	p.fillRect(but.rect, Qt::transparent);
-	//	p.setCompositionMode(QPainter::CompositionMode_SourceOver);
-		p.setFont(painter->font());
-                p.setRenderHint(QPainter::Antialiasing, true);
-		paintButtonPanel(&p, &but, bgrole);
-		p.end();
-		if (useCache) {
-			QPixmapCache::insert(pixmapName, pixmap);
-		//	qDebug() << "inserted into cache:" << pixmapName;
-		}
-	}
-	int rem;
-	if (option->rect.width() == r.width()) {
-		rem = r.width();
-	} else {
-		int side = qMin(option->rect.width() / 2, button_inner_width + button_edge_size);
-		painter->drawPixmap(r.topLeft(), pixmap, QRect(0, 0, side, r.height()));
-		int midw = option->rect.width() - 2 * side;
-		rem = option->rect.width() - side;
-		r.translate(side, 0);
-		while (midw > 0) {
-			int w = qMin(button_inner_width, midw);
-			rem -= w;
-			painter->drawPixmap(r.topLeft(), pixmap, QRect(button_edge_size, 0, w, r.height()));
-			r.translate(w, 0);
-			midw -= button_inner_width;
-		}
-	}
-	painter->drawPixmap(r.topLeft(), pixmap, QRect(r.width() - rem, 0, rem, r.height()));
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintPanelButtonTool(QPainter *painter, const QStyleOption *option, const QWidget *widget, const QStyle *style)
-{
-	Q_UNUSED(style);
-	QStyleOptionButton button;
-
-	if (widget && !qstrcmp(widget->metaObject()->className(), "QDockWidgetTitleButton")) {
-		if (!(option->state & QStyle::State_MouseOver) && !(option->state & QStyle::State_On)) return;
-	}
-	button.QStyleOption::operator=(*option);
-	button.features = QStyleOptionButton::None;
-//	button.state &= ~(QStyle::State_Sunken | QStyle::State_Selected | QStyle::State_On);
-	// ### qtconfig creates its color select buttons as disabled...
-	// ### the same is done in for TitleBar buttons
-	if (button.state == QStyle::State_Sunken || button.state == QStyle::State_Raised) {
-		button.state |= QStyle::State_Enabled;
-	} else if (!(button.state & QStyle::State_Enabled) && (option->state & QStyle::State_AutoRaise)) {
-		return;
-	}
-	// ### don't know if tool buttons should have that big frame...
-	button.rect.adjust(-1, -1, 1, 1);
-	// FIXME bgrole?
-	paintCommandButtonPanel(painter, &button, 0);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-static void paintIndicatorCached(QPainter *painter, const QStyleOption *option, void (*paintIndicator)(QPainter *painter, const QStyleOption *option), bool useCache, const QString &pixmapName)
-{
-	QPixmap pixmap;
-
-	if (!useCache || !QPixmapCache::find(pixmapName, pixmap)) {
-		pixmap =  QPixmap(option->rect.size());
-#if 1
-		pixmap.fill(Qt::transparent);
-	//	pixmap.fill(Qt::red);
-#else
-		pixmap.fill(option->palette.color(QPalette::Window));
-#endif
-		QPainter p(&pixmap);
-		QStyleOption opt = *option;
-		opt.rect = QRect(QPoint(0, 0), option->rect.size());
-	//	p.setCompositionMode(QPainter::CompositionMode_Clear);
-	//	p.setCompositionMode(QPainter::CompositionMode_Source);
-	//	p.fillRect(opt.rect, Qt::transparent);
-	//	p.setCompositionMode(QPainter::CompositionMode_SourceOver);
-		p.setFont(painter->font());
-		p.setRenderHint(QPainter::Antialiasing, true);
-		paintIndicator(&p, &opt);
-		p.end();
-		if (useCache) {
-			QPixmapCache::insert(pixmapName, pixmap);
-		//	qDebug() << "inserted into cache:" << pixmapName;
-		}
-	}
-	painter->drawPixmap(option->rect, pixmap);
-}
-
-
-static void paintIndicatorShape(QPainter *painter, const QStyleOption *option, qreal scale, const QPainterPath &shapePath)
-{
-    // configuration
-    const QPalette::ColorRole indicatorRole = QPalette::Text;
-
-    if (option->state & QStyle::State_Sunken || option->state & QStyle::State_On || option->state & QStyle::State_MouseOver) {
-        painter->save();
-        painter->setPen(Qt::NoPen);
-        painter->translate(QRectF(option->rect).center());
-        painter->setRenderHint(QPainter::Antialiasing, true);
-        QColor color;
-        if ((option->state & QStyle::State_MouseOver || option->state & QStyle::State_Sunken) && option->state & QStyle::State_Enabled) {
-            color = option->palette.color(QPalette::Highlight);
-            if (!(option->state & QStyle::State_Sunken) && !(option->state & QStyle::State_On)) {
-                color.setAlpha(80);
-            }
-        } else if (!(option->state & QStyle::State_Sunken) && option->state & QStyle::State_On) {
-            color = option->palette.color(indicatorRole);
-            color.setAlpha(80);
-        }
-        if (color.isValid()) {
-            painter->setBrush(color);
-            QMatrix matrix(scale, 0, 0, scale, 0, 0);
-            painter->drawPath(matrix.map(shapePath));
-        }
-        if (!(option->state & QStyle::State_Sunken) && option->state & QStyle::State_On) {
-            painter->setBrush(option->palette.brush(indicatorRole));
-            QMatrix matrix(scale - 1, 0, 0, scale - 1, 0, 0);
-            painter->drawPath(matrix.map(shapePath));
-        }
-        painter->restore();
-    }
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-#define csx 0.35
-#define csc 0.2
-
-// cross
-static const ShapeFactory::Code checkShapeDescription1[] = {
-    Pmove(-1 + csc, -1), Pline(0, -csx), Pline(1 - csc, -1), Pline(1, -1 + csc),
-    Pline(csx, 0), Pline(1, 1 - csc), Pline(1 - csc, 1), Pline(0, csx),
-    Pline(-1 + csc, 1), Pline(-1, 1 - csc), Pline(-csx, 0), Pline(-1, -1 + csc), Pend
-};
-
-// checkmark
-static const ShapeFactory::Code checkShapeDescription2[] = {
-    Pmove(1 - csc, -1), Pline(1, -1 + csc), Pline(csx, 1), Pline(-csx, 1), Pline(-1, csc),
-    Pline(-1 + csc, 0), Pline(0, 1 - 2 * csx), Pend
-};
-
-
-static void paintCheckBox(QPainter *painter, const QStyleOption *option)
-{
-    if (option->state & QStyle::State_NoChange) {
-        paintThinFrame(painter, option->rect, option->palette, 30, -10);
-        paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -50, -60);
-        paintThinFrame(painter, option->rect.adjusted(2, 2, -2, -2), option->palette, 0, 60);
-        QColor color = option->palette.color(QPalette::Window);
-        if (option->state & QStyle::State_Enabled) {
-            if (option->state & QStyle::State_Sunken) {
-                color = color.darker(110);
-            } else if (option->state & QStyle::State_MouseOver) {
-                color = color.lighter(106);
-            }
-        } else {
-            color = color.darker(106);
-        }
-        painter->fillRect(option->rect.adjusted(3, 3, -3, -3), color);
-    } else {
-        QColor color = option->palette.color(QPalette::Base);
-        if (!(option->state & QStyle::State_On) && !(option->state & QStyle::State_Enabled)) {
-            color = option->palette.color(QPalette::Window);
-        } else if (option->state & QStyle::State_MouseOver) {
-            color = color.lighter(105);
-        }
-        painter->fillRect(option->rect.adjusted(2, 2, -2, -2), color);
-        paintRecessedFrame(painter, option->rect, option->palette, RF_Small);
-        if (!(option->state & QStyle::State_Sunken)) {
-            if (option->state & QStyle::State_Enabled) {
-                paintThinFrame(painter, option->rect.adjusted(2, 2, -2, -2), option->palette, 140, 200);
-            } else {
-                paintThinFrame(painter, option->rect.adjusted(2, 2, -2, -2), option->palette, 180, 180);
-            }
-        }
-        const ShapeFactory::Description description = checkShapeDescription1;
-        const qreal scale = (option->rect.width() - 4) * 0.35;
-        paintIndicatorShape(painter, option, scale, ShapeFactory::createShape(description));
-    }
-}
-
-
-void paintIndicatorCheckBox(QPainter *painter, const QStyleOptionButton *option)
-{
-	bool useCache = UsePixmapCache;
-	QString pixmapName;
-
-	if (/* option->state & (QStyle::State_HasFocus | QStyle::State_MouseOver) ||*/ option->rect.width() * option->rect.height() > 4096) {
-		useCache = false;
-	}
-	if (useCache) {
-		uint state = uint(option->state) & (QStyle::State_Enabled | QStyle::State_On | QStyle::State_NoChange | QStyle::State_MouseOver | QStyle::State_Sunken | QStyle::State_HasFocus);
-		if (!(state & QStyle::State_Enabled)) {
-			state &= ~(QStyle::State_MouseOver | QStyle::State_HasFocus);
-		}
-		state &= ~(QStyle::State_HasFocus);
-		pixmapName.sprintf("scp-icb-%x-%x-%llx-%x-%x", state, option->direction, option->palette.cacheKey(), option->rect.width(), option->rect.height());
-	}
-	paintIndicatorCached(painter, option, paintCheckBox, useCache, pixmapName);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-static void paintThinBevel(QPainter *painter, const QPainterPath &path, const QColor &dark, const QColor &light, qreal lightAngle = M_PI / 4)
-{
-    QMatrix scaleUp;
-    scaleUp.scale(10, 10);
-    QList<QPolygonF> bevel = path.toSubpathPolygons(scaleUp);
-    Q_FOREACH (QPolygonF polygon, bevel) {
-        for (int i = 0; i < polygon.size() - 1; ++i) {
-            QLineF line(polygon.at(i) / 10, polygon.at(i + 1) / 10);
-            line.setLength(line.length() + 0.20);
-            painter->setPen(QPen(blend_color(light, dark, sin(atan2(polygon.at(i + 1).y() - polygon.at(i).y(), polygon.at(i + 1).x() - polygon.at(i).x()) - lightAngle) / 2 + 0.5), 1.0, Qt::SolidLine, Qt::FlatCap));
-            painter->drawLine(line);
-        }
-    }
-}
-
-
-static void paintThinBevel(QPainter *painter, const QPainterPath &path, const QPalette &palette, int dark, int light, qreal lightAngle = M_PI / 4)
-{
-    paintThinBevel(painter, path, shaded_color(palette.color(QPalette::Window), dark), shaded_color(palette.color(QPalette::Window), light), lightAngle);
-}
-
-
-static inline QPainterPath radioShape(const QRectF rect)
-{
-    QPainterPath path;
-    path.addEllipse(rect);
-    return path;
-}
-
-
-static void paintRadioButton(QPainter *painter, const QStyleOption *option)
-{
-    const qreal lightAngle = option->direction == Qt::LeftToRight ? M_PI / 4 : 3 * M_PI / 4;
-    QColor color = option->palette.color(QPalette::Base);
-    if (!(option->state & QStyle::State_On) && !(option->state & QStyle::State_Enabled)) {
-        color = option->palette.color(QPalette::Window);
-    } else if (option->state & QStyle::State_MouseOver) {
-        color = color.lighter(105);
-    }
-    painter->save();
-    painter->setRenderHint(QPainter::Antialiasing, true);
-    painter->setPen(Qt::NoPen);
-    painter->setBrush(color);
-    painter->drawPath(radioShape(QRectF(option->rect).adjusted(2, 2, -2, -2)));
-    paintThinBevel(painter, radioShape(QRectF(option->rect).adjusted(0.5, 0.5, -0.5, -0.5)), option->palette, 39, -26, lightAngle);
-    paintThinBevel(painter, radioShape(QRectF(option->rect).adjusted(1.5, 1.5, -1.5, -1.5)), option->palette, -26, -91, lightAngle);
-    paintThinBevel(painter, radioShape(QRectF(option->rect).adjusted(2.5, 2.5, -2.5, -2.5)), QColor(0, 0, 0, 15), QColor(0, 0, 0, 30), lightAngle);
-    paintThinBevel(painter, radioShape(QRectF(option->rect).adjusted(3.5, 3.5, -3.5, -3.5)), QColor(0, 0, 0, 8), QColor(0, 0, 0, 15), lightAngle);
-    paintThinBevel(painter, radioShape(QRectF(option->rect).adjusted(4.5, 4.5, -4.5, -4.5)), QColor(0, 0, 0, 4), QColor(0, 0, 0, 8), lightAngle);
-    if (!(option->state & QStyle::State_Sunken)) {
-        if (option->state & QStyle::State_Enabled) {
-            paintThinBevel(painter, radioShape(QRectF(option->rect).adjusted(2.5, 2.5, -2.5, -2.5)), option->palette, 140, 300, lightAngle);
-        } else {
-            paintThinBevel(painter, radioShape(QRectF(option->rect).adjusted(2.5, 2.5, -2.5, -2.5)), option->palette, 180, 180, lightAngle);
-        }
-    }
-    painter->restore();
-    const qreal scale = (option->rect.width() - 4) * 0.35;
-    QPainterPath circlePath;
-    const qreal radius = 0.7;
-    circlePath.addEllipse(QRectF(-radius, -radius, 2 * radius, 2 * radius));
-    paintIndicatorShape(painter, option, scale, circlePath);
-}
-
-
-void paintIndicatorRadioButton(QPainter *painter, const QStyleOptionButton *option)
-{
-	bool useCache = UsePixmapCache;
-	QString pixmapName;
-
-	if (/* option->state & (QStyle::State_HasFocus | QStyle::State_MouseOver) ||*/ option->rect.width() * option->rect.height() > 4096) {
-		useCache = false;
-	}
-	if (useCache) {
-		uint state = uint(option->state) & (QStyle::State_Enabled | QStyle::State_On | QStyle::State_MouseOver | QStyle::State_Sunken | QStyle::State_HasFocus);
-		if (!(state & QStyle::State_Enabled)) {
-			state &= ~(QStyle::State_MouseOver | QStyle::State_HasFocus);
-		}
-		state &= ~(QStyle::State_HasFocus);
-		pixmapName.sprintf("scp-irb-%x-%x-%llx-%x-%x", state, option->direction, option->palette.cacheKey(), option->rect.width(), option->rect.height());
-	}
-	paintIndicatorCached(painter, option, paintRadioButton, useCache, pixmapName);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintIndicatorMenuCheckMark(QPainter *painter, const QStyleOptionMenuItem *option, const QWidget *widget, const QStyle *style)
-{
-	QStyleOptionButton buttonOption;
-
-	buttonOption.QStyleOption::operator=(*option);
-//	buttonOption.rect.adjust(-2, -2, 2, 2);
-//	qDebug("here!");
-//	printf("state 0x%08x\n", uint(buttonOption.state));
-        if (option->state & QStyle::State_Enabled) {
-		if (buttonOption.state & QStyle::State_On) {
-			buttonOption.state |= QStyle::State_Sunken;
-		}
-	} else {
-            buttonOption.state &= ~QStyle::State_Sunken;
-        }
-        if (option->state & QStyle::State_Selected) {
-            buttonOption.state |= QStyle::State_MouseOver;
-        } else {
-            buttonOption.state &= ~QStyle::State_MouseOver;
-        }
-        if (option->checked) {
-            buttonOption.state |= QStyle::State_On;
-        } else {
-            buttonOption.state &= ~QStyle::State_On;
-        }
-	if (widget) {
-		buttonOption.palette = widget->palette();
-		if (option->state & QStyle::State_Enabled) {
-			if (option->state & QStyle::State_Active) {
-				buttonOption.palette.setCurrentColorGroup(QPalette::Active);
-			} else {
-				buttonOption.palette.setCurrentColorGroup(QPalette::Inactive);
-			}
-		} else {
-			buttonOption.palette.setCurrentColorGroup(QPalette::Disabled);
-		}
-	}
-	if (option->checkType == QStyleOptionMenuItem::Exclusive) {
-		QSize size(style->pixelMetric(QStyle::PM_ExclusiveIndicatorWidth, option, widget), style->pixelMetric(QStyle::PM_ExclusiveIndicatorHeight, option, widget));
-                buttonOption.rect = QRect(option->rect.x() + ((option->rect.width() - size.width()) >> 1), option->rect.y() + ((option->rect.height() - size.height()) >> 1), size.width(), size.height());
-		paintIndicatorRadioButton(painter, &buttonOption);
-	} else {
-		QSize size(style->pixelMetric(QStyle::PM_IndicatorWidth, option, widget), style->pixelMetric(QStyle::PM_IndicatorHeight, option, widget));
-                buttonOption.rect = QRect(option->rect.x() + ((option->rect.width() - size.width()) >> 1), option->rect.y() + ((option->rect.height() - size.height()) >> 1), size.width(), size.height());
-                paintIndicatorCheckBox(painter, &buttonOption);
-	}
-}
-
-
-void paintQ3CheckListIndicator(QPainter *painter, const QStyleOptionQ3ListView *option, const QWidget *widget, const QStyle *style)
-{
-	if (!option->items.isEmpty()) {
-		QStyleOptionButton buttonOption;
-
-		buttonOption.QStyleOption::operator=(*option);
-		QSize size(style->pixelMetric(QStyle::PM_IndicatorWidth, option, widget), style->pixelMetric(QStyle::PM_IndicatorHeight, option, widget));
-		buttonOption.rect = QRect(option->rect.center() - QPoint(size.width() / 2, size.height() / 2), size);
-//		buttonOption.rect.adjust(0, -1, 0, -1);
-		paintIndicatorCheckBox(painter, &buttonOption);
-	}
-}
-
-
-void paintQ3CheckListExclusiveIndicator(QPainter *painter, const QStyleOptionQ3ListView *option, const QWidget *widget, const QStyle *style)
-{
-	if (!option->items.isEmpty()) {
-		QStyleOptionButton buttonOption;
-
-		buttonOption.QStyleOption::operator=(*option);
-		QSize size(style->pixelMetric(QStyle::PM_ExclusiveIndicatorWidth, option, widget), style->pixelMetric(QStyle::PM_ExclusiveIndicatorHeight, option, widget));
-		buttonOption.rect = QRect(option->rect.center() - QPoint(size.width() / 2, size.height() / 2), size);
-//		buttonOption.rect.adjust(0, -1, 0, -1);
-		paintIndicatorRadioButton(painter, &buttonOption);
-	}
-}
-
-
-void paintIndicatorItemViewItemCheck(QPainter *painter, const QStyleOption *option)
-{
-	QStyleOptionButton buttonOption;
-
-	buttonOption.QStyleOption::operator=(*option);
-	buttonOption.state &= ~QStyle::State_MouseOver;
-	paintIndicatorCheckBox(painter, &buttonOption);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-static void paintGrip(QPainter *painter, const QStyleOption *option)
-{
-//	painter->fillRect(option->rect, Qt::red);
-	int d = qMin(option->rect.width(), option->rect.height());
-	// good values are 3 (very small), 4 (small), 5 (good), 7 (large), 9 (huge)
-	// int d = 5;
-	QRectF rect(QRectF(option->rect).center() - QPointF(d / 2.0, d / 2.0), QSizeF(d, d));
-	const qreal angle = option->direction == Qt::LeftToRight ? 135.0 : 45.0;
-//	const qreal angle = 90;
-	QColor color;
-        qreal opacity = 0.9;
-
-	painter->save();
-	painter->setPen(Qt::NoPen);
-	if (option->state & QStyle::State_Enabled) {
-		if (option->state & QStyle::State_Sunken) {
-			color = option->palette.color(QPalette::Highlight).darker(110);
-		} else {
-			color = option->palette.color(QPalette::Button);
-		}
-	} else {
-		color = option->palette.color(QPalette::Button);
-		opacity = 0.5;
-	}
-
-	QConicalGradient gradient1(rect.center(), angle);
-	gradient1.setColorAt(0.0, shaded_color(color, -110));
-	gradient1.setColorAt(0.25, shaded_color(color, -30));
-	gradient1.setColorAt(0.5, shaded_color(color, 180));
-	gradient1.setColorAt(0.75, shaded_color(color, -30));
-	gradient1.setColorAt(1.0, shaded_color(color, -110));
-	painter->setBrush(color);
-	painter->drawEllipse(rect);
-	painter->setBrush(gradient1);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-        // ### merge opacity into color
-        painter->setOpacity(opacity);
-#endif
-	painter->drawEllipse(rect);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-        painter->setOpacity(1.0);
-	if (d > 2) {
-		QConicalGradient gradient2(rect.center(), angle);
-		gradient2.setColorAt(0.0, shaded_color(color, -40));
-		gradient2.setColorAt(0.25, shaded_color(color, 0));
-		gradient2.setColorAt(0.5, shaded_color(color, 210));
-		gradient2.setColorAt(0.75, shaded_color(color, 0));
-		gradient2.setColorAt(1.0, shaded_color(color, -40));
-		rect.adjust(1, 1, -1, -1);
-		painter->setBrush(color);
-		painter->drawEllipse(rect);
-		painter->setBrush(gradient2);
-		painter->setOpacity(opacity);
-		painter->drawEllipse(rect);
-		painter->setOpacity(1.0);
-		if (d > 8) {
-			QConicalGradient gradient3(rect.center(), angle);
-			gradient3.setColorAt(0.0, shaded_color(color, -10));
-			gradient3.setColorAt(0.25, shaded_color(color, 0));
-			gradient3.setColorAt(0.5, shaded_color(color, 180));
-			gradient3.setColorAt(0.75, shaded_color(color, 0));
-			gradient3.setColorAt(1.0, shaded_color(color, -10));
-			rect.adjust(2, 2, -2, -2);
-			painter->setBrush(color);
-			painter->drawEllipse(rect);
-			painter->setBrush(gradient3);
-			painter->setOpacity(opacity);
-			painter->drawEllipse(rect);
-			painter->setOpacity(1.0);
-		}
-	}
-#endif
-	painter->restore();
-}
-
-
-void paintCachedGrip(QPainter *painter, const QStyleOption *option, QPalette::ColorRole /*bgrole*/)
-{
-	bool useCache = UsePixmapCache;
-	QString pixmapName;
-
-	if (/* option->state & (QStyle::State_HasFocus | QStyle::State_MouseOver) ||*/ option->rect.width() * option->rect.height() > 4096) {
-		useCache = false;
-	}
-	if (useCache) {
-		uint state = uint(option->state) & (QStyle::State_Enabled | QStyle::State_On | QStyle::State_MouseOver | QStyle::State_Sunken | QStyle::State_HasFocus);
-		if (!(state & QStyle::State_Enabled)) {
-			state &= ~(QStyle::State_MouseOver | QStyle::State_HasFocus);
-		}
-		state &= ~(QStyle::State_HasFocus);
-                QByteArray colorName = option->palette.color(QPalette::Button).name().toAscii();
-                pixmapName.sprintf("scp-isg-%x-%x-%s-%x-%x", state, option->direction, colorName.constData(), option->rect.width(), option->rect.height());
-	}
-	paintIndicatorCached(painter, option, paintGrip, useCache, pixmapName);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintDialBase(QPainter *painter, const QStyleOption *option)
-{
-//	painter->fillRect(option->rect, Qt::red);
-//	painter->save();
-//	painter->setRenderHint(QPainter::Antialiasing, true);
-	int d = qMin(option->rect.width(), option->rect.height());
-/*	if (d > 20 && option->notchTarget > 0) {
-		d += -1;
-	}
-*/	QRectF r((option->rect.width() - d) / 2.0, (option->rect.height() - d) / 2.0, d, d);
-	const qreal angle = option->direction == Qt::LeftToRight ? 135.0 : 45.0;
-//	const qreal angle = 90;
-
-	painter->setPen(Qt::NoPen);
-	QColor border_color = option->palette.color(QPalette::Window);
-#if 0
-	{
-		QRadialGradient depth_gradient(r.center(), d / 2);
-//		depth_gradient.setColorAt(0.0, QColor(0, 0, 0, 255));
-		depth_gradient.setColorAt(0.5, QColor(0, 0, 0, 255));
-		depth_gradient.setColorAt(1.0, QColor(0, 0, 0, 0));
-		painter->setBrush(depth_gradient);
-		painter->drawEllipse(r);
-	}
-#endif
-#if 1
-	if (option->state & QStyle::State_HasFocus && option->state & QStyle::State_KeyboardFocusChange) {
-		painter->setBrush(option->palette.color(QPalette::Highlight).darker(180));
-		r.adjust(1, 1, -1, -1);
-		painter->drawEllipse(r);
-		painter->setBrush(border_color);
-		r.adjust(1, 1, -1, -1);
-		painter->drawEllipse(r);
-		r.adjust(1, 1, -1, -1);
-	} else {
-		painter->setBrush(border_color);
-		r.adjust(1, 1, -1, -1);
-		painter->drawEllipse(r);
-		r.adjust(1, 1, -1, -1);
-		QConicalGradient border_gradient(r.center(), angle);
-		if (!(option->state & QStyle::State_Enabled)) {
-			border_color = border_color.lighter(120);
-		}
-		border_gradient.setColorAt(0.0, border_color.darker(180));
-		border_gradient.setColorAt(0.3, border_color.darker(130));
-		border_gradient.setColorAt(0.5, border_color.darker(170));
-		border_gradient.setColorAt(0.7, border_color.darker(130));
-		border_gradient.setColorAt(1.0, border_color.darker(180));
-		painter->setBrush(border_gradient);
-//		painter->setBrush(Qt::blue);
-		painter->drawEllipse(r);
-		r.adjust(1, 1, -1, -1);
-	}
-	d -= 6;
-
-	QColor dial_color;
-	if (option->state & QStyle::State_Enabled) {
-		dial_color = option->palette.color(QPalette::Button).lighter(101);
-		if (option->state & QStyle::State_MouseOver) {
-			dial_color = dial_color.lighter(103);
-		}
-	} else {
-		dial_color = option->palette.color(QPalette::Window);
-	}
-	qreal t = option->state & QStyle::State_Enabled ? 2.0 : 1.5;
-	if (1) {
-		// ###: work around Qt 4.3.0 bug? (this works for 4.3.1)
-		QConicalGradient border_gradient(r.center(), angle);
-		border_gradient.setColorAt(0.0, dial_color.lighter(120));
-		border_gradient.setColorAt(0.2, dial_color);
-		border_gradient.setColorAt(0.5, dial_color.darker(130));
-		border_gradient.setColorAt(0.8, dial_color);
-		border_gradient.setColorAt(1.0, dial_color.lighter(120));
-		painter->setPen(QPen(border_gradient, t));
-	} else {
-		painter->setPen(QPen(Qt::red, t));
-	}
-#if 0
-	QLinearGradient dial_gradient(r.topLeft(), r.bottomLeft());
-	dial_gradient.setColorAt(0.0, dial_color.darker(105));
-	dial_gradient.setColorAt(0.5, dial_color.lighter(102));
-	dial_gradient.setColorAt(1.0, dial_color.lighter(105));
-#elif 1
-              QLinearGradient dial_gradient(option->direction == Qt::LeftToRight ? r.topLeft() : r.topRight(), option->direction == Qt::LeftToRight ? r.bottomRight() : r.bottomLeft());
-//	QLinearGradient dial_gradient(r.topLeft(), r.bottomLeft());
-	if (true || option->state & QStyle::State_Enabled) {
-#if 1
-		dial_gradient.setColorAt(0.0, dial_color.darker(106));
-		dial_gradient.setColorAt(1.0, dial_color.lighter(104));
-#else
-		dial_gradient.setColorAt(0.0, dial_color.lighter(101));
-		dial_gradient.setColorAt(0.5, dial_color.darker(103));
-		dial_gradient.setColorAt(1.0, dial_color.lighter(104));
-#endif
-	} else {
-		dial_gradient.setColorAt(0.0, dial_color);
-		dial_gradient.setColorAt(1.0, dial_color);
-	}
-#elif 0
-	QConicalGradient dial_gradient(r.center(), angle);
-	dial_gradient.setColorAt(0.0, dial_color.lighter(102));
-	dial_gradient.setColorAt(0.5, dial_color.darker(103));
-	dial_gradient.setColorAt(1.0, dial_color.lighter(102));
-#else
-	QBrush dial_gradient(dial_color);
-#endif
-	painter->setBrush(dial_gradient);
-	t = t / 2;
-	painter->drawEllipse(r.adjusted(t, t, -t, -t));
-
-//	painter->setPen(Qt::NoPen);
-//	painter->setBrush(dial_color);
-//	painter->drawEllipse(r.adjusted(d / 4, d / 4, - d / 4, - d / 4));
-
-#if 0
-	QLinearGradient border2_gradient(r.topLeft(), r.bottomRight());
-	border2_gradient.setColorAt(1.0, dial_color.darker(425));
-	border2_gradient.setColorAt(0.9, dial_color);
-	border2_gradient.setColorAt(0.0, dial_color.darker(400));
-	painter->setPen(QPen(border2_gradient, 1.3));
-	painter->setBrush(Qt::NoBrush);
-	painter->drawEllipse(r.adjusted(0.3, 0.3, -0.3, -0.3));
-#endif
-//	painter->restore();
-#endif
-}
-
-
-void paintCachedDialBase(QPainter *painter, const QStyleOptionSlider *option)
-{
-	bool useCache = UsePixmapCache;
-	QString pixmapName;
-	QRect r = option->rect;
-	int d = qMin(r.width(), r.height());
-
-	if (/* option->state & (QStyle::State_HasFocus | QStyle::State_MouseOver) ||*/ d > 128) {
-		useCache = false;
-	}
-	if (useCache) {
-		uint state = uint(option->state) & (QStyle::State_Enabled | QStyle::State_On | QStyle::State_MouseOver | QStyle::State_KeyboardFocusChange | QStyle::State_HasFocus);
-		if (!(state & QStyle::State_Enabled)) {
-			state &= ~(QStyle::State_MouseOver | QStyle::State_HasFocus | QStyle::State_KeyboardFocusChange);
-		}
-	//	state &= ~(QStyle::State_HasFocus);
-		pixmapName.sprintf("scp-qdb-%x-%x-%llx-%x", state, option->direction, option->palette.cacheKey(), d);
-	}
-	paintIndicatorCached(painter, option, paintDialBase, useCache, pixmapName);
-}
-
-
-void paintIndicatorDial(QPainter *painter, const QStyleOptionSlider *option)
-{
-	int d = qMin(option->rect.width(), option->rect.height());
-	QRect rect(option->rect.center() - QPoint((d - 1) / 2, (d - 1) / 2), QSize(d, d));
-	QStyleOptionSlider opt;
-	opt.QStyleOption::operator=(*option);
-	opt.rect = rect;
-	paintCachedDialBase(painter, &opt);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintBranchChildren(QPainter *painter, const QStyleOption *option)
-{
-	painter->setBrush(option->palette.color(QPalette::Text));
-	painter->setPen(Qt::NoPen);
-        const qreal r = qMin(option->rect.width() * 0.5, option->fontMetrics.height() * 0.15);
-        const QPointF center = QRectF(option->rect).center();
-	painter->drawEllipse(QRectF(center.x() - r, center.y() - r, 2 * r, 2 * r));
-}
-
-
-void paintCachedIndicatorBranchChildren(QPainter *painter, const QStyleOption *option)
-{
-	bool useCache = UsePixmapCache;
-	QString pixmapName;
-	QRect r = option->rect;
-	int d = qMin(r.width(), r.height());
-
-	if (/* option->state & (QStyle::State_HasFocus | QStyle::State_MouseOver) ||*/ d > 64) {
-		useCache = false;
-	}
-	if (useCache) {
-		uint state = uint(option->state) & (QStyle::State_Enabled | QStyle::State_Open);
-	//	if (!(state & QStyle::State_Enabled)) {
-	//		state &= ~(QStyle::State_MouseOver | QStyle::State_HasFocus | QStyle::State_KeyboardFocusChange);
-	//	}
-	//	state &= ~(QStyle::State_HasFocus);
-		pixmapName.sprintf("scp-qibc-%x-%x-%llx-%x", state, option->direction, option->palette.cacheKey(), d);
-	}
-	paintIndicatorCached(painter, option, paintBranchChildren, useCache, pixmapName);
-}
-
-
-/*
- * skulpture_color.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QApplication>
-
-
-/*-----------------------------------------------------------------------*/
-
-QColor shaded_color(const QColor &color, int shade)
-{
-#if 1
-	const qreal contrast = 1.0;
-	int r, g, b;
-	color.getRgb(&r, &g, &b);
-	int gray = qGray(r, g, b);
-	gray = qMax(r, qMax(g, b));
-	gray = (r + b + g + 3 * gray) / 6;
-	if (shade < 0) {
-		qreal k = 220.0 / 255.0 * shade;
-		k *= contrast;
-		int a = 255;
-		if (gray > 0) {
-			a = int(k * 255 / (0 - gray));
-			if (a < 0) a = 0;
-			if (a > 255) a = 255;
-		}
-		return QColor(0, 0, 0, a);
-	} else {
-		qreal k = (255 - 220.0) / (255.0) * shade;
-		k *= contrast;
-		int a = 255;
-		if (gray < 255) {
-			a = int(k * 255 / (255 - gray));
-			if (a < 0) a = 0;
-			if (a > 255) a = 255;
-		}
-		return QColor(255, 255, 255, a);
-	}
-#else
-	if (shade < 0) {
-		return QColor(0, 0, 0, -shade);
-	} else {
-		return QColor(255, 255, 255, shade);
-	}
-#endif
-}
-
-
-QColor blend_color(const QColor &c0, const QColor &c1, qreal blend)
-{
-#if 0 // more exact, but probably slower
-	QColor c;
-
-	blend = qMin(1.0, qMax(0.0, blend));
-	c.setRgbF(
-		c0.redF() * (1.0 - blend) + c1.redF() * blend,
-		c0.greenF() * (1.0 - blend) + c1.greenF() * blend,
-		c0.blueF() * (1.0 - blend) + c1.blueF() * blend,
-		c0.alphaF() * (1.0 - blend) + c1.alphaF() * blend
-	);
-	return c;
-#else
-	int b = int(0.5 + 256.0 * blend);
-	b = qMin(256, qMax(0, b));
-	QRgb rgba0 = c0.rgba();
-	QRgb rgba1 = c1.rgba();
-	return QColor(
-		qRed(rgba0) + (((qRed(rgba1) - qRed(rgba0)) * b) >> 8),
-		qGreen(rgba0) + (((qGreen(rgba1) - qGreen(rgba0)) * b) >> 8),
-		qBlue(rgba0) + (((qBlue(rgba1) - qBlue(rgba0)) * b) >> 8),
-		qAlpha(rgba0) + (((qAlpha(rgba1) - qAlpha(rgba0)) * b) >> 8)
-	);
-#endif
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-enum ColorScheme {
-    NormalColorScheme, // allow 3D effects
-    DarkColorScheme, // too dark, no 3D effects
-    BrightColorScheme // too bright, no 3D effects
-};
-
-
-ColorScheme guessColorScheme(const QPalette &palette, QPalette::ColorGroup colorGroup = QPalette::Active, QPalette::ColorRole colorRole = QPalette::Window)
-{
-    const QColor windowColor = palette.color(colorGroup, colorRole);
-    int r, g, b;
-    windowColor.getRgb(&r, &g, &b);
-    int brightness = qGray(r, g, b);
-
-    if (brightness > 230) {
-        return BrightColorScheme;
-    } else if (brightness < 40) {
-        return DarkColorScheme;
-    }
-    return NormalColorScheme;
-}
-
-
-static void computeAlternateBase(QPalette &palette, QPalette::ColorGroup colorGroup)
-{
-    switch (guessColorScheme(palette, colorGroup, QPalette::Base)) {
-        case DarkColorScheme:
-            palette.setColor(colorGroup, QPalette::AlternateBase, palette.color(colorGroup, QPalette::Base).lighter(103));
-            break;
-        case BrightColorScheme:
-        case NormalColorScheme:
-            palette.setColor(colorGroup, QPalette::AlternateBase, palette.color(colorGroup, QPalette::Base).darker(103));
-            break;
-    }
-}
-
-
-static void copyColorGroup(QPalette &palette, QPalette::ColorGroup fromColorGroup, QPalette::ColorGroup toColorGroup)
-{
-    for (int role = int(QPalette::WindowText); role <= int(QPalette::LinkVisited); ++role) {
-        QPalette::ColorRole colorRole = QPalette::ColorRole(role);
-        palette.setColor(toColorGroup, colorRole, palette.color(fromColorGroup, colorRole));
-    }
-}
-
-
-static void computeColorGroups(QPalette &palette, bool kdeMode = false, bool makeDisabledWidgetsTransparent = true)
-{
-    // ### Is this used by pre-Qt 4.5 for HLine / VLine ?
-    palette.setColor(QPalette::Disabled, QPalette::Dark, shaded_color(palette.color(QPalette::Active, QPalette::Window), -20));
-    palette.setColor(QPalette::Disabled, QPalette::Light, shaded_color(palette.color(QPalette::Active, QPalette::Window), 60));
-
-    if (!kdeMode) {
-        // compute remaining colors in Active group
-        computeAlternateBase(palette, QPalette::Active);
-
-        // copy Active group to Inactive group
-        copyColorGroup(palette, QPalette::Active, QPalette::Inactive);
-
-        // compute remaining colors in Inactive group
-        computeAlternateBase(palette, QPalette::Inactive);
-    }
-
-    if (!kdeMode || makeDisabledWidgetsTransparent) {
-        // create Disabled group
-        QColor disabledBackgroundColor = palette.color(QPalette::Active, QPalette::Window);
-        QColor disabledForegroundColor;
-        switch (guessColorScheme(palette, QPalette::Active, QPalette::Window)) {
-            case DarkColorScheme:
-                disabledForegroundColor = palette.color(QPalette::Active, QPalette::Window).lighter(125);
-                break;
-            case BrightColorScheme:
-            case NormalColorScheme:
-                disabledForegroundColor = palette.color(QPalette::Active, QPalette::Window).darker(125);
-                break;
-        }
-
-        palette.setColor(QPalette::Disabled, QPalette::Window, disabledBackgroundColor);
-        palette.setColor(QPalette::Disabled, QPalette::WindowText, disabledForegroundColor);
-        palette.setColor(QPalette::Disabled, QPalette::Base, disabledBackgroundColor);
-        palette.setColor(QPalette::Disabled, QPalette::Text, disabledForegroundColor);
-        palette.setColor(QPalette::Disabled, QPalette::Link, disabledForegroundColor);
-        palette.setColor(QPalette::Disabled, QPalette::LinkVisited, disabledForegroundColor);
-        palette.setColor(QPalette::Disabled, QPalette::Button, disabledBackgroundColor);
-        palette.setColor(QPalette::Disabled, QPalette::ButtonText, disabledForegroundColor);
-        palette.setColor(QPalette::Disabled, QPalette::Highlight, disabledForegroundColor);
-        palette.setColor(QPalette::Disabled, QPalette::HighlightedText, disabledBackgroundColor);
-
-        computeAlternateBase(palette, QPalette::Disabled);
-    }
-}
-
-
-QPalette SkulptureStyle::standardPalette() const
-{
-    QPalette palette(QColor(205, 205, 205));
-
-    palette.setColor(QPalette::Active, QPalette::Base, QColor(229, 229, 229));
-    palette.setColor(QPalette::Active, QPalette::Text, QColor(0, 0, 0));
-    palette.setColor(QPalette::Active, QPalette::Link, QColor(80, 40, 120));
-    palette.setColor(QPalette::Active, QPalette::LinkVisited, QColor(80, 50, 80));
-    palette.setColor(QPalette::Active, QPalette::Highlight, QColor(114, 174, 211));
-    palette.setColor(QPalette::Active, QPalette::HighlightedText, QColor(0, 0, 0));
-    palette.setColor(QPalette::Active, QPalette::Window, QColor(200, 200, 200));
-    palette.setColor(QPalette::Active, QPalette::WindowText, QColor(0, 0, 0));
-//    palette.setColor(QPalette::Active, QPalette::Button, QColor(205, 205, 205));
-    palette.setColor(QPalette::Active, QPalette::ButtonText, QColor(0, 0, 0));
-    palette.setColor(QPalette::Active, QPalette::Shadow, QColor(0, 0, 0));
-    palette.setColor(QPalette::Active, QPalette::BrightText, QColor(240, 240, 240));
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-    palette.setColor(QPalette::Inactive, QPalette::ToolTipBase, QColor(240, 230, 190));
-    palette.setColor(QPalette::Inactive, QPalette::ToolTipText, QColor(0, 0, 0));
-#endif
-
-    computeColorGroups(palette);
-    return palette;
-}
-
-
-void SkulptureStyle::polish(QPalette &palette)
-{
-    ParentStyle::polish(palette);
-    computeColorGroups(palette, qApp->inherits("KApplication"), d->makeDisabledWidgetsTransparent);
-}
-
-
-/*
- * skulpture_combobox.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QApplication>
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintComplexControlArea(QPainter *painter, const QStyleOption *option);
-
-void paintComboBox(QPainter *painter, const QStyleOptionComboBox *option, const QWidget *widget, const QStyle *style)
-{
-    QStyleOptionComboBox opt = *option;
-    const bool buttonMode = false; //!option->editable;
-    QRect rect = style->subControlRect(QStyle::CC_ComboBox, option, QStyle::SC_ComboBoxArrow, widget);
-    if (option->subControls & (QStyle::SC_ComboBoxFrame | QStyle::SC_ComboBoxEditField)) {
-        if (buttonMode) {
-            QStyleOptionButton buttonOption;
-            buttonOption.QStyleOption::operator=(opt);
-            if (buttonOption.state & QStyle::State_On) {
-                buttonOption.state |= QStyle::State_Sunken;
-            } else {
-                buttonOption.state &= ~QStyle::State_Sunken;
-            }
-            buttonOption.state &= ~QStyle::State_On;
-
-            // separator position
-            opt.rect = rect;
-            if (option->direction == Qt::LeftToRight) {
-                opt.rect.setWidth(1);
-            } else {
-                opt.rect.setLeft(rect.left() + rect.width() - 1);
-            }
-            if (option->frame) {
-                style->drawPrimitive(QStyle::PE_PanelButtonCommand, &buttonOption, painter, widget);
-                QColor color = option->palette.color(QPalette::Button);
-                if (!(opt.state & QStyle::State_On)) {
-                    opt.rect.translate(option->direction == Qt::LeftToRight ? -1 : 1, 0);
-                }
-                painter->fillRect(opt.rect, shaded_color(color, option->state & QStyle::State_Enabled ? -30 : -15));
-                if (option->state & QStyle::State_Enabled) {
-                    opt.rect.translate(option->direction == Qt::LeftToRight ? 1 : -1, 0);
-                    painter->fillRect(opt.rect, shaded_color(color, 80));
-                }
-            } else {
-                QColor bg = option->palette.color(QPalette::Button);
-                painter->fillRect(option->rect, bg);
-                painter->fillRect(opt.rect, shaded_color(bg, -15));
-            }
-        } else {
-            int fw = option->frame ? style->pixelMetric(QStyle::PM_ComboBoxFrameWidth, option, widget) : 0;
-            QColor color = option->palette.color(QPalette::Base);
-            if (option->state & QStyle::State_Enabled) {
-                if (option->state & QStyle::State_HasFocus && option->editable) {
-                    color = blend_color(color, option->palette.color(QPalette::Highlight), 0.15);
-                } else if (option->state & QStyle::State_MouseOver /*&& !option->editable*/) {
-                    color = color.lighter(103);
-                }
-            }
-            QRect edit = style->subControlRect(QStyle::CC_ComboBox, option, QStyle::SC_ComboBoxFrame, widget).adjusted(fw, fw, -fw, -fw);
-            painter->fillRect(edit, color);
-            if (false && option->state & QStyle::State_Enabled && option->rect.height() <= 64) {
-                QLinearGradient panelGradient(option->rect.topLeft(), option->rect.bottomLeft());
-                if (color.valueF() > 0.9) {
-                    panelGradient.setColorAt(0.0, shaded_color(color, -20));
-                }
-                panelGradient.setColorAt(0.6, shaded_color(color, 0));
-                panelGradient.setColorAt(1.0, shaded_color(color, 10));
-                painter->fillRect(edit, panelGradient);
-            }
-            opt.rect = rect;
-            if (!(option->activeSubControls & QStyle::SC_ComboBoxArrow)) {
-                opt.state &= ~QStyle::State_MouseOver;
-            }
-            paintComplexControlArea(painter, &opt);
-            if (option->subControls & QStyle::SC_ComboBoxFrame && option->frame) {
-                QStyleOptionFrame frameOpt;
-                frameOpt.QStyleOption::operator=(*option);
-                frameOpt.rect = style->subControlRect(QStyle::CC_ComboBox, option, QStyle::SC_ComboBoxFrame, widget);
-                frameOpt.state |= QStyle::State_Sunken;
-                frameOpt.lineWidth = fw;
-                frameOpt.midLineWidth = 0;
-                style->drawPrimitive(QStyle::PE_FrameLineEdit, &frameOpt, painter, widget);
-            }
-        }
-    }
-
-    // arrow
-    if (option->subControls & (QStyle::SC_ComboBoxArrow)) {
-        opt.rect = rect;
-        opt.state &= /*QStyle::State_MouseOver |*/ QStyle::State_Enabled;
-        if (buttonMode) {
-            opt.state &= ~QStyle::State_MouseOver;
-            if (option->state & QStyle::State_On) {
-                int sx = style->pixelMetric(QStyle::PM_ButtonShiftHorizontal, option, widget);
-                int sy = style->pixelMetric(QStyle::PM_ButtonShiftVertical, option, widget);
-                opt.rect.adjust(sx, sy, sx, sy);
-            }
-        } else {
-            opt.palette.setColor(QPalette::ButtonText, opt.palette.color(option->state & QStyle::State_Enabled ? QPalette::WindowText : QPalette::Text));
-        }
-        style->drawPrimitive(QStyle::PE_IndicatorArrowDown, &opt, painter, widget);
-    }
-
-    // focus frame
-    if ((option->state & QStyle::State_HasFocus) && !option->editable) {
-        QStyleOptionFocusRect focus;
-        focus.QStyleOption::operator=(*option);
-        focus.rect = style->subElementRect(QStyle::SE_ComboBoxFocusRect, option, widget);
-        focus.state |= QStyle::State_FocusAtBorder;
-        focus.backgroundColor = option->palette.color(buttonMode ? QPalette::Button : QPalette::Base);
-        style->drawPrimitive(QStyle::PE_FrameFocusRect, &focus, painter, widget);
-    }
-}
-
-
-void paintComboBoxLabel(QPainter *painter, const QStyleOptionComboBox *option, const QWidget *widget, const QStyle *style)
-{
-    QStyleOptionComboBox opt = *option;
-    const bool buttonMode = false; //!option->editable;
-    if (!buttonMode) {
-        opt.palette.setColor(QPalette::Base, QColor(0, 0, 0, 0));
-    } else {
-        painter->save();
-        painter->setPen(opt.palette.color(QPalette::ButtonText));
-        if (opt.state & QStyle::State_On) {
-            int sx = style->pixelMetric(QStyle::PM_ButtonShiftHorizontal, option, widget);
-            int sy = style->pixelMetric(QStyle::PM_ButtonShiftVertical, option, widget);
-            opt.rect.adjust(sx, sy, sx, sy);
-        }
-    }
-    ((const QCommonStyle *) style)->QCommonStyle::drawControl(QStyle::CE_ComboBoxLabel, &opt, painter, widget);
-    if (buttonMode) {
-        painter->restore();
-    }
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-QRect subControlRectComboBox(const QStyleOptionComboBox *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style)
-{
-    int fw = option->frame ? style->pixelMetric(QStyle::PM_ComboBoxFrameWidth, option, widget) : 0;
-    int bw = style->pixelMetric(QStyle::PM_ScrollBarExtent, option, widget);
-    if (option->editable) bw = qMax(bw, qApp->globalStrut().width());
-    QRect rect;
-
-    switch (subControl) {
-        case QStyle::SC_ComboBoxArrow:
-            rect = QRect(option->rect.right() - bw - fw + 1, option->rect.top() + fw, bw, option->rect.height() - 2 * fw);
-            break;
-        case QStyle::SC_ComboBoxEditField: {
-            if (option->editable) {
-                rect = option->rect.adjusted(fw, fw, -fw - bw, -fw);
-            } else {
-                rect = option->rect.adjusted(fw + 4, fw, -fw - bw - 4, -fw);
-            }
-            break;
-        }
-        case QStyle::SC_ComboBoxFrame:
-        default: // avoid warning
-            rect = option->rect;
-            break;
-    }
-    return style->visualRect(option->direction, option->rect, rect);
-}
-
-
-QRect subElementRectComboBoxFocusRect(const QStyleOptionComboBox *option, const QWidget *widget, const QStyle *style)
-{
-    int fw = option->frame ? (option->editable ? style->pixelMetric(QStyle::PM_ComboBoxFrameWidth, option, widget) : 4) : 2;
-    int bw = true || option->editable ? qMax(style->pixelMetric(QStyle::PM_ScrollBarExtent, option, widget), qApp->globalStrut().width()) : 0;
-
-    return style->visualRect(option->direction, option->rect, option->rect.adjusted(fw, fw, -fw - bw, -fw));
-}
-
-
-/*
- * skulpture_complex.cpp
- *
- */
-
-#include "skulpture_p.h"
-
-
-/*-----------------------------------------------------------------------*/
-
-extern QRect subControlRectSpinBox(const QStyleOptionSpinBox *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style);
-extern QRect subControlRectScrollBar(const QStyleOptionSlider *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style, ArrowPlacementMode horizontalArrowMode, ArrowPlacementMode verticalArrowMode);
-extern QRect subControlRectSlider(const QStyleOptionSlider *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style);
-extern QRect subControlRectToolButton(const QStyleOptionToolButton *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style);
-extern QRect subControlRectComboBox(const QStyleOptionComboBox *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style);
-extern QRect subControlRectGroupBox(const QStyleOptionGroupBox *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style);
-extern QRect subControlRectTitleBar(const QStyleOptionTitleBar *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style);
-
-
-/*-----------------------------------------------------------------------*/
-
-#define SC_CASE(cc, so) \
-    case CC_## cc: \
-        if (option->type == QStyleOption::SO_## so) { \
-            return subControlRect ## cc((const QStyleOption ## so *) option, subControl, widget, this); \
-        } \
-        break
-
-
-QRect SkulptureStyle::subControlRect(ComplexControl control, const QStyleOptionComplex *option, SubControl subControl, const QWidget *widget) const
-{
-    switch (control) {
-        SC_CASE(SpinBox, SpinBox);
-        SC_CASE(ComboBox, ComboBox);
-        case CC_ScrollBar:
-            if (option && option && option->type == QStyleOption::SO_Slider) {
-                return subControlRectScrollBar((const QStyleOptionSlider *) option, subControl, widget, this, d->horizontalArrowMode, d->verticalArrowMode);
-            }
-            break;
-        SC_CASE(Slider, Slider);
-        SC_CASE(TitleBar, TitleBar);
-        case CC_Q3ListView: break;
-        SC_CASE(ToolButton, ToolButton);
-        case CC_Dial: break;
-//#if (QT_VERSION >= QT_VERSION_CHECK(4, 1, 0))
-        SC_CASE(GroupBox, GroupBox);
-//#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-        case CC_MdiControls:
-            break;
-#endif
-        case CC_CustomBase: // avoid warning
-            break;
-    }
-    return ParentStyle::subControlRect(control, option, subControl, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-extern QStyle::SubControl hitTestComplexControlScrollBar(const QStyleOptionSlider *option, const QPoint &position, const QWidget *widget, const QStyle *style, ArrowPlacementMode horizontalArrowMode, ArrowPlacementMode verticalArrowMode);
-
-
-/*-----------------------------------------------------------------------*/
-
-#define HIT_CASE(cc, so) \
-    case CC_## cc: \
-        if (option->type == QStyleOption::SO_## so) { \
-            return hitTestComplexControl ## cc((const QStyleOption ## so *) option, position, widget, this); \
-        } \
-        break
-
-
-QStyle::SubControl SkulptureStyle::hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, const QPoint &position, const QWidget *widget) const
-{
-    switch (control) {
-        case CC_ScrollBar:
-            if (option->type == QStyleOption::SO_Slider) {
-                return hitTestComplexControlScrollBar((const QStyleOptionSlider *) option, position, widget, this, d->horizontalArrowMode, d->verticalArrowMode);
-            }
-            break;
-        default:
-            break;
-    }
-    return ParentStyle::hitTestComplexControl(control, option, position, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintSpinBox(QPainter *painter, const QStyleOptionSpinBox *option, const QWidget *widget, const QStyle *style);
-extern void paintComboBox(QPainter *painter, const QStyleOptionComboBox *option, const QWidget *widget, const QStyle *style);
-extern void paintScrollBar(QPainter *painter, const QStyleOptionSlider *option, const QWidget *widget, const QStyle *style, ArrowPlacementMode horizontalArrowMode, ArrowPlacementMode verticalArrowMode);
-extern void paintSlider(QPainter *painter, const QStyleOptionSlider *option, const QWidget *widget, const QStyle *style);
-extern void paintToolButton(QPainter *painter, const QStyleOptionToolButton *option, const QWidget *widget, const QStyle *style);
-extern void paintTitleBar(QPainter *painter, const QStyleOptionTitleBar *option, const QWidget *widget, const QStyle *style);
-extern void paintQ3ListView(QPainter *painter, const QStyleOptionQ3ListView *option, const QWidget *widget, const QStyle *style);
-extern void paintDial(QPainter *painter, const QStyleOptionSlider *option, const QWidget *widget, const QStyle *style);
-//extern void paintGroupBox(QPainter *painter, const QStyleOptionGroupBox *option, const QWidget *widget, const QStyle *style);
-//extern void paintMdiControls(QPainter *painter, const QStyleOptionComplex *option, const QWidget *widget, const QStyle *style);
-
-
-/*-----------------------------------------------------------------------*/
-
-#define CC_CASE(cc, so) \
-    case CC_## cc: \
-        if (option->type == QStyleOption::SO_## so) { \
-            paint ## cc(painter, (const QStyleOption ## so *) option, widget, this); \
-            return; \
-        } \
-        break
-
-
-void SkulptureStyle::drawComplexControl(ComplexControl control, const QStyleOptionComplex *option,
-                                        QPainter *painter, const QWidget *widget) const
-{
-    switch (control) {
-        CC_CASE(SpinBox, SpinBox);
-        CC_CASE(ComboBox, ComboBox);
-        case CC_ScrollBar:
-            if (option->type == QStyleOption::SO_Slider) {
-                paintScrollBar(painter, (const QStyleOptionSlider *) option, widget, this, d->horizontalArrowMode, d->verticalArrowMode);
-                return;
-            }
-            break;
-        CC_CASE(Slider, Slider);
-        CC_CASE(ToolButton, ToolButton);
-        CC_CASE(TitleBar, TitleBar);
-        CC_CASE(Q3ListView, Q3ListView);
-        CC_CASE(Dial, Slider);
-//#if (QT_VERSION >= QT_VERSION_CHECK(4, 1, 0))
-        case CC_GroupBox:
-            break;
-//#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-        case CC_MdiControls:
-            break;
-#endif
-        case CC_CustomBase: // avoid warning
-            break;
-    }
-    ParentStyle::drawComplexControl(control, option, painter, widget);
-}
-
-
-/*
- * skulpture_dial.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QAbstractSlider>
-#include <cmath>
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintIndicatorDial(QPainter *painter, const QStyleOptionSlider *option);
-extern void paintCachedGrip(QPainter *painter, const QStyleOption *option, QPalette::ColorRole bgrole);
-
-void paintDial(QPainter *painter, const QStyleOptionSlider *option, const QWidget *widget, const QStyle *style)
-{
-	int d = qMin(option->rect.width() & ~1, option->rect.height() & ~1);
-	QStyleOptionSlider opt = *option;
-	const QAbstractSlider *slider;
-	// always highlight knob if pressed (even if mouse is not over knob)
-	if ((option->state & QStyle::State_HasFocus) && (slider = qobject_cast<const QAbstractSlider *>(widget))) {
-		if (slider->isSliderDown()) {
-			opt.state |= QStyle::State_MouseOver;
-		}
-	}
-
-	// tickmarks
-	opt.palette.setColor(QPalette::Inactive, QPalette::WindowText, QColor(120, 120, 120, 255));
-	opt.palette.setColor(QPalette::Active, QPalette::WindowText, QColor(120, 120, 120, 255));
-	opt.state &= ~QStyle::State_HasFocus;
-        opt.rect.setWidth(opt.rect.width() & ~1);
-        opt.rect.setHeight(opt.rect.height() & ~1);
-        ((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_Dial, &opt, painter, widget);
-
-	// focus rectangle
-	if (option->state & QStyle::State_HasFocus) {
-		QStyleOptionFocusRect focus;
-		opt.state |= QStyle::State_HasFocus;
-		focus.QStyleOption::operator=(opt);
-		focus.rect.adjust(-1, -1, 1, 1);
-		style->drawPrimitive(QStyle::PE_FrameFocusRect, &focus, painter, widget);
-	}
-	opt.palette = option->palette;
-
-	// dial base
-	if (d <= 256) {
-		paintIndicatorDial(painter, &opt);
-	} else {
-		// large dials are slow to render, do not render them
-	}
-
-	// dial knob
-	d -= 6;
-	int gripSize = (option->fontMetrics.height() / 4) * 2 - 1;
-	opt.rect.setSize(QSize(gripSize, gripSize));
-	opt.rect.moveCenter(option->rect.center());
-	// angle calculation from qcommonstyle.cpp (c) Trolltech 1992-2007, ASA.
-	qreal angle;
-	int sliderPosition = option->upsideDown ? option->sliderPosition : (option->maximum - option->sliderPosition);
-	int range = option->maximum - option->minimum;
-	if (!range) {
-		angle = M_PI / 2;
-	} else if (option->dialWrapping) {
-		angle = M_PI * 1.5 - (sliderPosition - option->minimum) * 2 * M_PI / range;
-	} else {
-		angle = (M_PI * 8 - (sliderPosition - option->minimum) * 10 * M_PI / range) / 6;
-	}
-
-	qreal rr = d / 2.0 - gripSize - 2;
-	opt.rect.translate(int(0.5 + rr * cos(angle)), int(0.5 - rr * sin(angle)));
-	paintCachedGrip(painter, &opt, option->state & QStyle::State_Enabled ? QPalette::Button : QPalette::Window);
-}
-
-
-/*
- * skulpture_dock.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QDockWidget>
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintFrameDockWidget(QPainter *painter, const QStyleOptionFrame *option)
-{
-	paintThinFrame(painter, option->rect, option->palette, -60, 160);
-	paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -20, 60);
-}
-
-
-void paintDockWidgetTitle(QPainter *painter, const QStyleOptionDockWidget *option, const QWidget *widget, const QStyle *style)
-{
-	const QDockWidget *dock = qobject_cast<const QDockWidget *>(widget);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-    const bool vertical = dock && (dock->features() & QDockWidget::DockWidgetVerticalTitleBar);
-#else
-    const bool vertical = false;
-#endif
-    const bool floating = dock && dock->isFloating();
-	QRect r = option->rect;
-	if (floating) {
-		if (vertical) {
-			r.adjust(-3, 3, 0, -3);
-		} else {
-			r.adjust(3, -3, -3, 0);
-		}
-	//	painter->fillRect(r.adjusted(1, 1, -1, -1), QColor(30, 40, 80));
-	}
-	QColor color = option->palette.color(QPalette::Window);
-	paintThinFrame(painter, r, option->palette, 40, -20);
-	paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -20, 80);
-	QLinearGradient gradient(r.topLeft(), vertical ? r.topRight() : r.bottomLeft());
-	gradient.setColorAt(0.0, shaded_color(color, 50));
-	gradient.setColorAt(0.2, shaded_color(color, 30));
-	gradient.setColorAt(0.5, shaded_color(color, 0));
-	gradient.setColorAt(0.51, shaded_color(color, -10));
-	gradient.setColorAt(1.0, shaded_color(color, -20));
-	painter->fillRect(r.adjusted(1, 1, -1, -1), gradient);
-#if 0
-	QRadialGradient dialogGradient2(r.left() + r.width() / 2, r.top(), r.height());
-	dialogGradient2.setColorAt(0.0, QColor(255, 255, 255, 50));
-	dialogGradient2.setColorAt(1.0, QColor(0, 0, 0, 0));
-	painter->save();
-	painter->translate(r.center());
-	painter->scale(r.width() / 2.0 / r.height(), 1);
-	painter->translate(-r.center());
-	painter->fillRect(r.adjusted(1, 1, -1, -1), dialogGradient2);
-	painter->restore();
-#endif
-	QFont font = painter->font();
-	font.setBold(true);
-	font.setPointSizeF(font.pointSizeF() / 1.19);
-	painter->save();
-	painter->setFont(font);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-	r = style->subElementRect(QStyle::SE_DockWidgetTitleBarText, option, widget);
-#else
-        // FIXME
-        r = option->rect;
-#endif
-	// ### fix for Plastique centering
-	if (vertical && option->rect.height() & 1) {
-		if (!floating) {
-			r.adjust(0, 1, 0, 1);
-		} else {
-			r.adjust(0, -1, 0, -1);
-		}
-	}
-	if (floating) {
-		if (vertical) {
-			r.adjust(-1, 12, 3, -10);
-		} else {
-			r.adjust(2, 3, -3, -7);
-		}
-	} else {
-		if (vertical) {
-			r.adjust(0, 8, 4, -8);
-		} else {
-			r.adjust(0, 5, 0, -7);
-		}
-	}
-	if (vertical) {
-		QMatrix mat;
-		QPointF c = r.center();
-		mat.translate(c.x(), c.y());
-		mat.rotate(-90);
-		mat.translate(-c.x(), -c.y());
-		r = mat.mapRect(r);
-		painter->setMatrix(mat, true);
-	}
-//	painter->fillRect(r, Qt::red);
-	painter->setClipRect(r);
-	style->drawItemText(painter, r, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic | Qt::TextHideMnemonic, option->palette, true, option->title, QPalette::WindowText);
-	painter->restore();
-}
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-QRect subElementRectDockWidget(QStyle::SubElement element, const QStyleOptionDockWidget *option, const QWidget *widget, const QStyle *style)
-{
-    switch (element) {
-        case QStyle::SE_DockWidgetCloseButton:
-        case QStyle::SE_DockWidgetFloatButton: {
-            const QDockWidget *dock = qobject_cast<const QDockWidget *>(widget);
-            bool floating = option->floatable && dock && dock->isFloating();
-            bool vertical = dock && (dock->features() & QDockWidget::DockWidgetVerticalTitleBar);
-            QRect r = ((QCommonStyle *) style)->QCommonStyle::subElementRect(element, option, widget);
-            if (!vertical) {
-                if (floating) {
-                    if (option->direction == Qt::LeftToRight) {
-                        return r.adjusted(-6, 0, -6, 0);
-                    } else {
-                        return r.adjusted(6, 0, 6, 0);
-                    }
-                } else {
-                    if (option->direction == Qt::LeftToRight) {
-                        return r.adjusted(-3, 1, -3, 1);
-                    } else {
-                        return r.adjusted(3, 1, 3, 1);
-                    }
-                }
-            } else {
-                if (floating) {
-                    return r.adjusted(0, 6, 0, 6);
-                } else {
-                    return r.adjusted(1, 3, 1, 3);
-                }
-            }
-        }
-    case QStyle::SE_DockWidgetTitleBarText:
-        return ((QCommonStyle *) style)->QCommonStyle::subElementRect(element, option, widget).adjusted(4, -3, -4, 5);
-    case QStyle::SE_DockWidgetIcon:
-        return ((QCommonStyle *) style)->QCommonStyle::subElementRect(element, option, widget).adjusted(4, -3, 4, 5);
-    default: // avoid warning
-        return option->rect;
-    }
-}
-#endif
-
-/*
- * skulpture_effects.cpp
- *
- */
-
-#include "sk_effects.h"
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * Image blurring and sharpening functions
- *
- * Currently, these are only used to blur disabled text, but may be
- * used for other things in the future.
- *
- */
-
-
-/*-----------------------------------------------------------------------*/
-
-#define V_SHIFT 10
-#define V_PREC 8
-
-#define V_MIN	0
-#define V_MAX ((1 << V_PREC) - 1)
-#define V_ROUND (1 << (V_SHIFT - V_PREC - 1))
-
-
-/*-----------------------------------------------------------------------*/
-
-static inline int clampValue(int v)
-{
-	v = (v + V_ROUND) >> V_SHIFT;
-	return (v < V_MIN ? V_MIN : (v > V_MAX ? V_MAX : v));
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-static void sharpenRgbSpan(int count, QRgb *rgb, int offset, int f)
-{
-	unsigned char *ptr = (unsigned char *) rgb;
-	int v0, v1, v2, v3;
-
-	v0 = ptr[0] << V_SHIFT;
-	v1 = ptr[1] << V_SHIFT;
-	v2 = ptr[2] << V_SHIFT;
-	v3 = ptr[3] << V_SHIFT;
-	do {
-		ptr += offset;
-		v0 += (((ptr[0] << V_SHIFT) - v0) * f) >> F_SHIFT; ptr[0] = clampValue(v0);
-		v1 += (((ptr[1] << V_SHIFT) - v1) * f) >> F_SHIFT; ptr[1] = clampValue(v1);
-		v2 += (((ptr[2] << V_SHIFT) - v2) * f) >> F_SHIFT; ptr[2] = clampValue(v2);
-		v3 += (((ptr[3] << V_SHIFT) - v3) * f) >> F_SHIFT; ptr[3] = clampValue(v3);
-	} while (--count >= 0);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-static void blurRgbSpan(int count, QRgb *rgb, int offset, int f)
-{
-	unsigned char *ptr = (unsigned char *) rgb;
-	int v0, v1, v2, v3;
-
-	v0 = ptr[0] << V_SHIFT;
-	v1 = ptr[1] << V_SHIFT;
-	v2 = ptr[2] << V_SHIFT;
-	v3 = ptr[3] << V_SHIFT;
-	do {
-		ptr += offset;
-		v0 += (((ptr[0] << V_SHIFT) - v0) * f) >> F_SHIFT; ptr[0] = (v0 + V_ROUND) >> V_SHIFT;
-		v1 += (((ptr[1] << V_SHIFT) - v1) * f) >> F_SHIFT; ptr[1] = (v1 + V_ROUND) >> V_SHIFT;
-		v2 += (((ptr[2] << V_SHIFT) - v2) * f) >> F_SHIFT; ptr[2] = (v2 + V_ROUND) >> V_SHIFT;
-		v3 += (((ptr[3] << V_SHIFT) - v3) * f) >> F_SHIFT; ptr[3] = (v3 + V_ROUND) >> V_SHIFT;
-	} while (--count >= 0);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void filterRgbPixels(QRgb *rgb, int w, int h, int stride, int f) {
-	if (f < (1 << F_SHIFT)) {
-		if (w >= 2) {
-			int i = h; while (--i >= 0) {
-				blurRgbSpan(w - 2, rgb + i * stride, 4, f);
-				blurRgbSpan(w - 2, rgb + i * stride + w - 1, -4, f);
-			}
-		}
-		if (h >= 2) {
-			int i = w; while (--i >= 0) {
-				blurRgbSpan(h - 2, rgb + i, 4 * stride, f);
-				blurRgbSpan(h - 2, rgb + i + (h - 1) * w, -4 * stride, f);
-			}
-		}
-	} else if (f > (1 << F_SHIFT)) {
-		if (w >= 2) {
-			int i = h; while (--i >= 0) {
-				sharpenRgbSpan(w - 2, rgb + i * stride, 4, f);
-				sharpenRgbSpan(w - 2, rgb + i * stride + w - 1, -4, f);
-			}
-		}
-		if (h >= 2) {
-			int i = w; while (--i >= 0) {
-				sharpenRgbSpan(h - 2, rgb + i, 4 * stride, f);
-				sharpenRgbSpan(h - 2, rgb + i + (h - 1) * w, -4 * stride, f);
-			}
-		}
-	}
-}
-
-
-/*
- * skulpture_factory.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include "sk_factory.h"
-
-
-/*-----------------------------------------------------------------------*/
-
-bool AbstractFactory::evalCondition()
-{
-	Code code = *p++;
-	if (code < Or) {
-		qreal v1 = evalValue();
-		qreal v2 = evalValue();
-		switch (code) {
-			case EQ: return qAbs(v1 - v2) < 1.0e-9;
-			case NE: return qAbs(v1 - v2) >= 1.0e-9;
-			case LT: return v1 < v2;
-			case GE: return v1 >= v2;
-			case GT: return v1 > v2;
-			case LE: return v1 <= v2;
-			default:
-				break;
-		}
-	} else {
-		switch (code) {
-			case OptionState:
-				return opt && (opt->state & (1 << *p++));
-			case OptionRTL:
-				return opt && (opt->direction != Qt::LeftToRight);
-			case OptionVersion:
-				return opt && (opt->version >= *p++);
-			case OptionType:
-				return opt && (!*p || opt->type == *p++);
-			case OptionComplex:
-				return opt && ((!*p && opt->type >= QStyleOption::SO_Complex) || (opt->type == QStyleOption::SO_Complex + *p++));
-			case FactoryVersion:
-				return version() >= *p++;
-			case Not:
-				return !evalCondition();
-			case Or:
-				if (evalCondition()) {
-					skipCondition();
-					return true;
-				} else {
-					return evalCondition();
-				}
-			case And:
-				if (!evalCondition()) {
-					skipCondition();
-					return false;
-				} else {
-					return evalCondition();
-				}
-			default:
-				break;
-		}
-	}
-	return false;
-}
-
-
-void AbstractFactory::skipCondition()
-{
-	Code code = *p++;
-	if (code < Or) {
-		skipValue();
-		skipValue();
-	} else {
-		skipCondition();
-		skipCondition();
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-qreal AbstractFactory::evalValue()
-{
-	Code code = *p++;
-	if (code >= MinVal && code <= MaxVal) {
-		return code * 0.01;
-	} else if (code >= GetVar + MinVar && code <= GetVar + MaxVar) {
-		return var[code - GetVar];
-	} else if (code >= Add && code <= Max) {
-		qreal v1 = evalValue();
-		qreal v2 = evalValue();
-		switch (code) {
-			case Add: return v1 + v2;
-			case Sub: return v1 - v2;
-			case Mul: return v1 * v2;
-			case Div: return v2 != 0 ? v1 / v2 : 0;
-			case Min: return qMin(v1, v2);
-			case Max: return qMax(v1, v2);
-		}
-	} else if (code == Mix) {
-		qreal v = evalValue();
-		return v * evalValue() + (1 - v) * evalValue();
-	} else if (code == Cond) {
-		if (evalCondition()) {
-			qreal v = evalValue();
-			skipValue();
-			return v;
-		} else {
-			skipValue();
-			return evalValue();
-		}
-	}
-	return 0;
-}
-
-
-void AbstractFactory::skipValue()
-{
-	Code code = *p++;
-	if (code >= MinVal && code <= MaxVal) {
-		return;
-	} else if (code >= GetVar + MinVar && code <= GetVar + MaxVar) {
-		return;
-	} else if (code >= Add && code <= Max) {
-		skipValue();
-		skipValue();
-		return;
-	} else if (code == Mix) {
-		skipValue();
-		skipValue();
-		skipValue();
-		return;
-	} else if (code == Cond) {
-		skipCondition();
-		skipValue();
-		skipValue();
-		return;
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-QColor AbstractFactory::evalColor()
-{
-	Code code = *p++;
-	switch (code) {
-		case RGB: {
-			const quint8 *c = (const quint8 *) p;
-			p += 3;
-			return QColor(c[0], c[1], c[2]);
-		}
-		case RGBA: {
-			const quint8 *c = (const quint8 *) p;
-			p += 4;
-			return QColor(c[0], c[1], c[2], c[3]);
-		}
-		case RGBAf: {
-			qreal v[4];
-			for (int n = 0; n < 4; ++n) {
-				v[n] = qMin(qMax(qreal(0), evalValue()), qreal(1));
-			}
-			return QColor::fromRgbF(v[0], v[1], v[2], v[3]);
-		}
-		case Blend: {
-			QColor color0 = evalColor();
-			QColor color1 = evalColor();
-			return blend_color(color0, color1, evalValue());
-		}
-		case Palette: {
-			if (opt) {
-				return opt->palette.color(QPalette::ColorRole(*p++));
-			}
-			break;
-		}
-		case Shade: {
-			QColor color = evalColor();
-			return shaded_color(color, int(evalValue() * 200));
-		}
-		case Darker: {
-			QColor color = evalColor();
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-                        return color.darker(*p++);
-#else
-                        return color.dark(*p++);
-#endif
-                }
-		case Lighter: {
-			QColor color = evalColor();
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-                        return color.lighter(*p++);
-#else
-                        return color.light(*p++);
-#endif
-                }
-		default:
-			break;
-	}
-	return QColor();
-}
-
-
-void AbstractFactory::skipColor()
-{
-	Code code = *p++;
-	switch (code) {
-		case RGB: {
-			p += 3;
-			return;
-		}
-		case RGBA: {
-			p += 4;
-			return;
-		}
-		case RGBAf: {
-			for (int n = 0; n < 4; ++n) {
-				skipValue();
-			}
-			return;
-		}
-		case Blend: {
-			skipColor();
-			skipColor();
-			skipValue();
-			return;
-		}
-		case Palette: {
-			++p;
-			return;
-		}
-		case Shade: {
-			skipColor();
-			skipValue();
-			return;
-		}
-		case Darker:
-		case Lighter: {
-			skipColor();
-			p++;
-			return;
-		}
-		default:
-			break;
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void AbstractFactory::executeCode(Code code)
-{
-	if (code >= SetVar + MinVar && code <= SetVar + MaxVar) {
-		var[code - SetVar] = evalValue();
-	} else switch (code) {
-		case Begin: {
-			while (*p != End) {
-				Code code = *p++;
-				executeCode(code);
-			}
-			++p;
-			return;
-		}
-		case While: {
-			const Code *loop_p = p;
-			int counter = 100; // prevent infinite loop
-			while (evalCondition() && --counter >= 0) {
-				Code code = *p++;
-				executeCode(code);
-				p = loop_p;
-			}
-			Code code = *p++;
-			skipCode(code);
-			return;
-		}
-		case If: {
-			if (evalCondition()) {
-				Code code = *p++;
-				executeCode(code);
-				if (*p == Else) {
-					++p;
-					Code code = *p++;
-					skipCode(code);
-				}
-			} else {
-				Code code = *p++;
-				skipCode(code);
-				if (*p == Else) {
-					++p;
-					Code code = *p++;
-					executeCode(code);
-				}
-			}
-			return;
-		}
-	}
-}
-
-
-void AbstractFactory::skipCode(Code code)
-{
-	if (code >= SetVar + MinVar && code <= SetVar + MaxVar) {
-		skipValue();
-	} else switch (code) {
-		case Begin: {
-			while (*p != End) {
-				Code code = *p++;
-				skipCode(code);
-			}
-			++p;
-			return;
-		}
-		case While: {
-			skipCondition();
-			Code code = *p++;
-			skipCode(code);
-			return;
-		}
-		case If: {
-			skipCondition();
-			Code code = *p++;
-			skipCode(code);
-			if (*p == Else) {
-				++p;
-				Code code = *p++;
-				skipCode(code);
-			}
-			return;
-		}
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void AbstractFactory::create()
-{
-	if (p != 0) {
-		while (*p != End) {
-			Code code = *p++;
-			executeCode(code);
-		}
-	}
-}
-
-
-/*
- * skulpture_frames.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QAbstractSpinBox>
-#include <QtGui/QSpinBox>
-#include <QtGui/QDoubleSpinBox>
-#include <QtGui/QAbstractItemView>
-#include <QtGui/QMouseEvent>
-#include <QtGui/QApplication>
-#include <QtGui/QComboBox>
-#include <QtGui/QPainter>
-#include <QtGui/QLCDNumber>
-#include <QtGui/QLineEdit>
-#include <cmath>
-
-
-/*-----------------------------------------------------------------------*/
-
-static void paintThinFrame(QPainter *painter, const QRect &rect, const QBrush &brush1, const QBrush &brush2)
-{
-	painter->fillRect(QRect(rect.left() + 1, rect.top(), rect.width() - 1, 1), brush2);
-	painter->fillRect(QRect(rect.left(), rect.top(), 1, rect.height()), brush2);
-	painter->fillRect(QRect(rect.left(), rect.bottom(), rect.width() - 1, 1), brush1);
-	painter->fillRect(QRect(rect.right(), rect.top(), 1, rect.height()), brush1);
-}
-
-
-static const QBrush shaded_brush(const QPalette &palette, int shade, QPalette::ColorRole bgrole)
-{
-	return (shaded_color(palette.color(bgrole), shade));
-}
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * paintThinFrame - paint a single pixel wide frame
- *
- * Paints a frame _inside_ the specified rectangle, using
- * a single pixel wide pen. The frame is rendered by darkening
- * or brightening the pixels in that area; no specific color
- * can be selected.
- *
- * dark and light specify how dark or bright the frame should
- * be rendered. They are either negative (meaning darkening),
- * or positive (meaning brigthening).
- *
- * TODO:
- * dark and light are arbitrary values; they need adjustment.
- *
- */
-
-void paintThinFrame(QPainter *painter, const QRect &rect, const QPalette &palette, int dark, int light, QPalette::ColorRole bgrole)
-{
-	paintThinFrame(painter, rect, shaded_brush(palette, dark, bgrole), shaded_brush(palette, light, bgrole));
-}
-
-
-void paintRecessedFrame(QPainter *painter, const QRect &rect, const QPalette &palette, enum RecessedFrame rf, QPalette::ColorRole bgrole)
-{
-	paintThinFrame(painter, rect, palette, 30, -20, bgrole);
-	paintThinFrame(painter, rect.adjusted(1, 1, -1, -1), palette, -20, -70, bgrole);
-	paintRecessedFrameShadow(painter, rect.adjusted(2, 2, -2, -2), rf);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintFrameGroupBox(QPainter *painter, const QStyleOptionFrame *option)
-{
-	QRect r = option->rect;
-	r.setHeight(/*r.height() +*/ 2);
-	paintThinFrame(painter, r, option->palette, 60, -20);
-//	paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -20, 60);
-}
-
-
-static inline bool is_popup_menu(const QWidget *widget)
-{
-	if (widget) {
-		Qt::WindowFlags flags = widget->windowFlags();
-		Qt::WindowType type = Qt::WindowType(int(flags & Qt::WindowType_Mask));
-
-		if ((type & Qt::Window) && (flags & Qt::FramelessWindowHint || type == Qt::Popup)) {
-			return true;
-		}
-	}
-	return false;
-}
-
-
-void paintStyledFrame(QPainter *painter, const QStyleOptionFrame *option, const QWidget *widget, const QStyle * /*style*/)
-{
-	QPalette::ColorRole bgrole = widget ? widget->backgroundRole() : QPalette::Window;
-
-	if (option->state & QStyle::State_Sunken) {
-		if (qobject_cast<const QFrame *>(widget) && widget->parentWidget() && widget->parentWidget()->inherits("KFontRequester")) {
-			paintThinFrame(painter, option->rect, option->palette, 60, -20);
-			paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -20, 60);
-			QLinearGradient panelGradient(option->rect.topLeft(), option->rect.bottomLeft());
-			panelGradient.setColorAt(0.6, QColor(0, 0, 0, 0));
-			panelGradient.setColorAt(1.0, shaded_color(option->palette.color(QPalette::Window), 70));
-			painter->fillRect(option->rect.adjusted(2, 2, -2, -2), panelGradient);
-		} else {
-		/*	if (option->palette.color(QPalette::Base) == QColor(220, 230, 210)) {
-				painter->fillRect(option->rect.adjusted(2, 2, -2, -2), option->palette.color(QPalette::Base));
-				paintRecessedFrame(painter, option->rect, option->palette, RF_Small);
-			} else*/ {
-				RecessedFrame rf = RF_Large;
-				if (!(option->state & QStyle::State_Enabled)
-				 || (widget && (!widget->isEnabled() || qobject_cast<const QLCDNumber *>(widget)))) {
-					rf = RF_Small;
-				}
-				if (qobject_cast<const QAbstractItemView *>(widget) || (widget && widget->inherits("Q3ScrollView"))) {
-					const QList<QObject *> children = widget->children();
-                    Q_FOREACH (QObject *child, children) {
-						if (qobject_cast<FrameShadow *>(child)) {
-							rf = RF_None;
-							break;
-						}
-					}
-				}
-				paintRecessedFrame(painter, option->rect, option->palette, rf);
-			}
-		}
-	} else if (option->state & QStyle::State_Raised) {
-		QRect r = option->rect;
-		if (option->lineWidth == 0) {
-			paintThinFrame(painter, r, option->palette, -20, 60);
-		} else {
-			paintThinFrame(painter, r, option->palette, -10, -20);
-			paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -40, 80, bgrole);
-		//	painter->fillRect(option->rect, Qt::red);
-		}
-	} else {
-		// Plain
-		if (qobject_cast<const QFrame *>(widget) && widget->parentWidget() && widget->parentWidget()->inherits("KTitleWidget")) {
-			QRect r = option->rect;
-			bgrole = QPalette::Window;
-//			bgrole = QPalette::Base;
-#if 1
-			QColor bgcolor = option->palette.color(bgrole);
-#else
-			QColor bgcolor = QColor(230, 230, 230);
-#endif
-		//	painter->fillRect(r.adjusted(1, 1, -1, -1), bgcolor);
-			paintThinFrame(painter, r, option->palette, -10, -20);
-		//	painter->fillRect(r.adjusted(1, 1, -1, -1), QColor(200, 190, 160));
-		//	painter->fillRect(r.adjusted(1, 1, -1, -1), QColor(240, 240, 240));
-			paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -30, 80, bgrole);
-			QLinearGradient gradient(r.topLeft(), r.bottomLeft());
-			gradient.setColorAt(0.0, shaded_color(bgcolor, 90));
-			gradient.setColorAt(0.2, shaded_color(bgcolor, 60));
-			gradient.setColorAt(0.5, shaded_color(bgcolor, 0));
-			gradient.setColorAt(0.51, shaded_color(bgcolor, -10));
-			gradient.setColorAt(1.0, shaded_color(bgcolor, -20));
-			painter->fillRect(r.adjusted(1, 1, -1, -1), gradient);
-#if 0
-			QRadialGradient dialogGradient2(r.left() + r.width() / 2, r.top(), r.height());
-			dialogGradient2.setColorAt(0.0, QColor(255, 255, 255, 50));
-			dialogGradient2.setColorAt(1.0, QColor(0, 0, 0, 0));
-			painter->save();
-			painter->translate(r.center());
-			painter->scale(r.width() / 2.0 / r.height(), 1);
-			painter->translate(-r.center());
-			painter->fillRect(r.adjusted(1, 1, -1, -1), dialogGradient2);
-			painter->restore();
-#endif
-		} else if (is_popup_menu(widget)) {
-			QRect r = option->rect;
-			paintThinFrame(painter, r, option->palette, -60, 160);
-			paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -20, 60, bgrole);
-		} else {
-			QRect r = option->rect;
-			paintThinFrame(painter, r, option->palette, 60, -20);
-			paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -20, 60, bgrole);
-		}
-	}
-}
-
-
-void paintFrameLineEdit(QPainter *painter, const QStyleOptionFrame *option)
-{
-	paintRecessedFrame(painter, option->rect, option->palette, RF_Small);
-}
-
-
-class LineEditHack : public QLineEdit
-{
-    public:
-        QRect cursorRectHack() const {
-#if QT_VERSION >= QT_VERSION_CHECK(4, 4, 0)
-            return cursorRect();
-#else
-            return inputMethodQuery(Qt::ImMicroFocus).toRect();
-#endif
-        }
-};
-
-
-static QRect getCursorRect(const QWidget *widget)
-{
-    if (const QLineEdit *lineEdit = qobject_cast<const QLineEdit *>(widget)) {
-        const LineEditHack *lineEditHack = reinterpret_cast<const LineEditHack *>(lineEdit);
-        /*if (lineEdit->cursorPosition() != lineEdit->text().length())*/ {
-            return lineEditHack->cursorRectHack();
-        }
-    }
-    return QRect();
-}
-
-
-void lineEditMouseMoved(QLineEdit *lineEdit, QMouseEvent *event)
-{
-    if (!lineEdit->hasFocus()) {
-        QAbstractSpinBox *spinBox = qobject_cast<QAbstractSpinBox *>(lineEdit->parentWidget());
-        int oldCursorPosition = lineEdit->cursorPosition();
-        int newCursorPosition = lineEdit->cursorPositionAt(event->pos());
-
-        if (spinBox && lineEdit->text() == spinBox->specialValueText()) {
-            // newCursorPosition = lineEdit->text().length();
-        } else {
-            if (QSpinBox *spinBox = qobject_cast<QSpinBox *>(lineEdit->parentWidget())) {
-                newCursorPosition = qBound(spinBox->prefix().length(), newCursorPosition, lineEdit->text().length() - spinBox->suffix().length());
-            } else if (QDoubleSpinBox *spinBox = qobject_cast<QDoubleSpinBox *>(lineEdit->parentWidget())) {
-                newCursorPosition = qBound(spinBox->prefix().length(), newCursorPosition, lineEdit->text().length() - spinBox->suffix().length());
-            }
-        }
-
-        if (oldCursorPosition != newCursorPosition) {
-            lineEdit->update(getCursorRect(lineEdit).adjusted(-4, -16, 4, 16));
-            lineEdit->setCursorPosition(newCursorPosition);
-            lineEdit->update(getCursorRect(lineEdit).adjusted(-4, -16, 4, 16));
-        }
-    }
-}
-
-
-void paintPanelLineEdit(QPainter *painter, const QStyleOptionFrame *option, const QWidget *widget, const QStyle *style)
-{
-	QPalette::ColorRole bgrole = widget ? widget->backgroundRole() : QPalette::Window;
-
-	bool focus = (option->state & QStyle::State_HasFocus) && !(option->state & QStyle::State_ReadOnly);
-        int fw = option->lineWidth;
-        if (option->palette.brush(bgrole).style() == Qt::SolidPattern) {
-            QRect cursorRect;
-                QColor color = option->palette.color(bgrole);
-//		printf("style=%d, bgrole=%d, panel color: r=%d, g=%d, b=%d, a=%d\n", option->palette.brush(bgrole).style(), bgrole, color.red(), color.green(), color.blue(), color.alpha());
-		if (focus && color.alpha() > 0) {
-			color = blend_color(color, option->palette.color(QPalette::Highlight), 0.15);
-		} else {
-                    focus = false;
-#if 1
-                    if (option->state & QStyle::State_MouseOver && option->state & QStyle::State_Enabled && !(option->state & QStyle::State_ReadOnly)) {
-                        color = color.lighter(103);
-                        cursorRect = getCursorRect(widget);
-                    } else if (widget) {
-                        QWidget *box = widget->parentWidget();
-                        if (qobject_cast<QComboBox *>(box) || qobject_cast<QAbstractSpinBox *>(box)) {
-                            if (box->underMouse() && option->state & QStyle::State_Enabled) {
-                                QAbstractSpinBox *spinBox = qobject_cast<QAbstractSpinBox *>(box);
-                                if (!spinBox || !spinBox->isReadOnly()) {
-                                    color = color.lighter(103);
-                                }
-                            }
-                        }
-                    }
-#endif
-                }
-                painter->fillRect(option->rect.adjusted(fw, fw, -fw, -fw), color);
-		if (false && option->state & QStyle::State_Enabled && option->rect.height() <= 64) {
-			QLinearGradient panelGradient(option->rect.topLeft(), option->rect.bottomLeft());
-			if (color.valueF() > 0.9) {
-				panelGradient.setColorAt(0.0, shaded_color(color, -20));
-			}
-			panelGradient.setColorAt(0.6, shaded_color(color, 0));
-			panelGradient.setColorAt(1.0, shaded_color(color, 10));
-			painter->fillRect(option->rect.adjusted(fw, fw, -fw, -fw), panelGradient);
-		}
-                if (!cursorRect.isEmpty()) {
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-                    QRect cursor = style->subElementRect(QStyle::SE_LineEditContents, option, widget).adjusted(0, 2, 0, -3);
-#else
-                    QRect cursor = option->rect.adjusted(0, fw + 2, 0, -fw - 3);
-#endif
-                    if (cursor.height() != option->fontMetrics.height() - 1) {
-                        cursor.adjust(0, 1, 0, 0);
-                    }
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-                    int cursorWidth = style->pixelMetric(QStyle::PM_TextCursorWidth, option, widget);
-#else
-                    int cursorWidth = style->pixelMetric((QStyle::PixelMetric)((int) QStyle::PM_CustomBase + 1), option, widget);
-#endif
-                    cursor.setLeft(cursorRect.center().x() + 1 - (cursorWidth >> 1));
-                    cursor.setWidth(cursorWidth);
-                    cursor.setTop(cursor.top() + ((cursor.height() - option->fontMetrics.height() + 2) >> 1));
-                    cursor.setHeight(cursorRect.height() - 2);
-                    QColor color = option->palette.color(QPalette::Text);
-                    color.setAlpha(60);
-                    painter->fillRect(cursor, color);
-                    painter->fillRect(QRect(cursor.left() - cursorWidth, cursor.top() - 1, cursorWidth, 1), color);
-                    painter->fillRect(QRect(cursor.left() + cursorWidth, cursor.top() - 1, cursorWidth, 1), color);
-                    painter->fillRect(QRect(cursor.left() - cursorWidth, cursor.bottom() + 1, cursorWidth, 1), color);
-                    painter->fillRect(QRect(cursor.left() + cursorWidth, cursor.bottom() + 1, cursorWidth, 1), color);
-                }
-        }
-	if (focus && option->state & QStyle::State_KeyboardFocusChange) {
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-            QColor color = option->palette.color(QPalette::Highlight).darker(120);
-#else
-            QColor color = option->palette.color(QPalette::Highlight).dark(120);
-#endif
-		color.setAlpha(120);
-                QRect r = option->rect.adjusted(fw + 2, fw + 2, -fw - 2, -fw - 2);
-                r.setTop(r.top() + r.height() - 1);
-		painter->fillRect(r, color);
-	}
-	if (fw) {
-		if (option->state & QStyle::State_ReadOnly && !(option->state & QStyle::State_Enabled)) {
-			paintThinFrame(painter, option->rect, option->palette, 60, -20);
-			paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -20, 60);
-		} else {
-			paintRecessedFrame(painter, option->rect, option->palette, option->rect.height() <= 64 ? RF_Small : RF_Small);
-		}
-	} else if (widget && widget->parent() && (qobject_cast<QAbstractSpinBox *>(widget->parent()) || qobject_cast<QComboBox *>(widget->parent()))) {
-		if (option->palette.brush(bgrole).style() != Qt::SolidPattern) {
-			/* Fix Qt stylesheet demo */
-			return;
-		}
-                // we need to adjust shadows to the real frame, not that of the line edit
-                int left = widget->geometry().left()/*, right = widget->geometry().right()*/;
-		QComboBox *combo = qobject_cast<QComboBox *>(widget->parent());
-                int parentFrameWidth;
-                if (combo) {
-                    if (!combo->hasFrame()) {
-                        return;
-                    }
-                    parentFrameWidth = style->pixelMetric(QStyle::PM_ComboBoxFrameWidth, option, widget);
-		} else {
-                    QAbstractSpinBox *spin = qobject_cast<QAbstractSpinBox *>(widget->parent());
-                    if (spin && !spin->hasFrame()) {
-                        return;
-                    }
-                    parentFrameWidth = style->pixelMetric(QStyle::PM_SpinBoxFrameWidth, option, widget);
-                }
-                // FIXME use correct right adjustment
-                paintRecessedFrameShadow(painter, option->rect.adjusted(parentFrameWidth - left, 0, 100, 0), option->rect.height() <= 64 ? RF_Small : RF_Small);
-        }
-}
-
-
-void paintFrameFocusRect(QPainter *painter, const QStyleOptionFocusRect *option, const QWidget *widget)
-{
-	if (!(option->state & QStyle::State_KeyboardFocusChange)) {
-		return;
-	}
-        if (option->state & QStyle::State_Item) {
-            if (widget && widget->window() && !widget->window()->testAttribute(Qt::WA_KeyboardFocusChange)) {
-                return;
-            }
-        }
-	QColor color = option->palette.color(QPalette::Highlight);
-	color.setAlpha(20);
-	painter->fillRect(option->rect, color);
-//	painter->fillRect(option->rect.adjusted(1, 1, -1, -1), color);
-	painter->fillRect(option->rect.adjusted(2, 2, -2, -2), color);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-        color = color.darker(120);
-#else
-        color = color.dark(120);
-#endif
-	color.setAlpha(230);
-	painter->fillRect(option->rect.adjusted(0, option->rect.height() - 1, 0, 0), color);
-}
-
-//#if (QT_VERSION >= QT_VERSION_CHECK(4, 1, 0))
-QRect subControlRectGroupBox(const QStyleOptionGroupBox *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style)
-{
-    switch (subControl) {
-        case QStyle::SC_GroupBoxContents:
-            return option->rect.adjusted(0, option->fontMetrics.height(), 0, 0);
-        case QStyle::SC_GroupBoxCheckBox:
-        case QStyle::SC_GroupBoxLabel: {
-            if (!(option->features & QStyleOptionFrameV2::Flat)) {
-                int x = option->direction == Qt::LeftToRight ? -8 : 8;
-                int y = (subControl == QStyle::SC_GroupBoxCheckBox) ? 0 : 1;
-                return ((const QCommonStyle *) style)->QCommonStyle::subControlRect(QStyle::CC_GroupBox, option, subControl, widget).adjusted(x, y, x, y);
-            }
-            break;
-        }
-        default:
-            break;
-    }
-    return ((const QCommonStyle *) style)->QCommonStyle::subControlRect(QStyle::CC_GroupBox, option, subControl, widget);
-}
-//#endif
-
-/*-----------------------------------------------------------------------*/
-
-QGradient path_edge_gradient(const QRectF &rect, const QStyleOption *option, const QPainterPath &path, const QColor &color2, const QColor &color1)
-{
-	QPointF c = rect.center();
-	QColor color[8];
-	if (/*true ||*/ option->direction == Qt::LeftToRight) {
-		color[0] = blend_color(QColor(255, 255, 255, 255), color1, 0.5);
-		color[1] = color1;
-		color[2] = blend_color(color1, color2, 0.5);
-		color[3] = color2;
-	//	color[3] = color1;
-		color[4] = blend_color(QColor(0, 0, 0, 255), color2, 0.5);
-		color[5] = color2;
-		color[6] = blend_color(color2, color1, 0.5);
-		color[7] = color1;
-	//	color[7] = color2;
-	} else {
-		color[2] = blend_color(QColor(255, 255, 255, 255), color1, 0.5);
-		color[1] = color1;
-		color[0] = blend_color(color1, color2, 0.5);
-		color[7] = color2;
-	//	color[7] = color1;
-		color[6] = blend_color(QColor(0, 0, 0, 255), color2, 0.5);
-		color[5] = color2;
-		color[4] = blend_color(color2, color1, 0.5);
-		color[3] = color1;
-	//	color[3] = color2;
-	}
-	QConicalGradient gradient(c, 0);
-	Q_UNUSED(path);
-	qreal angle;
-	qreal d = 1;
-	QRectF r = rect.adjusted(1, 1, -1, -1);
-	{
-		QRectF rect = r;
-		gradient.setColorAt(0.0, color[3]);
-
-		angle = atan2(rect.top() + d - c.y(), rect.right() - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[3]);
-
-		angle = atan2(rect.top() - c.y(), rect.right() - d - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[5]);
-
-		angle = atan2(rect.top() - c.y(), rect.left() + d - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[5]);
-
-		angle = atan2(rect.top() + d - c.y(), rect.left() - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[7]);
-
-		angle = atan2(rect.bottom() - d - c.y(), rect.left() - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[7]);
-
-		angle = atan2(rect.bottom() - c.y(), rect.left() + d - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[1]);
-
-		angle = atan2(rect.bottom() - c.y(), rect.right() - d - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[1]);
-
-		angle = atan2(rect.bottom() - d - c.y(), rect.right() - c.x());
-		if (angle < 0) angle += M_PI * 2.0;
-		gradient.setColorAt(angle / 2.0 / M_PI, color[3]);
-
-		gradient.setColorAt(1.0, color[3]);
-	}
-	return gradient;
-}
-
-
-/*
- * skulpture_gradients.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include "sk_factory.h"
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * GradientFactory - create a QGradient from a description
- *
- * The gradient description is a bytecode stream that allows simple arithmetic,
- * conditionals, and looping.
- *
- */
-
-
-/*-----------------------------------------------------------------------*/
-
-void GradientFactory::executeCode(Code code)
-{
-	qreal v;
-
-	switch (code) {
-		case ColorAt:
-			v = evalValue();
-			gradient.setColorAt(v, evalColor());
-			break;
-		default:
-			AbstractFactory::executeCode(code);
-			break;
-	}
-}
-
-
-void GradientFactory::skipCode(Code code)
-{
-	switch (code) {
-		case ColorAt:
-			skipValue();
-			skipColor();
-			break;
-		default:
-			AbstractFactory::skipCode(code);
-			break;
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-QGradient GradientFactory::createGradient(GradientFactory::Description description, qreal var[])
-{
-	GradientFactory factory;
-
-	factory.setDescription(description);
-	for (int n = MinVar; n <= MaxVar; ++n) {
-		factory.setVar(n, var[n]);
-	}
-	factory.create();
-	for (int n = MinVar; n <= MaxVar; ++n) {
-		var[n] = factory.getVar(n);
-	}
-	return factory.getGradient();
-}
-
-
-QGradient GradientFactory::createGradient(GradientFactory::Description description)
-{
-	GradientFactory factory;
-
-	factory.setDescription(description);
-	factory.create();
-	return factory.getGradient();
-}
-
-
-/*
- * skulpture_header.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include "sk_factory.h"
-#include <QtGui/QPainter>
-#include <QtGui/QHeaderView>
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintHeaderEmptyArea(QPainter *painter, const QStyleOption *option)
-{
-	if (option->state & QStyle::State_Enabled) {
-		painter->fillRect(option->rect, option->palette.color(QPalette::Window).lighter(107));
-	} else {
-		painter->fillRect(option->rect, option->palette.color(QPalette::Window).darker(104));
-	}
-	if (option->state & QStyle::State_Horizontal) {
-		paintThinFrame(painter, option->rect.adjusted(0, -2, 32000, -1), option->palette, -20, 60);
-//		painter->fillRect(option->rect.adjusted(0, option->rect.height() - 1, 0, 0), QColor(255, 255, 255, 160));
-	} else {
-		paintThinFrame(painter, option->rect.adjusted(-2, 0, -1, 32000), option->palette, -20, 60);
-//		painter->fillRect(option->rect.adjusted(option->rect.width() - 1, 0, 0, 0), QColor(255, 255, 255, 160));
-	}
-}
-
-
-static bool isHeaderEnabled(const QStyleOptionHeader *option, const QWidget *widget)
-{
-    bool enabled = true;
-    if (!(option->state & QStyle::State_Enabled)) {
-        enabled = false;
-        if (widget && widget->inherits("Q3Header")) {
-            enabled = widget->isEnabled();
-        }
-    }
-    return enabled;
-}
-
-
-void paintHeaderSection(QPainter *painter, const QStyleOptionHeader *option, const QWidget *widget, const QStyle *style)
-{
-	Q_UNUSED(style);
-
-	if (!(option->state & (QStyle::State_Raised | QStyle::State_Sunken))) {
-		painter->fillRect(option->rect, option->palette.color(QPalette::Window).darker(104));
-		paintRecessedFrame(painter, option->rect.adjusted(-9, -9, 3, 3), option->palette, RF_Small);
-		painter->fillRect(QRect(option->rect.right(), option->rect.bottom(), 1, 1), option->palette.color(QPalette::Window));
-	} else {
-                if (isHeaderEnabled(option, widget)) {
-			bool hover = false;
-			const QHeaderView *view = qobject_cast<const QHeaderView *>(widget);
-			if (view && (view->isClickable() || view->isMovable())) {
-				hover = option->state & QStyle::State_MouseOver;
-			}
-			painter->fillRect(option->rect, option->palette.color(QPalette::Base).darker(hover ? 104 : (option->state & QStyle::State_On ? 120 : 106)));
-		} else {
-			painter->fillRect(option->rect, option->palette.color(QPalette::Window).darker(104));
-		}
-		if (true || !(option->state & QStyle::State_On)) {
-			if (option->orientation == Qt::Horizontal) {
-				const QHeaderView *view = qobject_cast<const QHeaderView *>(widget);
-				if (view && view->rect().right() == option->rect.right()) {
-					paintThinFrame(painter, option->rect.adjusted(0, -2, 1, -1), option->palette, -20, 60);
-				} else {
-					paintThinFrame(painter, option->rect.adjusted(0, -2, 0, -1), option->palette, -20, 60);
-				}
-			} else {
-				if (option->direction == Qt::LeftToRight) {
-					paintThinFrame(painter, option->rect.adjusted(-2, 0, -1, 0), option->palette, -20, 60);
-				} else {
-					paintThinFrame(painter, option->rect.adjusted(1, 0, 2, 0), option->palette, -20, 60);
-				}
-			}
-		}
-#if 0
-		if (option->orientation == Qt::Horizontal) {
-			painter->fillRect(option->rect.adjusted(0, option->rect.height() - 1, 0, 0), QColor(255, 255, 255, 160));
-		} else {
-			painter->fillRect(option->rect.adjusted(option->rect.width() - 1, 0, 0, 0), QColor(255, 255, 255, 160));
-		}
-#endif
-	}
-}
-
-
-void paintHeaderLabel(QPainter *painter, const QStyleOptionHeader *option, const QWidget *widget, const QStyle *style)
-{
-    QStyleOptionHeader opt = *option;
-    if (isHeaderEnabled(option, widget)) {
-        opt.palette.setColor(QPalette::ButtonText, opt.palette.color(QPalette::Text));
-    } else {
-        opt.palette.setColor(QPalette::ButtonText, opt.palette.color(QPalette::WindowText));
-    }
-	painter->save();
-	if (widget) {
-		painter->setFont(widget->font());
-	}
-	((QCommonStyle *) style)->QCommonStyle::drawControl(QStyle::CE_HeaderLabel, &opt, painter, widget);
-	painter->restore();
-}
-
-
-static const ShapeFactory::Code headerSortIndicatorShapeDescription[] = {
-	Pmove(-1, 1), Pline(1, 1), Pline(0, -1), Pend
-};
-
-
-void paintHeaderSortIndicator(QPainter *painter, const QStyleOptionHeader *option)
-{
-	int h = option->fontMetrics.height() / 2 + 2;
-	int w = option->fontMetrics.height() / 4 + 2;
-	QPainterPath path;
-
-	h /= 2; w /= 2;
-	if (option->sortIndicator == QStyleOptionHeader::SortDown) {
-		h = -h;
-	}
-	painter->save();
-	painter->setRenderHint(QPainter::Antialiasing, true);
-	painter->translate(option->rect.center());
-	painter->translate(0.5, 1.5);
-	painter->setPen(Qt::NoPen);
-	QColor color = option->palette.color(option->state & QStyle::State_Enabled ? QPalette::Text : QPalette::WindowText);
-	color.setAlphaF(0.6 * color.alphaF());
-	painter->setBrush(color);
-	QMatrix matrix(w, 0, 0, h, 0, 0);
-	painter->drawPath(matrix.map(ShapeFactory::createShape(headerSortIndicatorShapeDescription)));
-	painter->restore();
-}
-
-
-/*
- * skulpture_icons.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include "sk_factory.h"
-#include <QtCore/QSettings>
-#include <QtGui/QStyleOption>
-#include <QtGui/QDockWidget>
-#include <QtGui/QFrame>
-#include <QtGui/QPainter>
-#include "sk_effects.h"
-#include <cstdlib>
-
-
-/*-----------------------------------------------------------------------*/
-
-QPixmap SkulptureStyle::standardPixmap(QStyle::StandardPixmap standardPixmap, const QStyleOption *option, const QWidget *widget) const
-{
-	return ParentStyle::standardPixmap(standardPixmap, option, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * decorationShape - get shape for window decoration button
- *
- * The coordinate system is -1 ... 1 for each dimension, with
- * (0, 0) being at the center, and positive coordinates pointing
- * down and to the right.
- *
- */
-
-static const ShapeFactory::Code titleBarMenuButtonDescription[] = {
-    Pmove(0, 0.6), Pline(0.6, 0), Pline(0, -0.6), Pline(-0.6, 0), Pend
-};
-
-static const ShapeFactory::Code titleBarCloseButtonDescription[] = {
-	#define kx3 0.3
-	Pmove(-1, -1), Pline(0, -kx3), Pline(1, -1), Pline(kx3, 0), Pline(1, 1), Pline(0, kx3), Pline(-1, 1), Pline(-kx3, 0), Pend
-};
-
-static const ShapeFactory::Code titleBarShadeButtonDescription[] = {
-	Pmove(-1, -0.4), Pline(0, -0.6), Pline(1, -0.4), Pline(0, -1), Pend
-};
-
-static const ShapeFactory::Code titleBarUnshadeButtonDescription[] = {
-	Pmove(-1, -1), Pline(0, -0.8), Pline(1, -1), Pline(0, -0.4), Pend
-};
-
-static const ShapeFactory::Code titleBarMinButtonDescription[] = {
-	Pmove(-1, 0.4), Pline(0, 0.6), Pline(1, 0.4), Pline(0, 1), Pend
-};
-
-static const ShapeFactory::Code titleBarMaxButtonDescription[] = {
-	#define kx1 0.8
-	#define kx2 0.55
-	Pmove(0, -1), Pline(1, 0), Pline(0, 1), Pline(-1, 0), Pclose,
-	Pmove(0, -kx2), Pline(-kx1, 0), Pline(0, kx2), Pline(kx1, 0), Pend,
-};
-
-static const ShapeFactory::Code titleBarNormalButtonDescription[] = {
-    Pmove(0, -1), Pline(1, 0), Pline(0, 1), Pline(-1, 0), Pclose,
-    Pmove(0, -kx1), Pline(-kx2, 0), Pline(0, kx1), Pline(kx2, 0), Pend,
-};
-
-static const ShapeFactory::Code titleBarHelpButtonDescription[] = {
-	Pmove(0.0305, 0.513), Pline(-0.0539, 0.513), Pline(0.0117, 0.227), Pline(0.22, -0.0859), Pline(0.38, -0.323),
-	Pline(0.417, -0.491), Pline(0.279, -0.767), Pline(-0.0609, -0.87), Pline(-0.342, -0.814), Pline(-0.445, -0.692),
-	Pline(-0.383, -0.568), Pline(-0.321, -0.456), Pline(-0.368, -0.373), Pline(-0.483, -0.339), Pline(-0.64, -0.396),
-	Pline(-0.71, -0.555), Pline(-0.512, -0.827), Pline(0.0281, -0.947), Pline(0.649, -0.783), Pline(0.797, -0.516),
-	Pline(0.73, -0.31), Pline(0.476, -0.0625), Pline(0.111, 0.255), Pclose,
-	Pmove(0.00234, 0.681), Pline(0.165, 0.726), Pline(0.232, 0.834), Pline(0.164, 0.943),
-	Pline(0.00234, 0.988), Pline(-0.158, 0.943), Pline(-0.225, 0.834), Pline(-0.158, 0.726), Pend
-};
-
-static const ShapeFactory::Code titleBarStickyButtonDescription[] = {
-	Pmove(0, -1), Pline(0.2, -0.2), Pline(1, 0), Pline(0.2, 0.2), Pline(0, 1),
-	Pline(-0.2, 0.2), Pline(-1, 0), Pline(-0.2, -0.2), Pend
-};
-
-static const ShapeFactory::Code titleBarUnstickyButtonDescription[] = {
-	Pmove(0, -0.2), Pline(1, 0), Pline(0, 0.2), Pline(-1, 0), Pend
-};
-
-static const ShapeFactory::Code titleBarAboveButtonDescription[] = {
-	Pmove(0, -0.2), Pline(1, 0), Pline(0, 0.2), Pline(-1, 0), Pclose,
-	Pmove(-1, -0.4), Pline(0, -0.6), Pline(1, -0.4), Pline(0, -1), Pend
-};
-
-static const ShapeFactory::Code titleBarBelowButtonDescription[] = {
-	Pmove(0, -0.2), Pline(1, 0), Pline(0, 0.2), Pline(-1, 0), Pclose,
-	Pmove(-1, 0.4), Pline(0, 0.6), Pline(1, 0.4), Pline(0, 1), Pend
-};
-
-static const ShapeFactory::Code titleBarUnaboveButtonDescription[] = {
-	Pmove(0, -0.2), Pline(1, 0), Pline(0, 0.2), Pline(-1, 0), Pclose,
-	Pmove(-1, -1), Pline(0, -0.8), Pline(1, -1), Pline(0, -0.4), Pend
-};
-
-static const ShapeFactory::Code titleBarUnbelowButtonDescription[] = {
-	Pmove(0, -0.2), Pline(1, 0), Pline(0, 0.2), Pline(-1, 0), Pclose,
-	Pmove(-1, 1), Pline(0, 0.8), Pline(1, 1), Pline(0, 0.4), Pend
-};
-
-static const ShapeFactory::Code toolBarHorizontalExtensionButtonDescription[] = {
-	Pmove(-1, -1), Pline(0, 0), Pline(-1, 1), Pline(-0.5, 0), Pclose,
-	Pmove(0, -1), Pline(1, 0), Pline(0, 1), Pline(0.5, 0), Pend
-};
-
-static const ShapeFactory::Code toolBarVerticalExtensionButtonDescription[] = {
-	Pmove(-1, -1), Pline(0, -0.5), Pline(1, -1), Pline(0, 0), Pclose,
-	Pmove(-1, 0), Pline(0, 0.5), Pline(1, 0), Pline(0, 1), Pend
-};
-
-static const ShapeFactory::Code * const titleBarButtonDescriptions[] = {
-	titleBarMenuButtonDescription,
-	titleBarMinButtonDescription,
-	titleBarMaxButtonDescription,
-	titleBarCloseButtonDescription,
-	titleBarNormalButtonDescription,
-	titleBarShadeButtonDescription,
-	titleBarUnshadeButtonDescription,
-	titleBarHelpButtonDescription
-};
-
-static const ShapeFactory::Code * const titleBarCustomDescriptions[] = {
-	0, // CustomBase intentionally left blank
-	titleBarStickyButtonDescription,
-	titleBarUnstickyButtonDescription,
-	0, // this used to be titleBarIconDescription
-	titleBarAboveButtonDescription,
-	titleBarBelowButtonDescription,
-	titleBarUnaboveButtonDescription,
-	titleBarUnbelowButtonDescription
-};
-
-
-//static QPainterPath growPath(const QPainterPath &path, double offset, Qt::PenJoinStyle style = Qt::MiterJoin)
-//{
-//    QPainterPathStroker stroker;
-//    QPainterPath path2;
-//    QPainterPath res;
-//    bool add;
-//
-//    if (offset > 0) {
-//        stroker.setWidth(2.0 * offset);
-//        add = false;
-//    } else if (offset < 0) {
-//        stroker.setWidth(-2.0 * offset);
-//        add = true;
-//    } else {
-//        return path;
-//    }
-//    stroker.setCapStyle(Qt::FlatCap);
-//    stroker.setJoinStyle(style);
-//    stroker.setDashPattern(Qt::SolidLine);
-//    stroker.setCurveThreshold(0.1);
-//    path2 = stroker.createStroke(path);
-//
-//    for (int i = 0; i < path2.elementCount(); ++i) {
-//        const QPainterPath::Element &element = path2.elementAt(i);
-//        switch (element.type)
-//        {
-//            case QPainterPath::MoveToElement:
-//                // copy every other subpath, extracting either inner or outer winding.
-//                add = !add;
-//                if (add) {
-//                    res.moveTo(element.x, element.y);
-//                }
-//                break;
-//            case QPainterPath::LineToElement:
-//                if (add) {
-//                    res.lineTo(element.x, element.y);
-//                }
-//                break;
-//            case QPainterPath::CurveToElement: {
-//                const QPainterPath::Element &element1 = path2.elementAt(++i);
-//                const QPainterPath::Element &element2 = path2.elementAt(++i);
-//                if (add) {
-//                    res.cubicTo(element.x, element.y, element1.x, element1.y, element2.x, element2.y);
-//                }
-//                break;
-//            }
-//            case QPainterPath::CurveToDataElement:
-//                break;
-//        }
-//    }
-//    res.setFillRule(Qt::WindingFill);
-//#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-//    res = res.simplified();
-//#endif
-//    if (offset < 0) {
-//        return res.toReversed();
-//    }
-//    return res;
-//}
-
-
-QIcon SkulptureStyle::standardIconImplementation(QStyle::StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const
-{
-	const ShapeFactory::Code *code = 0;
-        int numStates = 1;
-	int size = 10;
-
-	if (standardIcon > QStyle::SP_CustomBase) {
-		if (standardIcon - QStyle::SP_CustomBase < sizeof(titleBarCustomDescriptions) / sizeof(titleBarCustomDescriptions[0])) {
-			code = titleBarCustomDescriptions[standardIcon - QStyle::SP_CustomBase];
-                        numStates = 3;
-		}
-	} else if (/*standardIcon >= QStyle::SP_TitleBarMenuButton && */standardIcon <= QStyle::SP_TitleBarContextHelpButton) {
-		code = titleBarButtonDescriptions[standardIcon - QStyle::SP_TitleBarMenuButton];
-                numStates = 3;
-        } else {
-		switch (standardIcon) {
-			case QStyle::SP_ToolBarHorizontalExtensionButton:
-				code = toolBarHorizontalExtensionButtonDescription;
-                                numStates = 2;
-                                size = 8;
-				break;
-			case QStyle::SP_ToolBarVerticalExtensionButton:
-				code = toolBarVerticalExtensionButtonDescription;
-                                numStates = 2;
-                                size = 8;
-				break;
-			default:
-				break;
-		}
-	}
-	if (code) {
-                QIcon icon;
-		bool dock = qobject_cast<const QDockWidget *>(widget) != 0;
-		if (dock) {
-			size = 14;
-                        numStates = 2;
-                }
-		qreal s = size / 2.0;
-                if (numStates == 3) {
-                    if (widget && !qstrcmp(widget->metaObject()->className(), "KLineEditButton")) {
-                        s = qMin(22, widget->fontMetrics().height()) * 0.25;
-                        size += 2;
-                    } else if (widget && !qstrcmp(widget->metaObject()->className(), "CloseButton")) {
-                        s = qMin(20, widget->fontMetrics().height()) * 0.25;
-                    } else {
-                        size += 4;
-                        if (option) {
-                            s = qMin(22, option->fontMetrics.height()) * 0.3;
-                        }
-                    }
-                }
-                for (int state = 0; state < numStates; ++state) {
-                    QImage image(size, size, QImage::Format_ARGB32);
-                    image.fill(0);
-                    QPainter painter(&image);
-                    painter.setRenderHint(QPainter::Antialiasing, true);
-                    painter.translate(size / 2.0, size / 2.0);
-                    if (dock) {
-                            painter.scale(s - 2, s - 2);
-                    } else {
-                            painter.scale(s, s);
-                    }
-                    painter.setPen(Qt::NoPen);
-                    QPalette palette;
-                    if (option) {
-                        palette = option->palette;
-                    }
-                    QPalette::ColorRole role = QPalette::Text;
-                    QColor shapeColor;
-                    if (numStates == 2) {
-                        if (state == 0) {
-                            role = QPalette::WindowText;
-                        } else {
-                            role = QPalette::ButtonText;
-                        }
-                        shapeColor = palette.color(role);
-                    } else if (numStates == 3) {
-                        if (state == 1) {
-                            QColor glowColor = palette.color(role);
-                            if (standardIcon == QStyle::SP_TitleBarCloseButton) {
-                                glowColor = QColor(255, 0, 0, 100);
-                            } else {
-                                glowColor.setAlpha(50);
-                            }
-#if 0
-                            painter.setBrush(glowColor);
-                            QPainterPath path = ShapeFactory::createShape(code);
-                            path = growPath(path, 0.15);
-                            painter.drawPath(path);
-                            filterImage(image, 0.9);
-                            shapeColor = palette.color(role);
-#else
-                            painter.fillRect(QRectF(-1.5, -1.5, 3, 3), glowColor);
-                            QPainterPath path = ShapeFactory::createShape(code);
-                            shapeColor = palette.color(role);
-//                            painter.setPen(QPen(shapeColor, 0.3));
-                            painter.drawRect(QRectF(-1.5, -1.5, 3, 3));
-                            painter.setPen(Qt::NoPen);
-                            painter.setBrush(shapeColor);
-                            painter.drawPath(path);
-#endif
-                        } else {
-                            shapeColor = palette.color(role);
-                        }
-                    }
-                    QColor shadowColor = option ? option->palette.color(QPalette::Shadow) : Qt::black;
-                    shadowColor.setAlpha(25);
-                    painter.translate(1 / s, 1 / s);
-                    painter.setBrush(shadowColor);
-                    painter.drawPath(ShapeFactory::createShape(code));
-                    painter.translate(-1 / s, -1 / s);
-                    painter.setBrush(shapeColor);
-                    painter.drawPath(ShapeFactory::createShape(code));
-                    painter.end();
-                    QIcon::Mode iconMode;
-                    switch (state) {
-                        case 1:
-                            iconMode = QIcon::Active;
-                            break;
-                        case 2:
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-                            iconMode = QIcon::Selected;
-#else
-                            iconMode = QIcon::Normal;
-#endif
-                            break;
-                        default:
-                            iconMode = QIcon::Normal;
-                            break;
-                    }
-                    icon.addPixmap(QPixmap::fromImage(image), iconMode);
-                }
-                return icon;
-	}
-	return ParentStyle::standardIconImplementation(standardIcon, option, widget);
-}
-
-
-QPixmap SkulptureStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *option) const
-{
-	return ParentStyle::generatedIconPixmap(iconMode, pixmap, option);
-}
-
-
-QRect SkulptureStyle::itemPixmapRect(const QRect &rectangle, int alignment, const QPixmap & pixmap) const
-{
-	return ParentStyle::itemPixmapRect(rectangle, alignment, pixmap);
-}
-
-
-void SkulptureStyle::drawItemPixmap(QPainter *painter, const QRect &rectangle, int alignment, const QPixmap &pixmap) const
-{
-	ParentStyle::drawItemPixmap(painter, rectangle, alignment, pixmap);
-}
-
-
-/*
- * skulpture_kde4.cpp
- *
- */
-
-#include "skulpture_p.h"
-//#include "config.h"
-
-#if KDE4_FOUND
-/*-----------------------------------------------------------------------*/
-
-QVariant readKdeSetting(const QString &entry)
-{
-    return QVariant();
-}
-
-#else
-/*-----------------------------------------------------------------------*/
-
-QVariant readKdeSetting(const QString &entry)
-{
-	Q_UNUSED(entry)
-    return QVariant();
-}
-
-#endif
-
-/*
- * skulpture_layout.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtCore/QSettings>
-#include <QtGui/QFrame>
-#include <QtGui/QApplication>
-#include <QtGui/QShortcut>
-#include <QtGui/QLayout>
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-#include <QtGui/QFormLayout>
-#include <QtGui/QLabel>
-#include <QtGui/QCheckBox>
-#endif
-
-
-/*-----------------------------------------------------------------------*/
-
-int SkulptureStyle::Private::verticalTextShift(const QFontMetrics &fontMetrics)
-{
-    if (fontMetrics == qApp->fontMetrics()) {
-        return textShift;
-    }
-    QFont boldFont;
-    boldFont.setBold(true);
-    if (fontMetrics == QFontMetrics(boldFont)) {
-        return textShift;
-    }
-    return 0;
-}
-
-
-static QFontMetrics styledFontMetrics(const QStyleOption *option, const QWidget *widget)
-{
-    if (option) {
-        return option->fontMetrics;
-    } else if (widget) {
-        return widget->fontMetrics();
-    }
-    return qApp->fontMetrics();
-}
-
-
-int SkulptureStyle::Private::textLineHeight(const QStyleOption *option, const QWidget *widget)
-{
-    QFontMetrics fm = styledFontMetrics(option, widget);
-    return fm.height() + (verticalTextShift(fm) & 1);
-}
-
-
-static int fontHeight(const QStyleOption *option, const QWidget *widget)
-{
-    return styledFontMetrics(option, widget).height();
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-int SkulptureStyle::pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const
-{
-    switch (metric) {
-        /* entries are stricly sorted in Qt order for future lookup table */
-        case PM_ButtonMargin: return d->pushButtonSize;
-        case PM_ButtonDefaultIndicator: return 0;
-        case PM_MenuButtonIndicator: return fontHeight(option, widget);
-        case PM_ButtonShiftHorizontal: {
-            Qt::LayoutDirection direction;
-            if (option) {
-                direction = option->direction;
-            } else if (widget) {
-                direction = widget->layoutDirection();
-            } else {
-                direction = QApplication::layoutDirection();
-            }
-            return direction == Qt::LeftToRight ? 1 : -1;
-        }
-        case PM_ButtonShiftVertical: return 1;
-
-        case PM_DefaultFrameWidth: return 2; // 3 for command buttons
-        case PM_SpinBoxFrameWidth: return 2;
-        case PM_ComboBoxFrameWidth: return 2; // 3 for non-editable combobox (in button mode)
-
-        case PM_MaximumDragDistance: return -1;
-
-        case PM_ScrollBarExtent: {
-            if (d->scrollBarSize > 0) {
-                return d->scrollBarSize;
-            }
-             // do not depend on widget font size
-            int extent = ((fontHeight(0, 0) >> 1) & ~1) + 9;
-#if 0
-            if (option && (option->state & QStyle::State_Horizontal)) {
-                return (qMax(extent, qApp->globalStrut().height()) & ~1) + 1;
-            } else {
-                return (qMax(extent, qApp->globalStrut().width()) & ~1) + 1;
-            }
-#else
-            return extent;
-#endif
-        }
-        case PM_ScrollBarSliderMin: {
-            if (d->scrollBarLength > 0) {
-                return d->scrollBarLength;
-            }
-            return fontHeight(0, 0) + 1;
-        }
-
-        case PM_SliderThickness:
-        case PM_SliderControlThickness: {
-            if (d->sliderSize > 0) {
-                return d->sliderSize + 4;
-            }
-            int thickness = (fontHeight(option, widget) & ~1) + 5;
-            if (option && !(option->state & QStyle::State_Horizontal)) {
-                return (qMax(thickness, qApp->globalStrut().width()) & ~1) + 1;
-            } else {
-                return (qMax(thickness, qApp->globalStrut().height()) & ~1) + 1;
-            }
-        }
-
-        case PM_SliderLength: {
-            if (d->sliderLength > 0) {
-                return d->sliderLength;
-            }
-            int length = (fontHeight(option, widget)) + 6;
-            if (option && !(option->state & QStyle::State_Horizontal)) {
-                return qMax(length, qApp->globalStrut().height());
-            } else {
-                return qMax(length, qApp->globalStrut().width());
-            }
-        }
-        case PM_SliderTickmarkOffset: {
-            if (const QStyleOptionSlider *sliderOption = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
-                if (sliderOption->tickPosition == QSlider::TicksAbove) {
-                    return 5;
-                } else if (sliderOption->tickPosition == QSlider::TicksBothSides) {
-                    return 5;
-                } else if (sliderOption->tickPosition == QSlider::TicksBelow) {
-                    return 0;
-                }
-            }
-            return 0;
-        }
-        case PM_SliderSpaceAvailable: {
-            return QCommonStyle::pixelMetric(metric, option, widget);
-        }
-
-        case PM_DockWidgetSeparatorExtent: return ((qMax(fontHeight(option, widget), 16) >> 1) & ~1) - 1;
-        case PM_DockWidgetHandleExtent: return 8;
-        case PM_DockWidgetFrameWidth: return 2;
-
-        case PM_TabBarTabOverlap: return 2;
-        case PM_TabBarTabHSpace: return 0;
-        case PM_TabBarTabVSpace: return 0;
-        case PM_TabBarBaseHeight: return 2;
-        case PM_TabBarBaseOverlap: return 2;
-
-        case PM_ProgressBarChunkWidth: return fontHeight(option, widget) >> 1;
-
-        case PM_SplitterWidth: return ((qMax(fontHeight(option, widget), 16) >> 1) & ~1) - 1;
-        case PM_TitleBarHeight: return d->textLineHeight(option, widget) + 4;
-
-        case PM_MenuScrollerHeight: return (fontHeight(option, widget) >> 1) + 2;
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-        case PM_MenuHMargin: return 1;
-        case PM_MenuVMargin: return 1;
-        case PM_MenuPanelWidth: return 1;
-#else
-        case PM_MenuHMargin: return 0; // ### anything other than 0 messes Qt's menu positioning code ...
-        case PM_MenuVMargin: return 0;
-        case PM_MenuPanelWidth: return 2;
-#endif
-        case PM_MenuTearoffHeight: return (fontHeight(option, widget) >> 1) + 2;
-        case PM_MenuDesktopFrameWidth: return 0;
-
-        case PM_MenuBarPanelWidth: return 0;
-        case PM_MenuBarItemSpacing: return 0;
-        case PM_MenuBarVMargin: return 1;
-        case PM_MenuBarHMargin: return 1;
-
-        case PM_IndicatorWidth:
-        case PM_IndicatorHeight:
-        case PM_ExclusiveIndicatorWidth:
-        case PM_ExclusiveIndicatorHeight:
-        case PM_CheckListButtonSize:
-        case PM_CheckListControllerSize: {
-            // do not use strut width, because label is usually wide enough
-            return qMax(d->textLineHeight(option, widget), QApplication::globalStrut().height());
-        }
-
-        case PM_DialogButtonsSeparator: return 6;
-        case PM_DialogButtonsButtonWidth: return 64;
-        case PM_DialogButtonsButtonHeight: return 16;
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-        case PM_MdiSubWindowFrameWidth: return 3;
-        case PM_MdiSubWindowMinimizedWidth: return fontHeight(option, widget) * 12;
-#else
-        case PM_MDIFrameWidth: return 3;
-        case PM_MDIMinimizedWidth: return fontHeight(option, widget) * 12;
-#endif
-
-        case PM_HeaderMargin: return 3;
-        case PM_HeaderMarkSize: return 5;
-        case PM_HeaderGripMargin: return 4;
-        case PM_TabBarTabShiftHorizontal: return 0;
-        case PM_TabBarTabShiftVertical: return 0;
-        case PM_TabBarScrollButtonWidth: return (fontHeight(option, widget) & ~1) + 1;
-
-        case PM_ToolBarFrameWidth: return 1;
-        case PM_ToolBarHandleExtent: return 9;
-        case PM_ToolBarItemSpacing: return 2;
-        case PM_ToolBarItemMargin: return 0;
-        case PM_ToolBarSeparatorExtent: return 4;
-        case PM_ToolBarExtensionExtent: return 12;
-
-        case PM_SpinBoxSliderHeight: return 2;
-
-        case PM_DefaultTopLevelMargin: {
-            if (d->dialogMargins >= 0) {
-                return d->dialogMargins;
-            }
-            return (fontHeight(option, widget) >> 1);
-        }
-        case PM_DefaultChildMargin: {
-            if (d->widgetMargins >= 0) {
-                return d->widgetMargins;
-            }
-            return (fontHeight(option, widget) >> 1);
-        }
-        case PM_DefaultLayoutSpacing: {
-            if (d->verticalSpacing >= 0) {
-                return d->verticalSpacing;
-            }
-            return ((fontHeight(option, widget) * 3) >> 3);
-        }
-
-        case PM_ToolBarIconSize: return pixelMetric(PM_SmallIconSize, option, widget);
-        case PM_ListViewIconSize: return pixelMetric(PM_SmallIconSize, option, widget);
-        case PM_IconViewIconSize: return pixelMetric(PM_LargeIconSize, option, widget);
-        case PM_SmallIconSize: {
-            int iconSize = d->textLineHeight(option, widget);
-            return iconSize;
-        }
-        case PM_LargeIconSize: {
-            const bool hasSvgIcons = false;
-            int iconSize = 2 * fontHeight(option, widget);
-            if (!hasSvgIcons) {
-                if (iconSize < 28) {
-                    return 22;
-                } else if (iconSize < 40) {
-                    return 32;
-                } else if (iconSize < 56) {
-                    return 48;
-                } else if (iconSize < 96) {
-                    return 64;
-                }
-            }
-            return iconSize;
-        }
-        case PM_FocusFrameVMargin: return 2;
-        case PM_FocusFrameHMargin: return 2;
-
-        case PM_ToolTipLabelFrameWidth: return 1;
-        case PM_CheckBoxLabelSpacing: {
-            if (d->labelSpacing >= 0) {
-                return d->labelSpacing;
-            }
-            return (fontHeight(option, widget) >> 1) - 2;
-        }
-        case PM_TabBarIconSize: return pixelMetric(PM_SmallIconSize, option, widget);
-        case PM_SizeGripSize: return 13; // ### make this variable
-        case PM_DockWidgetTitleMargin: return 2;
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-        case PM_MessageBoxIconSize: return pixelMetric(PM_LargeIconSize, option, widget);
-        case PM_ButtonIconSize: return pixelMetric(PM_SmallIconSize, option, widget);
-#endif
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-        case PM_DockWidgetTitleBarButtonMargin: return 0;
-        case PM_RadioButtonLabelSpacing:  {
-            if (d->labelSpacing >= 0) {
-                return d->labelSpacing;
-            }
-            return (fontHeight(option, widget) >> 1) - 2;
-        }
-        case PM_LayoutLeftMargin:
-        case PM_LayoutTopMargin:
-        case PM_LayoutRightMargin:
-        case PM_LayoutBottomMargin: {
-            PixelMetric metric = QStyle::PM_DefaultChildMargin;
-            if ((option && (option->state & QStyle::State_Window)) || (widget && widget->isWindow())) {
-                metric = QStyle::PM_DefaultTopLevelMargin;
-            }
-            return pixelMetric(metric, option, widget);
-        }
-
-        case PM_LayoutHorizontalSpacing:
-        case PM_LayoutVerticalSpacing: {
-            return -1;
-        }
-#endif
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-        case PM_TabBar_ScrollButtonOverlap: return 0;
-        case PM_TextCursorWidth: {
-            if (d->textCursorWidth > 0) {
-                return qMax(1, int(d->textCursorWidth + 0.5));
-            }
-            return qMax(1, (fontHeight(option, widget) + 8) / 12);
-        }
-#else
-        // used for TextCursorWidth in Qt < 4.4
-        case PM_CustomBase + 1: {
-            if (d->textCursorWidth > 0) {
-                return qMax(1, int(d->textCursorWidth + 0.5));
-            }
-            return qMax(1, (fontHeight(option, widget) + 8) / 12);
-        }
-#endif
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-        case PM_TabCloseIndicatorWidth:
-        case PM_TabCloseIndicatorHeight: {
-            return (fontHeight(option, widget) & ~1);
-        }
-        case PM_ScrollView_ScrollBarSpacing: return 0;
-        case PM_SubMenuOverlap: return -2;
-#endif
-
-        case PM_CustomBase: // avoid warning
-            break;
-    }
-    return ParentStyle::pixelMetric(metric, option, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-int SkulptureStyle::layoutSpacingImplementation(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option, const QWidget *widget) const
-{
-    Q_UNUSED(control2);
-
-    if (orientation == Qt::Horizontal) {
-        if (control1 == QSizePolicy::Label) {
-            if (d->labelSpacing >= 0) {
-                return d->labelSpacing + 2;
-            }
-            return fontHeight(option, widget) >> 1;
-        }
-        if (d->horizontalSpacing >= 0) {
-            return d->horizontalSpacing;
-        }
-        return fontHeight(option, widget) >> 1;
-    }
-    if (control1 & (QSizePolicy::CheckBox | QSizePolicy::RadioButton)
-     && control2 & (QSizePolicy::CheckBox | QSizePolicy::RadioButton)) {
-        if (d->verticalSpacing >= 0) {
-            return qMax(0, d->verticalSpacing - 2);
-        }
-        return pixelMetric(PM_DefaultLayoutSpacing, option, widget) - 2;
-    }
-    if (d->verticalSpacing >= 0) {
-        return d->verticalSpacing;
-    }
-    return pixelMetric(PM_DefaultLayoutSpacing, option, widget);
-}
-#endif
-
-/*-----------------------------------------------------------------------*/
-
-extern QSize sizeFromContentsToolButton(const QStyleOptionToolButton *option, const QSize &contentsSize, const QWidget *widget, const QStyle *style, int toolButtonSize);
-extern QSize sizeFromContentsMenuItem(const QStyleOptionMenuItem *option, const QSize &contentsSize, const QWidget *widget, const QStyle *style, int menuItemSize, int textLineHeight);
-
-
-/*-----------------------------------------------------------------------*/
-
-static inline QSize sizeFromContentsPushButton(const QStyleOptionButton *option, const QSize &contentsSize, const QWidget *widget, const QStyle *style, int pushButtonSize, int textLineHeight)
-{
-    Q_UNUSED(style);
-
-    // width
-    int w = contentsSize.width() + (fontHeight(option, widget) & ~1);
-    if (!option->text.isEmpty()) {
-        w += 6 + 2 * pushButtonSize;
-        const int sizeBase = qMin(64, 4 * fontHeight(option, widget));
-        const int sizeIncrement = qMin(32, qMin(sizeBase, qMax(1, 2 * pushButtonSize)));
-        if (w < sizeBase) {
-            w = sizeBase;
-        } else {
-            w = ((w - sizeBase + sizeIncrement - 1) / sizeIncrement) * sizeIncrement + sizeBase;
-        }
-    }
-
-    // height
-    int h = qMax(contentsSize.height(), textLineHeight);
-    h += 2 * pushButtonSize + 4;
-
-    return QSize(w, h);
-}
-
-
-static inline QSize sizeFromContentsComboBox(const QStyleOptionComboBox *option, const QSize &contentsSize, const QWidget *widget, const QStyle *style, int widgetSize, int textLineHeight)
-{
-//    if (contentsSize.height() > 16) {
-//        fh = contentsSize.height() - 2;
-//    }
-    return ((const QCommonStyle *) style)->QCommonStyle::sizeFromContents(QStyle::CT_ComboBox, option, QSize(contentsSize.width(), textLineHeight + 2 * widgetSize), widget);
-}
-
-
-static inline QSize sizeFromContentsLineEdit(const QStyleOptionFrame *option, const QSize &contentsSize, const QWidget *widget, const QStyle *style, int widgetSize, int textLineHeight)
-{
-    Q_UNUSED(widget); Q_UNUSED(style);
-
-    int fw = option->lineWidth;
-    int fh = textLineHeight;
-//    if (contentsSize.height() > 14) {
-//        fh = contentsSize.height() - 4;
-//    }
-    return QSize(contentsSize.width() + 6 + 2 * fw, fh + 2 * (widgetSize + fw));
-}
-
-
-static inline QSize sizeFromContentsSpinBox(const QStyleOptionSpinBox *option, const QSize &contentsSize, const QWidget *widget, const QStyle *style)
-{
-    Q_UNUSED(option); Q_UNUSED(widget); Q_UNUSED(style);
-
-    return contentsSize + QSize(4, 0);
-}
-
-
-static inline QSize sizeFromContentsGroupBox(const QStyleOptionGroupBox *option, const QSize &contentsSize, const QWidget *widget, const QStyle *style)
-{
-    Q_UNUSED(widget); Q_UNUSED(style);
-
-    if (!(option->features & QStyleOptionFrameV2::Flat)) {
-        return contentsSize + QSize(fontHeight(option, widget) & ~1, 0);
-    }
-    return contentsSize;
-}
-
-
-static inline QSize sizeFromContentsTabBarTab(const QStyleOptionTab *option, const QSize &contentsSize, const QWidget *widget, const QStyle *style, int tabBarSize, int textShift)
-{
-    Q_UNUSED(widget); Q_UNUSED(style);
-
-    if (int(option->shape) & 2) {
-        return (contentsSize + QSize(8, 24)).expandedTo(QApplication::globalStrut());
-    }
-    if (!option->icon.isNull()) {
-        textShift = 0;
-    }
-    return (contentsSize + QSize(2 * tabBarSize + (fontHeight(option, widget) & ~1), 2 + 2 * tabBarSize + (textShift & 1))).expandedTo(QApplication::globalStrut());
-}
-
-
-static inline QSize sizeFromContentsProgressBar(const QStyleOptionProgressBar *option, const QSize &contentsSize, const QWidget *widget, const QStyle *style, int widgetSize, int textShift)
-{
-    Q_UNUSED(widget); Q_UNUSED(style);
-
-    if (option->version >= 2 && ((const QStyleOptionProgressBarV2 *) option)->orientation == Qt::Vertical) {
-        return contentsSize + QSize(2 * widgetSize, 6);
-    }
-    return contentsSize + QSize(6, (textShift & 1) + 2 * widgetSize - 6);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-#define CT_CASE(ct, so) \
-    case CT_## ct: \
-        if (option && option->type == QStyleOption::SO_## so) { \
-            return sizeFromContents ## ct((const QStyleOption ## so *) option, contentsSize, widget, this); \
-        } \
-        break
-
-
-QSize SkulptureStyle::sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget) const
-{
-    switch (type) {
-        case CT_PushButton:
-            if (option && option->type == QStyleOption::SO_Button) {
-                return sizeFromContentsPushButton((const QStyleOptionButton *) option, contentsSize, widget, this, d->pushButtonSize, d->textLineHeight(option, widget));
-            }
-            break;
-        case CT_CheckBox:
-        case CT_RadioButton:
-            return ParentStyle::sizeFromContents(type, option, contentsSize, widget) + QSize(0, 2 * d->widgetSize - 4);
-            //break;
-
-        case CT_ToolButton:
-            if (option && option->type == QStyleOption::SO_ToolButton) {
-                return sizeFromContentsToolButton((const QStyleOptionToolButton *) option, contentsSize, widget, this, d->toolButtonSize);
-            }
-            break;
-        case CT_ComboBox:
-            if (option && option->type == QStyleOption::SO_ComboBox) {
-                return sizeFromContentsComboBox((const QStyleOptionComboBox *) option, contentsSize, widget, this, d->widgetSize, d->textLineHeight(option, widget));
-            }
-            break;
-
-        case CT_Splitter:
-        case CT_Q3DockWindow:
-            return contentsSize;
-        case CT_ProgressBar:
-            if (option && option->type == QStyleOption::SO_ProgressBar) {
-                return sizeFromContentsProgressBar((const QStyleOptionProgressBar *) option, contentsSize, widget, this, d->widgetSize, d->verticalTextShift(styledFontMetrics(option, widget)));
-            }
-            break;
-
-        case CT_MenuItem:
-            if (option && option->type == QStyleOption::SO_MenuItem) {
-                return sizeFromContentsMenuItem((const QStyleOptionMenuItem *) option, contentsSize, widget, this, 2 * d->menuItemSize, d->textLineHeight(option, widget));
-            }
-            break;
-        case CT_MenuBarItem: {
-            int h = 2 * (d->menuBarSize >= 0 ? d->menuBarSize : 2) + d->textLineHeight(option, widget);
-            return QSize(contentsSize.width() + (((fontHeight(option, widget) * 7) >> 3) & ~1), h).expandedTo(qApp->globalStrut());
-        }
-        case CT_MenuBar: return contentsSize;
-        case CT_Menu: return contentsSize;
-
-        case CT_TabBarTab:
-            if (option && option->type == QStyleOption::SO_Tab) {
-                return sizeFromContentsTabBarTab((const QStyleOptionTab *) option, contentsSize, widget, this, d->tabBarSize, d->verticalTextShift(styledFontMetrics(option, widget)));
-            }
-            break;
-
-        case CT_Slider:
-        case CT_ScrollBar:
-        case CT_Q3Header:
-            return contentsSize;
-
-        case CT_LineEdit:
-            if (option && option->type == QStyleOption::SO_Frame) {
-                return sizeFromContentsLineEdit((const QStyleOptionFrame *) option, contentsSize, widget, this, d->widgetSize, d->textLineHeight(option, widget));
-            }
-            break;
-        CT_CASE(SpinBox, SpinBox);
-
-        case CT_SizeGrip: return contentsSize;
-        case CT_TabWidget: return contentsSize + QSize(4, 4);
-        case CT_DialogButtons: return contentsSize;
-        case CT_HeaderSection: break;
-
-//#if (QT_VERSION >= QT_VERSION_CHECK(4, 1, 0))
-        CT_CASE(GroupBox, GroupBox);
-//#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-        case CT_MdiControls: break;
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-        case CT_ItemViewItem: break;
-#endif
-
-        case CT_CustomBase: // avoid warning
-            break;
-    }
-    return ParentStyle::sizeFromContents(type, option, contentsSize, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-extern QRect subElementRectDockWidget(QStyle::SubElement element, const QStyleOptionDockWidget *option, const QWidget *widget, const QStyle *style);
-extern QRect subElementRectComboBoxFocusRect(const QStyleOptionComboBox *option, const QWidget *widget, const QStyle *style);
-
-
-/*-----------------------------------------------------------------------*/
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-static inline QRect subElementRectFrameContents(const QStyleOption *option, const QWidget *widget, const QStyle *style)
-{
-    Q_UNUSED(style);
-
-    if (widget && widget->inherits("KHTMLView")) {
-        QWidget *window;
-        // case 1: the parent widget is a QFrame, and already has a sunken frame
-        //  do not show any frame (KMail mail view, Kopete chat view)
-        if (QFrame *frame = qobject_cast<QFrame *>(widget->parentWidget())) {
-            if (frame->frameShape() == QFrame::StyledPanel) {
-                // ### fix Kopete frame
-                // frame->setFrameShadow(QFrame::Sunken);
-                return option->rect;
-            }
-        } else if ((window = widget->window()) && window->inherits("KonqMainWindow")) {
-            // case 2: the html view covers the full width of window:
-            //  do not show side frames (Konqueror)
-            return option->rect.adjusted(0, 2, 0, -2);
-        } else {
-            // case 3: detect KMail 4.2
-            while ((widget = widget->parentWidget())) {
-                if (widget->inherits("KMReaderWin")) {
-                    return option->rect;
-                }
-            }
-        }
-    }
-    return option->rect.adjusted(2, 2, -2, -2);
-}
-
-
-static inline QRect subElementRectLineEditContents(const QStyleOptionFrame *option, const QWidget *widget, const QStyle *style, int textShift)
-{
-    Q_UNUSED(widget); Q_UNUSED(style);
-
-    int fw = option->lineWidth;
-    if (textShift & 1 && !(option->rect.height() & 1)) {
-        textShift += 1;
-    }
-    return option->rect.adjusted(fw + 2, fw + ((-textShift) >> 1), -fw - 2, -fw + ((-textShift) >> 1));
-}
-#endif
-
-/*-----------------------------------------------------------------------*/
-
-QRect SkulptureStyle::subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const
-{
-    switch (element) {
-        case SE_PushButtonContents:
-        case SE_PushButtonFocusRect:
-
-        case SE_CheckBoxIndicator:
-        case SE_CheckBoxContents:
-        case SE_CheckBoxFocusRect:
-        case SE_CheckBoxClickRect:
-
-        case SE_RadioButtonIndicator:
-        case SE_RadioButtonContents:
-        case SE_RadioButtonFocusRect:
-        case SE_RadioButtonClickRect:
-            break;
-
-        case SE_ComboBoxFocusRect:
-            if (option->type == QStyleOption::SO_ComboBox) {
-                return subElementRectComboBoxFocusRect((const QStyleOptionComboBox *) option, widget, this);
-            }
-            break;
-
-        case SE_SliderFocusRect:
-
-        case SE_Q3DockWindowHandleRect:
-            break;
-
-        case SE_ProgressBarGroove:
-        case SE_ProgressBarContents:
-        case SE_ProgressBarLabel:
-            return option->rect;
-
-        case SE_DialogButtonAccept:
-        case SE_DialogButtonReject:
-        case SE_DialogButtonApply:
-        case SE_DialogButtonHelp:
-        case SE_DialogButtonAll:
-        case SE_DialogButtonAbort:
-        case SE_DialogButtonIgnore:
-        case SE_DialogButtonRetry:
-        case SE_DialogButtonCustom:
-            break;
-
-        case SE_ToolBoxTabContents:
-            return option->rect.adjusted(11, 0, -6, 0);
-
-        case SE_HeaderLabel:
-        case SE_HeaderArrow:
-            break;
-
-        case SE_TabWidgetTabBar:
-        case SE_TabWidgetTabPane:
-        case SE_TabWidgetTabContents:
-            break;
-        case SE_TabWidgetLeftCorner:
-        case SE_TabWidgetRightCorner:
-            return QCommonStyle::subElementRect(element, option, widget).adjusted(1, 1, -1, 1);
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-        case SE_ItemViewItemCheckIndicator:
-#else
-        case SE_ViewItemCheckIndicator:
-#endif
-            break;
-
-        case SE_TabBarTearIndicator:
-
-        case SE_TreeViewDisclosureItem:
-            break;
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-        case SE_LineEditContents:
-            if (option->type == QStyleOption::SO_Frame) {
-                return subElementRectLineEditContents((const QStyleOptionFrame *) option, widget, this, d->textShift);
-            }
-            break;
-        case SE_FrameContents:
-            return subElementRectFrameContents(option, widget, this);
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-        case SE_DockWidgetCloseButton:
-        case SE_DockWidgetFloatButton:
-        case SE_DockWidgetTitleBarText:
-        case SE_DockWidgetIcon:
-            if (option->type == QStyleOption::SO_DockWidget) {
-                return subElementRectDockWidget(element, (const QStyleOptionDockWidget *) option, widget, this);
-            }
-            break;
-
-        case SE_CheckBoxLayoutItem:
-        case SE_ComboBoxLayoutItem:
-        case SE_DateTimeEditLayoutItem:
-            break;
-        case SE_DialogButtonBoxLayoutItem: break;
-        case SE_LabelLayoutItem:
-        case SE_ProgressBarLayoutItem:
-        case SE_PushButtonLayoutItem:
-        case SE_RadioButtonLayoutItem:
-        case SE_SliderLayoutItem:
-        case SE_SpinBoxLayoutItem:
-        case SE_ToolButtonLayoutItem:
-            break;
-
-        case SE_FrameLayoutItem:
-        case SE_GroupBoxLayoutItem:
-        case SE_TabWidgetLayoutItem:
-            break;
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-        case SE_ItemViewItemDecoration:
-        case SE_ItemViewItemText:
-        case SE_ItemViewItemFocusRect:
-            break;
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-        case SE_TabBarTabLeftButton:
-        case SE_TabBarTabRightButton:
-        case SE_TabBarTabText:
-            break;
-        case SE_ShapedFrameContents:
-            break;
-#endif
-        case SE_CustomBase: // avoid warning
-            break;
-    }
-    return ParentStyle::subElementRect(element, option, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-void SkulptureStyle::Private::polishFormLayout(QFormLayout *layout)
-{
-    if (layout->labelAlignment() & Qt::AlignVCenter) {
-        return;
-    }
-    int addedHeight = -1;
-    for (int row = 0; row < layout->rowCount(); ++row) {
-        QLayoutItem *labelItem = layout->itemAt(row, QFormLayout::LabelRole);
-        if (!labelItem) {
-            continue;
-        }
-        QLayoutItem *fieldItem = layout->itemAt(row, QFormLayout::FieldRole);
-        if (!fieldItem) {
-            continue;
-        }
-        QWidget *label = labelItem->widget();
-        if (!label) {
-            continue;
-        }
-        int labelHeight;
-        if (addedHeight < 0) {
-#if 0
-            // fixed value in Qt
-            static const int verticalMargin = 1;
-            QStyleOptionFrame option;
-            option.initFrom(label);
-            option.lineWidth = label->style()->pixelMetric(QStyle::PM_DefaultFrameWidth, &option, label);
-            option.midLineWidth = 0;
-            option.rect = QRect(0, 0, 10, fontHeight(option, label) + 2 * verticalMargin);
-            // label should be aligned centered to LineEdit, so use its size
-            addedHeight = label->style()->sizeFromContents(QStyle::CT_LineEdit, &option, option.rect.size(), label).height() - fontHeight(option, height);
-#else
-            addedHeight = 4 + 2 * widgetSize;
-#endif
-        }
-        if (qobject_cast<QLabel *>(label)) {
-            labelHeight = label->sizeHint().height() + addedHeight;
-        } else if (qobject_cast<QCheckBox *>(label)) {
-            labelHeight = label->sizeHint().height();
-        } else {
-            continue;
-        }
-        int fieldHeight = fieldItem->sizeHint().height();
-        // work around KIntNumInput::sizeHint() bug
-        if (fieldItem->widget() && fieldItem->widget()->inherits("KIntNumInput")) {
-            fieldHeight -= 2;
-            fieldItem->widget()->setMaximumHeight(fieldHeight);
-        }
-        /* for large fields, we don't center */
-        if (fieldHeight <= 2 * fontHeight(0, label) + addedHeight) {
-            if (fieldHeight > labelHeight) {
-                labelHeight = fieldHeight;
-            }
-        } else {
-            if (verticalTextShift(label->fontMetrics()) & 1) {
-                labelHeight += 1;
-            }
-        }
-        if (qobject_cast<QCheckBox *>(label)) {
-            label->setMinimumHeight(labelHeight);
-        } else {
-            // QFormLayout determines label size as height * 5 / 4, so revert that
-            label->setMinimumHeight((labelHeight * 4 + 4) / 5);
-        }
-    }
-}
-#endif
-
-void SkulptureStyle::Private::polishLayout(QLayout *layout)
-{
-    if (forceSpacingAndMargins) {
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-        if (QFormLayout *formLayout = qobject_cast<QFormLayout *>(layout)) {
-            if (formLayout->spacing() >= 2) {
-                formLayout->setSpacing(-1);
-            }
-        } else
-#endif
-        if (QGridLayout *gridLayout = qobject_cast<QGridLayout *>(layout)) {
-            if (gridLayout->spacing() >= 2) {
-                gridLayout->setSpacing(-1);
-            }
-        } else if (QBoxLayout *boxLayout = qobject_cast<QBoxLayout *>(layout)) {
-            if (boxLayout->spacing() >= 2) {
-                boxLayout->setSpacing(-1);
-            }
-        } else {
-            if (layout->spacing() >= 2) {
-                layout->setSpacing(-1);
-            }
-        }
-        if (layout->margin() >= 4) {
-            layout->setMargin(-1);
-        }
-    }
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-    if (QFormLayout *formLayout = qobject_cast<QFormLayout *>(layout)) {
-        polishFormLayout(formLayout);
-    }
-#endif
-    // recurse into layouts
-    for (int i = 0; i < layout->count(); ++i) {
-        QLayoutItem *item = layout->itemAt(i);
-        if (QLayout *layout = item->layout()) {
-            polishLayout(layout);
-        }
-    }
-}
-
-
-/*
- * skulpture_mdi.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-#include <QtGui/QMdiSubWindow>
-#endif
-#include <QtCore/QSettings>
-#include <cmath>
-
-
-/*-----------------------------------------------------------------------*/
-
-QRect subControlRectTitleBar(const QStyleOptionTitleBar *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style)
-{
-    QRect r = ((const QCommonStyle *) style)->QCommonStyle::subControlRect(QStyle::CC_TitleBar, option, subControl, widget);
-    if (subControl != QStyle::SC_TitleBarSysMenu) {
-        return r.adjusted(option->direction == Qt::LeftToRight ? -2 : 2, -2, option->direction == Qt::LeftToRight ? -3 : 3, -3);
-    } else {
-        return r.adjusted(0, -1, 0, -1);
-    }
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintFrameWindow(QPainter *painter, const QStyleOptionFrame *option)
-{
-//	painter->fillRect(option->rect, option->palette.color(QPalette::Window));
-#if 0
-	paintThinFrame(painter, option->rect.adjusted(0, 0, 0, 0), option->palette, -60, 160);
-	paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -20, 60);
-#else
-	paintThinFrame(painter, option->rect.adjusted(0, 0, 0, 0), option->palette, -90, 355);
-	paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -40, 100);
-#endif
-//	paintThinFrame(painter, option->rect.adjusted(4, 7 + option->fontMetrics.height(), -4, -4), option->palette, 60, -20);
-#if 0
-	painter->setPen(Qt::red);
-	painter->setBrush(Qt::NoBrush);
-	painter->drawRect(option->rect.adjusted(0, 0, -1, -1));
-#endif
-}
-
-
-static void getTitleBarPalette(QPalette &palette)
-{
-	QSettings settings(QLatin1String("Trolltech"));
-	settings.beginGroup(QLatin1String("Qt"));
-
-	if (settings.contains(QLatin1String("KWinPalette/activeBackground"))) {
-		palette.setColor(QPalette::Window, QColor(settings.value(QLatin1String("KWinPalette/inactiveBackground")).toString()));
-		palette.setColor(QPalette::WindowText, QColor(settings.value(QLatin1String("KWinPalette/inactiveForeground")).toString()));
-		palette.setColor(QPalette::Highlight, QColor(settings.value(QLatin1String("KWinPalette/activeBackground")).toString()));
-		palette.setColor(QPalette::HighlightedText, QColor(settings.value(QLatin1String("KWinPalette/activeForeground")).toString()));
-	} else {
-		palette.setColor(QPalette::Window, QColor(0, 0, 0, 20));
-		palette.setColor(QPalette::WindowText, QColor(0, 0, 0, 255));
-		QColor barColor = palette.color(QPalette::Highlight);
-		barColor.setHsvF(barColor.hueF(), barColor.saturationF() * 0.9, 0.25);
-		palette.setColor(QPalette::Highlight, barColor);
-		palette.setColor(QPalette::HighlightedText, QColor(255, 255, 255, 240));
-	}
-}
-
-
-void paintTitleBar(QPainter *painter, const QStyleOptionTitleBar *option, const QWidget *widget, const QStyle *style)
-{
-	QColor barColor;
-	QColor textColor;
-
-	painter->save();
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-        qreal opacity = painter->opacity();
-#endif
-
-	QPalette palette = option->palette;
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-        if (qobject_cast<const QMdiSubWindow *>(widget)) {
-		if (widget->objectName() != QLatin1String("SkulpturePreviewWindow")) {
-			getTitleBarPalette(palette);
-		}
-	}
-#endif
-	if (option->state & QStyle::State_Active) {
-		barColor = palette.color(QPalette::Highlight);
-		textColor = palette.color(QPalette::HighlightedText);
-	} else {
-		barColor = palette.color(QPalette::Window);
-		textColor = palette.color(QPalette::WindowText);
-	}
-
-	QLinearGradient barGradient(option->rect.topLeft() + QPoint(-1, -1), option->rect.bottomLeft() + QPoint(-1, -2));
-//	barGradient.setColorAt(0.0, option->palette.color(QPalette::Window));
-//	barGradient.setColorAt(0.3, barColor);
-//	barGradient.setColorAt(0.7, barColor);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-        barGradient.setColorAt(0.0, barColor.darker(105));
-        barGradient.setColorAt(1.0, barColor.lighter(120));
-#else
-        barGradient.setColorAt(0.0, barColor.dark(105));
-        barGradient.setColorAt(1.0, barColor.light(120));
-#endif
-//	barGradient.setColorAt(1.0, option->palette.color(QPalette::Window));
-//	painter->fillRect(option->rect.adjusted(-1, -1, 1, -2), barGradient);
-//	painter->fillRect(option->rect.adjusted(-1, -1, 1, -2), barColor);
-
-#if 1
-	{
-		QRect r = option->rect.adjusted(-4, -7, 4, 0);
-		QRect lr = r.adjusted(6, 2, -6/* - 55*/, -1);
-	//	QRect lr = r.adjusted(6, 2, -70, -1);
-
-		if (true || option->state & QStyle::State_Active) {
-			painter->fillRect(lr, barColor);
-		}
-
-		QStyleOptionTitleBar buttons = *option;
-	//	buttons.subControls &= ~QStyle::SC_TitleBarLabel;
-		buttons.subControls = QStyle::SC_TitleBarSysMenu;
-		buttons.rect.adjust(3, -2, -4, -1);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-                painter->setOpacity(option->state & QStyle::State_Active ? opacity : 0.7 * opacity);
-#endif
-		((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_TitleBar, &buttons, painter, widget);
-		buttons = *option;
-#if 0
-		buttons.subControls &= ~(QStyle::SC_TitleBarLabel | QStyle::SC_TitleBarSysMenu);
-		((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_TitleBar, &buttons, painter, widget);
-#else
-		QStyleOption opt = *option;
-		QIcon icon;
-
-		for (int i = 1; i <= 7; ++i) {
-			QStyle::SubControl sc = (QStyle::SubControl) (1 << i);
-			if (option->subControls & sc & ~(QStyle::SC_TitleBarContextHelpButton)) {
-				QRect rect = style->subControlRect(QStyle::CC_TitleBar, option, sc, widget);
-                                QIcon::Mode iconMode = QIcon::Normal;
-                                if (option->activeSubControls & sc) {
-                                    iconMode = QIcon::Active;
-                                }
-                                opt.palette.setColor(QPalette::Text, textColor);
-                                icon = style->standardIcon((QStyle::StandardPixmap)(QStyle::SP_TitleBarMenuButton + i), &opt, widget);
-                                icon.paint(painter, rect, Qt::AlignCenter, iconMode);
-			}
-		}
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-                painter->setOpacity(opacity);
-#endif
-#if 0
-		QRect buttonRect = option->rect.adjusted(300, 1, -90, -6);
-		paintThinFrame(painter, buttonRect, option->palette, -180, 40);
-		paintThinFrame(painter, buttonRect.adjusted(-1, -1, 1, 1), option->palette, 40, -180);
-#endif
-
-		{
-			QLinearGradient labelGradient(lr.topLeft(), lr.bottomLeft());
-#if 0
-			labelGradient.setColorAt(0.0, QColor(0, 0, 0, 50));
-			labelGradient.setColorAt(0.5, QColor(0, 0, 0, 0));
-			labelGradient.setColorAt(0.55, QColor(0, 0, 0, 20));
-			labelGradient.setColorAt(1.0, QColor(0, 0, 0, 0));
-#elif 1
-			labelGradient.setColorAt(0.0, QColor(255, 255, 255, 10));
-			labelGradient.setColorAt(0.5, QColor(255, 255, 255, 40));
-			labelGradient.setColorAt(0.55, QColor(0, 0, 0, 0));
-			labelGradient.setColorAt(1.0, QColor(255, 255, 255, 20));
-#else
-			labelGradient.setColorAt(0.0, QColor(0, 0, 0, 30));
-			labelGradient.setColorAt(1.0, QColor(255, 255, 255, 60));
-#endif
-			painter->fillRect(lr, labelGradient);
-		}
-
-		QLinearGradient barGradient(r.topLeft(), r.bottomLeft());
-		barGradient.setColorAt(0.0, QColor(255, 255, 255, 200));
-		barGradient.setColorAt(0.2, QColor(255, 255, 255, 80));
-		barGradient.setColorAt(0.5, QColor(255, 255, 255, 30));
-		barGradient.setColorAt(1.0, QColor(255, 255, 255, 0));
-		painter->fillRect(r, barGradient);
-#if 0
-		QRadialGradient dialogGradient2(r.left() + r.width() / 2, r.top(), r.height());
-		dialogGradient2.setColorAt(0.0, QColor(255, 255, 225, 70));
-		dialogGradient2.setColorAt(1.0, QColor(0, 0, 0, 0));
-		painter->save();
-		painter->translate(r.center());
-		painter->scale(r.width() / 2.0 / r.height(), 1);
-		painter->translate(-r.center());
-		painter->fillRect(r.adjusted(1, 1, -1, -1), dialogGradient2);
-		painter->restore();
-#endif
-		paintThinFrame(painter, lr, option->palette, -30, 90);
-		paintThinFrame(painter, lr.adjusted(-1, -1, 1, 1), option->palette, 90, -30);
-
-	}
-#endif
-
-
-#if 0
-//	paintThinFrame(painter, option->rect.adjusted(0, 0, 0, -1), option->palette, -30, 80);
-	paintThinFrame(painter, option->rect.adjusted(-1, -1, 1, 0), option->palette, 80, -30);
-	painter->fillRect(option->rect.adjusted(0, 0, 0, -1), barColor);
-
-	// FIXME: adjust rect for new shadow // paintRecessedFrameShadow(painter, option->rect.adjusted(-1, -1, 1, 0), RF_Large);
-	{
-		QRect labelRect = option->rect.adjusted(20, 0, -250, 0);
-		painter->fillRect(labelRect, option->palette.color(QPalette::Window));
-		paintThinFrame(painter, labelRect.adjusted(0, 0, 0, 1), option->palette, -30, 80);
-	}
-#endif
-
-	if (option->subControls & QStyle::SC_TitleBarLabel) {
-		QRect labelRect;
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-		if (qobject_cast<const QMdiSubWindow *>(widget)) {
-			QFont font = painter->font();
-			font.setBold(true);
-			labelRect = option->rect.adjusted(option->fontMetrics.height() + 10, -1, -2, -3);
-		//	font.setPointSizeF(10);
-			painter->setFont(font);
-		} else
-#endif
-                {
-			labelRect = style->subControlRect(QStyle::CC_TitleBar, option, QStyle::SC_TitleBarLabel, widget);
-		}
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-                painter->setOpacity(opacity * 0.1);
-		painter->setPen(Qt::black);
-                style->drawItemText(painter, labelRect.adjusted(1, 1, 1, 1), Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, option->palette, true, option->text, QPalette::NoRole);
-		//painter->drawText(labelRect.adjusted(1, 1, 1, 1), Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, option->text);
-		painter->setOpacity(option->state & QStyle::State_Active ? opacity : 0.7 * opacity);
-#endif
-		painter->setPen(textColor);
-                style->drawItemText(painter, labelRect, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, option->palette, true, option->text, QPalette::NoRole);
-                //painter->drawText(labelRect, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, option->text);
-	}
-/*
-	if (!option->icon.isNull()) {
-		labelRect.setWidth(16);
-		labelRect.setHeight(16);
-		painter->drawPixmap(labelRect.adjusted(0, -1, 0, -1), option->icon.pixmap(QSize(16, 16)));
-	}
-*/	painter->restore();
-}
-
-
-int getWindowFrameMask(QStyleHintReturnMask *mask, const QStyleOptionTitleBar *option, const QWidget *widget)
-{
-	Q_UNUSED(widget);
-	mask->region = option->rect;
-
-	// TODO get total dimensions of workspace and don't use masks on corners
-	/*if (option->rect.topLeft() != QPoint(0, 0))*/ {
-//		mask->region -= QRect(option->rect.topLeft(), QSize(1, 1));
-	}
-//	mask->region -= QRect(option->rect.topRight(), QSize(1, 1));
-//	mask->region -= QRect(option->rect.bottomLeft(), QSize(1, 1));
-//	mask->region -= QRect(option->rect.bottomRight(), QSize(1, 1));
-
-	// try new style
-//	mask->region -= QRect(option->rect.topLeft(), QSize(6, 1));
-//	mask->region -= QRect(option->rect.topRight() - QPoint(5, 0), QSize(6, 1));
-	return 1;
-}
-
-
-/*
- * skulpture_menu.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QMenu>
-#include <QtGui/QShortcut>
-#include <QtGui/QApplication>
-#include <QtGui/QTabletEvent>
-#include <QtGui/QMouseEvent>
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-#include <QtGui/QWidgetAction>
-#endif
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintFrameMenu(QPainter *painter, const QStyleOptionFrame *option)
-{
-	paintThinFrame(painter, option->rect, option->palette, -60, 160);
-	paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -20, 60);
-}
-
-
-void paintPanelMenuBar(QPainter *painter, const QStyleOptionFrame *option)
-{
-	Q_UNUSED(painter); Q_UNUSED(option);
-//	paintThinFrame(painter, option->rect, option->palette, -20, 60);
-//	painter->fillRect(option->rect.adjusted(1, 1, -1, -1), option->palette.color(QPalette::Window));
-}
-
-
-void paintMenuBarEmptyArea(QPainter *painter, const QStyleOption *option)
-{
-        Q_UNUSED(painter); Q_UNUSED(option);
-//	painter->fillRect(option->rect, option->palette.color(QPalette::Window));
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintCommandButtonPanel(QPainter *painter, const QStyleOptionButton *option, const QWidget *widget);
-
-void paintMenuBarItem(QPainter *painter, const QStyleOptionMenuItem *option, const QWidget *widget, const QStyle *style)
-{
-    QStyleOptionMenuItem opt = *option;
-    if (option->state & QStyle::State_Selected || option->state & QStyle::State_MouseOver) {
-        QStyleOptionButton button;
-
-        button.QStyleOption::operator=(*option);
-        button.features = QStyleOptionButton::None;
-        button.rect.adjust(-1, -1, 1, 1);
-        button.state |= QStyle::State_MouseOver;
-        // call without widget to get QPalette::Button background
-        paintCommandButtonPanel(painter, &button, 0);
-    } else {
-        opt.palette.setColor(QPalette::ButtonText, opt.palette.color(QPalette::WindowText));
-    }
-    opt.state &= ~QStyle::State_Sunken;
-    ((QCommonStyle *) style)->QCommonStyle::drawControl(QStyle::CE_MenuBarItem, &opt, painter, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-enum MenuMode {
-    ButtonMenu,
-    ItemViewMenu,
-};
-
-enum CheckColumnMode {
-    UseIconColumn,
-    ShowCheckColumn,
-    NoCheckColumn
-};
-
-enum IconColumnMode {
-    ForceIconColumn,
-    ShowIconColumn,
-    HideIconColumn
-};
-
-enum SeparatorMode {
-    TextSeparator,
-    IconSeparator,
-    ItemSeparator
-};
-
-enum SelectionMode {
-    TextSelection,
-    IconSelection,
-    ItemSelection
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-QSize sizeFromContentsMenuItem(const QStyleOptionMenuItem *option, const QSize &contentsSize, const QWidget *widget, const QStyle *style, int menuItemSize, int textLineHeight)
-{
-    if (option->menuItemType == QStyleOptionMenuItem::Separator) {
-        if (option->text.isEmpty()) {
-            return QSize(4, 4);
-        }
-        // ### width?
-        return QSize(4, QFontMetrics(option->font).height() + 8);
-    }
-
-    int w = contentsSize.width(), h = contentsSize.height();
-
-    // always make room for icon column
-    const int iconMargin = 4;
-    int iconWidth;
-    if (option->maxIconWidth) {
-        iconWidth = option->maxIconWidth - 4 + 2 * iconMargin;
-    } else {
-        iconWidth = style->pixelMetric(QStyle::PM_SmallIconSize, option, widget) + 2 * iconMargin;
-    }
-    w += iconWidth;
-
-    // add size for check column
-    const int checkMargin = 4;
-    if (option->checkType != QStyleOptionMenuItem::NotCheckable) {
-        w += style->pixelMetric(QStyle::PM_IndicatorWidth, option, widget) + checkMargin;
-    }
-
-    // submenu arrow and spacing
-    w += option->fontMetrics.height() + 4;
-    if (option->menuItemType == QStyleOptionMenuItem::SubMenu || option->text.indexOf(QChar('\t', 0)) >= 0) {
-        w += option->fontMetrics.height();
-    }
-
-    if (h < textLineHeight) {
-        h = textLineHeight;
-    }
-    h += menuItemSize;
-
-    return QSize(w, qMax(h, qApp->globalStrut().height()));
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-inline QRect remainingHorizontalVisualRect(const QRect &rect, const QStyleOption *option, int width)
-{
-    return rect.adjusted(option->direction == Qt::LeftToRight ? width : 0, 0, option->direction != Qt::LeftToRight ? -width : 0, 0);
-}
-
-
-inline QRect horizontalVisualRect(const QRect &rect, const QStyleOption *option, int width)
-{
-    QRect res = rect;
-
-    if (option->direction != Qt::LeftToRight) {
-        res.setLeft(rect.left() + rect.width() - width);
-    } else {
-        res.setWidth(width);
-    }
-    return res;
-}
-
-
-inline QRect rightHorizontalVisualRect(const QRect &rect, const QStyleOption *option, int width)
-{
-    QRect res = rect;
-
-    if (option->direction != Qt::LeftToRight) {
-        res.setWidth(width);
-    } else {
-        res.setLeft(rect.left() + rect.width() - width);
-    }
-    return res;
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintMenuItem(QPainter *painter, const QStyleOptionMenuItem *option, const QWidget *widget, const QStyle *style)
-{
-    // configuration
-    const MenuMode menuMode = ButtonMenu;
-    const CheckColumnMode checkColumnMode = option->maxIconWidth ? (/*option->menuHasCheckableItems ? UseIconColumn :*/ NoCheckColumn) : NoCheckColumn;
-    const bool showUncheckedIndicator = true;
-    const bool showShortcut = true;
-    const IconColumnMode iconColumnMode = checkColumnMode == UseIconColumn && option->menuHasCheckableItems ? ForceIconColumn : option->maxIconWidth ? ShowIconColumn : ShowIconColumn;
-    const SeparatorMode separatorMode = TextSeparator;
-    const SelectionMode selectionMode = ItemSelection;
-
-    // layout
-    // ### make margins configurable
-    const int checkMargin = 4;
-    const int iconMargin = 4;
-    const int checkSize = option->menuHasCheckableItems ? qMax(style->pixelMetric(QStyle::PM_ExclusiveIndicatorWidth, option, widget), style->pixelMetric(QStyle::PM_IndicatorWidth, option, widget)) : 0;
-    const int iconSize = style->pixelMetric(QStyle::PM_SmallIconSize, option, widget);
-    const int checkColumnWidth = checkSize + 2 * checkMargin;
-    // FIXME qMax(checkSize, iconSize) for useIconColum
-    const int iconColumnWidth = iconColumnMode == HideIconColumn ? 0 : option->maxIconWidth ? option->maxIconWidth - 4 + 2 * iconMargin : iconSize + 2 * iconMargin;
-    // Qt 4.x has a bug where the option->rect is one pixel too wide
-    const QRect itemRect = option->rect.adjusted(0, 0, -1, 0);
-    QRect iconRect = horizontalVisualRect(itemRect, option, iconColumnWidth);
-    QRect textRect = remainingHorizontalVisualRect(itemRect, option, iconColumnWidth);
-
-    // background color
-    QPalette::ColorRole menuBackgroundRole;
-    QPalette::ColorRole menuForegroundRole;
-    QBrush menuBackground;
-    QBrush iconBackground;
-    switch (menuMode) {
-        case ButtonMenu:
-            menuBackgroundRole = QPalette::Window;
-            menuForegroundRole = QPalette::WindowText;
-            iconBackground = QColor(0, 0, 0, 10);
-            break;
-        case ItemViewMenu:
-            menuBackgroundRole = QPalette::Base;
-            menuForegroundRole = QPalette::Text;
-            iconBackground = option->palette.brush(QPalette::Active, QPalette::Window);
-            break;
-    }
-
-    // background
-    menuBackground = option->palette.brush(QPalette::Active, menuBackgroundRole);
-    painter->fillRect(textRect, menuBackground);
-    if (!iconRect.isEmpty()) {
-        if (!iconBackground.isOpaque()) {
-            painter->fillRect(iconRect, menuBackground);
-        }
-    }
-    painter->fillRect(iconRect, iconBackground);
-//    painter->fillRect(iconRect.adjusted(2, 2, -2, -2), QColor(0, 255, 0, 120));
-
-    // separator
-    if (option->menuItemType == QStyleOptionMenuItem::Separator) {
-        QRect separatorRect;
-        switch (separatorMode) {
-            case IconSeparator:
-                separatorRect = iconRect;
-                break;
-            case TextSeparator:
-                separatorRect = textRect;
-                break;
-            case ItemSeparator:
-                separatorRect = itemRect;
-                break;
-        }
-        // ### make separator margins configurable
-        separatorRect.adjust(0, 1, 0, -1);
-        if (option->text.isEmpty()) {
-            paintThinFrame(painter, separatorRect, option->palette, 60, -20);
-        } else {
-            const int textFlags = Qt::AlignLeft | Qt::AlignVCenter | Qt::TextDontClip | Qt::TextSingleLine;
-            QColor bgcolor = menuBackground.color();
-            paintThinFrame(painter, separatorRect, option->palette, -10, -20);
-            paintThinFrame(painter, separatorRect.adjusted(1, 1, -1, -1), option->palette, -30, 80, menuBackgroundRole);
-            QLinearGradient gradient(separatorRect.topLeft(), separatorRect.bottomLeft());
-            gradient.setColorAt(0.0, shaded_color(bgcolor, 90));
-            gradient.setColorAt(0.2, shaded_color(bgcolor, 60));
-            gradient.setColorAt(0.5, shaded_color(bgcolor, 0));
-            gradient.setColorAt(0.51, shaded_color(bgcolor, -10));
-            gradient.setColorAt(1.0, shaded_color(bgcolor, -20));
-            painter->fillRect(separatorRect.adjusted(1, 1, -1, -1), gradient);
-            // ### margins
-            separatorRect = remainingHorizontalVisualRect(separatorRect, option, 8);
-            style->drawItemText(painter, separatorRect, textFlags, option->palette, true, option->text, menuForegroundRole);
-        }
-        return;
-    }
-
-    // selection background
-    painter->save();
-    if (option->state & QStyle::State_Selected) {
-        QRect selectionRect;
-        switch (selectionMode) {
-            case IconSelection:
-                selectionRect = iconRect;
-                break;
-            case TextSelection:
-                selectionRect = textRect;
-                break;
-            case ItemSelection:
-                selectionRect = itemRect;
-                break;
-        }
-        switch (menuMode) {
-            case ButtonMenu: {
-                QStyleOptionButton button;
-                button.QStyleOption::operator=(*option);
-                button.features = QStyleOptionButton::None;
-                button.state |= QStyle::State_MouseOver;
-                button.rect = selectionRect.adjusted(-1, -1, 1, 1);
-                paintCommandButtonPanel(painter, &button, 0);
-                menuForegroundRole = QPalette::ButtonText;
-                break;
-            }
-            case ItemViewMenu: {
-                QColor color = option->palette.color(QPalette::Active, QPalette::Highlight);
-                color.setAlpha(option->state & QStyle::State_Enabled ? 180 : 40);
-                painter->fillRect(selectionRect, color);
-                if (option->state & QStyle::State_Enabled) {
-                    paintThinFrame(painter, selectionRect, option->palette, -20, -20);
-                }
-                menuForegroundRole = QPalette::HighlightedText;
-                break;
-            }
-        }
-        painter->setPen(option->palette.color(QPalette::Active, menuForegroundRole));
-    }
-
-    // arrow
-    if (option->menuItemType == QStyleOptionMenuItem::SubMenu) {
-        const int arrowWidth = option->fontMetrics.height();
-        const QRect arrowRect = rightHorizontalVisualRect(textRect, option, arrowWidth);
-        QStyleOptionMenuItem opt = *option;
-        opt.rect = arrowRect;
-        QFont font = painter->font();
-        font.setPointSizeF(font.pointSizeF() / 1.19);
-        opt.fontMetrics = QFontMetrics(font);
-        opt.state &= QStyle::State_Enabled;
-        opt.palette.setColor(QPalette::ButtonText, option->palette.color(option->state & QStyle::State_Enabled ? QPalette::Active : QPalette::Disabled, menuForegroundRole));
-        style->drawPrimitive((option->direction == Qt::RightToLeft) ? QStyle::PE_IndicatorArrowLeft : QStyle::PE_IndicatorArrowRight, &opt, painter, widget);
-    }
-
-    // check
-    if (option->checkType != QStyleOptionMenuItem::NotCheckable) {
-        QRect checkRect;
-        switch (checkColumnMode)
-        {
-            case UseIconColumn:
-                checkRect = iconRect;
-                if (option->checked) {
-                    // when using the icon colum, we do not show an icon for checked items
-                    iconRect = QRect();
-                }
-                break;
-            case NoCheckColumn:
-            case ShowCheckColumn:
-                checkRect = horizontalVisualRect(textRect, option, checkColumnWidth);
-                textRect = remainingHorizontalVisualRect(textRect, option, checkColumnWidth - checkMargin);
-                break;
-        }
-//        painter->fillRect(checkRect.adjusted(2, 2, -2, -2), QColor(0, 0, 255, 120));
-        if (option->checked || option->state & QStyle::State_Selected || (showUncheckedIndicator && option->checkType == QStyleOptionMenuItem::NonExclusive)) {
-            QStyleOptionMenuItem opt = *option;
-            opt.rect = checkRect;
-            style->drawPrimitive(QStyle::PE_IndicatorMenuCheckMark, &opt, painter, widget);
-        }
-    } else if (checkColumnMode == ShowCheckColumn) {
-        textRect = remainingHorizontalVisualRect(textRect, option, checkColumnWidth - checkMargin);
-    }
-//    painter->fillRect(textRect.adjusted(2, 2, -2, -2), QColor(255, 0, 0, 120));
-
-    // text
-    if (!option->text.isEmpty()) {
-        const int shortcutPos = option->text.indexOf(QChar('\t', 0));
-        int textFlags = Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine;
-        if (!style->styleHint(QStyle::SH_UnderlineShortcut, option, widget)) {
-            textFlags |= Qt::TextHideMnemonic;
-        }
-        if (showShortcut && shortcutPos >= 0) {
-            const int shortcutWidth = option->tabWidth + option->fontMetrics.height() - 2;
-            const QRect shortcutRect = rightHorizontalVisualRect(textRect, option, shortcutWidth);
-//            painter->fillRect(shortcutRect, QColor(255, 220, 0, 120));
-            style->drawItemText(painter, shortcutRect, textFlags, option->palette, option->state & QStyle::State_Enabled, option->text.mid(shortcutPos + 1), menuForegroundRole);
-        }
-        QFont font = option->font;
-        if (option->menuItemType == QStyleOptionMenuItem::DefaultItem) {
-            font.setBold(true);
-        }
-        painter->setFont(font);
-        // ### textMargin
-        textRect = remainingHorizontalVisualRect(textRect, option, 4);
-        style->drawItemText(painter, textRect, textFlags, option->palette, option->state & QStyle::State_Enabled, option->text.left(shortcutPos), menuForegroundRole);
-    }
-
-    // icon
-    if (iconColumnMode != HideIconColumn && !option->icon.isNull() && !iconRect.isEmpty()) {
-        QIcon::Mode mode;
-        if (option->state & QStyle::State_Enabled) {
-            if (option->state & QStyle::State_Selected) {
-                mode = QIcon::Active;
-            } else {
-                mode = QIcon::Normal;
-            }
-        } else {
-            mode = QIcon::Disabled;
-        }
-        iconRect = QRect((iconRect.left() + iconRect.right() + 2 - iconSize) >> 1, (iconRect.top() + iconRect.bottom() + 2 - iconSize) >> 1, iconSize, iconSize);
-        option->icon.paint(painter, iconRect, Qt::AlignCenter, mode, QIcon::Off);
-    }
-    painter->restore();
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintMenuTitle(QPainter *painter, const QStyleOptionToolButton *option, const QWidget *widget, const QStyle *style)
-{
-    const QPalette::ColorRole bgrole = QPalette::Window;
-    QColor bgcolor = option->palette.color(bgrole);
-    QStyleOptionToolButton opt = *option;
-    opt.state &= ~(QStyle::State_Sunken | QStyle::State_On | QStyle::State_Selected);
-    // Qt 4.x has a bug where the option->rect is one pixel too wide
-    opt.rect.adjust(0, 0, -1, 0);
-    opt.palette.setColor(QPalette::ButtonText, option->palette.color(QPalette::WindowText));
-    paintThinFrame(painter, opt.rect, option->palette, -10, -20);
-    paintThinFrame(painter, opt.rect.adjusted(1, 1, -1, -1), opt.palette, -30, 80, bgrole);
-    QLinearGradient gradient(opt.rect.topLeft(), opt.rect.bottomLeft());
-    gradient.setColorAt(0.0, shaded_color(bgcolor, 90));
-    gradient.setColorAt(0.2, shaded_color(bgcolor, 60));
-    gradient.setColorAt(0.5, shaded_color(bgcolor, 0));
-    gradient.setColorAt(0.51, shaded_color(bgcolor, -10));
-    gradient.setColorAt(1.0, shaded_color(bgcolor, -20));
-    painter->fillRect(opt.rect.adjusted(1, 1, -1, -1), gradient);
-    ((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_ToolButton, &opt, painter, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-bool SkulptureStyle::Private::menuEventFilter(QMenu *menu, QEvent *event)
-{
-    QHash<QMenu *, MenuInfo>::iterator i = menuHash.begin();
-    while (i != menuHash.end()) {
-        if (!i->menu) {
-            i = menuHash.erase(i);
-        } else {
-            ++i;
-        }
-    }
-    i = menuHash.find(menu);
-    MenuInfo *menuInfo = i != menuHash.end() ? &(*i) : 0;
-
-    if (event->type() == QEvent::Hide) {
-        if (menuInfo) {
-            menuHash.erase(i);
-        }
-        menuInfo = 0;
-    } else {
-        QPoint eventPos;
-        bool moveEvent = false;
-        if (event->type() == QEvent::TabletMove) {
-            QTabletEvent *tabletEvent = (QTabletEvent *) event;
-            eventPos = tabletEvent->pos();
-            moveEvent = true;
-        } else if (event->type() == QEvent::MouseMove) {
-            QMouseEvent *mouseEvent = (QMouseEvent *) event;
-            eventPos = mouseEvent->pos();
-            moveEvent = true;
-        }
-
-        QAction *menuAction = 0;
-        QAction *action = 0;
-        if (moveEvent && menu->rect().contains(eventPos)) {
-            action = menu->actionAt(eventPos);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-            if (QWidgetAction * widgetAction = qobject_cast<QWidgetAction *>(action)) {
-                if (widgetAction->defaultWidget()) {
-                    action = 0;
-                }
-            }
-#endif
-            if (action && action->menu()) {
-                menuAction = action;
-            }
-        }
-
-        if (menuAction && !menuInfo) {
-            MenuInfo info;
-            info.menu = menu;
-            info.delayTimer = 0;
-            info.lastPos = eventPos;
-            info.eventCount = 0;
-            i = menuHash.insert(menu, info);
-            menuInfo = &(*i);
-        }
-
-        if (menuInfo) {
-            if (event->type() == QEvent::Enter) {
-                menuInfo->lastSubMenuAction = 0;
-                menuInfo->eventCount = 0;
-            } else if (event->type() == QEvent::Leave) {
-                menuInfo->lastSubMenuAction = 0;
-                menuInfo->eventCount = 0;
-            } else if (moveEvent) {
-                if (action != menuAction) {
-                    menuInfo->lastSubMenuAction = 0;
-                    menuInfo->eventCount = 0;
-                }
-                if (menu->rect().contains(eventPos)) {
-                    if (menuAction) {
-                        QAction *last = menuInfo->lastSubMenuAction;
-                        menuInfo->lastSubMenuAction = menuAction;
-                        if (last && last == menuAction) {
-                            if (event->type() == QEvent::MouseMove) {
-                                QMouseEvent *mouseEvent = (QMouseEvent *) event;
-                                ++menuInfo->eventCount;
-                                if (menuInfo->eventCount > 2 && mouseEvent->buttons() == Qt::NoButton) {
-                                    event->accept();
-                                    return true;
-                                }
-                            }
-                        } else {
-                            menuInfo->eventCount = 0;
-                        }
-                    }
-                } else {
-                    menuInfo->lastSubMenuAction = 0;
-                    menuInfo->eventCount = 0;
-                }
-            }
-        }
-    }
-    return false;
-}
-
-
-/*
- * skulpture_misc.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QTableView>
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintPanelButtonTool(QPainter *painter, const QStyleOption *option, const QWidget *widget, const QStyle *style);
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-#if 0
-void paintPanelPlacesViewItem(QPainter *painter, const QStyleOptionViewItemV4 *option, const QWidget *widget, const QStyle *style)
-{
-    QStyleOption opt = *option;
-    if (opt.state & QStyle::State_Selected) {
-        opt.state |= QStyle::State_On;
-    } else if (!(opt.state & QStyle::State_MouseOver)) {
-        // draw nothing
-        return;
-    }
-    paintPanelButtonTool(painter, &opt, 0, style);
-}
-#endif
-
-void paintPanelItemViewItem(QPainter *painter, const QStyleOptionViewItemV4 *option, const QWidget *widget, const QStyle *style)
-{
-	Q_UNUSED(style);
-#if 0
-        if (widget && widget->inherits("KFilePlacesView")) {
-            paintPanelPlacesViewItem(painter, option, widget, style);
-            return;
-        }
-#endif
-	QColor color = option->palette.color(QPalette::Highlight);
-	const bool mouse = option->state & QStyle::State_MouseOver && option->state & QStyle::State_Enabled;
-        const QTableView *table = qobject_cast<const QTableView *>(widget);
-        const bool largePanel = option->rect.height() > 7 + option->fontMetrics.height() && !table;
-        QRect panelRect;
-
-        if (largePanel) {
-            if (option->version >= 4) {
-                switch (option->viewItemPosition) {
-                    case QStyleOptionViewItemV4::Beginning:
-                        panelRect = option->rect.adjusted(1, 1, 0, 0);
-                        break;
-                    case QStyleOptionViewItemV4::End:
-                        panelRect = option->rect.adjusted(0, 1, -1, 0);
-                        break;
-                    case QStyleOptionViewItemV4::Middle:
-                        panelRect = option->rect.adjusted(0, 1, 0, 0);
-                        break;
-                    case QStyleOptionViewItemV4::Invalid:
-                    case QStyleOptionViewItemV4::OnlyOne:
-                        panelRect = option->rect.adjusted(1, 1, -1, 0);
-                        break;
-                }
-            } else {
-                panelRect = option->rect.adjusted(1, 1, -1, 0);
-            }
-        } else {
-            panelRect = option->rect;
-        }
-
-        if (option->version >= 2 && option->features & QStyleOptionViewItemV2::Alternate) {
-		painter->fillRect(panelRect, option->palette.color(QPalette::AlternateBase));
-	} else {
-		painter->fillRect(panelRect, option->backgroundBrush);
-	}
-	if (option->state & QStyle::State_Selected) {
-		if (mouse) {
-			color = color.lighter(110);
-		}
-	} else if (mouse) {
-		color.setAlpha(40);
-	} else {
-		return;
-	}
-	painter->save();
-	// ### work around KDE widgets that turn on antialiasing
-	painter->setRenderHint(QPainter::Antialiasing, false);
-	painter->setBrush(Qt::NoBrush);
-//	QColor shine(255, 255, 255, panelRect.height() > 20 ? 25 : 10);
-	QColor shadow(0, 0, 0, largePanel ? 50 : 20);
-	painter->setPen(shadow);
-//	painter->setPen(QPen(color.darker(panelRect.height() > 20 ? 150 : 120), 1));
-	painter->fillRect(panelRect, color);
-	if (table && table->showGrid()) {
-		painter->restore();
-		return;
-	}
-	if (option->version >= 4) {
-		switch (option->viewItemPosition) {
-			case QStyleOptionViewItemV4::Beginning:
-				painter->drawLine(panelRect.topLeft() + QPoint(0, 1), panelRect.bottomLeft() - QPoint(0, 1));
-				painter->drawLine(panelRect.topLeft(), panelRect.topRight());
-				painter->drawLine(panelRect.bottomLeft(), panelRect.bottomRight());
-				break;
-			case QStyleOptionViewItemV4::End:
-				painter->drawLine(panelRect.topRight() + QPoint(0, 1), panelRect.bottomRight() - QPoint(0, 1));
-				painter->drawLine(panelRect.topLeft(), panelRect.topRight());
-				painter->drawLine(panelRect.bottomLeft(), panelRect.bottomRight());
-				break;
-			case QStyleOptionViewItemV4::Middle:
-				painter->drawLine(panelRect.topLeft(), panelRect.topRight());
-				painter->drawLine(panelRect.bottomLeft(), panelRect.bottomRight());
-				break;
-			case QStyleOptionViewItemV4::Invalid:
-			case QStyleOptionViewItemV4::OnlyOne:
-				painter->drawRect(panelRect.adjusted(0, 0, -1, -1));
-				break;
-		}
-	} else {
-		painter->drawRect(panelRect.adjusted(0, 0, -1, -1));
-	}
-	painter->restore();
-}
-#endif
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintCachedIndicatorBranchChildren(QPainter *painter, const QStyleOption *option);
-
-void paintIndicatorBranch(QPainter *painter, const QStyleOption *option)
-{
-    QPoint center = option->rect.center() + (option->direction == Qt::LeftToRight ? QPoint(2, 0) : QPoint(-1, 0));
-
-    if (option->state & (QStyle::State_Item | QStyle::State_Sibling)) {
-        QColor lineColor = option->palette.color(QPalette::Text);
-        lineColor.setAlpha(50);
-        painter->fillRect(QRect(center.x(), option->rect.y(), 1, center.y() - option->rect.y()), lineColor);
-        if (option->state & QStyle::State_Sibling) {
-            painter->fillRect(QRect(center.x(), center.y(), 1, option->rect.bottom() - center.y() + 1), lineColor);
-        }
-        if (option->state & QStyle::State_Item) {
-            if (option->direction == Qt::LeftToRight) {
-                painter->fillRect(QRect(center.x() + 1, center.y(), option->rect.right() - center.x(), 1), lineColor);
-            } else {
-                painter->fillRect(QRect(option->rect.left(), center.y(), center.x() - option->rect.left(), 1), lineColor);
-            }
-            if (!(option->state & QStyle::State_Sibling)) {
-                lineColor.setAlpha(25);
-                painter->fillRect(QRect(center.x(), center.y(), 1, 1), lineColor);
-            }
-        }
-    }
-    if (option->state & QStyle::State_Children && !(option->state & QStyle::State_Open)) {
-        QStyleOption opt = *option;
-        static const int d = 9;
-        opt.rect = QRect(center.x() - d / 2, center.y() - d / 2, d, d);
-        paintCachedIndicatorBranchChildren(painter, &opt);
-    }
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintQ3ListView(QPainter *painter, const QStyleOptionQ3ListView *option, const QWidget *widget,
-                     const QStyle *style)
-{
-    Q_UNUSED(widget); Q_UNUSED(style);
-
-    if (option->subControls & QStyle::SC_Q3ListView) {
-        painter->fillRect(option->rect, option->viewportPalette.brush(option->viewportBGRole));
-    }
-    if (option->subControls & QStyle::SC_Q3ListViewBranch) {
-        QStyleOption opt = *((QStyleOption *) option);
-        int y = option->rect.y();
-        for (int i = 1; i < option->items.size(); ++i) {
-            QStyleOptionQ3ListViewItem item = option->items.at(i);
-            if (y + item.totalHeight > 0 && y < option->rect.height()) {
-                opt.state = QStyle::State_Item;
-                if (i + 1 < option->items.size()) {
-                    opt.state |= QStyle::State_Sibling;
-                }
-                if (item.features & QStyleOptionQ3ListViewItem::Expandable
-                    || (item.childCount > 0 && item.height > 0)) {
-                    opt.state |= QStyle::State_Children | (item.state & QStyle::State_Open);
-                }
-                opt.rect = QRect(option->rect.left(), y, option->rect.width(), item.height);
-                paintIndicatorBranch(painter, &opt);
-
-                if (opt.state & QStyle::State_Sibling && item.height < item.totalHeight) {
-                    opt.state = QStyle::State_Sibling;
-                    opt.rect = QRect(option->rect.left(), y + item.height,
-                                     option->rect.width(), item.totalHeight - item.height);
-                    paintIndicatorBranch(painter, &opt);
-                }
-            }
-            y += item.totalHeight;
-        }
-    }
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintSizeGrip(QPainter *painter, const QStyleOption *option)
-{
-    Qt::Corner corner = Qt::BottomRightCorner;
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-    if (option->type == QStyleOption::SO_SizeGrip) {
-        const QStyleOptionSizeGrip *sizegrip = static_cast<const QStyleOptionSizeGrip *>(option);
-        corner = sizegrip->corner;
-    }
-#endif
-	QRect r;
-
-	switch (corner) {
-		case Qt::TopLeftCorner:		r = option->rect.adjusted(0, 0, 2, 2);	break;
-		case Qt::TopRightCorner:		r = option->rect.adjusted(-2, 0, 0, 2);	break;
-		case Qt::BottomLeftCorner:	r = option->rect.adjusted(0, -2, 2, 0);	break;
-		case Qt::BottomRightCorner:	r = option->rect.adjusted(-2, -2, 0, 0);	break;
-	}
-	paintThinFrame(painter, r, option->palette, 60, -20);
-	paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -20, 60);
-	switch (corner) {
-		case Qt::TopRightCorner:	// for Kickoff 4.1
-			painter->save();
-			painter->setPen(QPen(shaded_color(option->palette.color(QPalette::Window), 60), 1.0));
-			painter->drawLine(r.topLeft(), r.bottomRight());
-			painter->setPen(QPen(shaded_color(option->palette.color(QPalette::Window), -20), 1.0));
-			painter->drawLine(r.topLeft() + QPoint(1, -1), r.bottomRight() + QPoint(1, -1));
-			painter->restore();
-			break;
-		case Qt::BottomRightCorner:
-			painter->save();
-			painter->setPen(QPen(shaded_color(option->palette.color(QPalette::Window), -20), 1.0));
-			painter->drawLine(r.topRight(), r.bottomLeft());
-			painter->setPen(QPen(shaded_color(option->palette.color(QPalette::Window), 60), 1.0));
-			painter->drawLine(r.topRight() + QPoint(1, 1), r.bottomLeft() + QPoint(1, 1));
-			painter->restore();
-			break;
-		case Qt::TopLeftCorner:
-			// TODO
-			break;
-		case Qt::BottomLeftCorner:
-			// TODO
-			break;
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintCommandButtonPanel(QPainter *painter, const QStyleOptionButton *option, const QWidget *widget);
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-void paintToolBoxTabShape(QPainter *painter, const QStyleOptionToolBoxV2 *option)
-#else
-void paintToolBoxTabShape(QPainter *painter, const QStyleOptionToolBox *option)
-#endif
-{
-	QRect r = option->rect;
-	if (option->state & QStyle::State_Selected) {
-		QColor color = option->palette.color(QPalette::Window);
-		paintThinFrame(painter, r, option->palette, 40, -20);
-		paintThinFrame(painter, r.adjusted(1, 1, -1, -1), option->palette, -20, 80);
-		QLinearGradient gradient(r.topLeft(), r.bottomLeft());
-		gradient.setColorAt(0.0, shaded_color(color, 50));
-		gradient.setColorAt(0.2, shaded_color(color, 30));
-		gradient.setColorAt(0.5, shaded_color(color, 0));
-		gradient.setColorAt(0.51, shaded_color(color, -10));
-		gradient.setColorAt(1.0, shaded_color(color, -20));
-		painter->fillRect(r.adjusted(1, 1, -1, -1), gradient);
-	} else if (option->state & (QStyle::State_Sunken | QStyle::State_MouseOver)) {
-		QStyleOptionButton button;
-		button.QStyleOption::operator=(*option);
-		button.features = QStyleOptionButton::None;
-		button.rect.adjust(-1, -1, 1, 1);
-		// ### needs QPalette::Window ?
-		paintCommandButtonPanel(painter, &button, 0);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-        } else if (option->version >= 2 && option->selectedPosition == QStyleOptionToolBoxV2::PreviousIsSelected) {
-		r.setHeight(2);
-		paintThinFrame(painter, r, option->palette, 60, -20);
-#endif
-	} else {
-	//	r.setHeight(2);
-	//	painter->fillRect(r, option->palette.color(QPalette::Window));
-	}
-	QStyleOption indicator;
-	indicator = *option;
-	indicator.rect.setSize(QSize(11, 11));
-	indicator.rect.translate(0, (option->rect.height() - 11) >> 1);
-	indicator.state = QStyle::State_Children;
-	if (option->state & QStyle::State_Selected) {
-		indicator.state |= QStyle::State_Open;
-	}
-	paintIndicatorBranch(painter, &indicator);
-}
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-void paintToolBoxTabLabel(QPainter *painter, const QStyleOptionToolBox *option, const QWidget *widget, const QStyle *style)
-{
-    QStyleOptionToolBoxV2 opt;
-
-    if (option->version >= 2) {
-        opt = *((const QStyleOptionToolBoxV2 *) option);
-    } else {
-        opt = *option;
-    }
-    if ((option->state & QStyle::State_Selected) || !(option->state & (QStyle::State_Sunken | QStyle::State_MouseOver))) {
-        opt.palette.setColor(QPalette::ButtonText, opt.palette.color(QPalette::WindowText));
-    }
-    ((QCommonStyle *) style)->QCommonStyle::drawControl(QStyle::CE_ToolBoxTabLabel, &opt, painter, widget);
-}
-#endif
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintCachedGrip(QPainter *painter, const QStyleOption *option, QPalette::ColorRole bgrole);
-
-void paintSplitter(QPainter *painter, const QStyleOption *option)
-{
-	if (option->state & QStyle::State_Enabled && option->state & QStyle::State_MouseOver) {
-		painter->fillRect(option->rect, QColor(255, 255, 255, 60));
-	}
-	int d = 5;
-	QRect rect(QRect(option->rect).center() - QPoint(d / 2, d / 2), QSize(d, d));
-	QStyleOption iOption = *option;
-	iOption.rect = rect;
-	iOption.palette.setCurrentColorGroup(QPalette::Disabled);
-//	iOption.state &= ~QStyle::State_Enabled;
-	iOption.palette.setColor(QPalette::Button, iOption.palette.color(QPalette::Window));
-	paintCachedGrip(painter, &iOption, QPalette::Window);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintRubberBand(QPainter *painter, const QStyleOptionRubberBand *option)
-{
-	painter->save();
-	if (true || option->shape == QRubberBand::Rectangle) {
-		QColor color = option->palette.color(QPalette::Highlight);
-		color.setAlphaF(0.2 * color.alphaF());
-		painter->fillRect(option->rect, color);
-		color = option->palette.color(QPalette::Highlight);
-		color.setAlphaF(0.8 * color.alphaF());
-		painter->setPen(QPen(color /*, 1.0, Qt::DotLine*/));
-		painter->drawRect(option->rect.adjusted(0, 0, -1, -1));
-	} else {
-	//	painter->fillRect(option->rect, Qt::green);
-	}
-	painter->restore();
-}
-
-
-int getRubberBandMask(QStyleHintReturnMask *mask, const QStyleOption *option, const QWidget *widget)
-{
-	static const int rubber_width = 4;
-	int r = rubber_width;
-
-	Q_UNUSED(widget);
-	mask->region = option->rect;
-	if (option->rect.width() > 2 * r && option->rect.height() > 2 * r) {
-		mask->region -= option->rect.adjusted(r, r, -r, -r);
-	}
-	return 1;
-}
-
-
-/*
- * skulpture_progressbar.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QProgressBar>
-#include <QtCore/QTime>
-#include "sk_effects.h"
-
-#if 0
-#define FG_ROLE_PROGRESS QPalette::WindowText
-#define BG_ROLE_PROGRESS QPalette::Window
-#elif 1
-#define FG_ROLE_PROGRESS QPalette::Text
-#define BG_ROLE_PROGRESS QPalette::Base
-#else
-#define FG_ROLE_PROGRESS QPalette::QPalette::Highlight
-#define BG_ROLE_PROGRESS QPalette::Base
-#endif
-#define FG_ROLE_CHUNK QPalette::HighlightedText
-#define BG_ROLE_CHUNK QPalette::Highlight
-
-/*-----------------------------------------------------------------------*/
-
-static void paintRotatedText(QPainter *painter, const QRect &rect, int alignment, const QString &text, int angle)
-{
-    QMatrix matrix;
-    QPointF center = QRectF(rect).center();
-    matrix.translate(center.x(), center.y());
-    matrix.rotate(-angle);
-    matrix.translate(-center.x(), -center.y());
-    QRect r = matrix.mapRect(rect);
-    QRect textRect = painter->fontMetrics().boundingRect(r, alignment, text);
-    QPixmap pixmap(textRect.size() + QSize(4, 4));
-    pixmap.fill(Qt::transparent);
-    QPainter p(&pixmap);
-    p.setPen(painter->pen());
-    p.setFont(painter->font());
-    p.drawText(QRect(2, 2, pixmap.width() - 2, pixmap.height() - 2), alignment, text);
-    painter->save();
-    painter->setMatrix(matrix, true);
-    painter->drawPixmap(r.x() + ((r.width() - pixmap.width()) >> 1), r.y() + ((r.height() - pixmap.height()) >> 1), pixmap);
-    painter->restore();
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-static bool isPasswordStrengthIndicator(const QWidget *widget)
-{
-    return widget && widget->parentWidget() && widget->parentWidget()->parentWidget()
-     && widget->parentWidget()->parentWidget()->inherits("KNewPasswordDialog");
-}
-
-
-static bool isDiskSpaceIndicator(const QWidget * widget)
-{
-    return false && widget && widget->inherits("StatusBarSpaceInfo");
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-static bool progressBarContentsCentered(const QStyleOptionProgressBarV2 *option, const QWidget *widget)
-{
-    const bool vertical = option->version >= 2 && option->orientation == Qt::Vertical;
-    if (vertical) {
-        return false;
-    }
-    if (isPasswordStrengthIndicator(widget) || isDiskSpaceIndicator(widget)) {
-        return false;
-    }
-    return true;
-}
-
-
-static QRect progressBarContentsRect(const QStyleOptionProgressBarV2 *option, bool contentsCentered)
-{
-    // configuration options
-    const int border = 2;
-
-    QRect contentsRect = option->rect.adjusted(border, border, -border, -border);
-    if (option->minimum < option->maximum) {
-        if (option->progress > option->minimum) {
-            if (option->progress < option->maximum) {
-                // progress
-                qreal progress = qreal(option->progress - option->minimum) / (option->maximum - option->minimum);
-                if (option->version >= 2 && option->orientation == Qt::Vertical) {
-                    if (contentsCentered) {
-                        int adjustment = int((contentsRect.height() / 2) * (1.0 - progress));
-                        contentsRect.adjust(0, adjustment, 0, -adjustment);
-                    } else {
-                        int contentsHeight = qMax(1, int(contentsRect.height() * progress + 0.5));
-                        if (option->version >= 2 && option->invertedAppearance) {
-                            contentsRect.setHeight(contentsHeight);
-                        } else {
-                            contentsRect.setTop(contentsRect.top() + contentsRect.height() - contentsHeight);
-                        }
-                    }
-                } else {
-                    if (contentsCentered) {
-                        int adjustment = int((contentsRect.width() / 2) * (1.0 - progress));
-                        contentsRect.adjust(adjustment, 0, -adjustment, 0);
-                    } else {
-                        int contentsWidth = qMax(1, int(contentsRect.width() * progress + 0.5));
-                        if ((option->version >= 2 && option->invertedAppearance) ^ (option->direction != Qt::LeftToRight)) {
-                            contentsRect.setLeft(contentsRect.left() + contentsRect.width() - contentsWidth);
-                        } else {
-                            contentsRect.setWidth(contentsWidth);
-                        }
-                    }
-                }
-            } else {
-                // finished
-            }
-        } else {
-            // starting
-            contentsRect = QRect();
-        }
-    } else if (option->minimum == option->maximum) {
-        // busy indicator
-    } else {
-        // invalid values
-        contentsRect = QRect();
-    }
-    return contentsRect;
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintProgressBarGroove(QPainter *painter, const QStyleOptionProgressBar *option)
-{
-    painter->fillRect(option->rect.adjusted(2, 2, -2, -2), option->palette.brush(BG_ROLE_PROGRESS));
-}
-
-
-void paintProgressBarLabel(QPainter *painter, const QStyleOptionProgressBarV2 *option, const QWidget *widget, const QStyle *style)
-{
-    if (!option->textVisible) {
-        return;
-    }
-    const bool vertical = option->version >= 2 && option->orientation == Qt::Vertical;
-    Qt::Alignment alignment = option->textAlignment;
-    if (vertical) {
-        if (!(alignment & (Qt::AlignTop | Qt::AlignBottom | Qt::AlignVCenter))) {
-            alignment |= Qt::AlignVCenter;
-        }
-        alignment &= ~(Qt::AlignLeft | Qt::AlignRight);
-        alignment |= Qt::AlignHCenter;
-    } else {
-        if (!(alignment & (Qt::AlignLeft | Qt::AlignRight | Qt::AlignHCenter))) {
-            alignment |= Qt::AlignHCenter;
-        }
-        alignment &= ~(Qt::AlignTop | Qt::AlignBottom);
-        alignment |= Qt::AlignVCenter;
-    }
-    // FIXME currently forces centering
-    if (true) {
-        alignment &= ~(Qt::AlignLeft | Qt::AlignRight);
-        alignment &= ~(Qt::AlignTop | Qt::AlignBottom);
-        alignment |= Qt::AlignCenter;
-    }
-    QRect r = option->rect.adjusted(6, 0, -6, 0);
-    QRect labelRect = option->fontMetrics.boundingRect(r, alignment, option->text);
-    if (!labelRect.isEmpty()) {
-        const bool contentsCentered = progressBarContentsCentered(option, widget);
-        const QRect contentsRect = progressBarContentsRect(option, contentsCentered);
-        if (contentsRect.intersects(labelRect)) {
-            painter->save();
-            if (vertical) {
-                QMatrix mat;
-                QPointF c = QRectF(r).center();
-                mat.translate(c.x(), c.y());
-                mat.rotate(option->bottomToTop ? -90 : 90);
-                mat.translate(-c.x(), -c.y());
-                r = mat.mapRect(r);
-                painter->setMatrix(mat, true);
-            }
-#if 0
-            QImage outlineBuffer(labelRect.size() + QSize(8, 8), QImage::Format_ARGB32_Premultiplied);
-            outlineBuffer.fill(0);
-            QPainter outlinePainter(&outlineBuffer);
-            outlinePainter.setPen(option->palette.color(FG_ROLE_CHUNK).value() > 150 ? Qt::black : Qt::white);
-            style->drawItemText(&outlinePainter, QRect(0, 0, outlineBuffer.width(), outlineBuffer.height()), Qt::AlignCenter, option->palette, true, option->text, QPalette::NoRole);
-            outlinePainter.end();
-            blurImage(outlineBuffer, 4);
-            outlinePainter.begin(&outlineBuffer);
-            style->drawItemText(&outlinePainter, QRect(0, 0, outlineBuffer.width(), outlineBuffer.height()), Qt::AlignCenter, option->palette, true, option->text, FG_ROLE_CHUNK);
-            outlinePainter.end();
-#endif
-            if (vertical) {
-                QMatrix mat;
-                QPointF c = QRectF(r).center();
-                mat.translate(c.x(), c.y());
-                mat.rotate(option->bottomToTop ? 90 : -90);
-                mat.translate(-c.x(), -c.y());
-                painter->setClipRegion(mat.mapRect(contentsRect));
-            } else {
-                painter->setClipRegion(contentsRect);
-            }
-#if 0
-            painter->drawImage(QRect(labelRect.x() - 4, labelRect.y() - 4, labelRect.width() + 8, labelRect.height() + 8), outlineBuffer);
-#else
-            style->drawItemText(painter, r, alignment, option->palette, true, option->text, FG_ROLE_CHUNK);
-#endif
-            painter->restore();
-        }
-        painter->save();
-        QRegion region = option->rect;
-        region -= contentsRect;
-        painter->setClipRegion(region);
-        if (vertical) {
-            painter->setPen(option->palette.color(FG_ROLE_PROGRESS));
-            paintRotatedText(painter, r, alignment, option->text, option->bottomToTop ? 90 : -90);
-        } else {
-            style->drawItemText(painter, r, alignment, option->palette, option->state & QStyle::State_Enabled, option->text, FG_ROLE_PROGRESS);
-        }
-        painter->restore();
-    }
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-enum AnimationMode {
-    NoAnimation,
-    FloatAnimation,
-    LiquidAnimation
-};
-
-
-static QColor progressBarFillColor(const QStyleOptionProgressBarV2 *option, const QWidget *widget)
-{
-    QColor fillColor = option->palette.color(BG_ROLE_CHUNK);
-    if (isPasswordStrengthIndicator(widget)) {
-        int p = option->minimum < option->maximum ? 100 * (option->progress - option->minimum) / (option->maximum - option->minimum) : 0;
-        fillColor.setHsv(p * 85 / 100, 200, 240 - p);
-    } else if (isDiskSpaceIndicator(widget)) {
-        int p = option->minimum < option->maximum ? 100 * (option->progress - option->minimum) / (option->maximum - option->minimum) : 0;
-        if (p < 75) p = 100; else p = (100 - p) * 4;
-        fillColor.setHsv(p * 85 / 100, 200, 240 - p);
-    }
-    return fillColor;
-}
-
-
-void paintProgressBarContents(QPainter *painter, const QStyleOptionProgressBarV2 *option, const QWidget *widget, const QStyle *style)
-{
-    // configuration
-    const bool busyIndicator = option->minimum == option->maximum;
-    const bool vertical = option->version >= 2 && option->orientation == Qt::Vertical;
-    const AnimationMode animationMode = busyIndicator ? FloatAnimation : vertical ? LiquidAnimation : FloatAnimation;
-    const int chunkWidth = 4 * qMax(1, style->pixelMetric(QStyle::PM_ProgressBarChunkWidth, option, widget));
-    const bool reverseAnimation = busyIndicator;
-    const int animationSpeed = (busyIndicator ? 1000 : 1000) * (reverseAnimation ? -1 : 1);
-    const int floatAlpha = busyIndicator ? 100 : 255;
-    const bool contentsCentered = progressBarContentsCentered(option, widget);
-    const QRect contentsRect = progressBarContentsRect(option, contentsCentered);
-    const int cornerSmoothing = 0;
-    const int centerSmoothing = busyIndicator ? 100 : 0;
-    const int borderSmoothing = 0;
-    const bool contentsFrame = false;
-    const int gradientSharpness = 0;
-    const int gradientRatio = 50;
-    const int gradientAngle = 0;
-
-    // contents
-    if (!contentsRect.isEmpty()) {
-        QColor fillColor = progressBarFillColor(option, widget);
-        qreal rounding = -1;
-        if (!busyIndicator && option->progress < option->maximum) {
-            rounding = contentsCentered ? 0.6 : 0.5;
-        }
-        switch (animationMode) {
-            case NoAnimation: {
-                painter->fillRect(contentsRect, fillColor);
-                break;
-            }
-            case FloatAnimation: {
-                QColor floatColor;
-                if (option->palette.color(FG_ROLE_CHUNK).value() > fillColor.value()) {
-                    floatColor = fillColor.lighter(105);
-                } else {
-                    floatColor = fillColor.darker(105);
-                }
-                floatColor.setAlpha(floatAlpha);
-                int m = QTime(0, 0).msecsTo(QTime::currentTime()) / (animationSpeed / chunkWidth);
-                QPoint startPoint = contentsCentered ? contentsRect.topLeft() : contentsRect.center();
-                startPoint += vertical ? QPoint(0, chunkWidth - 1 - m % chunkWidth) : QPoint(m % chunkWidth, 0);
-				QLinearGradient fillGradient(startPoint, startPoint + (vertical ? QPoint(0, chunkWidth) : QPoint(chunkWidth, qRound(chunkWidth * sin(gradientAngle * M_PI / 180)))));
-                fillGradient.setSpread(QGradient::RepeatSpread);
-                const qreal delta = gradientRatio * gradientSharpness * 0.000049999;
-                fillGradient.setColorAt(0.0, fillColor);
-                fillGradient.setColorAt(0.0 + delta, fillColor);
-                fillGradient.setColorAt(gradientRatio / 100.0 - delta, floatColor);
-                fillGradient.setColorAt(gradientRatio / 100.0 + delta, floatColor);
-                fillGradient.setColorAt(gradientRatio / 50.0 - delta, fillColor);
-                fillGradient.setColorAt(1.0, fillColor);
-                if (contentsCentered) {
-                    painter->save();
-                    if (vertical) {
-                        painter->setClipRect(QRect(contentsRect.x(), contentsRect.y() + (contentsRect.height() >> 1), contentsRect.width(), contentsRect.height() - (contentsRect.height() >> 1)));
-                    } else {
-                        painter->setClipRect(QRect(contentsRect.x(), contentsRect.y(), contentsRect.width() >> 1, contentsRect.height()));
-                    }
-                    painter->translate(QRectF(contentsRect).center());
-                    painter->scale(vertical ? 1 : -1, vertical ? -1 : 1);
-                    painter->translate(-QRectF(contentsRect).center());
-                    painter->fillRect(contentsRect, fillGradient);
-                    painter->restore();
-                    painter->save();
-                    if (vertical) {
-                        painter->setClipRect(QRect(contentsRect.x(), contentsRect.y(), contentsRect.width(), contentsRect.height() >> 1));
-                    } else {
-                        painter->setClipRect(QRect(contentsRect.x() + (contentsRect.width() >> 1), contentsRect.y(), contentsRect.width() - (contentsRect.width() >> 1), contentsRect.height()));
-                    }
-                    painter->fillRect(contentsRect, fillGradient);
-                    painter->restore();
-                } else {
-                    painter->fillRect(contentsRect, fillGradient);
-                }
-                if (contentsCentered && centerSmoothing > 0) {
-                    QColor centerColor = fillColor;
-                    const int contentsSize = vertical ? contentsRect.height() : contentsRect.width();
-                    const int centerSize = qMin(3 * chunkWidth,  contentsSize >> 1);
-                    const int delta = (contentsSize - centerSize) >> 1;
-                    const QRect centerRect = vertical ? contentsRect.adjusted(0, delta, 0, -delta) : contentsRect.adjusted(delta, 0, -delta, 0);
-                    QLinearGradient centerGradient(centerRect.topLeft(), vertical ? centerRect.bottomLeft() : centerRect.topRight());
-                    centerGradient.setColorAt(0.0, Qt::transparent);
-                    centerGradient.setColorAt(0.4, centerColor);
-                    centerGradient.setColorAt(0.6, centerColor);
-                    centerGradient.setColorAt(1.0, Qt::transparent);
-                    painter->fillRect(centerRect, centerGradient);
-                }
-                break;
-            }
-            case LiquidAnimation: {
-                painter->fillRect(contentsRect, fillColor);
-                if (rounding >= 0) {
-                    int m = QTime(0, 0).msecsTo(QTime::currentTime());
-                    rounding = (sin(m / 100.0) + 1) / 2;
-                }
-            }
-        }
-        if (rounding >= 0) {
-            QLinearGradient lineGradient(contentsRect.topLeft(), vertical ? contentsRect.topRight() : contentsRect.bottomLeft());
-            QColor innerColor = blend_color(option->palette.color(BG_ROLE_PROGRESS), fillColor, rounding);
-            QColor outerColor = blend_color(fillColor, option->palette.color(BG_ROLE_PROGRESS), rounding);
-            lineGradient.setColorAt(0.0, outerColor);
-            lineGradient.setColorAt(0.5, innerColor);
-            lineGradient.setColorAt(1.0, outerColor);
-            if (contentsCentered || (option->version >= 2 && option->invertedAppearance)) {
-                if (vertical) {
-                    painter->fillRect(QRect(contentsRect.x(), contentsRect.bottom(), contentsRect.width(), 1), lineGradient);
-                } else {
-                    painter->fillRect(QRect(contentsRect.left(), contentsRect.y(), 1, contentsRect.height()), lineGradient);
-                }
-            }
-            if (contentsCentered || !(option->version >= 2 && option->invertedAppearance)) {
-                if (vertical) {
-                    painter->fillRect(QRect(contentsRect.x(), contentsRect.top(), contentsRect.width(), 1), lineGradient);
-                } else {
-                    painter->fillRect(QRect(contentsRect.right(), contentsRect.y(), 1, contentsRect.height()), lineGradient);
-                }
-            }
-        }
-        if (cornerSmoothing > 0) {
-            painter->save();
-            QColor color = option->palette.color(BG_ROLE_PROGRESS);
-            color.setAlpha(cornerSmoothing);
-            painter->setPen(color);
-            painter->drawPoint(contentsRect.left(), contentsRect.top());
-            painter->drawPoint(contentsRect.left(), contentsRect.bottom());
-            painter->drawPoint(contentsRect.right(), contentsRect.top());
-            painter->drawPoint(contentsRect.right(), contentsRect.bottom());
-            painter->restore();
-        }
-        if (borderSmoothing > 0) {
-            painter->save();
-            QColor frameColor = option->palette.color(BG_ROLE_PROGRESS);
-            frameColor.setAlpha(borderSmoothing);
-            painter->setPen(frameColor);
-            painter->drawRect(contentsRect.adjusted(0, 0, -1, -1));
-            painter->restore();
-        }
-        if (contentsFrame) {
-            paintThinFrame(painter, contentsRect, option->palette, -20, 60, BG_ROLE_CHUNK);
-        }
-    }
-
-    // overlay gradient
-    QLinearGradient glassyGradient(option->rect.topLeft(), vertical ? option->rect.topRight() : option->rect.bottomLeft());
-    glassyGradient.setColorAt(0.0, QColor(255, 255, 255, 0));
-    glassyGradient.setColorAt(0.47, QColor(0, 0, 0, 2));
-    glassyGradient.setColorAt(0.475, QColor(0, 0, 0, 21));
-    glassyGradient.setColorAt(1.0, QColor(255, 255, 255, 0));
-    painter->fillRect(option->rect.adjusted(2, 2, -2, -2), glassyGradient);
-    paintRecessedFrame(painter, option->rect, option->palette, RF_Small);
-}
-
-
-/*
- * skulpture_scrollbar.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QAbstractScrollArea>
-#include <QtGui/QApplication>
-#include <climits>
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintScrollArrow(QPainter *painter, const QStyleOption *option, Qt::ArrowType arrow, bool spin);
-
-void paintScrollArea(QPainter *painter, const QStyleOption *option)
-{
-	QColor color = option->palette.color(QPalette::Disabled, QPalette::Window);
-	if (option->state & QStyle::State_Enabled || option->type != QStyleOption::SO_Slider) {
-#if 0
-		if (option->state & QStyle::State_Sunken) {
-			color = color.lighter(107);
-		} else {
-			color = color.darker(107);
-		}
-#elif 0
-		color = option->palette.color(QPalette::Base);
-#elif 1
-		if (option->state & QStyle::State_Sunken) {
-			color = color.darker(107);
-		} else {
-			// ###
-			if (false && option->state & QStyle::State_MouseOver) {
-				color = color.lighter(110);
-			} else {
-				color = color.lighter(107);
-			}
-		}
-#endif
-	}
-	painter->fillRect(option->rect, color);
-//	painter->fillRect(option->rect, Qt::red);
-}
-
-
-void paintScrollAreaCorner(QPainter *painter, const QStyleOption *option, const QWidget *widget, const QStyle * /*style*/)
-{
-	QStyleOption opt;
-	opt = *option;
-	opt.type = QStyleOption::SO_Default;
-	if (qobject_cast<const QAbstractScrollArea *>(widget)) {
-            // ### work around bug in Qt 4.5
-            if (option->rect.y() + option->rect.height() > widget->rect().height()
-             || option->rect.x() + option->rect.width() > widget->rect().width()) {
-                return;
-            }
-		opt.type = QStyleOption::SO_Slider;
-		opt.state &= ~QStyle::State_Enabled;
-		if (widget->isEnabled()) {
-			opt.state |= QStyle::State_Enabled;
-		}
-	}
-	paintScrollArea(painter, &opt);
-}
-
-
-extern void paintSliderGroove(QPainter *painter, QRect &rect, const QStyleOptionSlider *option);
-
-void paintScrollBarPage(QPainter *painter, const QStyleOptionSlider *option)
-{
-    const bool paintGroove = true;
-
-    paintScrollArea(painter, option);
-    if (paintGroove) {
-        QRect rect = option->rect.adjusted(1, 1, -1, -1);
-        paintSliderGroove(painter, rect, option);
-    }
-}
-
-
-void paintScrollBarAddLine(QPainter *painter, const QStyleOptionSlider *option)
-{
-	paintScrollArea(painter, option);
-//	paintThinFrame(painter, option->rect, option->palette, -40, 120);
-	if (option->minimum != option->maximum) {
-		QStyleOptionSlider opt = *option;
-		opt.fontMetrics = QApplication::fontMetrics();
-                opt.palette.setColor(QPalette::ButtonText, opt.palette.color(QPalette::WindowText));
-		paintScrollArrow(painter, &opt, option->orientation == Qt::Horizontal ? (option->direction == Qt::LeftToRight ? Qt::RightArrow : Qt::LeftArrow) : Qt::DownArrow, false);
-	}
-}
-
-
-void paintScrollBarSubLine(QPainter *painter, const QStyleOptionSlider *option)
-{
-	paintScrollArea(painter, option);
-//	paintThinFrame(painter, option->rect, option->palette, -40, 120);
-	if (option->minimum != option->maximum) {
-		QStyleOptionSlider opt = *option;
-		opt.fontMetrics = QApplication::fontMetrics();
-                opt.palette.setColor(QPalette::ButtonText, opt.palette.color(QPalette::WindowText));
-                paintScrollArrow(painter, &opt, option->orientation == Qt::Horizontal ? (option->direction == Qt::LeftToRight ? Qt::LeftArrow : Qt::RightArrow) : Qt::UpArrow, false);
-	}
-}
-
-
-void paintScrollBarFirst(QPainter *painter, const QStyleOptionSlider *option)
-{
-    paintScrollBarSubLine(painter, option);
-    if (option->minimum != option->maximum) {
-        painter->fillRect(option->rect.adjusted(2, 2, -2, -2), option->palette.color(QPalette::WindowText));
-    }
-}
-
-
-void paintScrollBarLast(QPainter *painter, const QStyleOptionSlider *option)
-{
-    paintScrollBarAddLine(painter, option);
-    if (option->minimum != option->maximum) {
-        painter->fillRect(option->rect.adjusted(2, 2, -2, -2), option->palette.color(QPalette::WindowText));
-    }
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-class ComplexControlLayout
-{
-    public:
-        struct SubControlItem {
-            QStyle::SubControl subControl;
-            QStyle::ControlElement controlElement;
-            char layoutSpec;
-        };
-
-    protected:
-        ComplexControlLayout(const SubControlItem *controlItem, uint controlCount,
-            const QStyleOptionComplex *opt, const QWidget *w = 0, const QStyle *s = 0)
-            : subControlItem(controlItem), subControlCount(controlCount),
-            option(opt), widget(w), style(s), layoutCount(0)
-        {
-            /* */
-        }
-        ~ComplexControlLayout() { }
-
-    public:
-        QStyle::SubControl hitTestComplexControl(const QPoint &position) const;
-        QRect subControlRect(QStyle::SubControl subControl) const;
-        void paintComplexControl(QPainter *painter) const;
-
-    protected:
-        struct LayoutItem {
-            QStyle::SubControl subControl;
-            QRect rect;
-        };
-
-    protected:
-        void addLayoutItem(QStyle::SubControl subControl, const QRect &rect);
-
-    protected:
-        static const uint maxLayoutCount = 16;
-
-    protected:
-        const SubControlItem * const subControlItem;
-        const uint subControlCount;
-        const QStyleOptionComplex * const option;
-        const QWidget * const widget;
-        const QStyle * const style;
-        uint layoutCount;
-        LayoutItem layoutItem[maxLayoutCount];
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-void ComplexControlLayout::addLayoutItem(QStyle::SubControl subControl, const QRect &rect)
-{
-    if (layoutCount < maxLayoutCount) {
-        layoutItem[layoutCount].subControl = subControl;
-        layoutItem[layoutCount].rect = style->visualRect(option->direction, option->rect, rect);
-        ++layoutCount;
-    }
-}
-
-
-QStyle::SubControl ComplexControlLayout::hitTestComplexControl(const QPoint &position) const
-{
-    for (uint i = 0; i < subControlCount; ++i) {
-        for (uint j = 0; j < layoutCount; ++j) {
-            if (layoutItem[j].subControl == subControlItem[i].subControl) {
-                if (layoutItem[j].rect.contains(position)) {
-                    return layoutItem[j].subControl;
-                }
-            }
-        }
-    }
-    return QStyle::SC_None;
-}
-
-
-QRect ComplexControlLayout::subControlRect(QStyle::SubControl subControl) const
-{
-    QRect rect;
-    for (uint i = 0; i < layoutCount; ++i) {
-        if (layoutItem[i].subControl == subControl) {
-            rect |= layoutItem[i].rect;
-        }
-    }
-    return rect;
-}
-
-
-void ComplexControlLayout::paintComplexControl(QPainter *painter) const
-{
-    for (int i = subControlCount; --i >= 0; ) {
-        if (subControlItem[i].controlElement != QStyle::CE_CustomBase
-        && option->subControls & subControlItem[i].subControl) {
-            for (uint j = 0; j < layoutCount; ++j) {
-                if (layoutItem[j].subControl == subControlItem[i].subControl) {
-                    QStyleOptionSlider opt = *static_cast<const QStyleOptionSlider *>(ComplexControlLayout::option);
-                    opt.rect = layoutItem[j].rect;
-                    if (!(option->activeSubControls & subControlItem[i].subControl)) {
-                        opt.state &= ~(QStyle::State_Sunken | QStyle::State_MouseOver);
-                    }
-                    style->drawControl(subControlItem[i].controlElement, &opt, painter, widget);
-                }
-            }
-        }
-    }
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-static const ComplexControlLayout::SubControlItem scrollBarSubControlItem[] = {
-    /* hitTest in forward order, paint in reverse order */
-    { QStyle::SC_ScrollBarSlider, QStyle::CE_ScrollBarSlider, '*' },
-    { QStyle::SC_ScrollBarAddLine, QStyle::CE_ScrollBarAddLine, '>' },
-    { QStyle::SC_ScrollBarSubLine, QStyle::CE_ScrollBarSubLine, '<' },
-    { QStyle::SC_ScrollBarFirst, QStyle::CE_ScrollBarFirst, '[' },
-    { QStyle::SC_ScrollBarLast, QStyle::CE_ScrollBarLast, ']' },
-    { QStyle::SC_ScrollBarAddPage, QStyle::CE_ScrollBarAddPage, ')' },
-    { QStyle::SC_ScrollBarSubPage, QStyle::CE_ScrollBarSubPage, '(' },
-    { QStyle::SC_ScrollBarGroove, QStyle::CE_CustomBase, '#' }
-};
-
-
-class ScrollBarLayout : public ComplexControlLayout
-{
-    public:
-        ScrollBarLayout(const QStyleOptionSlider *opt, const QWidget *w = 0, const QStyle *s = 0)
-            : ComplexControlLayout(scrollBarSubControlItem, array_elements(scrollBarSubControlItem), opt, w, s)
-        {
-            /* */
-        }
-        ~ScrollBarLayout() { }
-
-    public:
-        void initLayout(const char *layoutSpec);
-        void initLayout(ArrowPlacementMode placementMode);
-
-    protected:
-        void addLayoutItem(const char layoutSpec, int pos, int size);
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-void ScrollBarLayout::addLayoutItem(char c, int pos, int size)
-{
-    const QStyleOptionSlider *option = static_cast<const QStyleOptionSlider *>(ComplexControlLayout::option);
-
-    if (size > 0) {
-        for (uint i = 0; i < subControlCount; ++i) {
-            if (subControlItem[i].layoutSpec == c) {
-                QRect rect;
-                if (option->orientation == Qt::Horizontal) {
-                    rect = QRect(option->rect.left() + pos, option->rect.top(), size, option->rect.height());
-                } else {
-                    rect = QRect(option->rect.left(), option->rect.top() + pos, option->rect.width(), size);
-                }
-                ComplexControlLayout::addLayoutItem(subControlItem[i].subControl, rect);
-                return;
-            }
-        }
-    }
-}
-
-
-void ScrollBarLayout::initLayout(ArrowPlacementMode placementMode)
-{
-    static const char *layoutSpec[] = {
-        "(*)", // NoArrowsMode
-        "(<*>)", // SkulptureMode
-        "<(*)>", // WindowsMode
-        "<(*)<>", // KDEMode
-        "(*)<>", // PlatinumMode
-        "<>(*)" // NextMode
-    };
-    initLayout(layoutSpec[uint(placementMode)]);
-}
-
-
-void ScrollBarLayout::initLayout(const char *layoutSpec)
-{
-    const QStyleOptionSlider *option = static_cast<const QStyleOptionSlider *>(ComplexControlLayout::option);
-    uint range = option->maximum - option->minimum;
-    int pos = option->orientation == Qt::Horizontal ? option->rect.left() : option->rect.top();
-    int maxSize = option->orientation == Qt::Horizontal ? option->rect.width() : option->rect.height();
-    int endPos = pos + maxSize;
-    int groovePos = pos, grooveSize = maxSize;
-    int pagePos = pos, pageSize = maxSize;
-    int buttonSize = style->pixelMetric(QStyle::PM_ScrollBarExtent, option, widget);
-    buttonSize = qMin(maxSize >> 1, buttonSize);
-
-    if (qstrcmp(layoutSpec, "(*)")) {
-        if (!qstrcmp(layoutSpec, "<(*)<>")) {
-            if (maxSize < 4 * buttonSize) {
-                layoutSpec = "<(*)>";
-            }
-        }
-        if (maxSize < 3 * buttonSize) {
-            layoutSpec = "(<*>)";
-        }
-    }
-
-    if (layoutSpec && range != 0) {
-        // layout items before slider
-        const char *p = layoutSpec;
-        char c;
-        while ((c = *p)) {
-            if (c == '*') {
-                pagePos = pos;
-                break;
-            } else if (c == '(') {
-                groovePos = pos;
-            } else {
-                addLayoutItem(c, pos, buttonSize);
-                pos += buttonSize;
-            }
-            ++p;
-        }
-
-        // layout items after slider
-        while (*p) {
-            ++p;
-        }
-        --p;
-        pos = endPos;
-        while (p >= layoutSpec) {
-            c = *p;
-            if (c == '*') {
-                pageSize = pos - pagePos;
-                break;
-            } else if (c == ')') {
-                grooveSize = pos - groovePos;
-            } else {
-                pos -= buttonSize;
-                addLayoutItem(c, pos, buttonSize);
-            }
-            --p;
-        }
-    }
-    if (layoutCount > maxLayoutCount - 4) {
-        layoutCount = maxLayoutCount - 4;
-    }
-    if (range != 0) {
-        int sliderSize = (qint64(option->pageStep) * grooveSize) / (range + option->pageStep);
-        int sliderMin = style->pixelMetric(QStyle::PM_ScrollBarSliderMin, option, widget);
-
-        if (sliderMin > grooveSize >> 1) {
-            sliderMin = grooveSize >> 1;
-            if (sliderSize > sliderMin) {
-                sliderSize = sliderMin;
-            }
-        }
-        if (sliderSize < sliderMin || range > INT_MAX / 2) {
-            sliderSize = sliderMin;
-        }
-        if (grooveSize != pageSize) {
-            if (sliderSize > grooveSize - buttonSize) {
-                sliderSize = grooveSize - buttonSize;
-            }
-        }
-        int sliderPos = groovePos + style->sliderPositionFromValue(option->minimum, option->maximum, option->sliderPosition, grooveSize - sliderSize, option->upsideDown);
-
-        addLayoutItem('(', pagePos, sliderPos - pagePos);
-        addLayoutItem(')', sliderPos + sliderSize, (pagePos + pageSize) - (sliderPos + sliderSize));
-        addLayoutItem('*', sliderPos, sliderSize);
-    } else {
-        addLayoutItem('*', groovePos, grooveSize);
-    }
-    addLayoutItem('#', groovePos, grooveSize);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintCachedGrip(QPainter *painter, const QStyleOption *option, QPalette::ColorRole bgrole = QPalette::Window);
-extern void paintSliderHandle(QPainter *painter, const QRect &rect, const QStyleOptionSlider *option);
-
-
-void paintScrollBarSlider(QPainter *painter, const QStyleOptionSlider *option)
-{
-    if (option->minimum == option->maximum) {
-        paintScrollArea(painter, option);
-    } else {
-        paintSliderHandle(painter, option->rect, option);
-    }
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintScrollBar(QPainter *painter, const QStyleOptionSlider *option, const QWidget *widget, const QStyle *style, ArrowPlacementMode horizontalArrowMode, ArrowPlacementMode verticalArrowMode)
-{
-    // paint scrollbar
-    ScrollBarLayout layout(option, widget, style);
-    layout.initLayout(option->orientation == Qt::Horizontal ? horizontalArrowMode : verticalArrowMode);
-    layout.paintComplexControl(painter);
-
-    // get frame this scrollbar is in
-    QFrame *frame = 0;
-    if (widget && widget->parentWidget()) {
-        QWidget *container = widget->parentWidget();
-        if (container->inherits("Q3ListView")) {
-            if (option->orientation == Qt::Vertical) {
-                frame = qobject_cast<QFrame *>(container);
-            }
-        } else if (container->inherits("Q3Table")) {
-            frame = qobject_cast<QFrame *>(container);
-        } else if (container->parentWidget()) {
-            frame = qobject_cast<QAbstractScrollArea *>(container->parentWidget());
-        }
-    }
-
-    // paint shadow
-    if (frame && frame->frameStyle() == (QFrame::StyledPanel | QFrame::Sunken)) {
-        QRect rect = option->rect;
-        if (option->orientation == Qt::Vertical) {
-            if (option->direction == Qt::LeftToRight) {
-                rect.adjust(-3, 0, 1, 0);
-            } else {
-                rect.adjust(-1, 0, 2, 0);
-            }
-            // ### temporary hack to detect corner widget
-            if (widget->height() == frame->height() - 4) {
-                rect.adjust(0, -1, 0, 1);
-            } else {
-                rect.adjust(0, -1, 0, 4);
-            }
-        } else {
-            rect.adjust(0, -3, 0, 1);
-            // ### temporary hack to detect corner widget
-            if (widget->width() == frame->width() - 4) {
-                rect.adjust(-1, 0, 1, 0);
-            } else {
-                if (option->direction == Qt::LeftToRight) {
-                    rect.adjust(-1, 0, 4, 0);
-                } else {
-                    rect.adjust(-4, 0, 1, 0);
-                }
-            }
-        }
-        paintRecessedFrameShadow(painter, rect.adjusted(1, 1, -1, -1), RF_Small);
-    }
-}
-
-
-QRect subControlRectScrollBar(const QStyleOptionSlider *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style, ArrowPlacementMode horizontalArrowMode, ArrowPlacementMode verticalArrowMode)
-{
-    ScrollBarLayout layout(option, widget, style);
-    layout.initLayout(option->orientation == Qt::Horizontal ? horizontalArrowMode : verticalArrowMode);
-    return layout.subControlRect(subControl);
-}
-
-
-QStyle::SubControl hitTestComplexControlScrollBar(const QStyleOptionSlider *option, const QPoint &position, const QWidget *widget, const QStyle *style, ArrowPlacementMode horizontalArrowMode, ArrowPlacementMode verticalArrowMode)
-{
-    ScrollBarLayout layout(option, widget, style);
-    layout.initLayout(option->orientation == Qt::Horizontal ? horizontalArrowMode : verticalArrowMode);
-    return layout.hitTestComplexControl(position);
-}
-
-
-/*
- * skulpture_shadows.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QAbstractScrollArea>
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-#include <QtGui/QMdiArea>
-#endif
-#include <QtGui/QApplication>
-#include <QtGui/QMouseEvent>
-#include <QtCore/QEvent>
-#include <QtGui/QPainter>
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * FrameShadow - overlay a shadow inside a frame
- *
- * This class is used to give the impression of sunken
- * frames that cast shadows over the contents inside.
- *
- * To create the shadow, call installFrameShadow()
- * on the sunken QFrame that you want the shadow
- * to be added to.
- *
- * Side-effects:
- *
- * Adds transparent widgets to the frame, which may
- * affect performance.
- *
- */
-
-FrameShadow::FrameShadow(QWidget *parent)
-	: QWidget(parent)
-{
-	init();
-}
-
-
-FrameShadow::FrameShadow(ShadowArea area, QWidget *parent)
-	: QWidget(parent)
-{
-	init();
-	area_ = area;
-}
-
-
-FrameShadow::~FrameShadow()
-{
-	/* */
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void SkulptureStyle::Private::installFrameShadow(QWidget *widget)
-{
-//	printf("adding shadow to %s\n", widget->metaObject()->className());
-	widget->installEventFilter(this);
-	removeFrameShadow(widget);
-	for (int i = 0; i < 4; ++i) {
-		FrameShadow *shadow = new FrameShadow(FrameShadow::ShadowArea(i));
-		shadow->hide();
-		shadow->setParent(widget);
-		shadow->updateGeometry();
-		shadow->show();
-	}
-}
-
-
-void SkulptureStyle::Private::removeFrameShadow(QWidget *widget)
-{
-	const QList<QObject *> shadows = widget->children();
-    Q_FOREACH (QObject *child, shadows) {
-		FrameShadow *shadow;
-		if ((shadow = qobject_cast<FrameShadow *>(child))) {
-			shadow->hide();
-			shadow->setParent(0);
-			shadow->deleteLater();
-		}
-	}
-}
-
-
-void SkulptureStyle::Private::updateFrameShadow(QWidget *widget)
-{
-	const QList<QObject *> shadows = widget->children();
-    Q_FOREACH (QObject *child, shadows) {
-		FrameShadow *shadow;
-		if ((shadow = qobject_cast<FrameShadow *>(child))) {
-			if (shadow->isVisible()) {
-				shadow->updateGeometry();
-			}
-		}
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-#define SHADOW_SIZE_TOP		4
-#define SHADOW_SIZE_BOTTOM	2
-#define SHADOW_SIZE_LEFT		4
-#define SHADOW_SIZE_RIGHT		4
-
-void FrameShadow::updateGeometry()
-{
-	QWidget *widget = parentWidget();
-	QRect cr = widget->contentsRect();
-
-//	printf("cr-top: %d in class %s\n", cr.top(), widget->metaObject()->className());
-	switch (shadowArea()) {
-		case FrameShadow::Top:
-			cr.setHeight(SHADOW_SIZE_TOP);
-			break;
-		case FrameShadow::Left:
-			cr.setWidth(SHADOW_SIZE_LEFT);
-			cr.adjust(0, SHADOW_SIZE_TOP, 0, -SHADOW_SIZE_BOTTOM);
-			break;
-		case FrameShadow::Bottom:
-			cr.setTop(cr.bottom() - SHADOW_SIZE_BOTTOM + 1);
-			break;
-		case FrameShadow::Right:
-			cr.setLeft(cr.right() - SHADOW_SIZE_RIGHT + 1);
-			cr.adjust(0, SHADOW_SIZE_TOP, 0, -SHADOW_SIZE_BOTTOM);
-			break;
-	}
-	setGeometry(cr);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-bool FrameShadow::event(QEvent *e)
-{
-	if (e->type() == QEvent::Paint) {
-		return QWidget::event(e);
-	}
-	QWidget *viewport = 0;
-	if (parentWidget()) {
-		if (QAbstractScrollArea *widget = qobject_cast<QAbstractScrollArea *>(parentWidget())) {
-			viewport = widget->viewport();
-		} else if (parentWidget()->inherits("Q3ScrollView")) {
-			// FIXME: get viewport? needs Qt3Support linkage!
-			viewport = 0;
-		} else {
-			viewport = 0;
-		}
-	}
-	if (!viewport) {
-		return false;
-	}
-
-#if 1
-	switch (e->type()) {
-		case QEvent::DragEnter:
-		case QEvent::DragMove:
-		case QEvent::DragLeave:
-			case QEvent::Drop: {
-				setAcceptDrops(viewport->acceptDrops());
-				QObject *o = viewport;
-				return o->event(e);
-			}
-			break;
-		case QEvent::Enter:
-			setCursor(viewport->cursor());
-			setAcceptDrops(viewport->acceptDrops());
-			break;
-			case QEvent::ContextMenu: {
-				QContextMenuEvent *me = reinterpret_cast<QContextMenuEvent *>(e);
-				QContextMenuEvent *ne = new QContextMenuEvent(me->reason(), parentWidget()->mapFromGlobal(me->globalPos()), me->globalPos());
-				QApplication::sendEvent(viewport, ne);
-				e->accept();
-				return true;
-			}
-			break;
-		case QEvent::MouseButtonPress:
-			releaseMouse();
-		case QEvent::MouseMove:
-			case QEvent::MouseButtonRelease: {
-				QMouseEvent *me = reinterpret_cast<QMouseEvent *>(e);
-				QMouseEvent *ne = new QMouseEvent(e->type(), parentWidget()->mapFromGlobal(me->globalPos()), me->globalPos(), me->button(), me->buttons(), me->modifiers());
-				QApplication::sendEvent(viewport, ne);
-				e->accept();
-				return true;
-			}
-			break;
-		case QEvent::Paint:
-			return QWidget::event(e);
-		default:
-			break;
-	}
-	e->ignore();
-	return false;
-#else
-	return QWidget::event(e);
-#endif
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void FrameShadow::paintEvent(QPaintEvent *)
-{
-    // this fixes shadows in frames that change frameStyle() after polish()
-    if (QFrame *frame = qobject_cast<QFrame *>(parentWidget())) {
-        if (frame->frameStyle() != (QFrame::StyledPanel | QFrame::Sunken)) {
-            return;
-        }
-    }
-	QPainter painter(this);
-	QWidget *parent = parentWidget();
-	QRect r = parent->contentsRect();
-	r.translate(mapFromParent(QPoint(0, 0)));
-//	painter.fillRect(QRect(-100, -100, 1000, 1000), Qt::red);
-	paintRecessedFrameShadow(&painter, r, RF_Large);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void FrameShadow::init()
-{
-//	setAttribute(Qt::WA_NoSystemBackground, true);
-//	setAttribute(Qt::WA_NoBackground, true);
-	setAttribute(Qt::WA_OpaquePaintEvent, false);
-	setFocusPolicy(Qt::NoFocus);
-	// TODO: check if this is private
-	setAttribute(Qt::WA_TransparentForMouseEvents, true);
-	setContextMenuPolicy(Qt::NoContextMenu);
-
-	QWidget *viewport;
-	if (parentWidget()) {
-		if (QAbstractScrollArea *widget = qobject_cast<QAbstractScrollArea *>(parentWidget())) {
-			setAcceptDrops(true);
-			viewport = widget->viewport();
-		} else if (parentWidget()->inherits("Q3ScrollView")) {
-			// FIXME: get viewport? needs Qt3Support linkage!
-			viewport = parentWidget();
-		} else {
-			viewport = 0;
-		}
-		if (viewport) {
-			setCursor(viewport->cursor());
-		}
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintRecessedFrameShadow(QPainter *painter, const QRect &rect, enum RecessedFrame rf)
-{
-	if (rf == RF_None) return;
-#if 1
-	int c1 = (rf == RF_Small) ? 10 : 10;
-	int c2 = (rf == RF_Small) ? 24 : 36;
-#else
-	int c1 = 0;
-	int c2 = 0;
-#endif
-#if 0
-	c1 += c1 >> 1;
-	c2 += c2 >> 1;
-	int intensityTop = c2;
-	int intensityLeft = c2;
-	int intensityBottom = c1;
-	int intensityRight = c1;
-#endif
-	QRect r = rect;
-	while (c1 > 3 || c2 > 3) {
-		QBrush brush1(QColor(0, 0, 0, c1));
-		QBrush brush2(QColor(0, 0, 0, c2));
-
-		painter->fillRect(QRect(rect.left(), r.top(), rect.width(), 1), brush2);
-		painter->fillRect(QRect(r.left(), rect.top(), 1, rect.height()), brush2);
-		painter->fillRect(QRect(rect.left(), r.bottom(), rect.width(), 1), brush1);
-		painter->fillRect(QRect(r.right(), rect.top(), 1, rect.height()), brush1);
-		c1 >>= 1; c2 >>= 1;
-//		c1 = int(c1 * 0.7); c2 = int(c2 * 0.7);
-		r.adjust(1, 1, -1, -1);
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * WidgetShadow - add a drop shadow to a widget
- *
- * This class renders a shadow below a widget, such
- * as a QMdiSubWindow.
- *
- */
-
-WidgetShadow::WidgetShadow(QWidget *parent)
-	: QWidget(parent)
-{
-	init();
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void WidgetShadow::init()
-{
-	setObjectName(QLatin1String("WidgetShadow"));
-//	setAttribute(Qt::WA_NoSystemBackground, true);
-//	setAttribute(Qt::WA_NoBackground, true);
-	setAttribute(Qt::WA_OpaquePaintEvent, false);
-//	setAutoFillBackground(false);
-	setFocusPolicy(Qt::NoFocus);
-	// TODO: check if this is private
-	setAttribute(Qt::WA_TransparentForMouseEvents, true);
-//	setContextMenuPolicy(Qt::NoContextMenu);
-	widget_ = 0;
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-bool WidgetShadow::event(QEvent *e)
-{
-	switch (e->type())
-	{
-		case QEvent::Paint: if (widget_) {
-			QRect r(- 10, - 5, widget_->frameGeometry().width() + 20, widget_->frameGeometry().height() + 15);
-			r.translate(qMin(widget_->x(), 10), qMin(widget_->y(), 5));
-			QPainter p(this);
-			QRegion region(r);
-			region -= QRect(r.adjusted(10, 5, -10, -10));
-			p.setClipRegion(region);
-#if 0
-			for (int i = 0; i < 10; ++i) {
-			int k = 9 - i;
-			p.fillRect(r.adjusted(k, i, -k, -i), QColor(0, 0, 0, i));
-			p.fillRect(r.adjusted(i, k, -i, -k), QColor(0, 0, 0, i));
-		}
-#else
-			for (int i = 0; i < 10; ++i) {
-				p.fillRect(r, QColor(0, 0, 0, 2 + i));
-				r.adjust(1, 1, -1, -1);
-			}
-#endif
-			e->ignore();
-			return (true);
-		}
-		default:
-			break;
-	}
-	return QWidget::event(e);
-}
-
-
-void WidgetShadow::updateGeometry()
-{
-	if (widget_) {
-		if (widget_->isHidden()) {
-			hide();
-		} else {
-			QWidget *parent = parentWidget();
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-                        if (parent && !qobject_cast<QMdiArea *>(parent) && qobject_cast<QMdiArea *>(parent->parentWidget())) {
-				parent = parent->parentWidget();
-			}
-#endif
-			if (parent) {
-				QRect geo(widget_->x() - 10, widget_->y() - 5, widget_->frameGeometry().width() + 20, widget_->frameGeometry().height() + 15);
-				setGeometry(geo & parent->rect());
-			}
-			show();
-		}
-	}
-}
-
-
-void WidgetShadow::updateZOrder()
-{
-	if (widget_) {
-		if (widget_->isHidden()) {
-			hide();
-		} else {
-			stackUnder(widget_);
-			QWidget *parent = parentWidget();
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-			if (parent && !qobject_cast<QMdiArea *>(parent) && qobject_cast<QMdiArea *>(parent->parentWidget())) {
-				parent = parent->parentWidget();
-			}
-#endif
-			if (parent) {
-				QRect geo(widget_->x() - 10, widget_->y() - 5, widget_->frameGeometry().width() + 20, widget_->frameGeometry().height() + 15);
-				setGeometry(geo & parent->rect());
-			}
-			show();
-		}
-	}
-}
-
-
-/*
- * skulpture_shapes.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include "sk_factory.h"
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * ShapeFactory - create a QPainterPath from a description
- *
- * The shape description is a bytecode stream that allows simple arithmetic,
- * conditionals, and looping.
- *
- * Syntax is as follows:
- *	Description:	Instruction* End
- *	Instruction:	Close | Move X Y | Line X Y | Quad X1 Y1 X2 Y2 | Cubic X1 Y1 X2 Y2 X3 Y3
- *	Instruction:	Nop | SetVar X | Begin Instruction* End | While Condition Instruction | If Condition Instruction1 [ Else Instruction2 ]
- *	Condition:	Not Condition | And Condition1 Condition2 | Or Condition1 Condition2 | EQ X Y | NE X Y | LT X Y | GE X Y | GT X Y | LE X Y
- *	Expression:	Number | GetVar | Add X Y | Sub X Y | Mul X Y | Div X Y | Min X Y | Max X Y | Mix V X Y | Cond Condition X Y
- *
- * TODO
- *
- * Mod, MultiLine, DoWhile, Integer/Float, Switch, Exp, Sin, Cos, Tan, Atan, Atan2, Pi
- * Colors, Gradients, Functions (Call/Ret), Frames, Text
- *
- */
-
-
-/*-----------------------------------------------------------------------*/
-
-void ShapeFactory::executeCode(Code code)
-{
-	qreal v[6];
-
-	switch (code) {
-		case Move:
-		case Line:
-			v[0] = evalValue();
-			v[1] = evalValue();
-			if (code == Move) {
-				path.moveTo(v[0], v[1]);
-			} else {
-				path.lineTo(v[0], v[1]);
-			}
-			break;
-		case Close:
-			path.closeSubpath();
-			break;
-		case Quad:
-		case Cubic: {
-			for (int n = 0; n < (code == Quad ? 4 : 6); ++n) {
-				v[n] = evalValue();
-			}
-			if (code == Quad) {
-				path.quadTo(v[0], v[1], v[2], v[3]);
-			} else {
-				path.cubicTo(v[0], v[1], v[2], v[3], v[4], v[5]);
-			}
-			break;
-		}
-		default:
-			AbstractFactory::executeCode(code);
-			break;
-	}
-}
-
-
-void ShapeFactory::skipCode(Code code)
-{
-	switch (code) {
-		case Move:
-		case Line:
-			skipValue();
-			skipValue();
-			break;
-		case Close:
-			break;
-		case Quad:
-		case Cubic: {
-			for (int n = 0; n < (code == Quad ? 4 : 6); ++n) {
-				skipValue();
-			}
-			break;
-		}
-		default:
-			AbstractFactory::skipCode(code);
-			break;
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-QPainterPath ShapeFactory::createShape(ShapeFactory::Description description, qreal var[])
-{
-	ShapeFactory factory;
-
-	factory.setDescription(description);
-	for (int n = MinVar; n <= MaxVar; ++n) {
-		factory.setVar(n, var[n]);
-	}
-	factory.create();
-	for (int n = MinVar; n <= MaxVar; ++n) {
-		var[n] = factory.getVar(n);
-	}
-	return factory.getPath();
-}
-
-
-QPainterPath ShapeFactory::createShape(ShapeFactory::Description description)
-{
-	ShapeFactory factory;
-
-	factory.setDescription(description);
-	factory.create();
-	return factory.getPath();
-}
-
-
-/*
- * skulpture_shortcuts.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QKeyEvent>
-#include <QtGui/QFocusEvent>
-#include <QtGui/QMenu>
-#include <QtGui/QMenuBar>
-#include <QtGui/QAbstractButton>
-#include <QtGui/QLabel>
-#include <QtGui/QDockWidget>
-#include <QtGui/QToolBox>
-#include <QtGui/QGroupBox>
-#include <QtGui/QTabBar>
-#include <QtGui/QApplication>
-
-
-/*-----------------------------------------------------------------------*/
-/**
- * Class to manage the applications keyboard shortcuts
- *
- * It acts as an eventfilter for the application, and does the following:
- *
- *	* the shortcuts are only underlined when the Alt key is pressed, and
- *		the underline is removed once it is released.
- *	* on many widgets the focus frame is not displayed if the focus was
- *		received using the mouse. It is, however, still displayed if
- *		you use the Tab key.
- *
- * Additionally, this class is responsible for blanking the mouse pointer:
- *
- *      * when the tablet pen leaves proximity
- *
- * Any other keyboard shortcut and focus issues should also be handled here.
- *
- */
-
-
-/*-----------------------------------------------------------------------*/
-
-bool ShortcutHandler::underlineShortcut(const QWidget *widget) const
-{
-	if (widget && widget->isEnabled()) {
-		if (alt_pressed.contains(widget->window())) {
-			return true;
-		}
-		if (qobject_cast<const QMenuBar *>(widget)) {
-			if (widget->hasFocus()) {
-				return true;
-			}
-			QList<QWidget *> children = qFindChildren<QWidget *>(widget);
-            Q_FOREACH (QWidget *child, children) {
-				if (child->hasFocus()) {
-					return true;
-				}
-			}
-		}
-		if (qobject_cast<const QMenu *>(widget)) {
-			return true;
-		}
-	}
-	return false;
-}
-
-
-static inline bool hasShortcut(QWidget *widget)
-{
-	if (qobject_cast<const QAbstractButton *>(widget) // && (qobject_cast<const QAbstractButton *>(widget))->text.contains(QChar('&', 0))
-	 || qobject_cast<const QLabel *>(widget)
-	 || qobject_cast<const QDockWidget *>(widget)
-	 || qobject_cast<const QToolBox *>(widget)
-//	 || qobject_cast<const QMenu *>(widget)
-	 || qobject_cast<const QMenuBar *>(widget)
-	 || qobject_cast<const QGroupBox *>(widget) // && (qobject_cast<const QGroupBox *>(widget))->isCheckable()
-	 || qobject_cast<const QTabBar *>(widget)) {
-		return true;
-	}
-	return false;
-}
-
-
-static inline void updateShortcuts(QWidget *widget)
-{
-	QList<QWidget *> children = qFindChildren<QWidget *>(widget);
-    Q_FOREACH (QWidget *child, children) {
-		if (child->isVisible() && hasShortcut(child)) {
-			child->update();
-		}
-	}
-}
-
-
-bool ShortcutHandler::eventFilter(QObject *watched, QEvent *event)
-{
-    if (!watched->isWidgetType()) {
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-        switch (event->type()) {
-            case QEvent::TabletEnterProximity:
-                if (tabletCursorState != TabletCursor) {
-                    if (tabletCursorState != DefaultCursor) {
-                        QApplication::restoreOverrideCursor();
-                    }
-                    tabletCursorState = DefaultCursor;
-                }
-                break;
-            case QEvent::TabletLeaveProximity:
-                if (tabletCursorState != BlankCursor) {
-                    if (tabletCursorState != DefaultCursor) {
-                        QApplication::restoreOverrideCursor();
-                    }
-                    QApplication::setOverrideCursor(Qt::BlankCursor);
-                    tabletCursorState = BlankCursor;
-                }
-                break;
-            default:
-                break;
-        }
-#endif
-        return QObject::eventFilter(watched, event);
-    }
-	QWidget *widget = reinterpret_cast<QWidget *>(watched);
-
-	switch (event->type()) {
-                case QEvent::MouseMove:
-                    if (tabletCursorState != DefaultCursor) {
-                        QApplication::restoreOverrideCursor();
-                        tabletCursorState = DefaultCursor;
-                    }
-                    break;
-                case QEvent::FocusIn: {
-				Qt::FocusReason reason = ((QFocusEvent *) event)->reason();
-				if (reason != Qt::TabFocusReason && reason != Qt::BacktabFocusReason) {
-					QWidget *window = widget->window();
-					window->setAttribute(Qt::WA_KeyboardFocusChange, false);
-				}
-			}
-			break;
-		case QEvent::KeyPress:
-			if (((QKeyEvent *) event)->key() == Qt::Key_Alt) {
-				QWidget *window = widget->window();
-				if (!alt_pressed.contains(window)) {
-					alt_pressed.append(window);
-					window->installEventFilter(this);
-					updateShortcuts(window);
-				}
-			}
-			break;
-		case QEvent::Close:
-			if (widget->isWindow()) {
-				alt_pressed.removeAll(widget);
-				widget->removeEventFilter(this);
-			}
-			break;
-		case QEvent::WindowDeactivate:
-			if (widget->isWindow()) {
-				alt_pressed.removeAll(widget);
-				widget->removeEventFilter(this);
-				updateShortcuts(widget);
-			}
-			break;
-		case QEvent::KeyRelease:
-			if (((QKeyEvent *) event)->key() == Qt::Key_Alt) {
-				QWidget *window = widget->window();
-				if (alt_pressed.contains(window)) {
-					alt_pressed.removeAll(window);
-					window->removeEventFilter(this);
-					updateShortcuts(window);
-				}
-			}
-			break;
-		default:
-			break;
-	}
-	return QObject::eventFilter(watched, event);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-ShortcutHandler::ShortcutHandler(QObject *parent)
-	: QObject(parent), tabletCursorState(DefaultCursor)
-{
-	init();
-}
-
-
-ShortcutHandler::~ShortcutHandler()
-{
-    if (tabletCursorState != DefaultCursor) {
-        tabletCursorState = DefaultCursor;
-        QApplication::restoreOverrideCursor();
-    }
-}
-
-
-/*
- * skulpture_slider.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QAbstractSlider>
-#include <QtGui/QPainter>
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintSliderGroove(QPainter *painter, QRect &rect, const QStyleOptionSlider *option)
-{
-	if (option->orientation == Qt::Horizontal) {
-		int d = rect.height() / 2;
-		rect.adjust(0, d, 0, -d);
-	} else {
-		int d = rect.width() / 2;
-		rect.adjust(d, 0, -d, 0);
-	}
-	QColor color = option->palette.color(QPalette::Window);
-	if (option->state & QStyle::State_Enabled) {
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-            color = color.darker(120);
-#else
-            color = color.dark(120);
-#endif
-		painter->fillRect(rect, color);
-		paintThinFrame(painter, rect.adjusted(-1, -1, 1, 1), option->palette, -30, -90);
-	} else {
-		painter->fillRect(rect, color);
-		paintThinFrame(painter, rect.adjusted(-1, -1, 1, 1), option->palette, -20, -60);
-	}
-}
-
-
-void paintSliderHandle(QPainter *painter, const QRect &rect, const QStyleOptionSlider *option)
-{
-	// shadow
-	painter->fillRect(rect.adjusted(2, 2, 2, 2), QColor(0, 0, 0, 5));
-	painter->fillRect(rect.adjusted(1, 1, 1, 1), QColor(0, 0, 0, 8));
-	// slider color
-	QColor color = option->palette.color(QPalette::Button);
-	if (option->state & QStyle::State_Enabled) {
-		if (option->state & QStyle::State_Sunken) {
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-                    color = color.lighter(102);
-#else
-                    color = color.light(102);
-#endif
-                } else if (option->state & QStyle::State_MouseOver) {
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-                    color = color.lighter(104);
-#else
-                    color = color.light(104);
-#endif
-		}
-	} else {
-		color = option->palette.color(QPalette::Window);
-	}
-	painter->fillRect(rect, color);
-
-#if 1 // slider gradient
-	if ((option->state & QStyle::State_Enabled) && !(option->state & QStyle::State_Sunken)) {
-            QLinearGradient gradient(rect.topLeft(), option->orientation == Qt::Horizontal ? rect.bottomLeft() : rect.topRight());
-#if 1
-		// SkandaleStyle 0.0.2
-		gradient.setColorAt(0.0, shaded_color(color, 40));
-		gradient.setColorAt(0.5, shaded_color(color, -5));
-		gradient.setColorAt(1.0, shaded_color(color, 70));
-#else
-		// glassy
-		gradient.setColorAt(0.0, shaded_color(color, 40));
-		gradient.setColorAt(0.4, shaded_color(color, -5));
-		gradient.setColorAt(0.405, shaded_color(color, -15));
-		gradient.setColorAt(1.0, shaded_color(color, 70));
-#endif
-		painter->fillRect(rect, gradient);
-	}
-#endif
-	// slider frame
-	paintThinFrame(painter, rect, option->palette, -70, -20, QPalette::Button);
-	paintThinFrame(painter, rect.adjusted(1, 1, -1, -1), option->palette, -30, 130, QPalette::Button);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintSlider(QPainter *painter, const QStyleOptionSlider *option, const QWidget *widget, const QStyle *style)
-{
-	// groove
-	if (option->subControls & QStyle::SC_SliderGroove) {
-	//	painter->fillRect(option->rect, option->palette.color(QPalette::Window).darker(105));
-	//	paintThinFrame(painter, option->rect, option->palette, 130, -30);
-#if 0
-		int handlesize = style->pixelMetric(QStyle::PM_SliderLength, option, widget);
-		int e = handlesize / 2 - 1;
-#else
-		int e = 1;
-#endif
-#if 0
-		QRect rect = option->rect;
-	//	QRect rect = style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderGroove, widget);
-		if (option->orientation == Qt::Horizontal) {
-			rect.adjust(e, 0, -e, 0);
-		} else {
-			rect.adjust(0, e, 0, -e);
-		}
-		paintSliderGroove(painter, rect, option);
-#else
-		QRect rect = style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderGroove, widget);
-		//QRect rect = option->rect;
-		QRect handle_rect = style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderHandle, widget);
-		QStyleOptionSlider aOption = *option;
-		aOption.palette.setColor(QPalette::Window, aOption.palette.color(QPalette::Highlight));
-		if (option->orientation == Qt::Horizontal) {
-			handle_rect.adjust(0, 2, 0, -2);
-			rect.adjust(e, 0, -e, 0);
-			rect.setWidth(handle_rect.left() - rect.left() - 1);
-			if (rect.width() > -3) {
-				paintSliderGroove(painter, rect, option->upsideDown ? option : &aOption);
-			}
-			rect.setLeft(handle_rect.right() + 2);
-			rect.setWidth(option->rect.right() - handle_rect.right() - 1 - e);
-			if (rect.width() > -3) {
-				paintSliderGroove(painter, rect, option->upsideDown ? &aOption : option);
-			}
-		} else {
-			handle_rect.adjust(2, 0, -2, 0);
-			rect.adjust(0, e, 0, -e);
-			rect.setHeight(handle_rect.top() - rect.top() - 1);
-			if (rect.height() > -3) {
-				paintSliderGroove(painter, rect, option->upsideDown ? option : &aOption);
-			}
-			rect.setTop(handle_rect.bottom() + 2);
-			rect.setHeight(option->rect.bottom() - handle_rect.bottom() - e);
-			if (rect.height() > -3) {
-				paintSliderGroove(painter, rect, option->upsideDown ? &aOption : option);
-			}
-		}
-#endif
-	}
-
-#if 1	// tickmarks
-	if (option->subControls & QStyle::SC_SliderTickmarks) {
-		QStyleOptionSlider slider = *option;
-		slider.subControls = QStyle::SC_SliderTickmarks;
-		// ### for now, just use common tickmarks
-                QPalette palette = slider.palette;
-                QColor col = palette.color(QPalette::WindowText);
-                col.setAlpha(51);
-                palette.setColor(QPalette::WindowText, col);
-                slider.palette = palette;
-                if (option->orientation == Qt::Horizontal) {
-			slider.rect.adjust(-1, 0, -1, 0);
-		} else {
-			slider.rect.adjust(0, -1, 0, -1);
-		}
-		((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_Slider, &slider, painter, widget);
-		slider.rect = option->rect;
-                palette.setColor(QPalette::WindowText, QColor(255, 255, 255, 77));
-		slider.palette = palette;
-		((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_Slider, &slider, painter, widget);
-	}
-#endif
-	// focus rect
-	if (option->state & QStyle::State_HasFocus) {
-		QStyleOptionFocusRect focus;
-		focus.QStyleOption::operator=(*option);
-		focus.rect = style->subElementRect(QStyle::SE_SliderFocusRect, option, widget);
-		focus.state |= QStyle::State_FocusAtBorder;
-		style->drawPrimitive(QStyle::PE_FrameFocusRect, &focus, painter, widget);
-	}
-
-	// handle
-	if (option->subControls & QStyle::SC_SliderHandle) {
-		QStyleOptionSlider aOption = *option;
-		if (!(option->activeSubControls & QStyle::SC_SliderHandle)) {
-			aOption.state &= ~QStyle::State_MouseOver;
-			aOption.state &= ~QStyle::State_Sunken;
-		}
-		QRect rect = style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderHandle, widget);
-		if (option->orientation == Qt::Horizontal) {
-			rect.adjust(0, 2, 0, -2);
-		} else {
-			rect.adjust(2, 0, -2, 0);
-		}
-#if 0
-		if (option->orientation == Qt::Horizontal) {
-			rect.setTop(option->rect.top());
-			rect.setHeight(option->rect.height());
-		//	rect.adjust(0, 1, 0, -1);
-		} else {
-			rect.setLeft(option->rect.left());
-			rect.setWidth(option->rect.width());
-		//	rect.adjust(1, 0, -1, 0);
-		}
-#endif
-	//	rect.adjust(0, 0, -1, -1);
-		paintSliderHandle(painter, rect, &aOption);
-	//	rect.adjust(0, 0, 1, 1);
-	//	paintThinFrame(painter, rect.adjusted(1, 1, 1, 1), option->palette, -20, 0);
-#if 0
-		// grip
-		const int o = 5;
-		const int s = 6;
-		if (option->orientation == Qt::Horizontal) {
-			int d = (rect.width() - 2) / 2;
-			rect.adjust(d, 0, -d, 0);
-			rect.translate(-s, 0);
-		} else {
-			int d = (rect.height() - 2) / 2;
-			rect.adjust(0, d, 0, -d);
-			rect.translate(0, -s);
-		}
-		for (int k = -1; k < 2; ++k) {
-			if (option->orientation == Qt::Horizontal) {
-				painter->fillRect(rect.adjusted(0, o, 0, -o), QColor(0, 0, 0, 30));
-				painter->fillRect(rect.adjusted(1, o, 1, -o), QColor(255, 255, 255, 80));
-				rect.translate(s, 0);
-			} else {
-				painter->fillRect(rect.adjusted(o, 0, -o, 0), QColor(0, 0, 0, 30));
-				painter->fillRect(rect.adjusted(o, 1, -o, 1), QColor(255, 255, 255, 80));
-				rect.translate(0, s);
-			}
-		}
-#endif
-	}
-#if 0
-	painter->fillRect(style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderGroove, widget), QColor(0, 0, 0, 70));
-	if (option->subControls & QStyle::SC_SliderGroove) {
-		painter->fillRect(style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderGroove, widget), QColor(255, 0, 0, 70));
-	}
-	if (option->subControls & QStyle::SC_SliderHandle) {
-		painter->fillRect(style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderHandle, widget), QColor(0, 100, 255, 70));
-	}
-	if (option->subControls & QStyle::SC_SliderTickmarks) {
-		painter->fillRect(style->subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderTickmarks, widget), QColor(0, 255, 0, 170));
-	}
-#endif
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-QRect subControlRectSlider(const QStyleOptionSlider *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style)
-{
-	QRect rect = ((QCommonStyle *) style)->QCommonStyle::subControlRect(QStyle::CC_Slider, option, subControl, widget);
-	switch (subControl) {
-		case QStyle::SC_SliderGroove:
-		case QStyle::SC_SliderTickmarks:
-		case QStyle::SC_SliderHandle:
-		default:
-			break;
-	}
-	return rect;
-#if 0
-	/*
-	option->orientation
-	option->tickPosition: QSlider::TicksAbove | QSlider::TicksBelow
-	option->state
-	option->tickInterval
-	*/
-	switch (subControl) {
-		case SC_SliderGrove:
-		case SC_SliderTickmarks:
-		case SC_SliderHandle:
-	}
-#endif
-}
-
-
-/*
- * skulpture_spinbox.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QAbstractSpinBox>
-#include <QtGui/QApplication>
-#include <QtGui/QPainter>
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintScrollArrow(QPainter *painter, const QStyleOption *option, Qt::ArrowType arrow, bool spin);
-
-void paintIndicatorSpinDown(QPainter *painter, const QStyleOption *option)
-{
-	paintScrollArrow(painter, option, Qt::DownArrow, true);
-}
-
-
-void paintIndicatorSpinUp(QPainter *painter, const QStyleOption *option)
-{
-	paintScrollArrow(painter, option, Qt::UpArrow, true);
-}
-
-
-void paintIndicatorSpinMinus(QPainter *painter, const QStyleOption *option)
-{
-    paintScrollArrow(painter, option, Qt::LeftArrow, true);
-}
-
-
-void paintIndicatorSpinPlus(QPainter *painter, const QStyleOption *option)
-{
-    paintScrollArrow(painter, option, Qt::RightArrow, true);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-QRect subControlRectSpinBox(const QStyleOptionSpinBox *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style)
-{
-    int fw = option->frame ? style->pixelMetric(QStyle::PM_SpinBoxFrameWidth, option, widget) : 0;
-    int bw;
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-    if (option->buttonSymbols == QAbstractSpinBox::NoButtons) {
-        bw = 0;
-    } else
-#endif
-    {
-        bw = qMax(style->pixelMetric(QStyle::PM_ScrollBarExtent, option, widget), qApp->globalStrut().width());
-    }
-    bool strutMode = qApp->globalStrut().height() > (option->rect.height() >> 1);
-    QRect rect;
-
-    switch (subControl) {
-        case QStyle::SC_SpinBoxUp:
-        case QStyle::SC_SpinBoxDown: {
-            int h = option->rect.height() - 2 * fw;
-            int t = option->rect.top() + fw;
-            int l = option->rect.right() - bw - fw + 1;
-            if (strutMode) {
-                if (subControl == QStyle::SC_SpinBoxUp) {
-                    l -= bw;
-                }
-            } else {
-                if (subControl == QStyle::SC_SpinBoxDown) {
-                    t += (h >> 1);
-                }
-                h = (h + 1) >> 1;
-            }
-            rect = QRect(l, t, bw, h);
-            break;
-        }
-        case QStyle::SC_SpinBoxEditField: {
-            if (strutMode) {
-                bw *= 2;
-            }
-            rect = option->rect.adjusted(fw, fw, -fw - bw, -fw);
-            break;
-        }
-        case QStyle::SC_SpinBoxFrame:
-        default: // avoid warning
-            rect = option->rect;
-            break;
-    }
-    return style->visualRect(option->direction, option->rect, rect);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintComplexControlArea(QPainter *painter, const QStyleOption *option)
-{
-    // configuration
-    const bool paintBackground = true;
-    const bool paintSeparator = true;
-
-    // background
-    QColor color;
-    if (paintBackground && option->state & QStyle::State_Enabled) {
-        color = option->palette.color(QPalette::Window);
-        // ### should arrow areas have hover highlight?
-        if (false && option->state & QStyle::State_MouseOver) {
-#if QT_VERSION >= QT_VERSION_CHECK(4, 3, 0)
-            color = color.lighter(110);
-#else
-            color = color.light(110);
-#endif
-        } else {
-#if QT_VERSION >= QT_VERSION_CHECK(4, 3, 0)
-            color = color.lighter(107);
-#else
-            color = color.light(107);
-#endif
-        }
-    } else {
-        color = option->palette.color(QPalette::Base);
-    }
-    painter->fillRect(option->rect, color);
-
-    // separator
-    if (paintSeparator) {
-        QRect rect = option->rect;
-        if (option->direction == Qt::LeftToRight) {
-            rect.setWidth(1);
-        } else {
-            rect.setLeft(rect.left() + rect.width() - 1);
-        }
-        painter->fillRect(rect, shaded_color(option->palette.color(QPalette::Window), -5));
-    }
-}
-
-
-static void paintSpinBoxUpDown(QPainter *painter, const QStyleOptionSpinBox *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style)
-{
-    QStyleOption opt;
-    opt.QStyleOption::operator=(*option);
-    opt.rect = style->subControlRect(QStyle::CC_SpinBox, option, subControl, widget);
-    if (!(option->activeSubControls & subControl)) {
-        opt.state &= ~(QStyle::State_Sunken | QStyle::State_On | QStyle::State_MouseOver);
-    }
-
-    // button background
-    paintComplexControlArea(painter, &opt);
-
-    // button symbol
-    QStyle::PrimitiveElement pe;
-    if (!(option->stepEnabled & (subControl == QStyle::SC_SpinBoxUp ? QAbstractSpinBox::StepUpEnabled : QAbstractSpinBox::StepDownEnabled))) {
-        opt.state &= ~(QStyle::State_Enabled | QStyle::State_MouseOver);
-        opt.palette.setCurrentColorGroup(QPalette::Disabled);
-    }
-    // micro adjustments
-    if (subControl == QStyle::SC_SpinBoxUp) {
-        opt.rect.translate(0, 1);
-    } else if (opt.rect.height() & 1) {
-        opt.rect.translate(0, -1);
-    }
-    switch (option->buttonSymbols) {
-        case QAbstractSpinBox::PlusMinus:
-            pe = subControl == QStyle::SC_SpinBoxUp ? QStyle::PE_IndicatorSpinPlus : QStyle::PE_IndicatorSpinMinus;
-            break;
-        default:
-            pe = subControl == QStyle::SC_SpinBoxUp ? QStyle::PE_IndicatorSpinUp : QStyle::PE_IndicatorSpinDown;
-            break;
-    }
-    style->drawPrimitive(pe, &opt, painter, widget);
-}
-
-
-void paintSpinBox(QPainter *painter, const QStyleOptionSpinBox *option, const QWidget *widget, const QStyle *style)
-{
-    // up/down controls
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-    if (option->buttonSymbols != QAbstractSpinBox::NoButtons)
-#endif
-    {
-        for (uint sc = QStyle::SC_SpinBoxUp; sc != QStyle::SC_SpinBoxFrame; sc <<= 1) {
-            if (option->subControls & sc) {
-                paintSpinBoxUpDown(painter, option, (QStyle::SubControl) sc, widget, style);
-            }
-        }
-    }
-
-    // frame
-    if (option->frame && (option->subControls & QStyle::SC_SpinBoxFrame)) {
-        QStyleOptionFrame frameOpt;
-        frameOpt.QStyleOption::operator=(*option);
-        frameOpt.rect = style->subControlRect(QStyle::CC_SpinBox, option, QStyle::SC_SpinBoxFrame, widget);
-        frameOpt.state |= QStyle::State_Sunken;
-        frameOpt.lineWidth = style->pixelMetric(QStyle::PM_SpinBoxFrameWidth, &frameOpt, widget);
-        frameOpt.midLineWidth = 0;
-        style->drawPrimitive(QStyle::PE_FrameLineEdit, &frameOpt, painter, widget);
-    }
-}
-
-
-/*
- * skulpture_tabs.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QTabWidget>
-
-
-/*-----------------------------------------------------------------------*/
-
-enum Pos { North, South, West, East };
-
-static inline Pos tabPos(QTabBar::Shape shape)
-{
-	return Pos(int(shape) & 3);
-}
-
-static inline bool isVertical(QTabBar::Shape shape)
-{
-	return (int(shape) & 2);
-}
-
-struct Affinity {
-	int x1, y1, x2, y2;
-};
-
-static inline void tabAffinity(QTabBar::Shape shape, Affinity &affinity, int amount)
-{
-	affinity.x1 = affinity.y1 = affinity.x2 = affinity.y2 = 0;
-	switch (tabPos(shape)) {
-		case North:	affinity.y1 = amount;	break;
-		case South:	affinity.y2 = -amount;	break;
-		case West:	affinity.x1 = amount;	break;
-		case East:		affinity.x2 = -amount;	break;
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-#if 0
-enum TabState
-{
-	TS_New,
-	TS_Removed,
-	TS_Inactive,
-	TS_HoverAnim,
-	TS_Hover,
-	TS_ActiveAnim,
-	TS_Active,
-	TS_Moved,
-	TS_LabelChanged	// text, icon or color changed
-	TS_StateChanged	// disabled changed
-};
-
-
-class TabAnim
-{
-	qreal pos;
-	qreal speed;
-	int color;
-};
-
-
-class Tab
-{
-	public:
-		TabState state;
-		TabAnim anim;
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-		QStyleOptionTabV3 oldOption;
-#else
-		QStyleOptionTabV2 oldOption;
-#endif
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-class TabBarState
-{
-	public:
-		TabBarState() : active_tab(0), hover_tab(0) { }
-
-	public:
-		QList<Tab> tabs;
-		Tab *active_tab;
-		Tab *hover_tab;
-		int hover_x;
-		int hover_y;
-		int hover_counter;
-};
-
-
-const TabBarState *SkulpturePrivate::tabBarState(const QWidget *widget)
-{
-	if (qobject_cast<const QTabBar *>(widget)) {
-		if ((int i = tabBarStates.indexOf(widget))) {
-			return tabBarStates.at(i);
-		}
-		// add state if not found
-		TabBarState *state = new TabBarState;
-		if (state) {
-
-		}
-	}
-	return 0;
-}
-#endif
-
-/*-----------------------------------------------------------------------*/
-
-static void paintTabBase(QPainter *painter, const QRect &rect, const QStyleOption *option, QTabBar::Shape shape)
-{
-	if (true /*option->state & QStyle::State_Enabled*/) {
-		QLinearGradient tabGradient(rect.topLeft(), isVertical(shape) ? rect.topRight() : rect.bottomLeft());
-		tabGradient.setColorAt(0.0, option->palette.color(QPalette::Window).darker(118));
-		tabGradient.setColorAt(1.0, option->palette.color(QPalette::Window).darker(105));
-		painter->fillRect(rect.adjusted(1, 1, -1, -1), tabGradient);
-	} else {
-		painter->fillRect(rect.adjusted(1, 1, -1, -1), option->palette.color(QPalette::Window).darker(106));
-	}
-	paintThinFrame(painter, rect.adjusted(1, 1, -1, -1), option->palette, -20, -40);
-	paintRecessedFrameShadow(painter, rect.adjusted(2, 2, -2, -2), RF_Small);
-}
-
-
-void paintFrameTabBarBase(QPainter *painter, const QStyleOptionTabBarBase *option)
-{
-	// ### remove clipping
-	painter->save();
-	QRect r = option->rect;
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-	r = r.united(option->tabBarRect);
-#else
-        r = r.unite(option->tabBarRect);
-#endif
-	QRegion region(r);
-	region -= option->tabBarRect;
-	painter->setClipRegion(region);
-	paintTabBase(painter, r, option, option->shape);
-	QRect rect = r;
-#if 0
-	Affinity affinity;
-	tabAffinity(option->shape, affinity, 1);
-	rect.adjust(affinity.x2, affinity.y2, affinity.x1, affinity.y1);
-#endif
-	paintThinFrame(painter, rect, option->palette, 60, -20);
-	painter->restore();
-}
-
-
-void paintTabWidgetFrame(QPainter *painter, const QStyleOptionTabWidgetFrame *option, const QWidget *widget)
-{
-	Q_UNUSED(widget);
-
-	QRect base = option->rect;
-	int s = (isVertical(option->shape) ? option->tabBarSize.width() : option->tabBarSize.height());
-	if (s < 2) s = 2;
-	if (isVertical(option->shape)) {
-		base.setWidth(s);
-	} else {
-		base.setHeight(s);
-	}
-	const int overlap = 2;
-	switch (tabPos(option->shape)) {
-		case North:	base.translate(0, -(s - overlap));	break;
-		case West:	base.translate(-(s - overlap), 0);	break;
-		case South:	base.translate(0, option->rect.height() - overlap);	break;
-		case East:		base.translate(option->rect.width() - overlap, 0);	break;
-	}
-	if (s != 2) {
-		paintTabBase(painter, base, option, option->shape);
-	}
-
-	Affinity affinity;
-	tabAffinity(option->shape, affinity, -(s - overlap));
-//	painter->save();
-//	painter->setClipRect(base);
-	paintThinFrame(painter, option->rect.adjusted(affinity.x1, affinity.y1, affinity.x2, affinity.y2), option->palette, 60, -20);
-	paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -40, 160);
-#if 1
-        painter->save();
-        painter->setPen(QPen(QColor(0, 0, 0, 20), 1));
-        painter->drawLine(option->rect.x() + 1, option->rect.bottom(), option->rect.right() - 1, option->rect.bottom());
-        painter->drawLine(option->rect.right(), option->rect.top() + 1, option->rect.right(), option->rect.bottom());
-        painter->restore();
-#endif
-#if 0
-	QRect r = option->rect.adjusted(2, 2, -2, -2);
-	painter->fillRect(r, option->palette.color(QPalette::Window));
-	QLinearGradient gradient(r.topLeft(), r.bottomLeft());
-	gradient.setColorAt(0.0, QColor(255, 255, 255, 0));
-	gradient.setColorAt(1.0, QColor(0, 0, 0, 20));
-	painter->fillRect(r, gradient);
-#endif
-//	painter->restore();
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-#define TAB_SHIFT 1
-
-void paintTabBarTabShape(QPainter *painter, const QStyleOptionTab *option, const QWidget *widget, const QStyle *style)
-{
-	Q_UNUSED(style);
-        const QColor tabBackgroundColor = option->palette.color(QPalette::Active, QPalette::Window);
-        bool mouse = (option->state & QStyle::State_MouseOver) && !(option->state & QStyle::State_Selected) && (option->state & QStyle::State_Enabled);
-	QRect c_rect = option->rect;
-	bool konq = false;
-
-	if (widget && widget->parentWidget()) {
-		if (!qstrcmp(widget->metaObject()->className(), "KTabBar") && !qstrcmp(widget->parentWidget()->metaObject()->className(), "KonqFrameTabs")) {
-			konq = true;
-		}
-	}
-	if (konq || (widget && !(qobject_cast<const QTabWidget *>(widget->parentWidget())))
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-            || (option->version >= 3 && ((QStyleOptionTabV3 *) option)->documentMode)
-#endif
-        ) {
-		// ### remove clipping
-		painter->save();
-		painter->setClipRect(option->rect);
-		QRect rect = widget->rect();
-		if (konq) {
-			rect.adjust(-10, 0, 10, 0);
-		}
-		paintTabBase(painter, rect, option, option->shape);
-#if 0
-		Affinity affinity;
-		tabAffinity(option->shape, affinity, 1);
-		rect.adjust(affinity.x2, affinity.y2, affinity.x1, affinity.y1);
-#endif
-		paintThinFrame(painter, rect, option->palette, 60, -20);
-		painter->restore();
-	}
-
-	switch (tabPos(option->shape)) {
-	case North:
-		c_rect.adjust(1, 1, -2, 0);
-		if (option->position != QStyleOptionTab::Beginning
-		&& option->position != QStyleOptionTab::OnlyOneTab) {
-			c_rect.adjust(-1, 0, 0, 0);
-		}
-		if (option->state & QStyle::State_Selected) {
-			painter->fillRect(c_rect.adjusted(0, 0, -1, 0), tabBackgroundColor);
-			if (option->state & QStyle::State_Enabled) {
-				QLinearGradient gradient(c_rect.topLeft(), c_rect.bottomLeft());
-#if 0
-				QColor c = option->palette.color(QPalette::Highlight);
-				gradient.setColorAt(0.0, c);
-				gradient.setColorAt(0.2, QColor(255, 255, 255, 20));
-				gradient.setColorAt(1.0, QColor(255, 255, 255, 0));
-#else
-				gradient.setColorAt(0.0, shaded_color(tabBackgroundColor, 20));
-				gradient.setColorAt(1.0, shaded_color(tabBackgroundColor, 0));
-#endif
-				painter->fillRect(c_rect.adjusted(0, 0, -1, 0), gradient);
-			}
-			// ### flat tabs: 50->20, 180->80
-		//	painter->fillRect(c_rect, QColor(255, 0, 0, 100));
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, 1);
-			paintThinFrame(painter, c_rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1), option->palette, -50, 180);
-			// shadows
-			painter->fillRect(QRect(c_rect.right() + 1, c_rect.top(), 1, c_rect.height()), QColor(0, 0, 0, 25));
-			painter->fillRect(QRect(c_rect.right() + 2, c_rect.top(), 1, c_rect.height()), QColor(0, 0, 0, 10));
-		} else {
-			// ### install clip
-			painter->save();
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, -1);
-			painter->setClipRect(option->rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1));
-
-			painter->fillRect(c_rect.adjusted(1, mouse ? 1 : 2, -1, -1), mouse ? tabBackgroundColor.darker(104) : tabBackgroundColor.darker(108));
-			paintThinFrame(painter, c_rect.adjusted(1, mouse ? 1 : 2, -1, 1), option->palette, -40, 90);
-			// shadows
-			painter->fillRect(QRect(c_rect.right(), c_rect.top() + 3, 1, c_rect.height() - 4), QColor(0, 0, 0, 15));
-			painter->fillRect(QRect(c_rect.right() + 1, c_rect.top() + 3, 1, c_rect.height() - 4), QColor(0, 0, 0, 5));
-
-			painter->restore();
-			// shadow below base
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.bottom() - 1, c_rect.width() - 2, 1), QColor(0, 0, 0, 10));
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.bottom() - 2, c_rect.width() - 2, 1), QColor(0, 0, 0, 4));
-		}
-		break;
-	case South:
-		c_rect.adjust(1, 0, -2, -1);
-		if (option->position != QStyleOptionTab::Beginning
-		 && option->position != QStyleOptionTab::OnlyOneTab) {
-			c_rect.adjust(-1, 0, 0, 0);
-		}
-		if (option->state & QStyle::State_Selected) {
-			painter->fillRect(c_rect.adjusted(0, 0, -1, 0), tabBackgroundColor);
-			if (option->state & QStyle::State_Enabled) {
-				QLinearGradient gradient(c_rect.topLeft(), c_rect.bottomLeft());
-				gradient.setColorAt(0.0, shaded_color(tabBackgroundColor, 0));
-				gradient.setColorAt(1.0, shaded_color(tabBackgroundColor, -5));
-				painter->fillRect(c_rect.adjusted(0, 0, -1, 0), gradient);
-			}
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, 1);
-			paintThinFrame(painter, c_rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1), option->palette, -50, 180);
-			//paintThinFrame(painter, c_rect.adjusted(0, -1, 0, 0), option->palette, -50, 180);
-			// shadows
-			painter->fillRect(QRect(c_rect.right() + 1, c_rect.top() + 1, 1, c_rect.height() - 1), QColor(0, 0, 0, 25));
-			painter->fillRect(QRect(c_rect.right() + 2, c_rect.top() + 1, 1, c_rect.height() - 1), QColor(0, 0, 0, 10));
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.bottom() + 1, c_rect.width(), 1), QColor(0, 0, 0, 20));
-		} else {
-			// ### install clip
-			painter->save();
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, -1);
-			painter->setClipRect(option->rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1));
-
-			painter->fillRect(c_rect.adjusted(1, 1, -1, mouse ? -1 : -2), mouse ? tabBackgroundColor.darker(104) : tabBackgroundColor.darker(108));
-			paintThinFrame(painter, c_rect.adjusted(1, -1, -1, mouse ? -1 : -2), option->palette, -40, 90);
-			// shadows
-			painter->fillRect(QRect(c_rect.right(), c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 15));
-			painter->fillRect(QRect(c_rect.right() + 1, c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 5));
-			if (!mouse) {
-				painter->fillRect(QRect(c_rect.left() + 2, c_rect.bottom() - 1, c_rect.width() - 3, 1), QColor(0, 0, 0, 10));
-			}
-
-			painter->restore();
-			// shadow below base
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.top() + 1, c_rect.width() - 2, 1), QColor(0, 0, 0, 30));
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.top() + 2, c_rect.width() - 2, 1), QColor(0, 0, 0, 15));
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.top() + 3, c_rect.width() - 2, 1), QColor(0, 0, 0, 8));
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.top() + 4, c_rect.width() - 2, 1), QColor(0, 0, 0, 4));
-		}
-		break;
-	case West:
-		c_rect.adjust(1, 1, 0, -2);
-		if (option->state & QStyle::State_Selected) {
-			painter->fillRect(c_rect.adjusted(0, 0, 0, -1), tabBackgroundColor);
-			if (option->state & QStyle::State_Enabled) {
-				QLinearGradient gradient(c_rect.topLeft(), c_rect.topRight());
-				gradient.setColorAt(0.0, shaded_color(tabBackgroundColor, 20));
-				gradient.setColorAt(1.0, shaded_color(tabBackgroundColor, 0));
-				painter->fillRect(c_rect.adjusted(0, 0, 0, -1), gradient);
-			}
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, 1);
-			paintThinFrame(painter, c_rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1), option->palette, -50, 180);
-			// shadows
-			painter->fillRect(QRect(c_rect.left(), c_rect.bottom() + 1, c_rect.width(), 1), QColor(0, 0, 0, 25));
-			painter->fillRect(QRect(c_rect.left(), c_rect.bottom() + 2, c_rect.width(), 1), QColor(0, 0, 0, 10));
-		} else {
-			// ### install clip
-			painter->save();
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, -1);
-			painter->setClipRect(option->rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1));
-			painter->fillRect(c_rect.adjusted(mouse ? 1 : 2, 1, 1, -1), mouse ? tabBackgroundColor.darker(104) : tabBackgroundColor.darker(108));
-			paintThinFrame(painter, c_rect.adjusted(mouse ? 1 : 2, 1, 1, -1), option->palette, -40, 90);
-			// shadows
-			painter->fillRect(QRect(c_rect.left() + 2, c_rect.bottom() + 0, c_rect.width() - 3, 1), QColor(0, 0, 0, 15));
-			painter->fillRect(QRect(c_rect.left() + 2, c_rect.bottom() + 1, c_rect.width() - 3, 1), QColor(0, 0, 0, 5));
-
-			painter->restore();
-			// shadow below base
-			painter->fillRect(QRect(c_rect.right() - 1, c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 10));
-			painter->fillRect(QRect(c_rect.right() - 2, c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 4));
-		}
-		break;
-	case East:
-		c_rect.adjust(0, 1, -1, -2);
-		if (option->state & QStyle::State_Selected) {
-			painter->fillRect(c_rect.adjusted(0, 0, 0, -1), tabBackgroundColor);
-			if (option->state & QStyle::State_Enabled) {
-				QLinearGradient gradient(c_rect.topLeft(), c_rect.topRight());
-				gradient.setColorAt(0.0, shaded_color(tabBackgroundColor, 0));
-				gradient.setColorAt(1.0, shaded_color(tabBackgroundColor, 10));
-				painter->fillRect(c_rect.adjusted(0, 0, 0, -1), gradient);
-			}
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, 1);
-			paintThinFrame(painter, c_rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1), option->palette, -50, 180);
-			// shadows
-			painter->fillRect(QRect(c_rect.left(), c_rect.bottom() + 1, c_rect.width(), 1), QColor(0, 0, 0, 25));
-			painter->fillRect(QRect(c_rect.left(), c_rect.bottom() + 2, c_rect.width(), 1), QColor(0, 0, 0, 10));
-			painter->fillRect(QRect(c_rect.right() + 1, c_rect.top() + 1, 1, c_rect.height()), QColor(0, 0, 0, 20));
-		} else {
-			// ### install clip
-			painter->save();
-			Affinity affinity;
-			tabAffinity(option->shape, affinity, -1);
-			painter->setClipRect(option->rect.adjusted(affinity.x2, affinity.y2, affinity.x1, affinity.y1));
-			painter->fillRect(c_rect.adjusted(-2, 1, mouse ? -1 : -2, -1), mouse ? tabBackgroundColor.darker(104) : tabBackgroundColor.darker(108));
-			paintThinFrame(painter, c_rect.adjusted(-2, 1, mouse ? -1 : -2, -1), option->palette, -40, 90);
-			// shadows
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.bottom() + 0, c_rect.width() - 3, 1), QColor(0, 0, 0, 15));
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.bottom() + 1, c_rect.width() - 3, 1), QColor(0, 0, 0, 5));
-
-			painter->restore();
-			// shadow below base
-			painter->fillRect(QRect(c_rect.left() + 1, c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 20));
-			painter->fillRect(QRect(c_rect.left() + 2, c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 10));
-			painter->fillRect(QRect(c_rect.left() + 3, c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 5));
-		//	painter->fillRect(QRect(c_rect.left() + 4, c_rect.top() + 1, 1, c_rect.height() - 2), QColor(0, 0, 0, 4));
-		}
-		break;
-	}
-}
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-void paintIndicatorTabClose(QPainter *painter, const QStyleOption *option, const QWidget *widget, const QStyle *style)
-{
-    int offset = 0;
-    QTabBar::Shape shape = QTabBar::RoundedNorth;
-
-    if (widget) {
-        if (QTabBar *tabbar = qobject_cast<QTabBar *>(widget->parentWidget())) {
-            offset = TAB_SHIFT;
-            shape = tabbar->shape();
-            for (int i = 0; i < tabbar->count(); ++i) {
-                if (tabbar->tabRect(i).contains(widget->mapToParent(QPoint(1, 1)))) {
-                    if (i == tabbar->currentIndex()) {
-                        offset = 0;
-                    } else if (tabbar->tabRect(i).contains(tabbar->mapFromGlobal(QCursor::pos()))) {
-                        offset = 0;
-                    }
-                    break;
-                }
-            }
-            if (false /*tabPos(shape) == East || tabPos(shape) == South*/) {
-                offset += 1;
-            }
-        }
-    }
-    QIcon::Mode iconMode = QIcon::Normal;
-    painter->save();
-    if (option->state & QStyle::State_Enabled) {
-        if (option->state & QStyle::State_MouseOver || option->state & QStyle::State_Sunken) {
-            // paintThinFrame(painter, option->rect, option->palette, 90, -30);
-            iconMode = QIcon::Active;
-            //painter->fillRect(option->rect.adjusted(1, 1, -1, -1), QColor(220, 0, 0));
-            if (!(option->state & QStyle::State_Sunken)) {
-                // paintThinFrame(painter, option->rect.adjusted(1, 1, -1, -1), option->palette, -60, 180);
-            } else {
-                //iconMode = QIcon::Selected;
-            }
-        } else {
-            painter->setOpacity(0.7);
-        }
-    } else {
-        //iconMode = QIcon::Disabled;
-        painter->setOpacity(0.7);
-    }
-    QRect r = QRect(option->rect.center() - QPoint(option->state & QStyle::State_Sunken ? 3 : 4, option->state & QStyle::State_Sunken ? 3 : 4), QSize(10, 10));
-    if (offset) {
-        Affinity affinity;
-        tabAffinity(shape, affinity, offset);
-        r.translate(affinity.x1 + affinity.x2, affinity.y1 + affinity.y2);
-    }
-    painter->drawPixmap(r, style->standardIcon(QStyle::SP_TitleBarCloseButton, option, widget).pixmap(10, 10, iconMode));
-    painter->restore();
-}
-#endif
-
-void paintTabBarTabLabel(QPainter *painter, const QStyleOptionTab *option, const QWidget *widget, const QStyle *style)
-{
-//	bool mouse = (option->state & QStyle::State_MouseOver) && !(option->state & QStyle::State_Selected) && (option->state & QStyle::State_Enabled);
-//	painter->save();
-#if 0
-	if (!(option->state & QStyle::State_Selected)) {
-		if (mouse) {
-			painter->setOpacity(0.7);
-		} else {
-			painter->setOpacity(0.5);
-		}
-	} else {
-		painter->setOpacity(0.8);
-	}
-//	QFont font(painter->font());
-//	font.setBold(true);
-//	painter->setFont(font);
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-    QStyleOptionTabV3 opt;
-#else
-    QStyleOptionTabV2 opt;
-#endif
-
-	int offset = TAB_SHIFT;
-	if (option->state & QStyle::State_Selected || (option->state & QStyle::State_MouseOver && option->state & QStyle::State_Enabled)) {
-		offset = 0;
-	}
-
-	if (option->version > 1) {
-		opt = *((QStyleOptionTabV2 *) option);
-	} else {
-		opt = *option;
-	}
-	Affinity affinity;
-	tabAffinity(option->shape, affinity, offset);
-	opt.rect.translate(affinity.x1 + affinity.x2, affinity.y1 + affinity.y2);
-	switch (tabPos(option->shape)) {
-	case North:
-		opt.rect.adjust(-2, 1, -1, 1);
-		break;
-	case South:
-		opt.rect.adjust(-2, 0, -1, 0);
-		break;
-	case West:
-	case East:
-		painter->save();
-		QMatrix mat;
-		if (tabPos(option->shape) == West) {
-			opt.rect.adjust(3, 0, 3, 0);
-		} else {
-			opt.rect.adjust(-1, 0, -1, 0);
-		}
-		QPointF c = opt.rect.center();
-		mat.translate(c.x(), c.y());
-		mat.rotate(tabPos(option->shape) == West ? -90 : 90);
-		mat.translate(-c.x(), -c.y());
-		opt.rect = mat.mapRect(opt.rect);
-		painter->setMatrix(mat, true);
-		opt.shape = (QTabBar::Shape) 0;
-		break;
-	}
-	((QCommonStyle *) style)->QCommonStyle::drawControl(QStyle::CE_TabBarTabLabel, &opt, painter, widget);
-	if (isVertical(option->shape)) {
-		painter->restore();
-	}
-}
-
-
-/*
- * skulpture_text.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QTextEdit>
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-#include <QtGui/QPlainTextEdit>
-#endif
-#include <QtGui/QTextBrowser>
-#include <QtGui/QTextFrame>
-#include <QtGui/QTextCursor>
-#include <QtGui/QScrollBar>
-#include <QtGui/QApplication>
-
-
-/*-----------------------------------------------------------------------*/
-
-void SkulptureStyle::Private::removeCursorLine(QAbstractScrollArea *edit)
-{
-    Q_UNUSED (edit);
-
-    if (oldEdit) {
-        oldEdit->viewport()->update(QRect(0, oldCursorTop, oldCursorWidth, oldCursorHeight));
-        oldEdit = 0;
-    }
-}
-
-
-void SkulptureStyle::Private::updateCursorLine(QAbstractScrollArea *edit, const QRect &cursorRect)
-{
-    const int highlightMargin = qMin(2, widgetSize);
-    QRect cursorLine = cursorRect;
-    cursorLine.setLeft(0);
-    cursorLine.setWidth(edit->viewport()->width());
-    cursorLine.adjust(0, -highlightMargin, 0, highlightMargin);
-    if (edit != oldEdit || cursorLine.top() != oldCursorTop
-     || cursorLine.width() != oldCursorWidth
-     || cursorLine.height() != oldCursorHeight
-     || edit->viewport()->height() != oldHeight) {
-        removeCursorLine(edit);
-        oldEdit = edit;
-        oldCursorTop = cursorLine.top();
-        oldCursorWidth = cursorLine.width();
-        oldCursorHeight = cursorLine.height();
-        oldHeight = edit->viewport()->height();
-        edit->viewport()->update(cursorLine);
-    }
-}
-
-
-void SkulptureStyle::Private::paintCursorLine(QAbstractScrollArea *edit)
-{
-    if (edit == oldEdit) {
-        QRect cursorLine = QRect(0, oldCursorTop, oldCursorWidth, oldCursorHeight);
-        QPainter painter(edit->viewport());
-        QPalette palette = edit->palette();
-        QColor color = palette.color(QPalette::Highlight);
-        color.setAlpha(40);
-        painter.fillRect(cursorLine, color);
-        if (edit->window()->testAttribute(Qt::WA_KeyboardFocusChange)) {
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-            color = palette.color(QPalette::Highlight).darker(120);
-#else
-            color = palette.color(QPalette::Highlight).dark(120);
-#endif
-            color.setAlpha(120);
-            painter.fillRect(cursorLine.adjusted(0, cursorLine.height() - 3, 0, -2), color);
-        }
-    }
-}
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-void SkulptureStyle::Private::handleCursor(QPlainTextEdit *edit)
-{
-    if (edit->hasFocus() && !edit->isReadOnly()) {
-        QStyleOption option;
-        option.initFrom(edit);
-        int cursorWidth = q->SkulptureStyle::pixelMetric(PM_TextCursorWidth, &option, edit);
-        if (edit->cursorWidth() != cursorWidth) {
-            edit->setCursorWidth(cursorWidth);
-        }
-        updateCursorLine(edit, edit->cursorRect());
-    } else {
-        if (edit == oldEdit) {
-            removeCursorLine(edit);
-        }
-    }
-}
-#endif
-
-void SkulptureStyle::Private::handleCursor(QTextEdit *edit)
-{
-    if (edit->hasFocus() && !edit->isReadOnly()) {
-        QStyleOption option;
-        option.initFrom(edit);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-        int cursorWidth = q->SkulptureStyle::pixelMetric(PM_TextCursorWidth, &option, edit);
-#else
-        int cursorWidth = q->SkulptureStyle::pixelMetric((QStyle::PixelMetric)((int) PM_CustomBase + 1), &option, edit);
-#endif
-        if (edit->cursorWidth() != cursorWidth) {
-            edit->setCursorWidth(cursorWidth);
-        }
-#endif
-        updateCursorLine(edit, edit->cursorRect());
-    } else {
-        if (edit == oldEdit) {
-            removeCursorLine(edit);
-        }
-    }
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void SkulptureStyle::Private::updateTextEditMargins(QTextEdit *edit)
-{
-	int margin = 1 + edit->fontMetrics().height() / 5;
-	if (margin > 4) margin = 4;
-	if (qobject_cast<QTextBrowser *>(edit)) {
-		margin = edit->fontMetrics().height();
-		if (margin < 4 || edit->height() < 4 * edit->fontMetrics().height()) {
-			margin = 4;
-		}
-	}
-	if (margin < 2 || edit->height() < 2 * edit->fontMetrics().height()) {
-		margin = 2;
-	}
-	QTextDocument *doc = edit->document();
-//	printf("doc: %p\n", doc);
-	if (!doc) return;
-	if (doc->isEmpty()) {
-		// create valid root frame
-		QTextCursor cursor(doc);
-	}
-
-	QTextFrame *root = doc->rootFrame();
-//	printf("root: %p\n", root);
-	if (!root) return;
-
-	QTextFrameFormat format = root->frameFormat();
-	if (!format.isValid()) return;
-
-	if (format.margin() == 2.0 && margin != 2) {
-	//	printf("set margin %d\n", margin);
-		// ### crash on setText(), disable signals
-		disconnect(edit, SIGNAL(textChanged()), &mapper, SLOT(map()));
-		doc->blockSignals(true);
-		format.setMargin(margin);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-                if (margin < 12) {
-                    format.setTopMargin(widgetSize - ((textShift + 1) >> 1));
-                    format.setBottomMargin(widgetSize + ((textShift + 1) >> 1));
-                }
-#endif
-                root->setFrameFormat(format);
-	//	edit->insertPlainText(QLatin1String(""));
-	//	edit->update();
-		doc->blockSignals(false);
-		connect(edit, SIGNAL(textChanged()), &mapper, SLOT(map()));
-		// clear undo buffer
-		bool undo = edit->isUndoRedoEnabled();
-		edit->setUndoRedoEnabled(false);
-		doc->setModified(false);
-	//	emit doc->contentsChanged();
-		edit->setUndoRedoEnabled(undo);
-		// force relayout
-		edit->resize(edit->size() + QSize(-1, 0));
-		edit->resize(edit->size() + QSize(1, 0));
-	}
-}
-
-
-void SkulptureStyle::Private::textEditSourceChanged(QWidget *widget)
-{
-	if (QTextEdit *edit = qobject_cast<QTextEdit *>(widget)) {
-		updateTextEditMargins(edit);
-	}
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-QRect SkulptureStyle::itemTextRect(const QFontMetrics &metrics, const QRect &rectangle, int alignment, bool enabled, const QString &text) const
-{
-	Q_UNUSED(enabled);
-	return ParentStyle::itemTextRect(metrics, rectangle, alignment, true, text);
-}
-
-
-void SkulptureStyle::drawItemText(QPainter * painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString &text, QPalette::ColorRole textRole) const
-{
-    int textShift = 0;
-
-    if (!(alignment & (Qt::AlignTop | Qt::AlignBottom))) {
-        textShift = d->verticalTextShift(painter->fontMetrics());
-        if (textShift & 1 && !(rectangle.height() & 1)) {
-            textShift += 1;
-        }
-    }
-    ParentStyle::drawItemText(painter, textShift == 0 || textShift == -1 ? rectangle : rectangle.adjusted(0, (-textShift) >> 1, 0, (-textShift) >> 1), alignment, palette, enabled, text, textRole);
-}
-
-
-/*
- * skulpture_toolbar.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtGui/QPainter>
-#include <QtGui/QToolBar>
-#include <QtGui/QToolButton>
-#include <QtGui/QTabBar>
-
-
-/*-----------------------------------------------------------------------*/
-
-#define PAINT_SEPARATOR 0
-
-
-/*-----------------------------------------------------------------------*/
-
-extern void paintCachedGrip(QPainter *painter, const QStyleOption *option, QPalette::ColorRole bgrole);
-
-void paintToolBarSeparator(QPainter *painter, const QStyleOptionToolBar *option)
-{
-#if 0
-	int d = 3;
-	QRect rect(QRect(option->rect).center() - QPoint(d / 2, d / 2), QSize(d, d));
-	QStyleOption iOption;
-	iOption.QStyleOption::operator=(*option);
-	if (option->state & QStyle::State_Horizontal) {
-		iOption.rect = rect.adjusted(1, 0, 1, 0);
-	} else {
-		iOption.rect = rect.adjusted(0, 1, 0, 1);
-	}
-	iOption.palette.setCurrentColorGroup(QPalette::Disabled);
-//	iOption.state &= ~QStyle::State_Enabled;
-	iOption.palette.setColor(QPalette::Button, iOption.palette.color(QPalette::Window));
-	paintCachedGrip(painter, &iOption, QPalette::Window);
-#else
-#if PAINT_SEPARATOR
-	QRect rect = option->rect;
-
-	if (option->state & QStyle::State_Horizontal) {
-	//	rect.adjust(2, 3, -2, -3);
-		rect.adjust(2, -1, -2, 1);
-	} else {
-	//	rect.adjust(3, 2, -3, -2);
-		rect.adjust(-1, 2, 1, -2);
-	}
-	paintThinFrame(painter, rect, option->palette, 60, -20);
-#else
-	Q_UNUSED(painter);
-	Q_UNUSED(option);
-#endif
-#endif
-}
-
-/*-----------------------------------------------------------------------*/
-
-void paintToolBarHandle(QPainter *painter, const QStyleOptionToolBar *option)
-{
-#if 1
-	int d = 5;
-	QRect rect(QRect(option->rect).center() - QPoint(d / 2, d / 2), QSize(d, d));
-	QStyleOption iOption;
-	iOption.QStyleOption::operator=(*option);
-	iOption.rect = rect;
-	iOption.palette.setCurrentColorGroup(QPalette::Disabled);
-//	iOption.state &= ~QStyle::State_Enabled;
-	iOption.palette.setColor(QPalette::Button, iOption.palette.color(QPalette::Window));
-	paintCachedGrip(painter, &iOption, QPalette::Window);
-#else
-	QRect rect = option->rect;
-
-	if (option->state & QStyle::State_Horizontal) {
-		rect.adjust(2, 2, -2, -2);
-#if PAINT_SEPARATOR
-		rect.adjust(0, 1, 0, 1);
-#endif
-	} else {
-		rect.adjust(2, 2, -2, -2);
-#if PAINT_SEPARATOR
-		rect.adjust(1, 0, 1, 0);
-#endif
-	}
-	paintThinFrame(painter, rect.adjusted(-1, -1, 1, 1), option->palette, 60, -20);
-	paintThinFrame(painter, rect, option->palette, -30, 80);
-#endif
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintPanelToolBar(QPainter *painter, const QStyleOptionToolBar *option)
-{
-#if 0
-    QLinearGradient gradient(option->rect.topLeft(), option->rect.bottomLeft());
-    gradient.setColorAt(0.0, option->palette.color(QPalette::Window).lighter(105));
-    gradient.setColorAt(1.0, option->palette.color(QPalette::Window));
-    painter->fillRect(option->rect, gradient);
-    QRect r;
-//    r = option->rect;
-//    r.setTop(r.top() + r.height() - 1);
-//    painter->fillRect(r, option->palette.color(QPalette::Window).darker(105));
-    r = option->rect;
-    r.setHeight(1);
-    painter->fillRect(r, option->palette.color(QPalette::Window).darker(105));
-//	painter->fillRect(option->rect, option->palette.color(QPalette::Window));
-//	paintThinFrame(painter, option->rect, option->palette, -20, 60);
-#endif
-#if PAINT_SEPARATOR
-	QRect r = option->rect;
-	if (option->state & QStyle::State_Horizontal) {
-		r.setHeight(2);
-	} else {
-		r.setWidth(2);
-	}
-	paintThinFrame(painter, r, option->palette, 60, -20);
-#else
-	Q_UNUSED(painter);
-	Q_UNUSED(option);
-#if 0
-        if (option->state & QStyle::State_Horizontal) {
-            paintThinFrame(painter, option->rect.adjusted(-1, 0, 1, 0), option->palette, 80, -30);
-            painter->fillRect(option->rect.adjusted(0, 1, 0, -1), QColor(200, 210, 230));
-            QLinearGradient toolBarGradient(option->rect.topLeft(), option->rect.bottomLeft());
-            toolBarGradient.setColorAt(0.0, QColor(0, 0, 0, 30));
-            toolBarGradient.setColorAt(0.05, QColor(0, 0, 0, 0));
-#if 0
-            toolBarGradient.setColorAt(0.5, QColor(0, 0, 0, 10));
-            toolBarGradient.setColorAt(0.51, QColor(0, 0, 0, 30));
-#endif
-            toolBarGradient.setColorAt(0.8, QColor(0, 0, 0, 20));
-            toolBarGradient.setColorAt(1.0, QColor(0, 0, 0, 0));
-            painter->fillRect(option->rect.adjusted(0, 1, 0, -1), toolBarGradient);
-        } else {
-            paintThinFrame(painter, option->rect.adjusted(0, -1, 0, 1), option->palette, 80, -30);
-        }
-#else
-//        painter->fillRect(option->rect, QColor(0, 0, 0, 10));
-#endif
-#endif
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-static inline bool inVerticalToolBar(const QStyleOption *option, const QWidget *widget)
-{
-	// ### option->state does not reflect orientation
-	Q_UNUSED(option);
-	bool verticalBar = false;
-
-	if (widget && widget->parentWidget()) {
-		const QToolBar *toolBar = qobject_cast<const QToolBar *>(widget->parentWidget());
-		//	printf("toolbar: %p\n", toolBar);
-		if (toolBar && toolBar->orientation() == Qt::Vertical) {
-			verticalBar = true;
-		}
-	}
-	return verticalBar;
-}
-
-
-/*-----------------------------------------------------------------------*/
-// FIXME
-#if (QT_VERSION < QT_VERSION_CHECK(4, 3, 0))
-#define HasMenu Menu
-#endif
-
-extern void paintMenuTitle(QPainter *painter, const QStyleOptionToolButton *option, const QWidget *widget, const QStyle *style);
-
-void paintToolButton(QPainter *painter, const QStyleOptionToolButton *option, const QWidget *widget, const QStyle *style)
-{
-	if (widget) {
-		QTabBar *bar = qobject_cast<QTabBar *>(widget->parentWidget());
-                if (bar) {
-			// tabbar scroll button
-			QStyleOptionToolButton opt = *option;
-			if (int(bar->shape()) & 2) {
-				opt.rect.adjust(4, 0, -4, -1);
-			} else {
-				opt.rect.adjust(0, 4, 0, -3);
-			}
-			painter->save();
-			painter->setClipRect(opt.rect);
-			painter->fillRect(opt.rect, option->palette.color(QPalette::Window));
-			((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_ToolButton, &opt, painter, widget);
-			painter->restore();
-			return;
-		} else if (widget->objectName() == QLatin1String("qt_menubar_ext_button") || widget->objectName() == QLatin1String("qt_toolbar_ext_button")) {
-			QStyleOptionToolButton opt = *option;
-			/* do not render menu arrow, because extension buttons already have an arrow */
-			opt.features &= ~(QStyleOptionToolButton::Menu | QStyleOptionToolButton::HasMenu);
-			((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_ToolButton, &opt, painter, widget);
-			return;
-		} else {
-                    const QToolButton *button = qobject_cast<const QToolButton *>(widget);
-
-                    if (button && button->isDown() && button->toolButtonStyle() == Qt::ToolButtonTextBesideIcon) {
-                        if (widget->parentWidget() && widget->parentWidget()->inherits("KMenu")) {
-                            paintMenuTitle(painter, option, widget, style);
-                            return;
-                        }
-                    }
-                }
-	}
-	if (option->features & QStyleOptionToolButton::HasMenu) {
-		if (option->features & QStyleOptionToolButton::Menu) {
-			if (option->subControls & QStyle::SC_ToolButton) {
-				painter->save();
-				QStyleOptionToolButton opt = *option;
-				opt.rect = style->subControlRect(QStyle::CC_ToolButton, option, QStyle::SC_ToolButton, widget);
-				// opt.features &= ~(QStyleOptionToolButton::Menu | QStyleOptionToolButton::HasMenu | QStyleOptionToolButton::Arrow);
-				opt.arrowType = Qt::NoArrow;
-				opt.features = 0;
-				opt.subControls &= ~(QStyle::SC_ToolButtonMenu);
-				opt.activeSubControls &= ~(QStyle::SC_ToolButtonMenu);
-				if (inVerticalToolBar(option, widget)) {
-					painter->setClipRect(opt.rect.adjusted(0, 0, 0, -1));
-				} else {
-					painter->setClipRect(opt.rect.adjusted(option->direction == Qt::LeftToRight ? 0 : 1, 0, option->direction == Qt::LeftToRight ? -1 : 0, 0));
-				}
-				((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_ToolButton, &opt, painter, widget);
-				painter->restore();
-			}
-			if (option->subControls & QStyle::SC_ToolButtonMenu) {
-				painter->save();
-				QStyleOptionToolButton opt = *option;
-				opt.rect = style->subControlRect(QStyle::CC_ToolButton, option, QStyle::SC_ToolButtonMenu, widget);
-				QStyle::State state = option->state;
-				state &= ~(QStyle::State_Sunken | QStyle::State_Raised);
-				if (!(state & QStyle::State_AutoRaise) || (state & QStyle::State_MouseOver)) {
-					state |= QStyle::State_Raised;
-				}
-				if (option->activeSubControls & QStyle::SC_ToolButtonMenu) {
-					state |= QStyle::State_Sunken;
-				}
-				opt.state = state;
-				if (inVerticalToolBar(option, widget)) {
-					painter->setClipRect(opt.rect.adjusted(0, 1, 0, 0));
-				} else {
-					painter->setClipRect(opt.rect.adjusted(option->direction == Qt::LeftToRight ? 1 : 0, 0, option->direction == Qt::LeftToRight ? 0 : -1, 0));
-				}
-				if (state & (QStyle::State_Sunken | QStyle::State_On | QStyle::State_Raised)) {
-					style->drawPrimitive(QStyle::PE_PanelButtonTool, &opt, painter, widget);
-				}
-				painter->restore();
-				QRect r;
-				if (inVerticalToolBar(option, widget)) {
-					if (option->direction == Qt::LeftToRight) {
-						r = QRect(opt.rect.right() - 9, opt.rect.top(), 7, opt.rect.height());
-					} else {
-						r = QRect(3, opt.rect.top(), 7, opt.rect.height());
-					}
-				} else {
-					r = QRect(opt.rect.left(), opt.rect.bottom() - 9, opt.rect.width(), 7);
-				}
-				if (option->state & QStyle::State_Sunken) {
-					if (option->direction == Qt::LeftToRight) {
-						r.adjust(1, 1, 1, 1);
-					} else {
-						r.adjust(-1, 1, -1, 1);
-					}
-				}
-				QFont font;
-				font.setPixelSize(9);
-				opt.fontMetrics = QFontMetrics(font);
-				opt.rect = r;
-				style->drawPrimitive(inVerticalToolBar(option, widget) ? QStyle::PE_IndicatorArrowRight : QStyle::PE_IndicatorArrowDown, &opt, painter, widget);
-			}
-		//	painter->fillRect(opt.rect.adjusted(3, 3, -3, -3), Qt::red);
-		} else {
-			QStyleOptionToolButton opt = *option;
-			opt.features &= ~QStyleOptionToolButton::HasMenu;
-			((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_ToolButton, &opt, painter, widget);
-			QRect r;
-			if (option->direction == Qt::LeftToRight) {
-				r = QRect(option->rect.right() - 6, option->rect.bottom() - 6, 5, 5);
-				if (option->state & QStyle::State_Sunken) {
-					r.adjust(1, 1, 1, 1);
-				}
-			} else {
-				r = QRect(2, option->rect.bottom() - 6, 5, 5);
-				if (option->state & QStyle::State_Sunken) {
-					r.adjust(-1, 1, -1, 1);
-				}
-			}
-			QFont font;
-			font.setPixelSize(7);
-			opt.fontMetrics = QFontMetrics(font);
-			opt.rect = r;
-			style->drawPrimitive(inVerticalToolBar(option, widget) ? QStyle::PE_IndicatorArrowRight : QStyle::PE_IndicatorArrowDown, &opt, painter, widget);
-		}
-	} else {
-		((QCommonStyle *) style)->QCommonStyle::drawComplexControl(QStyle::CC_ToolButton, option, painter, widget);
-	}
-}
-
-
-void paintToolButtonLabel(QPainter *painter, const QStyleOptionToolButton *option, const QWidget *widget, const QStyle *style)
-{
-    QStyleOptionToolButton opt = *option;
-    if (option->state & QStyle::State_AutoRaise) {
-        if (!(option->state & QStyle::State_Enabled) || !(option->state & QStyle::State_MouseOver)) {
-            opt.palette.setColor(QPalette::ButtonText, opt.palette.color(QPalette::WindowText));
-        }
-    }
-    ((QCommonStyle *) style)->QCommonStyle::drawControl(QStyle::CE_ToolButtonLabel, &opt, painter, widget);
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-QRect subControlRectToolButton(const QStyleOptionToolButton *option, QStyle::SubControl subControl, const QWidget *widget, const QStyle *style)
-{
-	QRect r = option->rect;
-
-	if (option->features & QStyleOptionToolButton::Menu) {
-		int pm = style->pixelMetric(QStyle::PM_MenuButtonIndicator, option, widget) - 2;
-		bool verticalBar = inVerticalToolBar(option, widget);
-		switch (subControl) {
-			case QStyle::SC_ToolButton:
-				if (verticalBar) {
-					r.adjust(0, 0, 0, -pm);
-				} else {
-					r.adjust(0, 0, -pm, 0);
-				}
-				break;
-			case QStyle::SC_ToolButtonMenu:
-				if (verticalBar) {
-					r.adjust(0, r.height() - pm - 2, 0, 0);
-				} else {
-					r.adjust(r.width() - pm - 2, 0, 0, 0);
-				}
-				break;
-			default:
-				break;
-		}
-		return style->visualRect(option->direction, option->rect, r);
-	}
-	return ((QCommonStyle *) style)->QCommonStyle::subControlRect(QStyle::CC_ToolButton, option, subControl, widget);
-}
-
-
-QSize sizeFromContentsToolButton(const QStyleOptionToolButton *option, const QSize &contentsSize, const QWidget *widget, const QStyle *style, int toolButtonSize)
-{
-	QSize size = contentsSize + QSize(4, 4);
-
-        if (toolButtonSize >= 0) {
-            if (option->toolButtonStyle == Qt::ToolButtonTextUnderIcon) {
-                size += QSize(toolButtonSize, qMax(2, toolButtonSize));
-            } else {
-                size += QSize(toolButtonSize, toolButtonSize);
-            }
-        } else {
-            size += QSize(4, 4);
-        }
-	if (widget && !qstrcmp(widget->metaObject()->className(), "KAnimatedButton")) {
-            return contentsSize + QSize(4, 4);
-	}
-        if (widget && !qstrcmp(widget->metaObject()->className(), "QtColorButton")) {
-            return contentsSize + QSize(12, 12);
-        }
-	if (option->features & QStyleOptionToolButton::Menu) {
-		int pm = style->pixelMetric(QStyle::PM_MenuButtonIndicator, option, widget);
-		size -= QSize(pm, 0);
-		pm -= 2;
-		bool verticalBar = inVerticalToolBar(option, widget);
-
-		if (verticalBar) {
-			size += QSize(0, pm);
-		} else {
-			size += QSize(pm, 0);
-		}
-	}
-	return size;
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void SkulptureStyle::Private::updateToolBarOrientation(Qt::Orientation /*orientation */)
-{
-	QToolBar *toolbar = static_cast<QToolBar *>(sender());
-	QList<QToolButton *> toolbuttons = toolbar->findChildren<QToolButton *>();
-	bool changed = false;
-
-    Q_FOREACH (QToolButton *toolbutton, toolbuttons) {
-		if (toolbutton->popupMode() == QToolButton::MenuButtonPopup) {
-			// ### this hack forces Qt to invalidate the size hint
-			Qt::ToolButtonStyle oldstyle = toolbutton->toolButtonStyle();
-			Qt::ToolButtonStyle newstyle;
-			if (oldstyle == Qt::ToolButtonIconOnly) {
-				newstyle = Qt::ToolButtonTextOnly;
-			} else {
-				newstyle = Qt::ToolButtonIconOnly;
-			}
-			toolbutton->setToolButtonStyle(newstyle);
-			toolbutton->setToolButtonStyle(oldstyle);
-			changed = true;
-		}
-	}
-	if (changed) {
-		// ### Qt does not update dragged toolbars...
-		toolbar->updateGeometry();
-	}
-}
-
-
-/*
- * skulpture_p.cpp
- *
- */
-
-#include "skulpture_p.h"
-#include <QtCore/QSettings>
-#include <QtCore/QLocale>
-#include <QtGui/QSlider>
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-#include <QtGui/QDialogButtonBox>
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-#include <QtGui/QWizard>
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-#include <QtGui/QFormLayout>
-#endif
-
-
-/*-----------------------------------------------------------------------*/
-
-struct StyleSetting
-{
-    enum Type {
-        Bool,
-        Char,
-        Frame,
-        Alignment,
-        Orientation,
-        Pixels,
-        Points,
-        Milliseconds,
-        Color,
-        Size,
-        Parent,
-        VarParent,
-        Value
-    };
-
-    const char * const label;
-    int id;
-    int type;
-    int value;
-};
-
-
-static const struct StyleSetting styleHintSettings[] =
-{
-    /* entries are stricly sorted in Qt order for future lookup table */
-    { "General/EtchDisabledText", QStyle::SH_EtchDisabledText, StyleSetting::Bool, 1 },
-///    { "General/DitherDisabledText", QStyle::SH_DitherDisabledText, StyleSetting::Bool, 0 },
-    { "ScrollBar/MiddleClickAbsolutePosition", QStyle::SH_ScrollBar_MiddleClickAbsolutePosition, StyleSetting::Bool, 1 },
-//    { "ScrollBar/ScrollWhenPointerLeavesControl", QStyle::SH_ScrollBar_ScrollWhenPointerLeavesControl, StyleSetting::Parent, 0 },
-//    { "TabWidget/SelectMouseType", QStyle::SH_TabBar_SelectMouseType, StyleSetting::Parent, 0 },
-///    { "TabWidget/TabBarAlignment", QStyle::SH_TabBar_Alignment, StyleSetting::Alignment, Qt::AlignCenter },
-//    { "ItemView/HeaderArrowAlignment", QStyle::SH_Header_ArrowAlignment, StyleSetting::Parent, 0 },
-    { "Slider/SnapToValue", QStyle::SH_Slider_SnapToValue, StyleSetting::Bool, 1 },
-//    { "Slider/SloppyKeyEvents", QStyle::SH_Slider_SloppyKeyEvents, StyleSetting::Parent, 0 },
-//    { "ProgressDialog/CenterCancelButton", QStyle::SH_ProgressDialog_CenterCancelButton, StyleSetting::Parent, 0 },
-//    { "ProgressDialog/TextLabelAlignment", QStyle::SH_ProgressDialog_TextLabelAlignment, StyleSetting::Parent, 0 },
-    { "PrintDialog/RightAlignButtons", QStyle::SH_PrintDialog_RightAlignButtons, StyleSetting::Bool, 1 },
-//    { "Window/SpaceBelowMenuBar", QStyle::SH_MainWindow_SpaceBelowMenuBar, StyleSetting::Parent, 0 },
-    { "FontDialog/SelectAssociatedText", QStyle::SH_FontDialog_SelectAssociatedText, StyleSetting::Bool, 1 },
-    { "Menu/AllowActiveAndDisabled", QStyle::SH_Menu_AllowActiveAndDisabled, StyleSetting::Bool, 1 },
-//    { "Menu/SpaceActivatesItem", QStyle::SH_Menu_SpaceActivatesItem, StyleSetting::Parent, 0 },
-// ### dynamic { "Menu/SubMenuPopupDelay", QStyle::SH_Menu_SubMenuPopupDelay, StyleSetting::Milliseconds, 100 },
-///    { "ItemView/FrameOnlyAroundContents", QStyle::SH_ScrollView_FrameOnlyAroundContents, StyleSetting::Bool, 0 },
-    { "Menu/AltKeyNavigation", QStyle::SH_MenuBar_AltKeyNavigation, StyleSetting::Bool, 1 },
-    { "ComboBox/ListMouseTracking", QStyle::SH_ComboBox_ListMouseTracking, StyleSetting::Bool, 1 },
-    { "Menu/MouseTracking", QStyle::SH_Menu_MouseTracking, StyleSetting::Bool, 1 },
-    { "Menu/BarMouseTracking", QStyle::SH_MenuBar_MouseTracking, StyleSetting::Bool, 1 },
-//    { "ItemView/ChangeHighlightOnFocus", QStyle::SH_ItemView_ChangeHighlightOnFocus, StyleSetting::Parent, 0 },
-//    { "Window/ShareActivation", QStyle::SH_Widget_ShareActivation, StyleSetting::Parent, 0 },
-//    { "MDI/Workspace/FillSpaceOnMaximize", QStyle::SH_Workspace_FillSpaceOnMaximize, StyleSetting::Parent, 0 },
-//    { "ComboBox/Popup", QStyle::SH_ComboBox_Popup, StyleSetting::Parent, 0 },
-///    { "MDI/TitleBar/NoBorder", QStyle::SH_TitleBar_NoBorder, StyleSetting::Bool, 0 },
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-///    { "Slider/StopMouseOverSlider", QStyle::SH_Slider_StopMouseOverSlider, StyleSetting::Bool, 1 },
-#else
-///    { "Slider/StopMouseOverSlider", QStyle::SH_ScrollBar_StopMouseOverSlider, StyleSetting::Bool, 1 },
-#endif
-//    { "General/BlinkCursorWhenTextSelected", QStyle::SH_BlinkCursorWhenTextSelected, StyleSetting::Parent, 0 },
-//    { "General/FullWidthSelection", QStyle::SH_RichText_FullWidthSelection, StyleSetting::Bool, 1 },
-//    { "Menu/Scrollable", QStyle::SH_Menu_Scrollable, StyleSetting::Parent, 0 },
-//    { "GroupBox/TextLabelVerticalAlignment", QStyle::SH_GroupBox_TextLabelVerticalAlignment, StyleSetting::Parent, 0 },
-// ### dynamic { "GroupBox/TextLabelColor", QStyle::SH_GroupBox_TextLabelColor, StyleSetting::Color, 0xFF000000 },
-//    { "Menu/SloppySubMenus", QStyle::SH_Menu_SloppySubMenus, StyleSetting::Parent, 0 },
-// ### dynamic { "ItemView/GridLineColor", QStyle::SH_Table_GridLineColor, StyleSetting::Color, 0xFFD0D0D0 },
-// ### dynamic { "LineEdit/PasswordCharacter", QStyle::SH_LineEdit_PasswordCharacter, StyleSetting::Char, 10039 },
-//    { "Dialog/DefaultButton", QStyle::SH_DialogButtons_DefaultButton, StyleSetting::Parent, 0 },
-//    { "ToolBox/SelectedPageTitleBold", QStyle::SH_ToolBox_SelectedPageTitleBold, StyleSetting::Bool, 1 },
-//    { "TabWidget/TabBarPreferNoArrows", QStyle::SH_TabBar_PreferNoArrows, StyleSetting::Parent, 0 },
-//    { "ScrollBar/LeftClickAbsolutePosition", QStyle::SH_ScrollBar_LeftClickAbsolutePosition, StyleSetting::Parent, 0 },
-//    { "ItemView/Compat/ExpansionSelectMouseType", QStyle::SH_Q3ListViewExpand_SelectMouseType, StyleSetting::Parent, 0 },
-// ### dynamic { "General/UnderlineShortcut", QStyle::SH_UnderlineShortcut, StyleSetting::Bool, 0 },
-//    { "SpinBox/AnimateButton", QStyle::SH_SpinBox_AnimateButton, StyleSetting::Parent, 0 },
-//    { "SpinBox/KeyPressAutoRepeatRate", QStyle::SH_SpinBox_KeyPressAutoRepeatRate, StyleSetting::Parent, 0 },
-//    { "SpinBox/ClickAutoRepeatRate", QStyle::SH_SpinBox_ClickAutoRepeatRate, StyleSetting::Parent, 0 },
-//    { "Menu/FillScreenWithScroll", QStyle::SH_Menu_FillScreenWithScroll, StyleSetting::Parent, 0 },
-//    { "ToolTip/Opacity", QStyle::SH_ToolTipLabel_Opacity, StyleSetting::Parent, 0 },
-//    { "Menu/DrawMenuBarSeparator", QStyle::SH_DrawMenuBarSeparator, StyleSetting::Parent, 0 },
-//    { "MDI/TitleBar/ModifyNotification", QStyle::SH_TitleBar_ModifyNotification, StyleSetting::Parent, 0 },
-//    { "Button/FocusPolicy", QStyle::SH_Button_FocusPolicy, StyleSetting::Parent, 0 },
-//    { "Menu/DismissOnSecondClick", QStyle::SH_MenuBar_DismissOnSecondClick, StyleSetting::Parent, 0 },
-//    { "MessageBox/UseBorderForButtonSpacing", QStyle::SH_MessageBox_UseBorderForButtonSpacing, StyleSetting::Parent, 0 },
-    { "MDI/TitleBar/AutoRaise", QStyle::SH_TitleBar_AutoRaise, StyleSetting::Bool, 1 },
-    { "ToolBar/PopupDelay", QStyle::SH_ToolButton_PopupDelay, StyleSetting::Milliseconds, 250 },
-// ### dynamic { "General/FocusFrameMask", QStyle::SH_FocusFrame_Mask, StyleSetting::Parent, 0 },
-// ### dynamic { "General/RubberBandMask", QStyle::SH_RubberBand_Mask, StyleSetting::Parent, 0 },
-// ### dynamic { "General/WindowFrameMask", QStyle::SH_WindowFrame_Mask, StyleSetting::Parent, 0 },
-//    { "SpinBox/DisableControlsOnBounds", QStyle::SH_SpinControls_DisableOnBounds, StyleSetting::Parent, 0 },
-//    { "Dial/BackgroundRole", QStyle::SH_Dial_BackgroundRole, StyleSetting::Parent, 0 },
-//    { "ComboBox/LayoutDirection", QStyle::SH_ComboBox_LayoutDirection, StyleSetting::Parent, 0 },
-//    { "ItemView/EllipsisLocation", QStyle::SH_ItemView_EllipsisLocation, StyleSetting::Parent, 0 },
-//    { "ItemView/ShowDecorationSelected", QStyle::SH_ItemView_ShowDecorationSelected, StyleSetting::Parent, 0 },
-// ### from KDE { "ItemView/ActivateItemOnSingleClick", QStyle::SH_ItemView_ActivateItemOnSingleClick, StyleSetting::Bool, 1 },
-//    { "ScrollBar/ContextMenu", QStyle::SH_ScrollBar_ContextMenu, StyleSetting::Parent, 0 },
-//    { "ScrollBar/RollBetweenButtons", QStyle::SH_ScrollBar_RollBetweenButtons, StyleSetting::Parent, 0 },
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-//    { "Slider/AbsoluteSetButtons", QStyle::SH_Slider_AbsoluteSetButtons, StyleSetting::Parent, 0 },
-//    { "Slider/PageSetButtons", QStyle::SH_Slider_PageSetButtons, StyleSetting::Parent, 0 },
-//    { "Menu/KeyboardSearch", QStyle::SH_Menu_KeyboardSearch, StyleSetting::Parent, 0 },
-//    { "TabWidget/ElideMode", QStyle::SH_TabBar_ElideMode, StyleSetting::Parent, 0 },
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-//    { "Dialog/ButtonLayout", QStyle::SH_DialogButtonLayout, StyleSetting::Value, QDialogButtonBox::KdeLayout },
-#else
-    { "Dialog/ButtonLayout", QStyle::SH_DialogButtonLayout, StyleSetting::Value, QDialogButtonBox::KdeLayout },
-#endif
-//    { "ComboBox/PopupFrameStyle", QStyle::SH_ComboBox_PopupFrameStyle, StyleSetting::Parent, 0 },
-    { "MessageBox/AllowTextInteraction", QStyle::SH_MessageBox_TextInteractionFlags, StyleSetting::Bool, 1 },
-// ### from KDE { "Dialog/ButtonsHaveIcons", QStyle::SH_DialogButtonBox_ButtonsHaveIcons, StyleSetting::Bool, 0 },
-//    { "General/SpellCheckUnderlineStyle", QStyle::SH_SpellCheckUnderlineStyle, StyleSetting::Parent, 0 },
-    { "MessageBox/CenterButtons", QStyle::SH_MessageBox_CenterButtons, StyleSetting::Bool, 0 },
-//    { "Menu/SelectionWrap", QStyle::SH_Menu_SelectionWrap, StyleSetting::Parent, 0 },
-//    { "ItemView/MovementWithoutUpdatingSelection", QStyle::SH_ItemView_MovementWithoutUpdatingSelection, StyleSetting::Parent, 0 },
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-// ### dynamic { "General/ToolTipMask", QStyle::SH_ToolTip_Mask, StyleSetting::Parent, 0 },
-//    { "General/FocusFrameAboveWidget", QStyle::SH_FocusFrame_AboveWidget, StyleSetting::Parent, 0 },
-//    { "General/FocusIndicatorTextCharFormat", QStyle::SH_TextControl_FocusIndicatorTextCharFormat, StyleSetting::Parent, 0 },
-//    { "Dialog/WizardStyle", QStyle::SH_WizardStyle, StyleSetting::Value, QWizard::ModernStyle },
-    { "ItemView/ArrowKeysNavigateIntoChildren", QStyle::SH_ItemView_ArrowKeysNavigateIntoChildren, StyleSetting::Bool, 1 },
-// ### dynamic { "General/MenuMask", QStyle::SH_Menu_Mask, StyleSetting::Parent, 0 },
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-//    { "Menu/FlashTriggeredItem", QStyle::SH_Menu_FlashTriggeredItem, StyleSetting::Parent, 0 },
-//    { "Menu/FadeOutOnHide", QStyle::SH_Menu_FadeOutOnHide, StyleSetting::Parent, 0 },
-//    { "SpinBox/ClickAutoRepeatThreshold", QStyle::SH_SpinBox_ClickAutoRepeatThreshold, StyleSetting::Parent, 0 },
-//    { "ItemView/PaintAlternatingRowColorsForEmptyArea", QStyle::SH_ItemView_PaintAlternatingRowColorsForEmptyArea, StyleSetting::Parent, 0 },
-//    { "FormLayout/WrapPolicy", QStyle::SH_FormLayoutWrapPolicy, StyleSetting::Value, QFormLayout::DontWrapRows },
-//    { "TabWidget/DefaultTabPosition", QStyle::SH_TabWidget_DefaultTabPosition, StyleSetting::Parent, 0 },
-//    { "ToolBar/Movable", QStyle::SH_ToolBar_Movable, StyleSetting::Parent, 0 },
-    { "FormLayout/FieldGrowthPolicy", QStyle::SH_FormLayoutFieldGrowthPolicy, StyleSetting::Value, QFormLayout::ExpandingFieldsGrow },
-//    { "FormLayout/FormAlignment", QStyle::SH_FormLayoutFormAlignment, StyleSetting::Alignment, Qt::AlignLeft | Qt::AlignTop },
-    { "FormLayout/LabelAlignment", QStyle::SH_FormLayoutLabelAlignment, StyleSetting::Alignment, Qt::AlignRight | Qt::AlignTop },
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-//    { "ItemView/DrawDelegateFrame", QStyle::SH_, StyleSetting::Parent, 0 },
-//    { "TabWidget/CloseButtonPosition", QStyle::SH_TabBar_CloseButtonPosition, StyleSetting::Parent, 0 },
-//    { "DockWidget/ButtonsHaveFrame", QStyle::SH_DockWidget_ButtonsHaveFrame, StyleSetting::Parent, 0 },
-#endif
-    { 0, -1, 0, 0 }
-};
-
-
-extern int getRubberBandMask(QStyleHintReturnMask *mask, const QStyleOption *option, const QWidget *widget);
-extern int getWindowFrameMask(QStyleHintReturnMask *mask, const QStyleOptionTitleBar *option, const QWidget *widget);
-
-int SkulptureStyle::styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const
-{
-//	return ParentStyle::styleHint(hint, option, widget, returnData);
-	// TODO implement caching
-	const StyleSetting *setting = &styleHintSettings[0];
-	QVariant value;
-
-	switch (hint) {
-            case QStyle::SH_Menu_SubMenuPopupDelay: {
-                return d->subMenuDelay;
-            }
-            case QStyle::SH_TabBar_Alignment: {
-                return d->centerTabs ? Qt::AlignHCenter : Qt::AlignLeft;
-            }
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-            case QStyle::SH_Slider_StopMouseOverSlider: {
-#else
-            case QStyle::SH_ScrollBar_StopMouseOverSlider: {
-#endif
-                // this works around a bug with Qt 4.4.2
-                return qobject_cast<const QSlider *>(widget) != 0;
-            }
-            case QStyle::SH_ItemView_ActivateItemOnSingleClick: {
-                // ### use KDE setting
-                return d->useSingleClickToActivateItems;
-            }
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-            case QStyle::SH_DialogButtonBox_ButtonsHaveIcons: {
-                // ### use KDE setting
-                return 0;
-            }
-#endif
-#if 1
-            case QStyle::SH_GroupBox_TextLabelColor: {
-                QPalette palette;
-                if (option) {
-                    palette = option->palette;
-                } else if (widget) {
-                    palette = widget->palette();
-                }
-                return palette.color(QPalette::WindowText).rgba();
-            }
-#endif
-            case QStyle::SH_Table_GridLineColor: {
-                QPalette palette;
-                if (option) {
-                    palette = option->palette;
-                } else if (widget) {
-                    palette = widget->palette();
-                }
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-                return palette.color(QPalette::Base).darker(120).rgba();
-#else
-                return palette.color(QPalette::Base).dark(120).rgba();
-#endif
-            }
-            case QStyle::SH_LineEdit_PasswordCharacter: {
-                QFontMetrics fm = option ? option->fontMetrics : (widget ? widget->fontMetrics() : QFontMetrics(QFont()));
-                for (int i = 0; i < d->passwordCharacters.length(); ++i) {
-                    if (fm.inFont(d->passwordCharacters.at(i))) {
-                        return d->passwordCharacters.at(i).unicode();
-                    }
-                }
-                return int('*');
-            }
-            case QStyle::SH_UnderlineShortcut: {
-                if (d->hideShortcutUnderlines) {
-                    return (d->shortcut_handler->underlineShortcut(widget));
-                }
-                return true;
-            }
-            case QStyle::SH_RubberBand_Mask: {
-                QStyleHintReturnMask *mask = qstyleoption_cast<QStyleHintReturnMask *>(returnData);
-                if (mask) {
-                    return getRubberBandMask(mask, option, widget);
-                }
-                return 0;
-            }
-            case QStyle::SH_WindowFrame_Mask: {
-                QStyleHintReturnMask *mask = qstyleoption_cast<QStyleHintReturnMask *>(returnData);
-                const QStyleOptionTitleBar *titleBarOption = qstyleoption_cast<const QStyleOptionTitleBar *>(option);
-                if (mask && titleBarOption) {
-                    return getWindowFrameMask(mask, titleBarOption, widget);
-                }
-                return 0;
-            }
-            default:
-                break;
-        }
-
-	while (setting->label) {
-		if (setting->id == int(hint)) {
-			break;
-		}
-		++setting;
-	}
-	if (setting->label) {
-		value = setting->value;
-		switch (setting->type) {
-			case StyleSetting::Parent:
-				value = ParentStyle::styleHint(hint, option, widget, returnData);
-				break;
-			case StyleSetting::Bool:
-				value = setting->value != 0;
-				break;
-			case StyleSetting::Char:
-				value = QString(QChar(setting->value));
-				break;
-			case StyleSetting::Color:
-				value = QChar('#', 0) + QString::number(value.toInt() - qRgba(0, 0, 0, 255), 16);
-				break;
-		}
-	} else {
-		value = ParentStyle::styleHint(hint, option, widget, returnData);
-		setting = 0;
-	}
-#if 1
-	if (setting && d->settings && setting->type != StyleSetting::Parent && !d->settings->contains(QLatin1String(setting->label))) {
-		d->settings->setValue(QLatin1String(setting->label), value);
-	}
-#endif
-	if (setting) {
-		if (d->settings) {
-			value = d->settings->value(QLatin1String(setting->label), value);
-		}
-		switch (setting->type) {
-			case StyleSetting::Color:
-				value = qRgba(0, 0, 0, 255) + QLocale::c().toInt(value.toString().mid(1), 0, 16);
-				break;
-			case StyleSetting::Bool:
-				value = value.toBool();
-				break;
-			case StyleSetting::Char:
-				QString s = value.toString();
-				if (s.size() == 1) {
-					return s.at(0).unicode();
-				}
-				return setting->value;
-		}
-	}
-	return value.toInt();
-}
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * Read color out of current settings group
- *
- * color - where to store the resulting color
- * s - Settings
- * colorName - name of color, such as "checkMark", first letter should be not be capitalized
- * n - for multiple color entries, returns the "n"th color (n = 1, 2, ...) otherwise use n = 0.
- *
- * This will do the following:
- *
- * 1. check if "custom<ColorName>Color<n>" is set to "false" -> return false with "color" unmodified
- * 2. read color entry from "<colorName>Color<n>"
- * 3. read color opacity from "<colorName>Color<n>Opacity"
- * 4. return true with "color" modified accordingly
- *
- */
-
-static bool readSettingsColor(QColor &color, const QSettings &s, const QString &colorName, int n = 0)
-{
-    QString cName = colorName + QLatin1String("Color");
-    if (n > 0) {
-        cName += QString::number(n);
-    }
-    if (s.value(QLatin1String("custom") + cName.at(0).toUpper() + cName.mid(1), true).toBool() == false) {
-        return false;
-    }
-    QString val = s.value(cName).toString();
-    if (!val.isEmpty()) {
-        QColor c = QColor(val);
-        if (c.isValid()) {
-            color = c;
-            int opacity = s.value(cName + QLatin1String("Opacity"), -1).toInt();
-            if (opacity >= 0 && opacity <= 255) {
-                color.setAlpha(opacity);
-            }
-            return true;
-        }
-    }
-    return false;
-}
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * Read gradient out of current settings group
- *
- * gradient - where to store the resulting gradient (only the color stops are modified)
- * s - Settings
- * gradientName - name of gradient, such as "activeTabTop", first letter should be not be capitalized
- *
- * This returns true with "gradient" colors modified accordingly, or false, if no color was found.
- *
- * Limitations:
- *
- * Maximum number of gradients per background: 9
- * Maximum number of colors per gradient: 2
- *
- */
-
-#define MIN_STOP 0      // must be 0
-#define MAX_STOP 100
-
-static inline qreal topToStop(int v)
-{
-    if (v <= MIN_STOP) {
-        return qreal(0.00000);
-    } else if (v >= MAX_STOP) {
-        return qreal(0.99999);
-    }
-    return v / qreal(MAX_STOP) - qreal(0.00001);
-}
-
-
-static inline qreal bottomToStop(int v)
-{
-    if (v <= 0) {
-        return qreal(0.00001);
-    } else if (v >= MAX_STOP) {
-        return qreal(1.00000);
-    }
-    return v / qreal(MAX_STOP) + qreal(0.00001);
-}
-
-
-static bool readSettingsGradient(QGradient &gradient, const QSettings &s, const QString &gradientName)
-{
-    QColor background(s.value(gradientName + QLatin1String("background")).toString());
-    if (!background.isValid()) {
-        return false;
-    }
-
-    bool hasTop = false;
-    bool hasBottom = false;
-    int numGradients = s.value(gradientName + QLatin1String("numGradients"), 0).toInt();
-    numGradients = qMin(numGradients, 9); // single digit limit
-    for (int i = 1; i <= numGradients; ++i) {
-        QString gradientPrefix = gradientName + QChar('g', 0) + QChar('0' + i, 0);
-
-        int top = s.value(gradientPrefix + QLatin1String("Top"), -1).toInt();
-        int bottom = s.value(gradientPrefix + QLatin1String("Bottom"), -1).toInt();
-        if (top == MIN_STOP) {
-            hasTop = true;
-        }
-        if (bottom == MAX_STOP) {
-            hasBottom = true;
-        }
-        if (top >= 0 && bottom >= 0) {
-            QColor c[9 + 1];
-            int k = 0;
-            for (int n = 1; n <= 9; ++n) { // single digit limit
-                if (readSettingsColor(c[n], s, gradientPrefix, n)) {
-                    ++k;
-                } else {
-                    // force continous color numbering
-                    break;
-                }
-            }
-            // k colors are found, spread lineary between top ... bottom
-            if (k > 1) {
-                // FIXME blindly assumes k == 2 for now
-                gradient.setColorAt(topToStop(top), c[1]);
-                gradient.setColorAt(bottomToStop(bottom), c[2]);
-            } else if (k == 1) {
-                gradient.setColorAt(topToStop(top), c[1]);
-                gradient.setColorAt(bottomToStop(bottom), c[1]);
-            }
-        }
-    }
-    // FIXME does not detect "holes" between gradients
-    // that are to be "filled" with background
-    if (!hasTop) {
-        gradient.setColorAt(0, background);
-    }
-    if (!hasBottom) {
-        gradient.setColorAt(1, background);
-    }
-    return true;
-}
-
-
-/*-----------------------------------------------------------------------*/
-/*
- * Read domino settings out of current settings group
- *
- */
-
-void SkulptureStyle::Private::readDominoSettings(const QSettings &s)
-{
-    static const char * const gradientName[] = {
-        "tabTop", "tabBottom", "activeTabTop", "activeTabBottom",
-        "btn", "checkItem", "header", "scrollBar", "scrollBarGroove"
-    };
-    static const char * const colorName[] = {
-        "checkMark", "groupBoxBackground", "popupMenu",
-        "selMenuItem", "toolTip"
-    };
-
-    for (uint i = 0; i < array_elements(gradientName); ++i) {
-        QGradient gradient;
-        if (readSettingsGradient(gradient, s, QLatin1String(gradientName[i]) + QLatin1String("Surface_"))) {
-#if 0
-            printf("domino: gradient[%s]=", gradientName[i]);
-            QGradientStops stops = gradient.stops();
-            for (int i = 0; i < stops.size(); ++i) {
-                QGradientStop stop = stops.at(i);
-                QColor color = stop.second;
-                printf("(%.6g=#%2x%2x%2x/a=#%2x)", stop.first, color.red(), color.green(), color.blue(), color.alpha());
-            }
-            printf("\n");
-#endif
-            // only save stops from the gradient
-//            dominoGradientStops[i] = gradient.stops();
-        }
-    }
-    for (uint i = 0; i < array_elements(colorName); ++i) {
-        QColor color;
-        if (readSettingsColor(color, s, QLatin1String(colorName[i]))) {
-#if 0
-            printf("domino: color[%s]=#%2x%2x%2x/a=#%2x\n", colorName[i], color.red(), color.green(), color.blue(), color.alpha());
-#endif
-//            dominoCustomColors[i] = color;
-        }
-    }
-    animateProgressBars = s.value(QLatin1String("animateProgressBar"), animateProgressBars).toBool();
-    centerTabs = s.value(QLatin1String("centerTabs"), centerTabs).toBool();
-#if 0
-    readSettingsColor(buttonContourColor, s, QLatin1String("buttonContour"));
-    readSettingsColor(buttonDefaultContourColor, s, QLatin1String("buttonDefaultContour"));
-    readSettingsColor(buttonMouseOverContourColor, s, QLatin1String("buttonMouseOverContour"));
-    readSettingsColor(buttonPressedContourColor, s, QLatin1String("buttonPressedContour"));
-    readSettingsColor(indicatorButtonColor, s, QLatin1String("indicatorButton"));
-    readSettingsColor(indicatorColor, s, QLatin1String("indicator"));
-    readSettingsColor(rubberBandColor, s, QLatin1String("rubberBand"));
-    readSettingsColor(textEffectButtonColor, s, QLatin1String("textEffectButton"));
-    readSettingsColor(textEffectColor, s, QLatin1String("textEffect"));
-
-    highlightToolBtnIcon = s.value(QLatin1String("highlightToolBtnIcon"), highlightToolBtnIcon).toBool();
-    indentPopupMenuItems = s.value(QLatin1String("indentPopupMenuItems"), indentPopupMenuItems).toBool();
-    smoothScrolling = s.value(QLatin1String("smoothScrolling"), smoothScrolling).toBool();
-    tintGroupBoxBackground = s.value(QLatin1String("tintGroupBoxBackground"), tintGroupBoxBackground).toBool();
-    indicateFocus = s.value(QLatin1String("indicateFocus"), indicateFocus).toBool();
-
-    drawButtonSunkenShadow = s.value(QLatin1String("drawButtonSunkenShadow"), drawButtonSunkenShadow).toBool();
-    drawFocusUnderline = s.value(QLatin1String("drawFocusUnderline"), drawFocusUnderline).toBool();
-    drawPopupMenuGradient = s.value(QLatin1String("drawPopupMenuGradient"), drawPopupMenuGradient).toBool();
-    drawTextEffect = s.value(QLatin1String("drawTextEffect"), drawTextEffect).toBool();
-    drawToolButtonAsButton = s.value(QLatin1String("drawToolButtonAsButton"), drawToolButtonAsButton).toBool();
-    drawTriangularExpander = s.value(QLatin1String("drawTriangularExpander"), drawTriangularExpander).toBool();
-#endif
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void SkulptureStyle::Private::readSettings(const QSettings &s)
-{
-    // defaults
-    animateProgressBars = true;
-    verticalArrowMode = SkulptureMode;
-    horizontalArrowMode = SkulptureMode;
-    hideShortcutUnderlines = true;
-    centerTabs = false;
-    makeDisabledWidgetsTransparent = true;
-    transparentPlacesPanel = false;
-    forceSpacingAndMargins = false;
-    useIconColumnForCheckIndicators = false;
-    useSelectionColorForCheckedIndicators = false;
-    useSelectionColorForSelectedMenuItems = false;
-    useSingleClickToActivateItems = true;
-
-    dialogMargins = -1;
-    horizontalSpacing = -1;
-    labelSpacing = -1;
-    menuBarSize = -1;
-    menuItemSize = -1;
-    pushButtonSize = -1;
-    scrollBarSize = -1;
-    scrollBarLength = -1;
-    sliderSize = -1;
-    sliderLength = -1;
-    tabBarSize = -1;
-    toolButtonSize = -1;
-    verticalSpacing = -1;
-    widgetMargins = -1;
-    widgetSize = -1;
-    textShift = 0;
-
-    buttonGradient = 0;
-    buttonRoundness = 0;
-
-    passwordCharacters = QString(QChar(ushort(10039)));
-    textCursorWidth = 0;
-
-    subMenuDelay = 100;
-
-    // legacy settings import: domino 0.4
-    QString dominoConfigFile = s.value(QLatin1String("LegacyImport/DominoConfiguration")).toString();
-    if (!dominoConfigFile.isEmpty()) {
-        QSettings s(dominoConfigFile, QSettings::IniFormat);
-        s.beginGroup(QLatin1String("Settings"));
-        readDominoSettings(s);
-        s.endGroup();
-    }
-
-    // native settings
-    animateProgressBars = s.value(QLatin1String("ProgressBar/AnimateProgressBars"), animateProgressBars).toBool();
-    if (s.contains(QLatin1String("ScrollBar/AllowScrollBarSliderToCoverArrows"))
-        && !s.contains(QLatin1String("ScrollBar/VerticalArrowMode"))) {
-        verticalArrowMode = s.value(QLatin1String("ScrollBar/AllowScrollBarSliderToCoverArrows"), true).toBool() ? SkulptureMode : WindowsMode;
-    } else {
-        QString mode = s.value(QLatin1String("ScrollBar/VerticalArrowMode"), QLatin1String("Covered")).toString();
-        if (mode == QLatin1String("Top")) {
-            verticalArrowMode = NextMode;
-        } else if (mode == QLatin1String("Bottom")) {
-            verticalArrowMode = PlatinumMode;
-        } else if (mode == QLatin1String("BottomTop") || mode == QLatin1String("Bottom/Top")) {
-            verticalArrowMode = WindowsMode;
-        } else if (mode == QLatin1String("KDEMode")) {
-            verticalArrowMode = KDEMode;
-        } else if (mode == QLatin1String("Covered")) {
-            verticalArrowMode = SkulptureMode;
-        } else if (mode == QLatin1String("None")) {
-            verticalArrowMode = NoArrowsMode;
-        } else {
-            verticalArrowMode = SkulptureMode;
-        }
-    }
-    if (s.contains(QLatin1String("ScrollBar/AllowScrollBarSliderToCoverArrows"))
-        && !s.contains(QLatin1String("ScrollBar/HorizontalArrowMode"))) {
-        horizontalArrowMode = s.value(QLatin1String("ScrollBar/AllowScrollBarSliderToCoverArrows"), true).toBool() ? SkulptureMode : WindowsMode;
-    } else {
-        QString mode = s.value(QLatin1String("ScrollBar/HorizontalArrowMode"), QLatin1String("Covered")).toString();
-        if (mode == QLatin1String("Left")) {
-            horizontalArrowMode = NextMode;
-        } else if (mode == QLatin1String("Right")) {
-            horizontalArrowMode = PlatinumMode;
-        } else if (mode == QLatin1String("RightLeft") || mode == QLatin1String("Right/Left")) {
-            horizontalArrowMode = WindowsMode;
-        } else if (mode == QLatin1String("KDEMode")) {
-            horizontalArrowMode = KDEMode;
-        } else if (mode == QLatin1String("Covered")) {
-            horizontalArrowMode = SkulptureMode;
-        } else if (mode == QLatin1String("None")) {
-            horizontalArrowMode = NoArrowsMode;
-        } else {
-            horizontalArrowMode = SkulptureMode;
-        }
-    }
-    hideShortcutUnderlines = s.value(QLatin1String("General/HideShortcutUnderlines"), hideShortcutUnderlines).toBool();
-    makeDisabledWidgetsTransparent = s.value(QLatin1String("General/MakeDisabledWidgetsTransparent"), makeDisabledWidgetsTransparent).toBool();
-    transparentPlacesPanel = s.value(QLatin1String("Views/TransparentPlacesPanel"), transparentPlacesPanel).toBool();
-    forceSpacingAndMargins = s.value(QLatin1String("Layout/ForceSpacingAndMargins"), forceSpacingAndMargins).toBool();
-    useIconColumnForCheckIndicators = s.value(QLatin1String("Menus/UseIconColumnForCheckIndicators"), useIconColumnForCheckIndicators).toBool();
-    useSelectionColorForCheckedIndicators = s.value(QLatin1String("General/UseSelectionColorForCheckedIndicators"), useSelectionColorForCheckedIndicators).toBool();
-    useSelectionColorForSelectedMenuItems = s.value(QLatin1String("Menus/UseSelectionColorForSelectedMenuItems"), useSelectionColorForSelectedMenuItems).toBool();
-    useSingleClickToActivateItems = s.value(QLatin1String("General/UseSingleClickToActivateItems"), useSingleClickToActivateItems).toBool();
-
-    dialogMargins = s.value(QLatin1String("Layout/DialogMargins"), dialogMargins).toInt();
-    horizontalSpacing = s.value(QLatin1String("Layout/HorizontalSpacing"), horizontalSpacing).toInt();
-    labelSpacing = s.value(QLatin1String("Layout/LabelSpacing"), labelSpacing).toInt();
-    menuBarSize = s.value(QLatin1String("Layout/MenuBarSize"), menuBarSize).toInt();
-    menuItemSize = s.value(QLatin1String("Layout/MenuItemSize"), menuItemSize).toInt();
-    pushButtonSize = s.value(QLatin1String("Layout/PushButtonSize"), pushButtonSize).toInt();
-    scrollBarSize = s.value(QLatin1String("Layout/ScrollBarSize"), scrollBarSize).toInt();
-    scrollBarLength = s.value(QLatin1String("Layout/ScrollBarLength"), scrollBarLength).toInt();
-    sliderSize = s.value(QLatin1String("Layout/SliderSize"), sliderSize).toInt();
-    sliderLength = s.value(QLatin1String("Layout/SliderLength"), sliderLength).toInt();
-    tabBarSize = s.value(QLatin1String("Layout/TabBarSize"), tabBarSize).toInt();
-    toolButtonSize = s.value(QLatin1String("Layout/ToolButtonSize"), toolButtonSize).toInt();
-    verticalSpacing = s.value(QLatin1String("Layout/VerticalSpacing"), verticalSpacing).toInt();
-    widgetMargins = s.value(QLatin1String("Layout/WidgetMargins"), widgetMargins).toInt();
-    widgetSize = s.value(QLatin1String("Layout/WidgetSize"), widgetSize).toInt();
-    textShift = s.value(QLatin1String("General/TextShift"), textShift).toInt();
-
-    buttonGradient = s.value(QLatin1String("General/ButtonGradientIntensity"), buttonGradient).toInt();
-    buttonRoundness = s.value(QLatin1String("General/ButtonRoundness"), buttonRoundness).toInt();
-
-    passwordCharacters = s.value(QLatin1String("General/PasswordCharacters"), passwordCharacters).toString();
-    styleSheetFileName = s.value(QLatin1String("General/StyleSheetFileName"), QString()).toString();
-    textCursorWidth = s.value(QLatin1String("General/TextCursorWidth"), (double) textCursorWidth).toDouble();
-
-    subMenuDelay = s.value(QLatin1String("Menus/SubMenuDelay"), subMenuDelay).toInt();
-
-    // apply defaults
-    if (widgetSize < 0) {
-        widgetSize = 2;
-    }
-    if (pushButtonSize < 0) {
-        pushButtonSize = 2;
-    }
-    if (tabBarSize < 0) {
-        tabBarSize = 2;
-    }
-    if (menuItemSize < 0) {
-        menuItemSize = 2;
-    }
-}
-
-
-int SkulptureStyle::skulpturePrivateMethod(SkulptureStyle::SkulpturePrivateMethod id, void *data)
-{
-    switch (id) {
-        case SPM_SupportedMethods: {
-            return SPM_SetSettingsFileName;
-        }
-        case SPM_SetSettingsFileName: {
-            SkMethodDataSetSettingsFileName *md = (SkMethodDataSetSettingsFileName *) data;
-            if (md && md->version >= 1) {
-                QSettings s(md->fileName, QSettings::IniFormat);
-                if (s.status() == QSettings::NoError) {
-                    d->readSettings(s);
-                    return 1;
-                }
-            }
-            return 0;
-        }
-        default:
-            return 0;
-    }
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintNothing(QPainter * /*painter*/, const QStyleOption * /*option*/)
-{
-	//
-}
-
-
-void paintDefault(QPainter * /*painter*/, const QStyleOption * /*option*/)
-{
-	//
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-void paintCommandButtonPanel(QPainter *painter, const QStyleOptionButton *option, const QWidget *widget);
-void paintPushButtonBevel(QPainter *painter, const QStyleOptionButton *option, const QWidget *widget, const QStyle *style);
-void paintTabWidgetFrame(QPainter *painter, const QStyleOptionTabWidgetFrame *option, const QWidget *widget);
-void paintIndicatorCheckBox(QPainter *painter, const QStyleOptionButton *option);
-void paintIndicatorItemViewItemCheck(QPainter *painter, const QStyleOption *option);
-void paintQ3CheckListIndicator(QPainter *painter, const QStyleOptionQ3ListView *option, const QWidget *widget, const QStyle *style);
-void paintQ3CheckListExclusiveIndicator(QPainter *painter, const QStyleOptionQ3ListView *option, const QWidget *widget, const QStyle *style);
-void paintIndicatorRadioButton(QPainter *painter, const QStyleOptionButton *option);
-void paintIndicatorSpinDown(QPainter *painter, const QStyleOption *option);
-void paintIndicatorSpinUp(QPainter *painter, const QStyleOption *option);
-void paintIndicatorSpinMinus(QPainter *painter, const QStyleOption *option);
-void paintIndicatorSpinPlus(QPainter *painter, const QStyleOption *option);
-void paintIndicatorArrowDown(QPainter *painter, const QStyleOption *option);
-void paintIndicatorArrowLeft(QPainter *painter, const QStyleOption *option);
-void paintIndicatorArrowRight(QPainter *painter, const QStyleOption *option);
-void paintIndicatorArrowUp(QPainter *painter, const QStyleOption *option);
-void paintHeaderSortIndicator(QPainter *painter, const QStyleOptionHeader *option);
-void paintStyledFrame(QPainter *painter, const QStyleOptionFrame *frame, const QWidget *widget, const QStyle *style);
-void paintFrameLineEdit(QPainter *painter, const QStyleOptionFrame *frame);
-void paintPanelLineEdit(QPainter *painter, const QStyleOptionFrame *frame, const QWidget *widget, const QStyle *style);
-void paintFrameDockWidget(QPainter *painter, const QStyleOptionFrame *frame);
-void paintFrameWindow(QPainter *painter, const QStyleOptionFrame *frame);
-void paintToolBarSeparator(QPainter *painter, const QStyleOptionToolBar *option);
-void paintToolBarHandle(QPainter *painter, const QStyleOptionToolBar *option);
-void paintScrollArea(QPainter *painter, const QStyleOption *option);
-void paintPanelToolBar(QPainter *painter, const QStyleOptionToolBar *option);
-void paintIndicatorMenuCheckMark(QPainter *painter, const QStyleOptionMenuItem *option, const QWidget *widget, const QStyle *style);
-void paintFrameGroupBox(QPainter *painter, const QStyleOptionFrame *option);
-void paintFrameFocusRect(QPainter *painter, const QStyleOptionFocusRect *option, const QWidget *widget);
-void paintPanelButtonTool(QPainter *painter, const QStyleOption *option, const QWidget *widget, const QStyle *style);
-void paintSizeGrip(QPainter *painter, const QStyleOption *option);
-void paintScrollAreaCorner(QPainter *painter, const QStyleOption *option, const QWidget *widget, const QStyle *style);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-void paintPanelItemViewItem(QPainter *painter, const QStyleOptionViewItemV4 *option, const QWidget *widget, const QStyle *style);
-#endif
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-void paintIndicatorTabClose(QPainter *painter, const QStyleOption *option, const QWidget *widget, const QStyle *style);
-#endif
-
-void paintMenuBarEmptyArea(QPainter *painter, const QStyleOption *option);
-void paintPanelMenuBar(QPainter *painter, const QStyleOptionFrame *frame);
-void paintMenuBarItem(QPainter *painter, const QStyleOptionMenuItem *option, const QWidget *widget, const QStyle *style);
-void paintFrameMenu(QPainter *painter, const QStyleOptionFrame *frame);
-void paintMenuItem(QPainter *painter, const QStyleOptionMenuItem *option, const QWidget *widget, const QStyle *style);
-
-void paintTabBarTabShape(QPainter *painter, const QStyleOptionTab *option, const QWidget *widget, const QStyle *style);
-void paintTabBarTabLabel(QPainter *painter, const QStyleOptionTab *option, const QWidget *widget, const QStyle *style);
-void paintFrameTabBarBase(QPainter *painter, const QStyleOptionTabBarBase *option);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-void paintToolBoxTabShape(QPainter *painter, const QStyleOptionToolBoxV2 *option);
-void paintToolBoxTabLabel(QPainter *painter, const QStyleOptionToolBox *option, const QWidget *widget, const QStyle *style);
-#else
-void paintToolBoxTabShape(QPainter *painter, const QStyleOptionToolBox *option);
-#endif
-void paintHeaderEmptyArea(QPainter *painter, const QStyleOption *option);
-void paintHeaderSection(QPainter *painter, const QStyleOptionHeader *option, const QWidget *widget, const QStyle *style);
-void paintHeaderLabel(QPainter *painter, const QStyleOptionHeader *option, const QWidget *widget, const QStyle *style);
-void paintIndicatorBranch(QPainter *painter, const QStyleOption *option);
-
-void paintScrollBarSlider(QPainter *painter, const QStyleOptionSlider *option);
-void paintScrollBarAddLine(QPainter *painter, const QStyleOptionSlider *option);
-void paintScrollBarSubLine(QPainter *painter, const QStyleOptionSlider *option);
-void paintScrollBarFirst(QPainter *painter, const QStyleOptionSlider *option);
-void paintScrollBarLast(QPainter *painter, const QStyleOptionSlider *option);
-void paintScrollBarPage(QPainter *painter, const QStyleOptionSlider *option);
-void paintProgressBarGroove(QPainter *painter, const QStyleOptionProgressBar *option);
-void paintProgressBarContents(QPainter *painter, const QStyleOptionProgressBarV2 *option, const QWidget *widget, const QStyle *style);
-void paintProgressBarLabel(QPainter *painter, const QStyleOptionProgressBarV2 *option, const QWidget *widget, const QStyle *style);
-void paintSplitter(QPainter *painter, const QStyleOption *option);
-void paintDockWidgetTitle(QPainter *painter, const QStyleOptionDockWidget *option, const QWidget *widget, const QStyle *style);
-void paintRubberBand(QPainter *paint, const QStyleOptionRubberBand *option);
-void paintComboBoxLabel(QPainter *painter, const QStyleOptionComboBox *option, const QWidget *widget, const QStyle *style);
-void paintToolButtonLabel(QPainter *painter, const QStyleOptionToolButton *option, const QWidget *widget, const QStyle *style);
-
-
-/*-----------------------------------------------------------------------*/
-
-SkulptureStyle::Private::Private()
-{
-	init();
-}
-
-
-SkulptureStyle::Private::~Private()
-{
-	delete shortcut_handler;
-	delete settings;
-}
-
-
-void SkulptureStyle::Private::init()
-{
-	shortcut_handler = new ShortcutHandler(this);
-	timer = 0;
-	updatingShadows = false;
-        oldEdit = 0;
-#if 0
-	settings = new QSettings(QSettings::IniFormat,
-		QSettings::UserScope,
-		QLatin1String("SkulptureStyle"),
-		QLatin1String(""));
-#else
-	settings = 0;
-#endif
-
-	QSettings s(QSettings::IniFormat, QSettings::UserScope, QLatin1String("SkulptureStyle"), QLatin1String(""));
-	readSettings(s);
-
-	register_draw_entries();
-}
-
-
-void SkulptureStyle::Private::register_draw_entries()
-{
-	for (uint i = 0; i < sizeof(draw_primitive_entry) / sizeof(Private::DrawElementEntry); ++i) {
-		draw_primitive_entry[i].func = 0;
-	}
-	for (uint i = 0; i < sizeof(draw_element_entry) / sizeof(Private::DrawElementEntry); ++i) {
-		draw_element_entry[i].func = 0;
-	}
-
-        /* entries are stricly sorted in Qt order for future lookup table */
-
-#define register_primitive(pe, f, so) draw_primitive_entry[QStyle::PE_ ## pe].type = QStyleOption::SO_ ## so; draw_primitive_entry[QStyle::PE_ ## pe].func = (drawElementFunc *) paint ## f;
-
-        /* PRIMITIVE ELEMENT */
-// Qt 3.x compatibility
-//###	register_primitive(Q3CheckListController, Nothing, Default);
-	register_primitive(Q3CheckListExclusiveIndicator, Q3CheckListExclusiveIndicator, Default);
-	register_primitive(Q3CheckListIndicator, Q3CheckListIndicator, Default);
-	register_primitive(Q3DockWindowSeparator, ToolBarSeparator, Default);
-//###	register_primitive(Q3Separator, Q3Separator, Default);
-// Qt 4.0 Frames
-	register_primitive(Frame, StyledFrame, Frame);
-	register_primitive(FrameDefaultButton, Nothing, Button);
-	register_primitive(FrameDockWidget, FrameDockWidget, Frame);
-	register_primitive(FrameFocusRect, FrameFocusRect, FocusRect);
-	register_primitive(FrameGroupBox, FrameGroupBox, Frame);
-	register_primitive(FrameLineEdit, FrameLineEdit, Frame);
-	register_primitive(FrameMenu, FrameMenu, Default); // ### Qt 4.3 calls FrameMenu with SO_ToolBar for a toolbar
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-	register_primitive(FrameStatusBarItem, Nothing, Default);
-#else
-	register_primitive(FrameStatusBar, Nothing, Default);
-#endif
-	register_primitive(FrameTabWidget, TabWidgetFrame, TabWidgetFrame);
-	register_primitive(FrameWindow, FrameWindow, Frame);
-	register_primitive(FrameButtonBevel, PanelButtonTool, Default);
-	register_primitive(FrameButtonTool, PanelButtonTool, Default);
-	register_primitive(FrameTabBarBase, FrameTabBarBase, TabBarBase);
-// Qt 4.0 Panels
-	register_primitive(PanelButtonCommand, CommandButtonPanel, Button);
-	register_primitive(PanelButtonBevel, PanelButtonTool, Default);
-	register_primitive(PanelButtonTool, PanelButtonTool, Default);
-	register_primitive(PanelMenuBar, PanelMenuBar, Frame);
-	register_primitive(PanelToolBar, PanelToolBar, Frame);
-	register_primitive(PanelLineEdit, PanelLineEdit, Frame);
-// Qt 4.0 Indicators
-	register_primitive(IndicatorArrowDown, IndicatorArrowDown, Default);
-	register_primitive(IndicatorArrowLeft, IndicatorArrowLeft, Default);
-	register_primitive(IndicatorArrowRight, IndicatorArrowRight, Default);
-	register_primitive(IndicatorArrowUp, IndicatorArrowUp, Default);
-	register_primitive(IndicatorBranch, IndicatorBranch, Default);
-	register_primitive(IndicatorButtonDropDown, PanelButtonTool, Default);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-	register_primitive(IndicatorItemViewItemCheck, IndicatorItemViewItemCheck, Default);
-#else
-	register_primitive(IndicatorViewItemCheck, IndicatorItemViewItemCheck, Default);
-#endif
-	register_primitive(IndicatorCheckBox, IndicatorCheckBox, Button);
-	register_primitive(IndicatorDockWidgetResizeHandle, Splitter, Default);
-	register_primitive(IndicatorHeaderArrow, HeaderSortIndicator, Header);
-	register_primitive(IndicatorMenuCheckMark, IndicatorMenuCheckMark, MenuItem);
-//	register_primitive(IndicatorProgressChunk, , );
-	register_primitive(IndicatorRadioButton, IndicatorRadioButton, Button);
-	register_primitive(IndicatorSpinDown, IndicatorSpinDown, Default);
-	register_primitive(IndicatorSpinMinus, IndicatorSpinMinus, Default);
-	register_primitive(IndicatorSpinPlus, IndicatorSpinPlus, Default);
-	register_primitive(IndicatorSpinUp, IndicatorSpinUp, Default);
-	register_primitive(IndicatorToolBarHandle, ToolBarHandle, ToolBar);
-	register_primitive(IndicatorToolBarSeparator, ToolBarSeparator, Default);
-//	register_primitive(PanelTipLabel, , );
-//	register_primitive(IndicatorTabTear, , );
-// Qt 4.2 additions
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-	register_primitive(PanelScrollAreaCorner, ScrollAreaCorner, Default);
-// ###	register_primitive(Widget, , );
-#endif
-// Qt 4.3 additions
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-// TODO register_primitive(IndicatorColumnViewArrow, , );
-#endif
-// Qt 4.4 additions
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-//	register_primitive(IndicatorItemViewItemDrop, , );
-	register_primitive(PanelItemViewItem, PanelItemViewItem, ViewItem);
-//	register_primitive(PanelItemViewRow, , );
-//	register_primitive(PanelStatusBar, , );
-#endif
-// Qt 4.5 additions
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-	register_primitive(IndicatorTabClose, IndicatorTabClose, Default);
-//      register_primitive(PanelMenu, , );
-#endif
-
-#define register_element(ce, f, so) draw_element_entry[QStyle::CE_ ## ce].type = QStyleOption::SO_ ## so; draw_element_entry[QStyle::CE_ ## ce].func = (drawElementFunc *) paint ## f;
-
-	/* CONTROL ELEMENT */
-// Qt 4.0 Buttons
-//	register_element(PushButton, , );
-	register_element(PushButtonBevel, PushButtonBevel, Button);
-//	register_element(PushButtonLabel, , );
-//	register_element(CheckBox, , );
-//	register_element(CheckBoxLabel, , );
-//	register_element(RadioButton, , );
-//	register_element(RadioButtonLabel, , );
-// Qt 4.0 Controls
-//	register_element(TabBarTab, , );
-	register_element(TabBarTabShape, TabBarTabShape, Tab);
-	register_element(TabBarTabLabel, TabBarTabLabel, Tab);
-//	register_element(ProgressBar, , ProgressBar);
-	register_element(ProgressBarGroove, ProgressBarGroove, ProgressBar);
-	register_element(ProgressBarContents, ProgressBarContents, ProgressBar);
-	register_element(ProgressBarLabel, ProgressBarLabel, ProgressBar);
-// Qt 4.0 Menus
-	register_element(MenuItem, MenuItem, MenuItem);
-//	register_element(MenuScroller, , );
-//	register_element(MenuVMargin, , );
-//	register_element(MenuHMargin, , );
-//	register_element(MenuTearoff, , );
-	register_element(MenuEmptyArea, Nothing, Default);
-	register_element(MenuBarItem, MenuBarItem, MenuItem);
-	register_element(MenuBarEmptyArea, MenuBarEmptyArea, Default);
-// Qt 4.0 more Controls
-	register_element(ToolButtonLabel, ToolButtonLabel, ToolButton);
-//	register_element(Header, , );
-	register_element(HeaderSection, HeaderSection, Header);
-	register_element(HeaderLabel, HeaderLabel, Header);
-//	register_element(Q3DockWindowEmptyArea, , );
-//	register_element(ToolBoxTab, , );
-        register_element(SizeGrip, SizeGrip, Default);
-	register_element(Splitter, Splitter, Default);
-	register_element(RubberBand, RubberBand, RubberBand);
-	register_element(DockWidgetTitle, DockWidgetTitle, DockWidget);
-// Qt 4.0 ScrollBar
-	register_element(ScrollBarAddLine, ScrollBarAddLine, Slider);
-	register_element(ScrollBarSubLine, ScrollBarSubLine, Slider);
-	register_element(ScrollBarAddPage, ScrollBarPage, Slider);
-	register_element(ScrollBarSubPage, ScrollBarPage, Slider);
-	register_element(ScrollBarSlider, ScrollBarSlider, Slider);
-	register_element(ScrollBarFirst, ScrollBarFirst, Slider);
-	register_element(ScrollBarLast, ScrollBarLast, Slider);
-// Qt 4.0 even more Controls
-//	register_element(FocusFrame, , );
-	register_element(ComboBoxLabel, ComboBoxLabel, ComboBox);
-// Qt 4.1 additions
-//#if (QT_VERSION >= QT_VERSION_CHECK(4, 1, 0))
-	register_element(ToolBar, PanelToolBar, ToolBar);
-//#endif
-// Qt 4.3 additions
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-	register_element(ToolBoxTabShape, ToolBoxTabShape, ToolBox);
-	register_element(ToolBoxTabLabel, ToolBoxTabLabel, ToolBox);
-	register_element(HeaderEmptyArea, HeaderEmptyArea, Default);
-	register_element(ColumnViewGrip, Splitter, Default);
-#endif
-// Qt 4.4 additions
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-//	register_element(ItemViewItem, , );
-#endif
-}
-
-
-/*-----------------------------------------------------------------------*/
-
-//#include "skulpture_p.moc"
-
-
diff --git a/plugins/qtstyle/skulpture22/skulpture.h b/plugins/qtstyle/skulpture22/skulpture.h
deleted file mode 100644
index e9d01ca..0000000
--- a/plugins/qtstyle/skulpture22/skulpture.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Skulpture - Classical Three-Dimensional Artwork for Qt 4
- *
- * Copyright (c) 2007, 2008 Christoph Feck <christoph at maxiom.de>
- *
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifndef SKULPTURE_H
-#define SKULPTURE_H 1
-
-#include <QtGui/QCommonStyle>
-
-
-/*-----------------------------------------------------------------------*/
-
-// Skulpture is a subclass of QCommonStyle in order to
-// ease transition to KStyle later
-
-class SkulptureStyle : public QCommonStyle
-{
-    Q_OBJECT
-
-    typedef QCommonStyle ParentStyle;
-
-    public:
-        SkulptureStyle();
-        virtual ~SkulptureStyle();
-
-        QPalette standardPalette() const;
-        void polish(QPalette &palette);
-
-        void polish(QWidget *widget);
-        void unpolish(QWidget *widget);
-        void polish(QApplication *application);
-        void unpolish(QApplication *application);
-
-        void drawItemPixmap(QPainter *painter, const QRect &rectangle, int alignment,
-                            const QPixmap &pixmap) const;
-        void drawItemText(QPainter * painter, const QRect &rectangle, int alignment,
-                          const QPalette &palette, bool enabled, const QString &text,
-                          QPalette::ColorRole textRole = QPalette::NoRole) const;
-        QRect itemPixmapRect(const QRect &rectangle, int alignment, const QPixmap & pixmap) const;
-        QRect itemTextRect(const QFontMetrics &metrics, const QRect &rectangle, int alignment,
-                           bool enabled, const QString &text ) const;
-
-        int styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget,
-                      QStyleHintReturn *returnData) const;
-        int pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const;
-        QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const;
-        QSize sizeFromContents (ContentsType type, const QStyleOption *option, const QSize &contentsSize,
-                                const QWidget *widget) const;
-        QRect subControlRect(ComplexControl control, const QStyleOptionComplex *option,
-                             SubControl subControl, const QWidget *widget) const;
-        SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option,
-                                         const QPoint &position, const QWidget *widget) const;
-
-        QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap,
-                                    const QStyleOption *option) const;
-        QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *option,
-                               const QWidget *widget) const;
-
-        void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter,
-                           const QWidget *widget) const;
-        void drawControl(ControlElement control, const QStyleOption *option, QPainter *painter,
-                         const QWidget *widget) const;
-        void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option,
-                                QPainter *painter, const QWidget *widget) const;
-
-    public:
-        // internal
-        enum SkulpturePrivateMethod {
-            SPM_SupportedMethods = 0,
-            SPM_SetSettingsFileName = 1
-        };
-
-    public Q_SLOTS:
-        int skulpturePrivateMethod(SkulpturePrivateMethod id, void *data = 0);
-
-    protected Q_SLOTS:
-//#if (QT_VERSION >= 0x040100)
-        QIcon standardIconImplementation(StandardPixmap standardIcon, const QStyleOption *option,
-                                         const QWidget *widget) const;
-//#endif
-#if (QT_VERSION >= 0x040300)
-        int layoutSpacingImplementation(QSizePolicy::ControlType control1,
-                                        QSizePolicy::ControlType control2, Qt::Orientation orientation,
-                                         const QStyleOption *option, const QWidget *widget) const;
-#endif
-
-    private:
-        void init();
-
-        class Private;
-        Private * const d;
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-#endif // SKULPTURE_H
-
-
diff --git a/plugins/qtstyle/skulpture22/skulpture22.pro b/plugins/qtstyle/skulpture22/skulpture22.pro
deleted file mode 100644
index f9a460d..0000000
--- a/plugins/qtstyle/skulpture22/skulpture22.pro
+++ /dev/null
@@ -1,15 +0,0 @@
-include(../../common.pri)
-include(../common.pri)
-
-TARGET = $$qtLibraryTarget(skulpture)
-
-#Header files
-HEADERS += \
-    skulpture.h \
-    skulpture_p.h \
-
-#Source files
-SOURCES += \
-    skulpture.cpp \
-
-
diff --git a/plugins/qtstyle/skulpture22/skulpture_p.h b/plugins/qtstyle/skulpture22/skulpture_p.h
deleted file mode 100644
index 6f408bb..0000000
--- a/plugins/qtstyle/skulpture22/skulpture_p.h
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
- * skulpture_p.h - Classical Three-Dimensional Artwork for Qt 4
- *
- * Copyright (c) 2007-2009 Christoph Feck <christoph at maxiom.de>
- *
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifndef SKULPTURE_PRIVATE_H
-#define SKULPTURE_PRIVATE_H 1
-
-
-/*-----------------------------------------------------------------------*/
-
-#include <QtCore/QObject>
-class QWidget;
-
-class ShortcutHandler : public QObject
-{
-	Q_OBJECT
-
-        enum TabletCursorState
-        {
-            DefaultCursor,
-            TabletCursor,
-            BlankCursor
-        };
-
-	public:
-		explicit ShortcutHandler(QObject *parent = 0);
-		virtual ~ShortcutHandler();
-
-		bool underlineShortcut(const QWidget *widget) const;
-
-	protected:
-		bool eventFilter(QObject *watched, QEvent *event);
-
-	private:
-		void init() { }
-
-	private:
-		QList<QWidget *> alt_pressed;
-                TabletCursorState tabletCursorState;
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-#if (QT_VERSION < 0x040300)
-#define QT_VERSION_CHECK(maj, min, rel) ((maj << 16) + (min << 8) + (rel))
-#endif
-
-
-/*-----------------------------------------------------------------------*/
-
-enum ArrowPlacementMode
-{
-    NoArrowsMode,   // (*)
-    SkulptureMode,  // (<*>)
-    WindowsMode,    // <(*)>
-    KDEMode,    // <(*)<>
-    PlatinumMode,   // (*)<>
-    NextMode // <>(*)
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-#include "skulpture.h"
-#include <QtCore/QPointer>
-#include <QtCore/QSignalMapper>
-#include <QtCore/QHash>
-#include <QtGui/QStyleOption>
-class QPainter;
-class QSettings;
-class QTextEdit;
-class QPlainTextEdit;
-class QAbstractScrollArea;
-class QLineEdit;
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-class QFormLayout;
-#endif
-class QMenu;
-
-class SkulptureStyle::Private : public QObject
-{
-	Q_OBJECT
-
-	public:
-		Private();
-		~Private();
-
-		SkulptureStyle *q;
-
-		void setAnimated(QWidget *widget, bool animated);
-		bool isAnimated(QWidget *widget);
-
-	private:
-		QList<QWidget *> animations;
-		int timer;
-
-	public:
-		void readSettings(const QSettings &s);
-                void readDominoSettings(const QSettings &s);
-                QSettings *settings;
-
-		bool animateProgressBars;
-		bool hideShortcutUnderlines;
-                bool centerTabs; // from domino
-                bool makeDisabledWidgetsTransparent;
-                bool transparentPlacesPanel;
-                bool forceSpacingAndMargins;
-                bool useIconColumnForCheckIndicators;
-                bool useSelectionColorForCheckedIndicators;
-                bool useSelectionColorForSelectedMenuItems;
-                bool useSingleClickToActivateItems;
-
-                ArrowPlacementMode verticalArrowMode;
-                ArrowPlacementMode horizontalArrowMode;
-
-                int dialogMargins;
-                int horizontalSpacing;
-                int labelSpacing;
-                int menuBarSize;
-                int menuItemSize;
-                int pushButtonSize;
-                int scrollBarSize;
-                int scrollBarLength;
-                int sliderSize;
-                int sliderLength;
-                int tabBarSize;
-                int toolButtonSize;
-                int verticalSpacing;
-                int widgetMargins;
-                int widgetSize;
-                int textShift;
-
-                int buttonGradient;
-                int buttonRoundness;
-
-                int subMenuDelay;
-
-                QString passwordCharacters;
-                QString styleSheetFileName;
-                qreal textCursorWidth;
-
-		enum Settings {
-			Style,
-			Metric,
-			Icon
-		};
-
-		typedef void (drawElementFunc)(
-			QPainter *painter,
-			const QStyleOption *option,
-			const QWidget *widget,
-			const QStyle *style
-		);
-
-		struct DrawElementEntry
-		{
-			int type;
-			drawElementFunc *func;
-		};
-
-		void register_settings(const char *label, ...);
-
-		QSignalMapper mapper;
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-		struct DrawElementEntry draw_primitive_entry[QStyle::PE_PanelMenu + 1];
-#elif (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-		struct DrawElementEntry draw_primitive_entry[QStyle::PE_PanelStatusBar + 1];
-#elif (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-		struct DrawElementEntry draw_primitive_entry[QStyle::PE_IndicatorColumnViewArrow + 1];
-#elif (QT_VERSION >= QT_VERSION_CHECK(4, 2, 0))
-		struct DrawElementEntry draw_primitive_entry[QStyle::PE_Widget + 1];
-#else
-                struct DrawElementEntry draw_primitive_entry[QStyle::PE_IndicatorTabTear + 1];
-#endif
-
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-		struct DrawElementEntry draw_element_entry[QStyle::CE_ItemViewItem + 1];
-#elif (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
-		struct DrawElementEntry draw_element_entry[QStyle::CE_ColumnViewGrip + 1];
-#else
-		struct DrawElementEntry draw_element_entry[QStyle::CE_ToolBar + 1];
-#endif
-
-		ShortcutHandler *shortcut_handler;
-
-		void register_draw_entries();
-
-		void installFrameShadow(QWidget *widget);
-		void removeFrameShadow(QWidget *widget);
-		void updateFrameShadow(QWidget *widget);
-
-		void updateTextEditMargins(QTextEdit *edit);
-
-                void removeCursorLine(QAbstractScrollArea *edit);
-                void updateCursorLine(QAbstractScrollArea *edit, const QRect &cursorRect);
-                void paintCursorLine(QAbstractScrollArea *edit);
-                void handleCursor(QTextEdit *edit);
-                void handleCursor(QPlainTextEdit *edit);
-
-                int verticalTextShift(const QFontMetrics &fontMetrics);
-                int textLineHeight(const QStyleOption *option, const QWidget *widget);
-                void polishLayout(QLayout *layout);
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
-                void polishFormLayout(QFormLayout *layout);
-#endif
-
-                QList<QPointer<QWidget> > postEventWidgets;
-                void addPostEventWidget(QWidget *widget);
-
-		QAbstractScrollArea *oldEdit;
-		int oldCursorTop;
-		int oldCursorWidth;
-		int oldCursorHeight;
-		int oldHeight;
-		QPalette oldPalette;
-
-		bool updatingShadows;
-
-                QLineEdit *hoverLineEdit;
-                QLineEdit *focusLineEdit;
-                QRect lineEditHoverCursorRect;
-
-                struct MenuInfo {
-                    QPointer<QMenu> menu;
-                    QPointer<QAction> lastAction;
-                    QPointer<QAction> visibleSubMenu;
-                    QPointer<QAction> lastSubMenuAction;
-                    int eventCount;
-                    QPoint lastPos;
-                    int delayTimer;
-                };
-
-                QHash<QMenu *, MenuInfo> menuHash;
-                bool menuEventFilter(QMenu *menu, QEvent *event);
-
-	protected:
-		void timerEvent(QTimerEvent *event);
-		bool eventFilter(QObject *watched, QEvent *event);
-
-	protected Q_SLOTS:
-		void textEditSourceChanged(QWidget *);
-		void updateToolBarOrientation(Qt::Orientation);
-                void processPostEventWidgets();
-
-	private:
-		void init();
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-class FrameShadow : public QWidget
-{
-	Q_OBJECT
-
-	public:
-		enum ShadowArea { Left, Top, Right, Bottom };
-
-	public:
-		explicit FrameShadow(QWidget *parent = 0);
-		explicit FrameShadow(ShadowArea area, QWidget *parent = 0);
-		virtual ~FrameShadow();
-
-		void setShadowArea(ShadowArea area) { area_ = area; }
-		ShadowArea shadowArea() const { return area_; }
-
-		void updateGeometry();
-
-	protected:
-		bool event(QEvent *e);
-		void paintEvent(QPaintEvent *);
-
-	private:
-		void init();
-
-	private:
-		ShadowArea area_;
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-class WidgetShadow : public QWidget
-{
-	Q_OBJECT
-
-	public:
-		explicit WidgetShadow(QWidget *parent = 0);
-
-		void setWidget(QWidget *w) { widget_ = w; }
-		QWidget *widget() const { return widget_; }
-
-		void updateGeometry();
-		void updateZOrder();
-
-	public:
-		bool event(QEvent *e);
-
-	private:
-		void init();
-
-	private:
-		QWidget *widget_;
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-struct SkMethodData
-{
-	int version;
-};
-
-
-struct SkMethodDataSetSettingsFileName : public SkMethodData
-{
-	// in version 1
-	QString fileName;
-};
-
-
-/*-----------------------------------------------------------------------*/
-
-class QPainterPath;
-
-QColor shaded_color(const QColor &color, int shade);
-QColor blend_color(const QColor &c0, const QColor &c1, qreal blend);
-QGradient path_edge_gradient(const QRectF &rect, const QStyleOption *option, const QPainterPath &path, const QColor &color2, const QColor &color1);
-
-void paintThinFrame(QPainter *painter, const QRect &rect, const QPalette &palette, int dark, int light, QPalette::ColorRole bgrole = QPalette::Window);
-
-enum RecessedFrame { RF_Small, RF_Large, RF_None };
-
-void paintRecessedFrame(QPainter *painter, const QRect &rect, const QPalette &palette, enum RecessedFrame rf, QPalette::ColorRole bgrole = QPalette::Window);
-void paintRecessedFrameShadow(QPainter *painter, const QRect &rect, enum RecessedFrame rf);
-
-
-/*-----------------------------------------------------------------------*/
-// FIXME
-#if (QT_VERSION < QT_VERSION_CHECK(4, 3, 0))
-#define lighter light
-#define darker dark
-#endif
-
-
-/*-----------------------------------------------------------------------*/
-
-#define array_elements(a) (sizeof(a) / sizeof(a[0]))
-
-
-/*-----------------------------------------------------------------------*/
-
-#endif
-
-
diff --git a/semperMerk/MouseMachine/LICENSE.LGPL b/semperMerk/MouseMachine/LICENSE.LGPL
deleted file mode 100644
index 5ab7695..0000000
--- a/semperMerk/MouseMachine/LICENSE.LGPL
+++ /dev/null
@@ -1,504 +0,0 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-

-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-

-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-

-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-

-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-

-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-

-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-

-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-

-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-

-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library 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
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/semperMerk/MouseMachine/MouseMachine.cpp b/semperMerk/MouseMachine/MouseMachine.cpp
deleted file mode 100644
index b41ce3f..0000000
--- a/semperMerk/MouseMachine/MouseMachine.cpp
+++ /dev/null
@@ -1,491 +0,0 @@
-//
-// C++ Implementation: MouseMachine
-//
-// Description:
-//
-//
-// Author: Chris Browet <cbro at semperpax.com> (C) 2009
-//
-// Copyright: See COPYING file that comes with this distribution
-//
-//
-
-#include "Mousemachine.h"
-
-#include <QApplication>
-#include <QWidget>
-#include <QMouseEvent>
-#include <QDebug>
-#include <QAbstractScrollArea>
-
-#define SPEED_INTERVAL 20               // The interval in ms between 2 speed checks. The greater, the greater the speed will be
-#define SPEEDVECTOR_MULTIPLIER 4        // the speed multiplier. Multiply the speed to get the end autoscroll pos.
-#define MIN_SPEED 12                     // The minimum speed to switch to autoscroll
-#define MIN_MOVE 12                     // The minimum move for a move event to be registered as such. Usefull on touch devices where it is nearly certain to get a mouse move between a press and a release.
-#define DBLCLICK_INTERVAL 500
-#define TAPHOLD_TIMEOUT 500
-
-#define EVENT_AUTOSCROLL (QEvent::Type(QEvent::User+1))
-#define EVENT_MOVE (QEvent::Type(QEvent::User+2))
-#define EVENT_PRESS (QEvent::Type(QEvent::User+3))
-#define EVENT_RELEASE (QEvent::Type(QEvent::User+4))
-#define EVENT_DBLCLICK (QEvent::Type(QEvent::User+5))
-
-int gSkipEvents;
-
-struct AutoscrollEvent : public QEvent
-{
-    AutoscrollEvent(bool val)
-    : QEvent(EVENT_AUTOSCROLL),
-      value(val) {}
-
-    bool value;
-};
-
-class AutoscrollTransition : public QAbstractTransition
-{
- public:
-     AutoscrollTransition(bool value)
-         : m_value(value) {}
-
- protected:
-     virtual bool eventTest(QEvent *e)
-     {
-         if (e->type() != EVENT_AUTOSCROLL)
-             return false;
-         AutoscrollEvent *se = static_cast<AutoscrollEvent*>(e);
-         return (m_value == se->value);
-     }
-
-     virtual void onTransition(QEvent *) {}
-
- private:
-     bool  m_value;
- };
-
-struct FilteredMouseMoveEvent : public QEvent
-{
-    FilteredMouseMoveEvent(bool val)
-    : QEvent(EVENT_MOVE),
-      value(val) {}
-
-    bool value;
-};
-
-struct FilteredMousePressEvent : public QEvent
-{
-    FilteredMousePressEvent()
-    : QEvent(EVENT_PRESS)
-    {}
-};
-
-struct FilteredMouseReleaseEvent : public QEvent
-{
-    FilteredMouseReleaseEvent()
-    : QEvent(EVENT_RELEASE)
-    {}
-};
-
-struct FilteredDoubleClickEvent : public QEvent
-{
-    FilteredDoubleClickEvent()
-    : QEvent(EVENT_DBLCLICK)
-    {}
-};
-
-class FilteredMouseMoveTransition : public QAbstractTransition
-{
- public:
-     FilteredMouseMoveTransition(bool value)
-         : m_value(value) {}
-
- protected:
-     virtual bool eventTest(QEvent *e)
-     {
-         if (e->type() != EVENT_MOVE)
-             return false;
-         FilteredMouseMoveEvent *se = static_cast<FilteredMouseMoveEvent*>(e);
-         return (m_value == se->value);
-     }
-
-     virtual void onTransition(QEvent *) {}
-
- private:
-     bool  m_value;
- };
-
-class FilteredMouseClickTransition : public QAbstractTransition
-{
- public:
-     FilteredMouseClickTransition(QEvent::Type typ)
-         : m_typ(typ)
-     {}
-
- protected:
-     virtual bool eventTest(QEvent *e)
-     {
-         if (e->type() != m_typ)
-             return false;
-         return (gSkipEvents == 0);
-     }
-
-     virtual void onTransition(QEvent *e) {}
-
-private:
-    QEvent::Type  m_typ;
-};
-
-/**********************/
-
-MouseMachine::MouseMachine(QWidget* parent, MouseMachine::Options options)
- : QObject(parent)
-    , theParent(parent)
-    , m_options(options)
-    , machine(0)
-    , trPressed2Idle(0)
-    , trPressed2Man(0)
-    , trManScrolling(0)
-    , trIdle2Pressed(0)
-    , trMan2Auto(0)
-    , trMan2Idle(0)
-    , trAuto2Idle(0)
-    , trAuto2Man(0)
-    , trDoubleclick(0)
-{
-    speedTimer.setInterval(SPEED_INTERVAL);
-    connect(&speedTimer, SIGNAL(timeout()), SLOT(slotCalculateSpeed()));
-
-    if (options & MouseMachine::SignalDoubleTap)
-        dblclickTimer.setInterval(DBLCLICK_INTERVAL);
-    else
-        dblclickTimer.setInterval(0);
-    dblclickTimer.setSingleShot(true);
-    connect(&dblclickTimer, SIGNAL(timeout()), SLOT(slotSingleTap()));
-
-    scrollTimeline.setCurveShape(QTimeLine::EaseOutCurve);
-    scrollTimeline.setEasingCurve(QEasingCurve::OutQuad);
-    connect(&scrollTimeline, SIGNAL(valueChanged(qreal)), SLOT(slotAutoscroll(qreal)));
-    connect(&scrollTimeline, SIGNAL(finished()), SLOT(slotAutoscrollFinished()));
-
-    tapHoldTimer.setInterval(TAPHOLD_TIMEOUT);
-    tapHoldTimer.setSingleShot(true);
-
-    theTarget = theParent;
-    QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea*>(theParent);
-    if (scrollArea) {
-        oldHzPolicy = scrollArea->horizontalScrollBarPolicy();
-        oldVtPolicy = scrollArea->verticalScrollBarPolicy();
-        scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-        scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-
-        theTarget = scrollArea->viewport();
-    }
-    if (!(options.testFlag(MouseMachine::CascadedEventFilter)))
-        theTarget->installEventFilter(this);
-    gSkipEvents = 0;
-
-    buildMachine();
-    machine->start();
-}
-
-bool MouseMachine::eventFilter(QObject *object, QEvent *event)
-{
-    if (!object->isWidgetType())
-        return false;
-    if (gSkipEvents && gSkipEvents-- > 0)
-        return false;
-
-    QEvent::Type type = event->type();
-    if (type != QEvent::MouseButtonPress &&
-            type != QEvent::MouseButtonRelease &&
-            type != QEvent::MouseButtonDblClick &&
-            type != QEvent::MouseMove &&
-            type != QEvent::ContextMenu)
-        return false;
-
-    QMouseEvent* mouseEvent = dynamic_cast<QMouseEvent*>(event);
-    if (mouseEvent) {
-        if (type == QEvent::MouseMove)
-        {
-            QPoint curPos = mouseEvent->globalPos();
-            if (oldFilteredPos.isNull())
-                oldFilteredPos = curPos;
-
-            if ((oldFilteredPos - curPos).manhattanLength() > MIN_MOVE) {
-                machine->postEvent(new FilteredMouseMoveEvent(false));
-            }
-        } else {
-            oldFilteredPos = QPoint();
-            if (type == QEvent::MouseButtonPress && mouseEvent->button() == Qt::LeftButton && mouseEvent->modifiers() == Qt::NoModifier ) {
-                machine->postEvent(new FilteredMousePressEvent());
-            } else if (type == QEvent::MouseButtonRelease && mouseEvent->button() == Qt::LeftButton && mouseEvent->modifiers() == Qt::NoModifier) {
-                machine->postEvent(new FilteredMouseReleaseEvent());
-            } else if (type == QEvent::MouseButtonDblClick && mouseEvent->button() == Qt::LeftButton && mouseEvent->modifiers() == Qt::NoModifier) {
-                machine->postEvent(new FilteredDoubleClickEvent());
-            }
-        }
-    }
-
-//#ifndef QT_NO_DEBUG_OUTPUT
-//    qDebug() << object;
-//    switch (event->type()) {
-//    case QEvent::MouseButtonPress:
-//        qDebug() << "-> MouseButtonPress " << curPos << " : " << QCursor::pos();
-//        break;
-//    case QEvent::MouseButtonRelease:
-//        qDebug() << "-> MouseButtonRelease" << curPos << " : " << QCursor::pos();
-//        break;
-//    case QEvent::MouseMove:
-//        qDebug() << "-> MouseMove" << curPos << " : " << QCursor::pos();
-//        break;
-//    case QEvent::MouseButtonDblClick:
-//        qDebug() << "-> MouseButtonDblClick" << curPos << " : " << QCursor::pos();
-//        break;
-//    default:
-//        break;
-//    }
-//#endif
-    return true;
-}
-
-void MouseMachine::buildMachine()
-{
-    delete machine;
-    machine = new QStateMachine(this);
-
-    stIdle = new QState();
-    stPressed = new QState();
-    stManScroll = new QState();
-    stAutoScroll = new QState();
-
-    trIdle2Pressed = new FilteredMouseClickTransition(EVENT_PRESS);
-    trIdle2Pressed->setTargetState(stPressed);
-    connect (trIdle2Pressed, SIGNAL(triggered()), SLOT(slotStartTap()));
-
-    trDoubleclick = new FilteredMouseClickTransition(EVENT_DBLCLICK);
-    trDoubleclick->setTargetState(stIdle);
-    connect (trDoubleclick, SIGNAL(triggered()), SLOT(slotDoubleTap()));
-
-    trPressed2Idle = new FilteredMouseClickTransition(EVENT_RELEASE);
-    trPressed2Idle->setTargetState(stIdle);
-    connect (trPressed2Idle, SIGNAL(triggered()), SLOT(slotPotentialDblclick()));
-
-    trPressed2Man = new FilteredMouseMoveTransition(false);
-    trPressed2Man->setTargetState(stManScroll);
-    connect (trPressed2Man, SIGNAL(triggered()), SLOT(slotStartDrag()));
-
-    trTapHold = new QSignalTransition(&tapHoldTimer, SIGNAL(timeout()));
-    trTapHold->setTargetState(stIdle);
-    connect (trTapHold, SIGNAL(triggered()), SLOT(slotTapAndHold()));
-
-    trManScrolling = new QMouseEventTransition(theTarget, QEvent::MouseMove, Qt::NoButton);
-    connect (trManScrolling, SIGNAL(triggered()), SLOT(slotDrag()));
-
-    stIdle->addTransition(trIdle2Pressed);
-    stIdle->addTransition(trDoubleclick);
-    stPressed->addTransition(trPressed2Idle);
-    stPressed->addTransition(trPressed2Man);
-    stPressed->addTransition(trTapHold);
-    stManScroll->addTransition(trManScrolling);
-
-    machine->addState(stIdle);
-    machine->addState(stPressed);
-    machine->addState(stManScroll);
-
-    if (m_options & MouseMachine::AutoScroll) {
-        trMan2Auto = new FilteredMouseClickTransition(EVENT_RELEASE);
-        trMan2Auto->setTargetState(stAutoScroll);
-        connect (trMan2Auto, SIGNAL(triggered()), SLOT(slotStartAuto()));
-
-        trAuto2Man = new FilteredMouseClickTransition(EVENT_PRESS);
-        trAuto2Man->setTargetState(stManScroll);
-        connect (trAuto2Man, SIGNAL(triggered()), SLOT(slotStartDrag()));
-
-        trAuto2Idle = new AutoscrollTransition(false);
-        trAuto2Idle->setTargetState(stIdle);
-//        connect (trAuto2Idle, SIGNAL(triggered()), SLOT(slotPotentialDblclick()));
-
-        stManScroll->addTransition(trMan2Auto);
-        stAutoScroll->addTransition(trAuto2Idle);
-        stAutoScroll->addTransition(trAuto2Man);
-
-        machine->addState(stAutoScroll);
-    } else {
-        trMan2Idle = new FilteredMouseClickTransition(EVENT_RELEASE);
-        trMan2Idle->setTargetState(stIdle);
-//        connect (trMan2Idle, SIGNAL(triggered()), SLOT(slotPotentialDblclick()));
-
-        stManScroll->addTransition(trMan2Idle);
-    }
-
-    machine->setInitialState(stIdle);
-}
-
-MouseMachine::~MouseMachine()
-{
-    machine->stop();
-
-    QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea*>(theParent);
-    if (scrollArea) {
-        scrollArea->setHorizontalScrollBarPolicy(oldHzPolicy);
-        scrollArea->setVerticalScrollBarPolicy(oldVtPolicy);
-    }
-}
-
-void MouseMachine::slotStartTap()
-{
-//    qDebug() << "--- slotStartTap "<< curPos << " : " << QCursor::pos();
-    curPos = QCursor::pos();
-
-    firstPress = curPos;
-    tapHoldTimer.start();
-}
-
-void MouseMachine::slotPotentialDblclick()
-{
-    tapHoldTimer.stop();
-
-    if (dblclickTimer.isActive()) {
-        dblclickTimer.stop();
-        slotDoubleTap();
-    } else {
-        dblclickTimer.start();
-    }
-}
-
-void MouseMachine::slotSingleTap()
-{
-//    qDebug() << "--- slotSingleTap " << curPos << " : " << QCursor::pos();
-    tapHoldTimer.stop();
-
-    if (m_options & MouseMachine::SignalTap) {
-        emit singleTap(theParent->mapFromGlobal(firstPress));
-    } else {
-            QWidget*w = theTarget;
-            QMouseEvent *event1 = new QMouseEvent(QEvent::MouseButtonPress,
-                                                  theParent->mapFromGlobal(firstPress), Qt::LeftButton,
-                                                  Qt::LeftButton, Qt::NoModifier);
-            QMouseEvent *event2 = new QMouseEvent(QEvent::MouseButtonRelease,
-                                                  theParent->mapFromGlobal(firstPress), Qt::LeftButton,
-                                                  Qt::LeftButton, Qt::NoModifier);
-
-            gSkipEvents = 2;
-            QApplication::postEvent(w, event1);
-            QApplication::postEvent(w, event2);
-        }
-}
-
-void MouseMachine::slotDoubleTap()
-{
-//    qDebug() << "--- slotDoubleTap " << curPos << " : " << QCursor::pos();
-    tapHoldTimer.stop();
-
-    dblclickTimer.stop();
-
-    emit doubleTap(theParent->mapFromGlobal(firstPress));
-}
-
-void MouseMachine::slotTapAndHold()
-{
-//    qDebug() << "--- slotTapAndHold " << curPos << " : " << QCursor::pos();
-    tapHoldTimer.stop();
-
-    emit tapAndHold(theParent->mapFromGlobal(firstPress));
-}
-
-void MouseMachine::slotStartDrag()
-{
-//    qDebug() << "--- slotStartDrag " << curPos << " : " << QCursor::pos();
-    curPos = QCursor::pos();
-
-    oldPos = curPos;
-    oldSpeedPos = curPos;
-    speed = QPoint();
-    scrollTimeline.stop();
-    speedTimer.start();
-}
-
-void MouseMachine::slotDrag()
-{
-//    qDebug() << "--- slotDrag " << curPos << " : " << QCursor::pos();
-    curPos = QCursor::pos();
-
-    QPoint delta = curPos - oldPos;
-
-    if (!delta.isNull()) {
-        if (m_options.testFlag(MouseMachine::SignalScroll)) {
-            emit scroll(theParent->mapFromGlobal(oldPos), theParent->mapFromGlobal(curPos));
-        } else {
-            if (QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea*>(theParent)) {
-                scrollArea->horizontalScrollBar()->setValue(scrollArea->horizontalScrollBar()->value() - delta.x());
-                scrollArea->verticalScrollBar()->setValue(scrollArea->verticalScrollBar()->value() - delta.y());
-            }
-        }
-    }
-    oldPos = curPos;
-}
-
-void MouseMachine::slotCalculateSpeed()
-{
-    curPos = QCursor::pos();
-
-    speed = curPos - oldSpeedPos;
-    oldSpeedPos = curPos;
-}
-
-void MouseMachine::slotAutoscroll(qreal val)
-{
-//    qDebug() << "--- slotAutoscroll " << curPos << " : " << QCursor::pos();
-    curPos = QCursor::pos();
-
-    QPoint curAutoPos = speedVector.pointAt(val).toPoint();
-    QPoint delta = curAutoPos - oldAutoPos;
-//    qDebug() << delta << " : " << curAutoPos << " : " << oldAutoPos << " : " << val;
-
-    if (!delta.isNull()) {
-        if (m_options & MouseMachine::SignalScroll) {
-            emit scroll(theParent->mapFromGlobal(oldAutoPos), theParent->mapFromGlobal(curAutoPos));
-        } else {
-            if (QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea*>(theParent)) {
-                scrollArea->horizontalScrollBar()->setValue(scrollArea->horizontalScrollBar()->value() - delta.x());
-                scrollArea->verticalScrollBar()->setValue(scrollArea->verticalScrollBar()->value() - delta.y());
-            }
-        }
-    }
-    oldAutoPos = curAutoPos;
-}
-
-void MouseMachine::slotStartAuto()
-{
-//    qDebug() << "--- slotStartAuto " << curPos << " : " << QCursor::pos();
-    curPos = QCursor::pos();
-
-    speedTimer.stop();
-    if (speed.manhattanLength() > MIN_SPEED) {
-        speedVector = QLineF(curPos, curPos + (speed * SPEEDVECTOR_MULTIPLIER));
-        oldAutoPos = curPos;
-        scrollTimeline.start();
-    } else {
-//        qDebug() << "--- StopAuto";
-        machine->postEvent(new AutoscrollEvent(false));
-    }
-
-    slotDrag();
-}
-
-void MouseMachine::slotAutoscrollFinished()
-{
-//    qDebug() << "--- slotAutoscrollFinished " << curPos << " : " << QCursor::pos();
-
-    machine->postEvent(new AutoscrollEvent(false));
-}
-
-void MouseMachine::setOptions(Options options)
-{
-    m_options = options;
-
-    machine->stop();
-
-    buildMachine();
-    machine->start();
-}
diff --git a/semperMerk/MouseMachine/MouseMachine.h b/semperMerk/MouseMachine/MouseMachine.h
deleted file mode 100644
index 960a073..0000000
--- a/semperMerk/MouseMachine/MouseMachine.h
+++ /dev/null
@@ -1,129 +0,0 @@
-//
-// C++ Interface: MouseMachine
-//
-// Description:
-//
-//
-// Author: Chris Browet <cbro at semperpax.com> (C) 2009
-//
-// Copyright: See COPYING file that comes with this distribution
-//
-//
-
-#ifndef MOUSEMACHINE_H
-#define MOUSEMACHINE_H
-
-#include <QObject>
-#include <QPoint>
-
-#include <QState>
-#include <QStateMachine>
-#include <QMouseEventTransition>
-#include <QSignalTransition>
-#include <QTimer>
-#include <QTimeLine>
-#include <QLineF>
-#include <QFlags>
-#include <QScrollBar>
-
-#ifdef Q_OS_SYMBIAN
-#include <touchfeedback.h>
-#endif
-
-
-class AutoscrollTransition;
-class FilteredMouseMoveTransition;
-class FilteredMouseClickTransition;
-
-class MouseMachine : public QObject
-{
-    Q_OBJECT
-
-public:
-
-    enum Option {
-        NoOptions = 0x0,
-        AutoScroll = 0x1,
-        SignalTap = 0x2,
-        SignalDoubleTap = 0x4,
-        SignalScroll = 0x8,
-        CascadedEventFilter = 0x10
-    };
-    Q_DECLARE_FLAGS(Options, Option)
-
-    MouseMachine(QWidget* parent = 0, MouseMachine::Options options = MouseMachine::NoOptions);
-    ~MouseMachine();
-
-    void setOptions(MouseMachine::Options options);
-    bool eventFilter(QObject *object, QEvent *event);
-
-protected slots:
-    void slotStartTap();
-    void slotSingleTap();
-    void slotDoubleTap();
-    void slotTapAndHold();
-    void slotStartDrag();
-    void slotDrag();
-    void slotStartAuto();
-    void slotAutoscrollFinished();
-
-    void slotCalculateSpeed();
-    void slotPotentialDblclick();
-    void slotAutoscroll(qreal val);
-
-signals:
-    void singleTap(QPoint pos);
-    void doubleTap(QPoint pos);
-    void tapAndHold(QPoint pos);
-    void scroll(QPoint oldPos, QPoint newPos);
-
-protected:
-    void buildMachine();
-
-protected:
-    QWidget* theParent;
-    QWidget* theTarget;
-    Options m_options;
-
-    QStateMachine* machine;
-    QState *stIdle;
-    QState *stPressed;
-    QState *stManScroll;
-    QState *stAutoScroll;
-
-    FilteredMouseClickTransition* trPressed2Idle;
-    FilteredMouseMoveTransition* trPressed2Man;
-    QSignalTransition* trTapHold;
-    QMouseEventTransition* trManScrolling;
-    FilteredMouseClickTransition* trIdle2Pressed;
-    FilteredMouseClickTransition* trMan2Auto;
-    FilteredMouseClickTransition* trMan2Idle;
-    AutoscrollTransition* trAuto2Idle;
-    FilteredMouseClickTransition* trAuto2Man;
-    FilteredMouseClickTransition* trDoubleclick;
-
-    QPoint firstPress;
-    QPoint curPos;
-    QPoint oldPos;
-    QPoint oldFilteredPos;
-    QPoint oldAutoPos;
-    QPoint oldSpeedPos;
-    QPoint speed;
-    QLineF speedVector;
-
-    QTimer speedTimer;
-    QTimer dblclickTimer;
-    QTimer tapHoldTimer;
-    QTimeLine scrollTimeline;
-
-    Qt::ScrollBarPolicy oldHzPolicy;
-    Qt::ScrollBarPolicy oldVtPolicy;
-
-#ifdef Q_OS_SYMBIAN
-    MTouchFeedback* iTouchFeedback; // For Tactile feedback
-#endif
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS(MouseMachine::Options)
-
-#endif // MOUSEMACHINE_H
diff --git a/semperMerk/MouseMachine/README b/semperMerk/MouseMachine/README
deleted file mode 100644
index df18f23..0000000
--- a/semperMerk/MouseMachine/README
+++ /dev/null
@@ -1,9 +0,0 @@
-MouseMachine is Qt class prinicpally allowing kinetic scrolling on any widget.
-
-It is largely inspired by the "flickcharm" class from Nokia. As an exercise, I wanted to reimplement it as a QStateMachine and with a signal/slot interface.
-
-The various interactions like tap, double-tap, tap-and-hold are all signals with a QPoint.
-
-The class requires (I think) Qt 4.6.x
-
-The code is LGPL licensed.
diff --git a/semperMerk/MyMessageHandler.h b/semperMerk/MyMessageHandler.h
deleted file mode 100644
index 52c5eac..0000000
--- a/semperMerk/MyMessageHandler.h
+++ /dev/null
@@ -1,89 +0,0 @@
-#ifndef MYMESSAGEHANDLER_H
-#define MYMESSAGEHANDLER_H
-
-#if defined(Q_OS_WIN)
-extern Q_CORE_EXPORT void qWinMsgHandler(QtMsgType t, const char* str);
-#endif
-
-#ifdef LOG_TO_FILE
-#include <QFile>
-#include <QTextStream>
-
-QFile* pLogFile;
-QTextStream ts;
-#endif
-
-void myMessageOutput(QtMsgType msgType, const char *buf)
-{
-// From corelib/global/qglobal.cpp : qt_message_output
-
-//#if defined(Q_OS_WIN) && !defined(QT_NO_DEBUG_OUTPUT)
-//    qWinMsgHandler(msgType, buf);
-//#endif
-
-#ifdef LOG_TO_FILE
-    if (pLogFile) {
-        ts << buf << endl;
-    }
-#endif
-
-#if defined(Q_CC_MWERKS) && defined(Q_OS_MACX)
-    mac_default_handler(buf);
-#elif defined(Q_OS_WINCE)
-    QString fstr = QString::fromLatin1(buf);
-    fstr += QLatin1Char('\n');
-    OutputDebugString(reinterpret_cast<const wchar_t *> (fstr.utf16()));
-#elif defined(Q_OS_SYMBIAN)
-    // RDebug::Print has a cap of 256 characters so break it up
-    _LIT(format, "[Qt Message] %S");
-    const int maxBlockSize = 256 - ((const TDesC &)format).Length();
-    const TPtrC8 ptr(reinterpret_cast<const TUint8*>(buf));
-    HBufC* hbuffer = q_check_ptr(HBufC::New(qMin(maxBlockSize, ptr.Length())));
-    for (int i = 0; i < ptr.Length(); i += hbuffer->Length()) {
-        hbuffer->Des().Copy(ptr.Mid(i, qMin(maxBlockSize, ptr.Length()-i)));
-        RDebug::Print(format, hbuffer);
-    }
-    delete hbuffer;
-#else
-    fprintf(stderr, "%s\n", buf);
-    fflush(stderr);
-#endif
-
-    if (msgType == QtFatalMsg
-        || (msgType == QtWarningMsg
-        && (!qgetenv("QT_FATAL_WARNINGS").isNull())) ) {
-
-#if defined(Q_CC_MSVC) && defined(QT_DEBUG) && defined(_DEBUG) && defined(_CRT_ERROR)
-    // get the current report mode
-    int reportMode = _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_WNDW);
-    _CrtSetReportMode(_CRT_ERROR, reportMode);
-#if !defined(Q_OS_WINCE)
-    int ret = _CrtDbgReport(_CRT_ERROR, __FILE__, __LINE__, QT_VERSION_STR, buf);
-#else
-    int ret = _CrtDbgReportW(_CRT_ERROR, _CRT_WIDE(__FILE__),
-        __LINE__, _CRT_WIDE(QT_VERSION_STR), reinterpret_cast<const wchar_t *> (QString::fromLatin1(buf).utf16()));
-#endif
-    if (ret == 0  && reportMode & _CRTDBG_MODE_WNDW)
-        return; // ignore
-    else if (ret == 1)
-        _CrtDbgBreak();
-#endif
-
-#if defined(Q_OS_SYMBIAN)
-    __DEBUGGER(); // on the emulator, get the debugger to kick in if there's one around
-    TBuf<256> tmp;
-    TPtrC8 ptr(reinterpret_cast<const TUint8*>(buf));
-    TInt len = Min(tmp.MaxLength(), ptr.Length());
-    tmp.Copy(ptr.Left(len));
-    // Panic the current thread. We don't use real panic codes, so 0 has no special meaning.
-    User::Panic(tmp, 0);
-#elif (defined(Q_OS_UNIX) || defined(Q_CC_MINGW))
-    abort(); // trap; generates core dump
-#else
-    exit(1); // goodbye cruel world
-#endif
-    }
-}
-
-
-#endif // MYMESSAGEHANDLER_H
diff --git a/semperMerk/MyPreferences.cpp b/semperMerk/MyPreferences.cpp
deleted file mode 100644
index a5bebea..0000000
--- a/semperMerk/MyPreferences.cpp
+++ /dev/null
@@ -1,199 +0,0 @@
-//
-// C++ Implementation: MyPreferences
-//
-// Description:
-//
-//
-// Author: cbro <cbro at semperpax.com> (C) 2008, 2009
-//
-// Copyright: See COPYING file that comes with this distribution
-//
-//
-
-#include "MyPreferences.h"
-
-#include <QSettings>
-#include <QToolButton>
-
-#define PARAM_IMPLEMENT_BOOL(Param, Category, Default) \
-    bool mb_##Category##Param = false; \
-    void MyPreferences::set##Category##Param(bool theValue) \
-    { \
-        m_##Category##Param = theValue; \
-        Sets->setValue(#Category"/"#Param, theValue); \
-    } \
-    bool MyPreferences::get##Category##Param() \
-    { \
-        if (!::mb_##Category##Param) { \
-            ::mb_##Category##Param = true; \
-            m_##Category##Param = Sets->value(#Category"/"#Param, Default).toBool(); \
-        } \
-        return  m_##Category##Param; \
-    } \
-    void MyPreferences::initWidget##Category##Param() \
-    { \
-        ui->w##Category##Param->setProperty("checked", get##Category##Param()); \
-    } \
-    void MyPreferences::retrieveWidget##Category##Param() \
-    { \
-        set##Category##Param(ui->w##Category##Param->property("checked").toBool()); \
-    }
-
-#define PARAM_IMPLEMENT_STRING(Param, Category, Default) \
-    bool mb_##Category##Param = false; \
-    void MyPreferences::set##Category##Param(QString theValue) \
-    { \
-        m_##Category##Param = theValue; \
-        Sets->setValue(#Category"/"#Param, theValue); \
-    } \
-    QString MyPreferences::get##Category##Param() \
-    { \
-        if (!::mb_##Category##Param) { \
-            ::mb_##Category##Param = true; \
-            m_##Category##Param = Sets->value(#Category"/"#Param, Default).toString(); \
-        } \
-        return  m_##Category##Param; \
-    } \
-    void MyPreferences::initWidget##Category##Param() \
-    { \
-        if(QString(ui->w##Category##Param->metaObject()->className()) == "QLineEdit") \
-            ui->w##Category##Param->setProperty("text", get##Category##Param()); \
-        else \
-        if(QString(ui->w##Category##Param->metaObject()->className()) == "QComboBox") \
-            ui->w##Category##Param->setProperty("currentText", get##Category##Param()); \
-    } \
-    void MyPreferences::retrieveWidget##Category##Param() \
-    { \
-      if(QString(ui->w##Category##Param->metaObject()->className()) == "QLineEdit") \
-        set##Category##Param(ui->w##Category##Param->property("text").toString()); \
-      else \
-      if(QString(ui->w##Category##Param->metaObject()->className()) == "QComboBox") \
-        set##Category##Param(ui->w##Category##Param->property("currcurrentTextentIndex").toString()); \
-    }
-
-#define PARAM_IMPLEMENT_INT(Param, Category, Default) \
-    bool mb_##Category##Param = false; \
-    void MyPreferences::set##Category##Param(int theValue) \
-    { \
-        m_##Category##Param = theValue; \
-        Sets->setValue(#Category"/"#Param, theValue); \
-    } \
-    int MyPreferences::get##Category##Param() \
-    { \
-        if (!::mb_##Category##Param) { \
-            ::mb_##Category##Param = true; \
-            m_##Category##Param = Sets->value(#Category"/"#Param, Default).toInt(); \
-        } \
-        return  m_##Category##Param; \
-    } \
-    void MyPreferences::initWidget##Category##Param() \
-    { \
-        if(QString(ui->w##Category##Param->metaObject()->className()) == "QComboBox") \
-            ui->w##Category##Param->setProperty("currentIndex", get##Category##Param()); \
-        else \
-            ui->w##Category##Param->setProperty("value", get##Category##Param()); \
-    } \
-    void MyPreferences::retrieveWidget##Category##Param() \
-    { \
-        if(QString(ui->w##Category##Param->metaObject()->className()) == "QComboBox") \
-            set##Category##Param(ui->w##Category##Param->property("currentIndex").toInt()); \
-        else \
-            set##Category##Param(ui->w##Category##Param->property("value").toInt()); \
-    }
-
-#define PARAM_IMPLEMENT_REAL(Param, Category, Default) \
-    bool mb_##Category##Param = false; \
-    void MyPreferences::set##Category##Param(qreal theValue) \
-    { \
-        m_##Category##Param = theValue; \
-        Sets->setValue(#Category"/"#Param, theValue); \
-    } \
-qreal MyPreferences::get##Category##Param() \
-    { \
-        if (!::mb_##Category##Param) { \
-            ::mb_##Category##Param = true; \
-            m_##Category##Param = Sets->value(#Category"/"#Param, Default).toDouble(); \
-        } \
-        return  m_##Category##Param; \
-    } \
-    void MyPreferences::initWidget##Category##Param() \
-    { \
-        ui->w##Category##Param->setProperty("value", get##Category##Param()); \
-    } \
-    void MyPreferences::retrieveWidget##Category##Param() \
-    { \
-        set##Category##Param(ui->w##Category##Param->property("value").toDouble()); \
-    }
-
-
-/***************************/
-
-#include "ui_MyPreferences.h"
-
-MyPreferences* MyPreferences::m_prefInstance = 0;
-
-MyPreferences::MyPreferences(QWidget *parent)
-    :   QWidget(parent),
-        ui(new Ui::MyPreferencesDialog)
-{
-    ui->setupUi(this);
-    ui->dummy->setVisible(false);
-
-    QSize btSz(32, 32);
-    QToolButton* btOk = new QToolButton(this);
-    btOk->setIcon(QIcon::fromTheme("go-down", QPixmap(":icons/down")));
-    btOk->setIconSize(btSz);
-    QToolButton* btExit = new QToolButton(this);
-    btExit->setIcon(QIcon::fromTheme("application-exit", QPixmap(":icons/exit")));
-    btExit->setIconSize(btSz);
-
-    ui->buttonBox->addButton(btOk, QDialogButtonBox::AcceptRole);
-    ui->buttonBox->addButton(btExit, QDialogButtonBox::RejectRole);
-
-    Sets = new QSettings();
-}
-
-MyPreferences::~MyPreferences()
-{
-    delete Sets;
-    delete ui;
-}
-
-void MyPreferences::accept()
-{
-    m_dialogResult = QDialog::Accepted;
-}
-
-void MyPreferences::reject()
-{
-    m_dialogResult = QDialog::Rejected;
-}
-
-bool MyPreferences::execPreferences()
-{
-    QEventLoop loop;
-    connect(ui->buttonBox, SIGNAL(accepted()), &loop, SLOT(quit()));
-    connect(ui->buttonBox, SIGNAL(rejected()), &loop, SLOT(quit()));
-
-    loop.exec(QEventLoop::DialogExec);
-    if (m_dialogResult == QDialog::Accepted) {
-    } else {
-        QCoreApplication::quit();
-    }
-
-    return (m_dialogResult == QDialog::Accepted);
-}
-
-void MyPreferences::changeEvent(QEvent *e)
-{
-    QWidget::changeEvent(e);
-    switch (e->type()) {
-    case QEvent::LanguageChange:
-        ui->retranslateUi(this);
-        break;
-    default:
-        break;
-    }
-}
-
-
diff --git a/semperMerk/MyPreferences.h b/semperMerk/MyPreferences.h
deleted file mode 100644
index 8440b1e..0000000
--- a/semperMerk/MyPreferences.h
+++ /dev/null
@@ -1,114 +0,0 @@
-//
-// C++ Interface: MyPreferences
-//
-// Description:
-//
-//
-// Author: cbro <cbro at semperpax.com> (C) 2008, 2009
-//
-// Copyright: See COPYING file that comes with this distribution
-//
-//
-
-#ifndef MYPREFERENCES_H
-#define MYPREFERENCES_H
-
-#include <QDialog>
-
-class QSettings;
-
-#define PARAM_DECLARE_BOOL(Param, Category) \
-    private: \
-        bool m_##Category##Param; \
-        void initWidget##Category##Param(); \
-        void retrieveWidget##Category##Param(); \
-    public slots: \
-        void set##Category##Param(bool theValue); \
-    public: \
-        bool get##Category##Param();
-
-#define PARAM_DECLARE_STRING(Param, Category) \
-    private: \
-        QString m_##Category##Param; \
-        void initWidget##Category##Param(); \
-        void retrieveWidget##Category##Param(); \
-    public slots: \
-        void set##Category##Param(QString theValue); \
-    public: \
-        QString get##Category##Param();
-
-#define PARAM_DECLARE_INT(Param, Category) \
-    private: \
-        int m_##Category##Param; \
-        void initWidget##Category##Param(); \
-        void retrieveWidget##Category##Param(); \
-    public slots: \
-        void set##Category##Param(int theValue); \
-    public: \
-        int get##Category##Param();
-
-#define PARAM_DECLARE_REAL(Param, Category) \
-    private: \
-        qreal m_##Category##Param; \
-        void initWidget##Category##Param(); \
-        void retrieveWidget##Category##Param(); \
-    public slots: \
-        void set##Category##Param(qreal theValue); \
-    public: \
-        qreal get##Category##Param();
-
-#define SAFE_DELETE(x) {delete (x); x = NULL;}
-#define STRINGIFY(x) XSTRINGIFY(x)
-#define XSTRINGIFY(x) #x
-
-#define SEMPERMERK_PREFS MyPreferences::instance()
-
-/***************************/
-
-namespace Ui {
-    class MyPreferencesDialog;
-}
-
-class MyPreferences : public QWidget
-{
-    Q_OBJECT
-
-public:
-    MyPreferences(QWidget *parent = 0);
-    ~MyPreferences();
-
-    static MyPreferences* instance() {
-        if (!m_prefInstance) {
-            m_prefInstance = new MyPreferences;
-        }
-
-        return m_prefInstance;
-    }
-    static MyPreferences* m_prefInstance;
-
-public slots:
-    bool execPreferences();
-
-private slots:
-    void accept();
-    void reject();
-
-protected:
-    void changeEvent(QEvent *e);
-
-private:
-    Ui::MyPreferencesDialog *ui;
-    int m_dialogResult;
-
-    QSettings * Sets;
-
-public:
-    PARAM_DECLARE_INT(UserAgent, General)
-    PARAM_DECLARE_STRING(LastPicDownloadDir, General)
-    PARAM_DECLARE_STRING(LastDataDownloadDir, General)
-    PARAM_DECLARE_INT(InstantHistorySize, Caching)
-    PARAM_DECLARE_BOOL(ControlAutoCollapse, Ui)
-    PARAM_DECLARE_BOOL(BookmarkAutoBrowse, Ui)
-};
-
-#endif // MYPREFERENCES_H
diff --git a/semperMerk/MyPreferences.ui b/semperMerk/MyPreferences.ui
deleted file mode 100644
index 39aa84e..0000000
--- a/semperMerk/MyPreferences.ui
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <author>Chris Browet</author>
- <class>MyPreferencesDialog</class>
- <widget class="QWidget" name="MyPreferencesDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>416</width>
-    <height>478</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Dialog</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QFrame" name="dummy">
-     <property name="frameShape">
-      <enum>QFrame::StyledPanel</enum>
-     </property>
-     <property name="frameShadow">
-      <enum>QFrame::Raised</enum>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout"/>
-    </widget>
-   </item>
-   <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>40</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::NoButton</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <layoutdefault spacing="4" margin="6"/>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>MyPreferencesDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>257</x>
-     <y>468</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>MyPreferencesDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>325</x>
-     <y>468</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/semperMerk/README.TXT b/semperMerk/README.TXT
deleted file mode 100644
index e69de29..0000000
diff --git a/semperMerk/semperMerk.pro b/semperMerk/semperMerk.pro
deleted file mode 100644
index a86864b..0000000
--- a/semperMerk/semperMerk.pro
+++ /dev/null
@@ -1,127 +0,0 @@
-VERSION = 1.0.0
-QT += network \
-    xml \
-    svg
-
-DEFINES += _MOBILE
-MOBILE = 1
-
-symbian: {
-    CONFIG(release): DEFINES += QT_NO_DEBUG_OUTPUT
-}
-
-# DEFINES += LOG_TO_FILE
-MERKAARTOR_SRC_DIR = $$PWD/../src
-COMMON_DIR = $$MERKAARTOR_SRC_DIR/binaries
-OUTPUT_DIR = $$MERKAARTOR_SRC_DIR/binaries
-DESTDIR = $$OUTPUT_DIR/bin
-
-INCLUDEPATH += $$PWD/src $$PWD/../include $$PWD/../interfaces $MOC_DIR
-DEPENDPATH += $$PWD/../interfaces
-
-win32 {
-  INCLUDEPATH += $$PWD/../binaries/include
-  LIBS += -L$$PWD/../binaries/lib
-}
-
-#win32-msvc* {
-#    LIBS += -lzlib
-#} else {
-#    LIBS += -lz
-#}
-
-#Qt Version
-QT_VERSION = $$[QT_VERSION]
-QT_VERSION = $$split(QT_VERSION, ".")
-QT_VER_MAJ = $$member(QT_VERSION, 0)
-QT_VER_MIN = $$member(QT_VERSION, 1)
-
-DEFINES += VERSION=0.1
-DEFINES += REVISION=
-
-#Include file(s)
-include(../src/common/common.pri)
-include(../src/Backend/Backend.pri)
-include(../interfaces/Interfaces.pri)
-include(../src/PaintStyle/PaintStyle.pri)
-include(../src/PaintStyle/PaintStyleEditor.pri)
-include(../src/Features/Features.pri)
-include(../src/Layers/Layers.pri)
-include(../src/Preferences/Preferences.pri)
-include(../src/Sync/Sync.pri)
-include(../src/Commands/Commands.pri)
-include(../src/Interactions/Interactions.pri)
-include (../src/Docks/Docks.pri)
-include(../src/QMapControl.pri)
-include(../src/ImportExport/ImportExport.pri)
-include(../src/Render/Render.pri)
-isEmpty(MOBILE) {
-  include(../src/qextserialport/qextserialport.pri)
-}
-include(../src/GPS/GPS.pri)
-include(../src/Tools/Tools.pri)
-include(../src/TagTemplate/TagTemplate.pri)
-include(../src/NameFinder/NameFinder.pri)
-include(../src/Utils/Utils.pri)
-
-HEADERS += \
-    src/TitleBar.h \
-    src/HomeView.h \
-    src/AddressBar.h \
-    src/BookmarksView.h \
-    src/BookmarksDelegate.h \
-    src/ZoomStrip.h \
-    src/ControlStrip.h \
-    src/BookmarkBar.h \
-    src/ControlButton.h \
-    MyPreferences.h \
-    MouseMachine/MouseMachine.h \
-    MyMessageHandler.h \
-    src/BookmarksModel.h \
-    src/MainWindow.h \
-    src/BookmarkItem.h \
-    src/ViewMenu.h
-
-SOURCES += src/Main.cpp \
-    src/TitleBar.cpp \
-    src/HomeView.cpp \
-    src/AddressBar.cpp \
-    src/BookmarksView.cpp \
-    src/BookmarksDelegate.cpp \
-    src/ZoomStrip.cpp \
-    src/ControlStrip.cpp \
-    src/BookmarkBar.cpp \
-    MyPreferences.cpp \
-    MouseMachine/MouseMachine.cpp \
-    src/BookmarksModel.cpp \
-    src/MainWindow.cpp \
-    src/BookmarkItem.cpp \
-    src/ViewMenu.cpp
-
-FORMS += MyPreferences.ui \
-    src/BookmarkBar.ui \
-    src/ViewMenu.ui
-RESOURCES += \
-    # src/semperWeb.qrc \
-    src/retinaIcons.qrc \
-    src/resources/resources.qrc
-
-symbian {
-    TARGET.UID3 = 0x200398E6
-
-    ICON = src/resources/Merkaartor.svg
-
-    RSS_RULES = "group_name=\"SemperPax\";"
-    vendorinfo = "; Localised Vendor name" \
-        "%{\"SemperPax\"}" \
-        " " \
-        "; Unique Vendor name" \
-        ":\"SemperPax\"" \
-        " "
-    default_deployment.pkg_prerules += vendorinfo
-    LIBS += -lesock \
-        -linsock
-    TARGET.CAPABILITY = NetworkServices SwEvent ReadDeviceData Location
-    TARGET.EPOCHEAPSIZE = 0x500000 \
-        0x5000000
-}
diff --git a/semperMerk/src/AddressBar.cpp b/semperMerk/src/AddressBar.cpp
deleted file mode 100644
index 6bc3c13..0000000
--- a/semperMerk/src/AddressBar.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info at nokia.com)
-**
-** This file is part of the demos of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info at nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "AddressBar.h"
-
-#include <QtCore>
-#include <QtGui>
-
-class LineEdit: public QLineEdit
-{
-public:
-    LineEdit(QWidget *parent = 0): QLineEdit(parent) {}
-
-    void paintEvent(QPaintEvent *event) {
-        QLineEdit::paintEvent(event);
-        if (text().isEmpty()) {
-            QPainter p(this);
-            int flags = Qt::AlignLeft | Qt::AlignVCenter;
-            p.setPen(palette().color(QPalette::Disabled, QPalette::Text));
-            p.drawText(rect().adjusted(10, 0, 0, 0), flags, "Enter address or search terms");
-            p.end();
-        }
-    }
-};
-
-AddressBar::AddressBar(QWidget *parent)
-    : QWidget(parent)
-{
-    QSize btSize(32, 32);
-
-    m_lineEdit = new LineEdit(this);
-    QFont fnt = m_lineEdit->font();
-    fnt.setPixelSize(20);
-    m_lineEdit->setFont(fnt);
-
-    connect(m_lineEdit, SIGNAL(returnPressed()), SLOT(processAddress()));
-    m_goButton = new QToolButton(this);
-//    m_toolButton->setText("Go");
-    m_goButton->setIcon(QPixmap(":/icons/forward"));
-    m_goButton->setIconSize(btSize);
-    connect(m_goButton, SIGNAL(clicked()), SLOT(processAddress()));
-
-    QHBoxLayout *layout = new QHBoxLayout(this);
-    layout->setMargin(0);
-    layout->setSpacing(2);
-    layout->addWidget(m_lineEdit);
-    layout->addWidget(m_goButton);
-
-//    setFocusProxy(m_lineEdit);
-}
-
-void AddressBar::processAddress()
-{
-    if (m_lineEdit->text().isEmpty())
-        return;
-
-    QString url = m_lineEdit->text();
-    if (!url.contains('.') || url.contains(' '))
-        url = QString("http://www.google.com/search?q=%1").arg(url);
-    QUrl u(url);
-    emit addressEntered(QString(u.toEncoded()));
-}
-
-void AddressBar::setUrl(const QString& theUrl)
-{
-    m_lineEdit->setText(theUrl);
-}
-
diff --git a/semperMerk/src/AddressBar.h b/semperMerk/src/AddressBar.h
deleted file mode 100644
index ae76dec..0000000
--- a/semperMerk/src/AddressBar.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info at nokia.com)
-**
-** This file is part of the demos of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info at nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef ADDRESSBAR_H
-#define ADDRESSBAR_H
-
-#include <QWidget>
-
-class QLineEdit;
-class QToolButton;
-
-class AddressBar : public QWidget
-{
-    Q_OBJECT
-
-public:
-    AddressBar(QWidget *parent = 0);
-    void setUrl(const QString& theUrl);
-
-signals:
-    void addressEntered(const QString &address);
-    void back();
-
-private slots:
-    void processAddress();
-
-private:
-    QLineEdit *m_lineEdit;
-    QToolButton *m_goButton;
-    QToolButton *m_backButton;
-};
-
-#endif // ADDRESSBAR_H
diff --git a/semperMerk/src/BookmarkBar.cpp b/semperMerk/src/BookmarkBar.cpp
deleted file mode 100644
index 3a841e1..0000000
--- a/semperMerk/src/BookmarkBar.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "BookmarkBar.h"
-
-#include <QtCore>
-#include <QtGui>
-
-BookmarkBar::BookmarkBar(QWidget *parent)
-    : QWidget(parent)
-{
-    ui.setupUi(this);
-
-    connect(ui.m_updButton, SIGNAL(clicked()), SLOT(processBookmark()));
-    connect(ui.m_delButton, SIGNAL(clicked()), SLOT(delBookmark()));
-    connect(ui.m_fldrButton, SIGNAL(clicked()), SLOT(processFolder()));
-}
-
-void BookmarkBar::processBookmark()
-{
-    if (!ui.m_nameEdit->text().isEmpty() && !ui.m_urlEdit->text().isEmpty())
-        emit bookmarkEntered(ui.m_nameEdit->text(), ui.m_urlEdit->text());
-}
-
-void BookmarkBar::processFolder()
-{
-    if (!ui.m_nameEdit->text().isEmpty())
-        emit bookmarkEntered(ui.m_nameEdit->text(), QString());
-}
-
-void BookmarkBar::delBookmark()
-{
-    if (!ui.m_nameEdit->text().isEmpty())
-        emit bookmarkDeleted(ui.m_nameEdit->text());
-}
-
-void BookmarkBar::slotBookmarkSelected(const QString& name, const QString& url)
-{
-    ui.m_nameEdit->setText(name);
-    ui.m_urlEdit->setText(url);
-}
diff --git a/semperMerk/src/BookmarkBar.h b/semperMerk/src/BookmarkBar.h
deleted file mode 100644
index cf6eddb..0000000
--- a/semperMerk/src/BookmarkBar.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef BOOKMARKBAR_H
-#define BOOKMARKBAR_H
-
-#include <QWidget>
-
-#include "ui_BookmarkBar.h"
-
-class QLineEdit;
-class QToolButton;
-
-class BookmarkBar : public QWidget
-{
-    Q_OBJECT
-
-public:
-    BookmarkBar(QWidget *parent = 0);
-
-protected:
-
-signals:
-    void bookmarkEntered(const QString &name, const QString &url);
-    void bookmarkDeleted(const QString &name);
-
-public slots:
-    void slotBookmarkSelected(const QString& name, const QString& url);
-
-private slots:
-    void processBookmark();
-    void processFolder();
-    void delBookmark();
-
-private:
-    Ui::BookmarkBar ui;
-
-};
-
-#endif // BOOKMARKBAR_H
diff --git a/semperMerk/src/BookmarkBar.ui b/semperMerk/src/BookmarkBar.ui
deleted file mode 100644
index b71a8bd..0000000
--- a/semperMerk/src/BookmarkBar.ui
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>BookmarkBar</class>
- <widget class="QWidget" name="BookmarkBar">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>212</width>
-    <height>92</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout">
-   <property name="margin">
-    <number>4</number>
-   </property>
-   <property name="spacing">
-    <number>4</number>
-   </property>
-   <item row="0" column="0">
-    <widget class="QLabel" name="label">
-     <property name="text">
-      <string>Title</string>
-     </property>
-    </widget>
-   </item>
-   <item row="2" column="0" colspan="4">
-    <widget class="QLineEdit" name="m_nameEdit"/>
-   </item>
-   <item row="3" column="0">
-    <widget class="QLabel" name="label_2">
-     <property name="text">
-      <string>URL</string>
-     </property>
-    </widget>
-   </item>
-   <item row="4" column="0" colspan="4">
-    <widget class="QLineEdit" name="m_urlEdit"/>
-   </item>
-   <item row="0" column="2">
-    <widget class="QToolButton" name="m_delButton">
-     <property name="text">
-      <string>Del</string>
-     </property>
-    </widget>
-   </item>
-   <item row="0" column="3">
-    <widget class="QToolButton" name="m_fldrButton">
-     <property name="text">
-      <string>Fldr</string>
-     </property>
-    </widget>
-   </item>
-   <item row="0" column="1">
-    <widget class="QToolButton" name="m_updButton">
-     <property name="text">
-      <string>Upd</string>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/semperMerk/src/BookmarkItem.cpp b/semperMerk/src/BookmarkItem.cpp
deleted file mode 100644
index ee7e3a5..0000000
--- a/semperMerk/src/BookmarkItem.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-#include "BookmarkItem.h"
-
-BookmarkItem::BookmarkItem()
-    : QStandardItem()
-{
-    m_bookmark.title = QString();
-    m_bookmark.uri = QString();
-}
-
-BookmarkItem::BookmarkItem(const QString & text)
-    : QStandardItem(text)
-{
-    m_bookmark.title = text;
-    m_bookmark.uri = QString();
-}
-
-BookmarkItem::BookmarkItem(const BookmarkItem &other)
-    : QStandardItem(other)
-{
-    m_bookmark = other.m_bookmark;
-}
-
-BookmarkItem & BookmarkItem::operator=(const BookmarkItem &other)
-{
-    if (this != &other) {
-        QStandardItem::operator =(other);
-        m_bookmark = other.m_bookmark;
-    }
-    return *this;
-}
-
-BookmarkItem::~BookmarkItem()
-{
-}
-
-MobileBookmark& BookmarkItem::bookmark()
-{
-    return m_bookmark;
-}
-
-BookmarkItem * BookmarkItem::BookmarkItem::clone() const
-{
-    BookmarkItem* i = new BookmarkItem(m_bookmark.title);
-    i->m_bookmark = m_bookmark;
-
-    return i;
-}
-
-void BookmarkItem::read(QDataStream &in)
-{
-    QStandardItem::read(in);
-    in >> m_bookmark.title;
-    in >> m_bookmark.uri;
-}
-
-void BookmarkItem::write(QDataStream &out) const
-{
-    QStandardItem::write(out);
-    out << m_bookmark.title;
-    out << m_bookmark.uri;
-}
-
-bool BookmarkItem::isFolder()
-{
-    return m_bookmark.uri.isEmpty();
-}
diff --git a/semperMerk/src/BookmarkItem.h b/semperMerk/src/BookmarkItem.h
deleted file mode 100644
index fcd638e..0000000
--- a/semperMerk/src/BookmarkItem.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef BOOKMARKITEM_H
-#define BOOKMARKITEM_H
-
-#include "BookmarksModel.h"
-
-struct MobileBookmark
-{
-    QString title;
-    QString uri;
-};
-
-class BookmarkItem : public QObject, public QStandardItem
-{
-    Q_OBJECT
-    Q_PROPERTY(bool isFolder READ isFolder)
-
-    friend class BookmarksModel;
-
-public:
-    BookmarkItem();
-    BookmarkItem(const QString & text);
-    BookmarkItem(const BookmarkItem &other);
-    ~BookmarkItem();
-
-    int type () const { return QStandardItem::UserType + 1; }
-    BookmarkItem * clone () const;
-
-public:
-    MobileBookmark& bookmark();
-
-    BookmarkItem &operator=(const BookmarkItem &other);
-    bool isFolder();
-
-    void read(QDataStream &in);
-    void write(QDataStream &out) const;
-private:
-    MobileBookmark m_bookmark;
-};
-
-#endif // BOOKMARKITEM_H
diff --git a/semperMerk/src/BookmarksDelegate.cpp b/semperMerk/src/BookmarksDelegate.cpp
deleted file mode 100644
index 554887d..0000000
--- a/semperMerk/src/BookmarksDelegate.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-#include "BookmarksDelegate.h"
-#include "BookmarkItem.h"
-#include "BookmarksView.h"
-
-#include <QDebug>
-#include <QPainter>
-
-
-#define RADIUS 10
-#define SPACER 10
-
-#define scaleFactor1 0.4
-#define scaleFactor2 0.8
-
-BookmarksDelegate::BookmarksDelegate(BookmarksView *aParent)
-    : QItemDelegate(aParent)
-    , mViewPtr(aParent)
-{
-}
-
-BookmarksDelegate::~BookmarksDelegate()
-{
-}
-
-void BookmarksDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
-{
-    if(!mViewPtr)
-        return;
-
-    painter->save();
-    QColor bkgrColor = QColor(0xAA,0xAA,0xAA);
-    QColor folderColor = QColor(0x33, 0x33, 0x33);
-
-    QPen borderPen(bkgrColor.darker());
-    if(!isFolder(index))
-    {
-        QRadialGradient itemGradient(0.3*(qreal)option.rect.width()+option.rect.left(), -2*(qreal)option.rect.height()+option.rect.top(), 0.8*(qreal)option.rect.width(), 0.3*(qreal)option.rect.width()+option.rect.left(), -2*(qreal)option.rect.height()+option.rect.top());
-        itemGradient.setColorAt(0.0, Qt::white);
-        itemGradient.setColorAt(1.0, bkgrColor);
-
-        if(isLast(index))
-        {
-            QPainterPath endPath;
-            endPath.moveTo(option.rect.topLeft());
-            endPath.lineTo(option.rect.bottomLeft()-QPoint(0, RADIUS));
-            endPath.arcTo(option.rect.left(), option.rect.bottom()-2*RADIUS, 2*RADIUS, 2*RADIUS, 180, 90);
-            endPath.lineTo(option.rect.bottomRight()-QPoint(RADIUS, 0));
-            endPath.arcTo(option.rect.right()-2*RADIUS, option.rect.bottom()-2*RADIUS, 2*RADIUS, 2*RADIUS, 270, 90);
-            endPath.lineTo(option.rect.topRight());
-
-            //painter->setBrush( bkgrColor );
-            painter->setBrush(itemGradient);
-            painter->setPen(borderPen);
-            painter->drawPath(endPath);
-        }
-        else // middle elements
-        {
-            //painter->setBrush( bkgrColor );
-            painter->setBrush(itemGradient);
-            painter->setPen(Qt::NoPen);
-            painter->drawRect(option.rect);
-
-            painter->setPen(borderPen);
-            // vertical lines
-            painter->drawLine(option.rect.topLeft(), option.rect.bottomLeft());
-            painter->drawLine(option.rect.topRight(), option.rect.bottomRight());
-            // horizontal lines
-            painter->drawLine(option.rect.bottomLeft(), option.rect.bottomRight());
-        }
-
-        QRectF brect = option.rect;
-        brect.setLeft(brect.left()+SPACER);
-        painter->setFont(option.font);
-        painter->drawText(brect, Qt::AlignVCenter, qVariantValue<QString>(index.data()));
-    }
-    else // doesn't have parent
-    {
-        QRadialGradient itemGradient(0.3*(qreal)option.rect.width()+option.rect.left(), -2*(qreal)option.rect.height()+option.rect.top(), 0.8*(qreal)option.rect.width(), 0.3*(qreal)option.rect.width()+option.rect.left(), -2*(qreal)option.rect.height()+option.rect.top());
-        itemGradient.setColorAt(0.0, Qt::white);
-        itemGradient.setColorAt(1.0, folderColor);
-
-        QPainterPath titlePath;
-        if(isExpanded(index))
-        {
-            titlePath.moveTo(option.rect.bottomLeft());
-            titlePath.lineTo(option.rect.topLeft()+QPoint(0, RADIUS));
-            titlePath.arcTo(option.rect.left(), option.rect.top(), 2*RADIUS, 2*RADIUS, 180, -90);
-            titlePath.lineTo(option.rect.topRight()-QPoint(RADIUS, 0));
-            titlePath.arcTo(option.rect.right()-2*RADIUS, option.rect.top(), 2*RADIUS, 2*RADIUS, 90, -90);
-            titlePath.lineTo(option.rect.bottomRight());
-            titlePath.closeSubpath();
-        }
-        else
-        {
-            titlePath.lineTo(option.rect.topLeft()+QPoint(0, RADIUS));
-            titlePath.arcTo(option.rect.left(), option.rect.top(), 2*RADIUS, 2*RADIUS, 180, -90);
-            titlePath.lineTo(option.rect.topRight()-QPoint(RADIUS, 0));
-            titlePath.arcTo(option.rect.right()-2*RADIUS, option.rect.top(), 2*RADIUS, 2*RADIUS, 90, -90);
-            titlePath.lineTo(option.rect.bottomRight()-QPoint(0, RADIUS));
-            titlePath.arcTo(option.rect.right()-2*RADIUS, option.rect.bottom()-2*RADIUS, 2*RADIUS, 2*RADIUS, 0, -90);
-            titlePath.lineTo(option.rect.bottomLeft()+QPoint(RADIUS, 0));
-            titlePath.arcTo(option.rect.left(), option.rect.bottom()-2*RADIUS, 2*RADIUS, 2*RADIUS, 270, -90);
-            titlePath.closeSubpath();
-        }
-
-        painter->setBrush(itemGradient);
-        painter->setPen(borderPen);
-        painter->drawPath(titlePath);
-
-        QRectF brect = option.rect;
-        brect.setLeft(brect.left()+SPACER);
-        painter->setFont(option.font);
-        painter->drawText(brect, Qt::AlignVCenter, qVariantValue<QString>(index.data()));
-    }
-
-    //// HIGHLIGHTING SELECTED ITEM
-    //if (option.state & QStyle::State_Selected)
-        //painter->fillRect(option.rect, option.palette.highlight());
-
-    painter->restore();
-}
-
-QSize BookmarksDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
-{
-    Q_UNUSED(option)
-
-    return QSize(100,40);
-}
-
-bool BookmarksDelegate::hasParent( const QModelIndex &index ) const
-{
-    if( index.parent().isValid() )
-        return true;
-    else
-        return false;
-}
-
-bool BookmarksDelegate::isFolder( const QModelIndex &index ) const
-{
-    BookmarkItem *item=dynamic_cast<BookmarkItem*>(mViewPtr->model()->itemFromIndex(index));
-    Q_ASSERT(item);
-    return item->bookmark().uri.isEmpty();
-}
-
-bool BookmarksDelegate::isLast( const QModelIndex &index ) const
-{
-    if(!hasParent(index))
-        return false; // what should be returned here?
-
-    if(index.row() >= (mViewPtr->model()->rowCount(index.parent())-1))
-        return true;
-    else
-        return false;
-}
-
-bool BookmarksDelegate::isExpanded( const QModelIndex &index ) const
-{
-    if( !mViewPtr )
-        return false;
-    else
-        return mViewPtr->view()->isExpanded( index );
-}
-
-bool BookmarksDelegate::isPointFromRect(const QPoint &aPoint, const QRect &aRect) const
-{
-    if( (aPoint.x()>=aRect.left() && aPoint.x()<=aRect.right()) && (aPoint.y()>=aRect.top() && aPoint.y()<=aRect.bottom()) )
-        return true;
-
-    return false;
-}
-
diff --git a/semperMerk/src/BookmarksDelegate.h b/semperMerk/src/BookmarksDelegate.h
deleted file mode 100644
index b4a3a83..0000000
--- a/semperMerk/src/BookmarksDelegate.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef DELEGATE_H
-#define DELEGATE_H
-
-#include <QItemDelegate>
-#include <QTreeView>
-#include <QPointer>
-
-class BookmarksView;
-
-class BookmarksDelegate : public QItemDelegate
-{
-    Q_OBJECT
-
-    public:
-
-        BookmarksDelegate(BookmarksView *aParent); // the delegate 'owner' has to be specified in the constructor - it's used to obtain visualRect of selected item/index
-        ~BookmarksDelegate();
-
-        void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
-        QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
-        bool isPointFromRect(const QPoint &aPoint, const QRect &aRect) const;
-
-private:
-        bool hasParent( const QModelIndex &index ) const;
-        bool isFolder(const QModelIndex &index) const;
-        bool isLast( const QModelIndex &index ) const;
-        bool isExpanded( const QModelIndex &index ) const;
-
-    private:
-        QPointer<BookmarksView> mViewPtr;
-};
-
-#endif /* DELEGATE_H */
-
diff --git a/semperMerk/src/BookmarksModel.cpp b/semperMerk/src/BookmarksModel.cpp
deleted file mode 100644
index 3d5e67b..0000000
--- a/semperMerk/src/BookmarksModel.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "BookmarksModel.h"
-#include "BookmarkItem.h"
-
-BookmarksModel::BookmarksModel(QObject* parent)
-    : QStandardItemModel(parent)
-{
-    setItemPrototype(new BookmarkItem);
-}
-
-BookmarksModel::BookmarksModel(int rows, int columns, QObject* parent)
-    : QStandardItemModel(rows, columns, parent)
-{
-}
-
diff --git a/semperMerk/src/BookmarksModel.h b/semperMerk/src/BookmarksModel.h
deleted file mode 100644
index 301526f..0000000
--- a/semperMerk/src/BookmarksModel.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef BOOKMARKSMODEL_H
-#define BOOKMARKSMODEL_H
-
-#include <QStandardItemModel>
-
-class BookmarkItem;
-
-class BookmarksModel : public QStandardItemModel
-{
-    Q_OBJECT
-
-public:
-    BookmarksModel(QObject * parent = 0);
-    BookmarksModel(int rows, int columns, QObject * parent = 0);
-
-public:
-};
-
-#endif // BOOKMARKSMODEL_H
diff --git a/semperMerk/src/BookmarksView.cpp b/semperMerk/src/BookmarksView.cpp
deleted file mode 100644
index 3f37a0a..0000000
--- a/semperMerk/src/BookmarksView.cpp
+++ /dev/null
@@ -1,302 +0,0 @@
-
-#include "BookmarksView.h"
-#include "BookmarksDelegate.h"
-#include "BookmarkItem.h"
-
-BookmarksView::BookmarksView(QWidget *parent)
-    : QWidget(parent)
-{
-    QString sData;
-    QList<QStandardItem *> items;
-
-    fromXml();
-
-#if 1
-    int rowCount;
-    if (!m_model.rowCount()) {
-        qDebug() << "Bookmarks: " << QDir::homePath() + "/Bookmarks.bin";
-        QFile f(QDir::homePath() + "/Bookmarks.bin");
-        f.open(QIODevice::ReadOnly);
-        if (f.isOpen()) {
-            QDataStream d(&f);
-            d >> rowCount;
-            for (int i=0; i<rowCount; i++) {
-                items.clear();
-                d >> sData;
-                BookmarkItem* it = new BookmarkItem(sData);
-                it->setEditable(false);
-                it->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
-                d >> sData;
-                it->bookmark().uri = sData;
-                m_model.appendRow(it);
-            }
-            f.close();;
-        }
-    }
-#endif
-
-    if (!m_model.rowCount()) {
-        BookmarkItem* bk1 = new BookmarkItem("SemperPax");
-        bk1->bookmark().uri = "http://redmine.semperpax.com";
-        bk1->setEditable(false);
-        bk1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
-        m_model.appendRow(bk1);
-
-        bk1 = new BookmarkItem("Twitter");
-        bk1->bookmark().uri = "http://mobile.twitter.com";
-        bk1->setEditable(false);
-        bk1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
-        m_model.appendRow(bk1);
-
-        bk1 = new BookmarkItem("Wikipedia (Mobile)");
-        bk1->bookmark().uri = "http://mobile.wikipedia.org";
-        bk1->setEditable(false);
-        bk1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
-        m_model.appendRow(bk1);
-
-        BookmarkItem* fld1 = new BookmarkItem("Google");
-        fld1->setEditable(false);
-        fld1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsDropEnabled);
-        m_model.appendRow(fld1);
-
-        bk1 = new BookmarkItem("Google Search");
-        bk1->bookmark().uri = "http://www.google.com/m";
-        bk1->setEditable(false);
-        bk1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
-        fld1->setChild(fld1->rowCount(), bk1);
-
-        bk1 = new BookmarkItem("GMail");
-        bk1->bookmark().uri = "http://m.gmail.com";
-        bk1->setEditable(false);
-        bk1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
-        fld1->setChild(fld1->rowCount(), bk1);
-    }
-
-    m_iconView = new QTreeView(this);
-    m_iconView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
-
-    m_iconView->setDragEnabled(true);
-    m_iconView->setAcceptDrops(true);
-    m_iconView->setDropIndicatorShown(true);
-    m_iconView->setDefaultDropAction(Qt::MoveAction);
-    m_iconView->setSelectionBehavior(QAbstractItemView::SelectRows);
-    m_iconView->setDragDropOverwriteMode(false);
-    m_iconView->setExpandsOnDoubleClick(false);
-    m_iconView->setAutoScroll(true);
-
-    m_iconView->setModel(&m_model);
-    connect(m_iconView, SIGNAL(clicked(const QModelIndex &)), SLOT(select(const QModelIndex &)));
-    connect(m_iconView, SIGNAL(doubleClicked(const QModelIndex &)), SLOT(activate(const QModelIndex &)));
-
-    m_iconView->setHeaderHidden(true);
-    m_iconView->setRootIsDecorated(false);
-    m_iconView->setIndentation(10);
-    m_iconView->setAnimated(true);
-    m_iconView->setUniformRowHeights(true);
-    m_iconView->setItemDelegate(new BookmarksDelegate(this));
-
-//    charm = new MouseMachine(m_iconView, MouseMachine::AutoScroll);
-//	connect(charm, SIGNAL(singleTap(QPoint)), SLOT(slotClicked(QPoint)));
-//    connect(charm, SIGNAL(doubleTap(QPoint)), SLOT(slotDoubleClicked(QPoint)));
-//	connect(charm, SIGNAL(tapAndHold(QPoint)), SLOT(slotTapAndHold(QPoint)));
-
-    QVBoxLayout *layout = new QVBoxLayout(this);
-    setLayout(layout);
-    layout->setMargin(0);
-    layout->addWidget(m_iconView);
-
-    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
-}
-
-BookmarksView::~BookmarksView()
-{
-    toXml();
-}
-
-void BookmarksView::select(const QModelIndex &index)
-{
-    BookmarkItem *item=static_cast<BookmarkItem*>(m_model.itemFromIndex(index));
-
-    QString name = item->bookmark().title;
-    QString url = item->bookmark().uri;
-
-    if (url.isEmpty())
-        m_iconView->setExpanded(index, !m_iconView->isExpanded(index));
-    emit bookmarkSelected(name, url);
-}
-
-void BookmarksView::activate(const QModelIndex &index)
-{
-    BookmarkItem *item=static_cast<BookmarkItem*>(m_model.itemFromIndex(index));
-    if (!item)
-        return;
-
-    if (item->bookmark().uri.isEmpty())
-        m_iconView->setExpanded(index, !m_iconView->isExpanded(index));
-    else
-        emit urlSelected(QUrl(item->bookmark().uri));
-}
-
-void BookmarksView::bookmarkAdd(const QString& name, const QString &url, int seq)
-{
-    QList<QStandardItem *> items = m_model.findItems(name, Qt::MatchRecursive | Qt::MatchExactly);
-    if (items.size() == 0) {
-        BookmarkItem *ibk;
-
-        ibk = new BookmarkItem(name);
-        ibk->bookmark().uri = url;
-        ibk->setEditable(false);
-        ibk->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
-        if (url.isEmpty())
-            ibk->setFlags(ibk->flags() | Qt::ItemIsDropEnabled);
-        items.append(ibk);
-        m_model.appendRow(items);
-    } else {
-        BookmarkItem *item=static_cast<BookmarkItem*>(items[0]);
-        bool isfolder = url.isEmpty();
-        if (item->isFolder() != isfolder) {
-            bookmarkAdd(QString("%1#%2").arg(name).arg(seq, 1), url, ++seq);
-        } else {
-            item->bookmark().uri = url;
-        }
-    }
-}
-
-void BookmarksView::bookmarkDel(const QString& name)
-{
-    QList<QStandardItem *> items = m_model.findItems(name, Qt::MatchRecursive | Qt::MatchExactly);
-    if (items.size() != 0) {
-        QModelIndex ix = m_model.indexFromItem(items[0]);
-        m_model.removeRow(ix.row(), ix.parent());
-    }
-}
-
-void BookmarksView::slotDoubleClicked(QPoint p)
-{
-    QModelIndex index = m_iconView->indexAt(p);
-    activate(index);
-}
-
-void BookmarksView::fromXmlFolder(QDomElement& e, BookmarkItem* fit)
-{
-    QDomElement c = e.firstChildElement();
-    while(!c.isNull()) {
-        if (c.tagName() == "Bookmark") {
-            BookmarkItem* bk = new BookmarkItem(c.attribute("title"));
-            bk->setEditable(false);
-            bk->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
-            bk->bookmark().uri = c.attribute("uri");
-
-            fit->setChild(fit->rowCount(), bk);
-        } else if (c.tagName() == "Folder") {
-            BookmarkItem* bk = new BookmarkItem(c.attribute("title"));
-            bk->setEditable(false);
-            bk->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsDropEnabled);
-            fit->setChild(fit->rowCount(), bk);
-
-            fromXmlFolder(c, bk);
-        }
-
-        c = c.nextSiblingElement();
-    }
-}
-
-void BookmarksView::fromXml()
-{
-    qDebug() << "Bookmarks: " << QDir::homePath() + "/semperWebBookmarks.xml";
-    QFile f(QDir::homePath() + "/semperWebBookmarks.xml");
-    f.open(QIODevice::ReadOnly);
-    if (f.isOpen()) {
-        QDomDocument doc;
-        doc.setContent(&f);
-        f.close();
-
-        QDomElement bks = doc.documentElement();
-        while (!bks.isNull()) {
-            if (bks.nodeName() == "BookmarkList") {
-                QDomElement c = bks.firstChildElement();
-                while(!c.isNull()) {
-                    if (c.tagName() == "Bookmark") {
-                        BookmarkItem* bk = new BookmarkItem(c.attribute("title"));
-                        bk->setEditable(false);
-                        bk->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
-                        bk->bookmark().uri = c.attribute("uri");
-
-                        m_model.appendRow(bk);
-                    } else if (c.tagName() == "Folder") {
-                        BookmarkItem* bk = new BookmarkItem(c.attribute("title"));
-                        bk->setEditable(false);
-                        bk->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsDropEnabled);
-                        m_model.appendRow(bk);
-
-                        fromXmlFolder(c, bk);
-                    }
-
-                    c = c.nextSiblingElement();
-                }
-            }
-            bks = bks.nextSiblingElement();
-        }
-    }
-}
-
-void BookmarksView::toXmlFolder(QDomElement& e, QModelIndex& pindex)
-{
-    BookmarkItem* pit = static_cast<BookmarkItem*>(m_model.itemFromIndex(pindex));
-
-    for (int i=0; i<pit->rowCount(); ++i) {
-        QModelIndex ix = m_model.index(i, 0, pindex);
-        BookmarkItem* it = static_cast<BookmarkItem*>(m_model.itemFromIndex(ix));
-
-        if (it->bookmark().uri.isEmpty()) {
-            QDomElement fld = e.ownerDocument().createElement("Folder");
-            e.appendChild(fld);
-
-            fld.setAttribute("title", it->bookmark().title);
-            toXmlFolder(fld, ix);
-        } else {
-            QDomElement bk = e.ownerDocument().createElement("Bookmark");
-            e.appendChild(bk);
-
-            bk.setAttribute("title", it->bookmark().title);
-            bk.setAttribute("uri", it->bookmark().uri);
-        }
-    }
-}
-
-void BookmarksView::toXml()
-{
-    QDomDocument doc;
-    doc.appendChild(doc.createProcessingInstruction("xml", "version=\"1.0\""));
-
-    QDomElement rt = doc.createElement("BookmarkList");
-    doc.appendChild(rt);
-
-    for (int i=0; i<m_model.rowCount(); ++i) {
-        QModelIndex ix = m_model.index(i, 0);
-        BookmarkItem* it = static_cast<BookmarkItem*>(m_model.itemFromIndex(ix));
-
-        if (it->bookmark().uri.isEmpty()) {
-            QDomElement fld = doc.createElement("Folder");
-            rt.appendChild(fld);
-
-            fld.setAttribute("title", it->bookmark().title);
-            toXmlFolder(fld, ix);
-        } else {
-            QDomElement bk = doc.createElement("Bookmark");
-            rt.appendChild(bk);
-
-            bk.setAttribute("title", it->bookmark().title);
-            bk.setAttribute("uri", it->bookmark().uri);
-        }
-    }
-    QByteArray ba = doc.toByteArray();
-
-    QFile f(QDir::homePath() + "/semperWebBookmarks.xml");
-    f.open(QIODevice::WriteOnly);
-    if (f.isOpen()) {
-        f.write(ba);
-        f.close();
-    }
-}
-
diff --git a/semperMerk/src/BookmarksView.h b/semperMerk/src/BookmarksView.h
deleted file mode 100644
index 3a49c61..0000000
--- a/semperMerk/src/BookmarksView.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info at nokia.com)
-**
-** This file is part of the demos of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info at nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef BOOKMARKSVIEW_H
-#define BOOKMARKSVIEW_H
-
-#include <QtGui>
-#include <QtXml>
-
-#include "BookmarksModel.h"
-#include "MouseMachine/MouseMachine.h"
-
-class QListWidgetItem;
-class QUrl;
-
-class BookmarksView : public QWidget
-{
-    Q_OBJECT
-
-public:
-    BookmarksView(QWidget *parent = 0);
-    ~BookmarksView();
-
-    QTreeView* view() { return m_iconView; }
-    BookmarksModel* model() { return &m_model; }
-
-    void fromXml();
-    void toXml();
-
-signals:
-    void bookmarkSelected(const QString& name, const QString &url);
-    void urlSelected(const QUrl &url);
-
-public slots:
-    void bookmarkAdd(const QString& name, const QString &url, int seq=0);
-    void bookmarkDel(const QString& name);
-
-private slots:
-    void select(const QModelIndex &index);
-    void activate(const QModelIndex &index);
-    void slotDoubleClicked(QPoint p);
-
-private:
-    BookmarksModel m_model;
-    QTreeView *m_iconView;
-    MouseMachine* charm;
-
-    void fromXmlFolder(QDomElement &e, BookmarkItem *fit);
-    void toXmlFolder(QDomElement &e, QModelIndex &pindex);
-};
-
-#endif // BOOKMARKSVIEW_H
diff --git a/semperMerk/src/BrowserCache.cpp b/semperMerk/src/BrowserCache.cpp
deleted file mode 100644
index e082935..0000000
--- a/semperMerk/src/BrowserCache.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-#include "BrowserCache.h"
-
-#include <QIODevice>
-#include <QNetworkCacheMetaData>
-
-BrowserCache::BrowserCache(QObject *parent) :
-    QAbstractNetworkCache(parent)
-{
-    m_cache = new QCache<int, BrowserCacheItem>(3000000);
-}
-
-BrowserCache::~BrowserCache ()
-{
-    delete m_cache;
-}
-
-qint64 BrowserCache::cacheSize() const
-{
-    return m_cache->size();
-}
-
-QIODevice * BrowserCache::data(const QUrl &url)
-{
-    BrowserCacheItem* a = m_cache->take(qHash(url.toString()));
-    if (!a)
-        return NULL;
-
-    QBuffer* buf = new QBuffer(&a->data);
-    buf->open(QIODevice::ReadWrite);
-    return buf;
-}
-
-void BrowserCache::insert(QIODevice *device)
-{
-    if (!m_devices.contains(device)) {
-        delete device;
-        return;
-    }
-    BrowserCacheItem* c = m_devices.take(device);
-    m_cache->insert(qHash(c->meta.url().toString()), c, sizeof(BrowserCacheItem) + c->data.size());
-    delete device;
-}
-
-QNetworkCacheMetaData BrowserCache::metaData(const QUrl &url)
-{
-    BrowserCacheItem* c = m_cache->object(qHash(url.toString()));
-    if (c)
-        return c->meta;
-    else {
-        QNetworkCacheMetaData ret;
-        return ret;
-    }
-
-}
-
-QIODevice * BrowserCache::prepare(const QNetworkCacheMetaData &metaData)
-{
-    BrowserCacheItem* c = new BrowserCacheItem;
-    c->meta = metaData;
-    QBuffer* buf = new QBuffer(&c->data);
-    buf->open(QIODevice::ReadWrite);
-    m_devices[buf] = c;
-    return buf;
-}
-
-bool BrowserCache::remove(const QUrl &url)
-{
-    return m_cache->remove(qHash(url.toString()));
-}
-
-void BrowserCache::updateMetaData(const QNetworkCacheMetaData &metaData)
-{
-    BrowserCacheItem* c = m_cache->object(qHash(metaData.url().toString()));
-    if (c) {
-        c->meta = metaData;
-    }
-}
-
-void BrowserCache::clear()
-{
-    m_cache->clear();
-}
-
-
diff --git a/semperMerk/src/BrowserCache.h b/semperMerk/src/BrowserCache.h
deleted file mode 100644
index 05b2d43..0000000
--- a/semperMerk/src/BrowserCache.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef BROWSERCACHE_H
-#define BROWSERCACHE_H
-
-#include <QAbstractNetworkCache>
-#include <QCache>
-#include <QBuffer>
-#include <QHash>
-
-struct BrowserCacheItem {
-    QNetworkCacheMetaData meta;
-    QByteArray data;
-};
-
-class BrowserCache : public QAbstractNetworkCache
-{
-    Q_OBJECT
-public:
-    explicit BrowserCache(QObject *parent = 0);
-    virtual	~BrowserCache ();
-
-public:
-    virtual qint64	cacheSize () const;
-    virtual QIODevice *	data ( const QUrl & url );
-    virtual void	insert ( QIODevice * device );
-    virtual QNetworkCacheMetaData	metaData ( const QUrl & url );
-    virtual QIODevice *	prepare ( const QNetworkCacheMetaData & metaData );
-    virtual bool	remove ( const QUrl & url );
-    virtual void	updateMetaData ( const QNetworkCacheMetaData & metaData );
-
-public slots:
-    virtual void	clear ();
-
-private:
-    QCache<int, BrowserCacheItem>* m_cache;
-    QHash<QIODevice*, BrowserCacheItem*> m_devices;
-
-};
-
-#endif // BROWSERCACHE_H
diff --git a/semperMerk/src/BrowserView.cpp b/semperMerk/src/BrowserView.cpp
deleted file mode 100644
index d08968f..0000000
--- a/semperMerk/src/BrowserView.cpp
+++ /dev/null
@@ -1,551 +0,0 @@
-#include "BrowserView.h"
-
-#include <QtGui>
-#include <QtNetwork>
-#include <QNetworkCookieJar>
-#include <QTimeLine>
-#include <QMessageBox>
-#include <QWebFrame>
-#include <Phonon>
-
-#include "MyPreferences.h"
-
-#include "MainWindow.h"
-#include "MWebView.h"
-#include "ControlStrip.h"
-#include "TitleBar.h"
-#include "ZoomStrip.h"
-#include "Downloader.h"
-#include "BrowserCache.h"
-
-class PersistentCookieJar : public QNetworkCookieJar {
-public:
-    PersistentCookieJar(QObject *parent) : QNetworkCookieJar(parent) { load(); }
-    ~PersistentCookieJar() { save(); }
-
-public:
-    void save()
-    {
-        QList<QNetworkCookie> list = allCookies();
-        QByteArray data;
-        foreach (QNetworkCookie cookie, list) {
-            if (!cookie.isSessionCookie()) {
-                data.append(cookie.toRawForm());
-                data.append("\n");
-            }
-        }
-        QSettings settings;
-        settings.setValue("Cookies",data);
-    }
-
-    void load()
-    {
-        QSettings settings;
-        QByteArray data = settings.value("Cookies").toByteArray();
-        setAllCookies(QNetworkCookie::parseCookies(data));
-    }
-};
-
-/***************************/
-
-BrowserView::BrowserView(MainWindow *parent)
-    : QWidget(parent)
-    , m_titleBar(0)
-    , oldWebView(0)
-    , curWebView(0)
-    , expiredWebView(0)
-    , m_webPage(0)
-    , m_progress(0)
-    , m_curHistIdx(-1)
-    , m_downloader(0)
-    , m_cache(0)
-{
-    curWebView = new MWebView(this);
-    curWebView->settings()->setAttribute(QWebSettings::PluginsEnabled, false);
-    m_webPage = new MWebPage(curWebView);
-    m_webPage->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
-    connect(m_webPage, SIGNAL(linkClicked(QUrl)), this, SLOT(navigate(QUrl)));
-    connect(m_webPage, SIGNAL(frameCreated (QWebFrame *)), this, SLOT(slotFrameCreated (QWebFrame *)));
-    connect(m_webPage, SIGNAL(windowCloseRequested()), SLOT(backView()));
-#ifndef QT_NO_OPENSSL
-    connect(m_webPage->networkAccessManager(), SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), this, SLOT(slotSslErrors(QNetworkReply*,QList<QSslError>)));
-#endif
-    connect(m_webPage, SIGNAL(downloadRequested (const QNetworkRequest &)), SLOT(onDownloadRequested (const QNetworkRequest &)));
-    connect(m_webPage, SIGNAL(unsupportedContent (QNetworkReply *)), SLOT(onUnsupportedContent (QNetworkReply *)));
-
-    m_cookiejar = new PersistentCookieJar(this);
-    if (!M_PREFS->getCachingInstantHistorySize()) {
-        m_cache = new BrowserCache(this);
-        m_webPage->networkAccessManager()->setCache(m_cache);
-    }
-    m_webPage->networkAccessManager()->setCookieJar(m_cookiejar);
-    QWebFrame *frame = m_webPage->mainFrame();
-    connect(frame, SIGNAL(initialLayoutCompleted()), SLOT(slotFrameInitialLayoutCompleted()));
-    frame->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
-    frame->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
-    curWebView->setPage(m_webPage);
-
-    m_titleBar = new TitleBar(this);
-//	m_zoomStrip = new ZoomStrip(this);
-    m_controlStrip = parent->controlStrip();
-
-//	QVBoxLayout *layout = new QVBoxLayout(this);
-//	layout->setSpacing(0);
-//	layout->setContentsMargins(0, 0, 0, 0);
-//	setLayout(layout);
-//	layout->addWidget(m_titleBar);
-//	layout->addWidget(curWebView);
-//	layout->addWidget(m_controlStrip);
-//
-
-    m_timeLineFwd = new QTimeLine(800, this);
-    m_timeLineFwd->setCurveShape(QTimeLine::EaseInOutCurve);
-    m_timeLineFwd->setUpdateInterval(100);
-
-    m_timeLineBack = new QTimeLine(800, this);
-    m_timeLineBack->setCurveShape(QTimeLine::EaseInOutCurve);
-    m_timeLineBack->setUpdateInterval(100);
-
-    QTimer::singleShot(0, this, SLOT(initialize()));
-}
-
-BrowserView::~BrowserView()
-{
-    delete m_cookiejar;
-}
-
-void BrowserView::initialize()
-{
-    QPalette pal = curWebView->palette();
-    pal.setBrush(QPalette::Base, Qt::white);
-    curWebView->setPalette(pal);
-
-    connect(curWebView, SIGNAL(loadStarted()), SLOT(start()));
-    connect(curWebView, SIGNAL(loadProgress(int)), SLOT(setProgress(int)));
-    connect(curWebView, SIGNAL(loadFinished(bool)), SLOT(finish(bool)));
-    connect(curWebView, SIGNAL(urlChanged(QUrl)), SLOT(updateHistory(QUrl)));
-
-    connect(curWebView, SIGNAL(loadStarted()), m_controlStrip, SLOT(slotLoadingStarted()));
-    connect(curWebView, SIGNAL(loadFinished(bool)), m_controlStrip, SLOT(slotLoadingFinished()));
-
-    curWebView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
-//    curWebView->setFocus();
-
-    curWebView->setGeometry(0, 0, width(), height());
-    curWebView->show();
-
-    gotoHomePage();
-
-    connect(m_timeLineFwd, SIGNAL(frameChanged(int)), SLOT(slideFwd(int)));
-    connect(m_timeLineFwd, SIGNAL(finished()), SLOT(slideFwdDone()));
-    connect(m_timeLineBack, SIGNAL(frameChanged(int)), SLOT(slideBack(int)));
-    connect(m_timeLineBack, SIGNAL(finished()), SLOT(slideBackDone()));
-
-    m_controlStrip->backAct->setEnabled(false);
-    m_controlStrip->forwardAct->setEnabled(false);
-
-    QWebSettings::globalSettings()->setAttribute(QWebSettings::JavascriptEnabled, true);
-    QWebSettings::globalSettings()->setAttribute(QWebSettings::PluginsEnabled, true);
-}
-
-void BrowserView::cleanupMemory()
-{
-}
-
-void BrowserView::addWebview(bool appendToQ)
-{
-    if (appendToQ) {
-        oldWebView = curWebView;
-        m_webQ.append(oldWebView);
-        if (m_webQ.size() > M_PREFS->getCachingInstantHistorySize()) {
-            expiredWebView = m_webQ.takeFirst();
-            expiredWebView->deleteLater();
-            if (expiredWebView == oldWebView)
-                oldWebView = NULL;
-            expiredWebView = NULL;
-        }
-
-        if (m_timeLineFwd->state() == QTimeLine::NotRunning) {
-            m_timeLineFwd->setFrameRange(curWebView->pos().x(), curWebView->pos().x() + curWebView->width());
-            m_timeLineFwd->start();
-        }
-    }
-
-//	dynamic_cast<PersistentCookieJar*>(m_webPage->networkAccessManager()->cookieJar())->save();
-
-    curWebView = NULL;
-    m_webPage = NULL;
-    curWebView = new MWebView(this);
-    if (!curWebView) {
-        cleanupMemory();
-    }
-    m_webPage = new MWebPage(curWebView);
-    if (!m_webPage) {
-        cleanupMemory();
-    }
-    if (!curWebView || !m_webPage) {
-        QMessageBox::critical(0, tr("Memory Allocation error"), tr("Cannot allocate memory.\nBailing out..."));
-    }
-
-    m_webPage->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
-    connect(m_webPage, SIGNAL(linkClicked(QUrl)), this, SLOT(navigate(QUrl)));
-#ifndef QT_NO_OPENSSL
-    connect(m_webPage->networkAccessManager(), SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), this, SLOT(slotSslErrors(QNetworkReply*,QList<QSslError>)));
-#endif
-    connect(m_webPage, SIGNAL(frameCreated (QWebFrame *)), this, SLOT(slotFrameCreated (QWebFrame *)));
-    connect(m_webPage, SIGNAL(downloadRequested (const QNetworkRequest &)), SLOT(onDownloadRequested (const QNetworkRequest &)));
-    connect(m_webPage, SIGNAL(unsupportedContent (QNetworkReply *)), SLOT(onUnsupportedContent (QNetworkReply *)));
-    connect(m_webPage, SIGNAL(rtspRequested(QUrl)), SLOT(showMedia (QUrl)));
-    if (!M_PREFS->getCachingInstantHistorySize()) {
-        if (!m_cache)
-            m_cache = new BrowserCache(this);
-        m_webPage->networkAccessManager()->setCache(m_cache);
-    }
-    m_webPage->networkAccessManager()->setCookieJar(m_cookiejar);
-    m_cookiejar->setParent(0);
-    QWebFrame *frame = m_webPage->mainFrame();
-    frame->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
-    frame->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
-    connect(frame, SIGNAL(initialLayoutCompleted()), SLOT(slotFrameInitialLayoutCompleted()));
-    curWebView->setPage(m_webPage);
-
-    QPalette pal = curWebView->palette();
-    pal.setBrush(QPalette::Base, Qt::white);
-    curWebView->setPalette(pal);
-
-    connect(curWebView, SIGNAL(loadStarted()), SLOT(start()));
-    connect(curWebView, SIGNAL(loadProgress(int)), SLOT(setProgress(int)));
-    connect(curWebView, SIGNAL(loadFinished(bool)), SLOT(finish(bool)));
-    connect(curWebView, SIGNAL(urlChanged(QUrl)), SLOT(updateHistory(QUrl)));
-
-    connect(curWebView, SIGNAL(loadStarted()), m_controlStrip, SLOT(slotLoadingStarted()));
-    connect(curWebView, SIGNAL(loadFinished(bool)), m_controlStrip, SLOT(slotLoadingFinished()));
-
-    curWebView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
-//    curWebView->setFocus();
-
-    curWebView->setGeometry(0, 0, width(), height());
-
-    curWebView->show();
-    if (oldWebView)
-        curWebView->stackUnder(oldWebView);
-}
-
-void BrowserView::gotoHomePage()
-{
-//    curWebView->setHtml("<big><b>semperWeb</b></big><p>by SemperPax</p>");
-    curWebView->setUrl(QUrl("qrc:/html/home.html"));
-}
-
-void BrowserView::stop()
-{
-    curWebView->stop();
-}
-
-void BrowserView::zoomBest()
-{
-    curWebView->zoomBest();
-}
-
-void BrowserView::reload()
-{
-    curWebView->reload();
-}
-
-void BrowserView::backView()
-{
-    if (m_curHistIdx) {
-        m_curHistIdx--;
-    } else {
-        gotoHomePage();
-        return;
-    }
-
-    if (m_webQ.size()) {
-        oldWebView = curWebView;
-        curWebView = m_webQ.takeLast();
-        curWebView->show();
-        expiredWebView = oldWebView;
-        oldWebView->stackUnder(oldWebView);
-    } else {
-        if (M_PREFS->getCachingInstantHistorySize() > 0) {
-            oldWebView = curWebView;
-            expiredWebView = curWebView;
-            addWebview(false);
-            curWebView->stackUnder(m_titleBar);
-            curWebView->move(curWebView->pos().x() + curWebView->width(), curWebView->pos().y());
-        }
-        QNetworkRequest req(m_history[m_curHistIdx]);
-        req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysCache);
-        curWebView->page()->mainFrame()->load(req);
-
-    }
-    if (m_timeLineBack->state() == QTimeLine::NotRunning && M_PREFS->getCachingInstantHistorySize() > 0) {
-        m_timeLineBack->setFrameRange(curWebView->pos().x(), curWebView->pos().x() - curWebView->width());
-        m_timeLineBack->start();
-    }
-
-    m_controlStrip->backAct->setEnabled((m_curHistIdx >= 0));
-    m_controlStrip->forwardAct->setEnabled(true);
-}
-
-void BrowserView::fwdView()
-{
-    if (m_curHistIdx < m_history.size()-1) {
-        m_curHistIdx++;
-    } else
-        return;
-
-    if (M_PREFS->getCachingInstantHistorySize() > 0) {
-        addWebview();
-    }
-    curWebView->page()->mainFrame()->load(m_history[m_curHistIdx]);
-
-    m_controlStrip->backAct->setEnabled(true);
-    m_controlStrip->forwardAct->setEnabled((m_curHistIdx < m_history.size()-1));
-}
-
-void BrowserView::updateButtons()
-{
-    m_controlStrip->backAct->setEnabled((m_curHistIdx >= 0));
-    m_controlStrip->forwardAct->setEnabled((m_curHistIdx < m_history.size()-1));
-}
-
-void BrowserView::slideBack(int pos)
-{
-    if (oldWebView)
-        oldWebView->move(-(oldWebView->size().width() - pos), 0);
-    curWebView->move(pos, 0);
-//	update();
-}
-
-void BrowserView::slideBackDone()
-{
-    if (oldWebView)
-        oldWebView->hide();
-    if (expiredWebView) {
-        expiredWebView->deleteLater();
-        expiredWebView = NULL;
-    }
-}
-
-void BrowserView::slideFwd(int pos)
-{
-    curWebView->move(-(curWebView->size().width() - pos), 0);
-    if (oldWebView)
-        oldWebView->move(pos, 0);
-//	update();
-}
-
-void BrowserView::slideFwdDone()
-{
-    if (oldWebView)
-        oldWebView->hide();
-    if (expiredWebView) {
-        expiredWebView->deleteLater();
-        expiredWebView = NULL;
-    }
-}
-
-void BrowserView::start()
-{
-    m_progress = 0;
-    updateTitleBar();
-    //m_titleBar->setText(curWebView->url().toString());
-}
-
-void BrowserView::setProgress(int percent)
-{
-    m_progress = percent;
-    updateTitleBar();
-    //m_titleBar->setText(QString("Loading %1%").arg(percent));
-}
-
-void BrowserView::updateTitleBar()
-{
-    QUrl url = curWebView->url();
-    m_titleBar->setHost(url.host());
-    m_titleBar->setTitle(curWebView->title());
-    m_titleBar->setProgress(m_progress);
-}
-
-void BrowserView::updateHistory(const QUrl& url)
-{
-    if (url.toString() == "about:blank")
-        return;
-    if (m_curHistIdx < m_history.size()-1 && url == m_history[m_curHistIdx])
-        return;
-
-    m_history.erase(m_history.begin()+m_curHistIdx+1, m_history.end());
-    m_history.append(url);
-    m_curHistIdx++;
-
-    updateButtons();
-    updateTitleBar();
-}
-
-void BrowserView::finish(bool ok)
-{
-//    m_webPage->setViewportSize(m_webPage->mainFrame()->contentsSize());
-
-    m_progress = 0;
-    updateTitleBar();
-
-    // TODO: handle error
-    if (!ok && !unsupHandled) {
-        m_titleBar->setTitle("Loading failed.");
-        return;
-    }
-
-    // Force hidding any scrollbar
-    QWebElement body = m_webPage->currentFrame()->findFirstElement("body");
-    if (!body.isNull())
-        body.setStyleProperty("overflow", "hidden !important");
-
-#if !defined(QT_NO_DEBUG_OUTPUT) && !defined(Q_OS_SYMBIAN)
-    QFile f("c:/semperWeb.html");
-    f.open(QIODevice::WriteOnly);
-    f.write(m_webPage->mainFrame()->toHtml().toUtf8());
-    f.close();
-#endif
-}
-
-void BrowserView::resizeEvent(QResizeEvent *event)
-{
-    QWidget::resizeEvent(event);
-
-    int h1 = m_titleBar->sizeHint().height();
-
-    m_titleBar->resize(width(), h1);
-    curWebView->resize(width(), height());
-
-//    int zw = m_zoomStrip->sizeHint().width();
-//    int zh = m_zoomStrip->sizeHint().height();
-//    m_zoomStrip->move(width() - zw, (height() - zh) / 2);
-}
-
-void BrowserView::showMedia(const QUrl &url)
-{
-    QWidget *dummy = new QWidget(parentWidget());
-    dummy->resize(parentWidget()->size());
-    dummy->raise();
-    dummy->show();
-//    Phonon::MediaObject *mediaObject = new Phonon::MediaObject(this);
-//    Phonon::VideoWidget *videoWidget = new Phonon::VideoWidget(dummy);
-//    Phonon::createPath(mediaObject, videoWidget);
-//    qDebug() << url.toString();
-//    Phonon::MediaSource source = Phonon::MediaSource(url.toString());
-//    mediaObject->setCurrentSource(source);
-//    mediaObject->play();
-    Phonon::VideoPlayer *player =
-             new Phonon::VideoPlayer(Phonon::VideoCategory, dummy);
-    player->play(url);
-}
-
-void BrowserView::navigate(const QUrl &url)
-{
-//    if (url.toString().endsWith("3gp")) {
-//        showMedia(url);
-//        return;
-//    }
-//	curWebView->setZoomFactor(INIT_ZOOM);
-    QUrl referer = curWebView->page()->mainFrame()->url();
-    if (M_PREFS->getCachingInstantHistorySize() > 0) {
-        addWebview();
-    }
-    QNetworkRequest req(url);
-    req.setRawHeader(QString("Referer").toAscii(), referer.toString().toAscii());
-    req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
-    unsupHandled = false;
-    curWebView->load(req);
-}
-
-#ifndef QT_NO_OPENSSL
-void BrowserView::slotSslErrors(QNetworkReply* rep,QList<QSslError>)
-{
-    rep->ignoreSslErrors();
-}
-#endif
-
-void BrowserView::slotFrameCreated(QWebFrame * frame)
-{
-    frame->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
-    frame->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
-
-    connect(frame, SIGNAL(initialLayoutCompleted()), SLOT(slotFrameInitialLayoutCompleted()));
-}
-
-void BrowserView::slotFrameInitialLayoutCompleted()
-{
-}
-
-QString BrowserView::getCurrentName()
-{
-    return curWebView->title();
-}
-
-QString BrowserView::getCurrentAdress()
-{
-    return curWebView->url().toString();
-}
-
-void BrowserView::onUnsupportedContent (QNetworkReply * reply)
-{
-    if (!reply)
-         return;
-
-    updateHistory(reply->url());
-
-    if (reply->error() != QNetworkReply::NoError)
-        return;
-
-    if (reply->header(QNetworkRequest::ContentTypeHeader).isValid() != true)
-        return;
-
-    if (reply->header(QNetworkRequest::ContentTypeHeader).toString().toLower() == "image/pjpeg") {
-        unsupReply = reply;
-        unsupReply->setParent(this);
-        if (unsupReply->isFinished())
-            unsupportedReplyFinished();
-        else {
-            connect(unsupReply, SIGNAL(finished()), SLOT(unsupportedReplyFinished()));
-        }
-        unsupHandled = true;
-        return;
-    }
-
-    if (reply->header(QNetworkRequest::ContentTypeHeader).toString().toLower().startsWith("video")) {
-        showMedia(reply->url());
-        unsupHandled = true;
-        return;
-    }
-
-    qDebug() << "Unsuported: " << reply->url() << reply->header(QNetworkRequest::ContentTypeHeader);
-
-    if (QMessageBox::question(0, tr("Launch File"), tr("Do you really want to launch this file?"), QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok) {
-        m_downloader = new Downloader(this, reply);
-        unsupHandled = true;
-    } else
-        reply->abort();
-
-//	backView();
-}
-
-void BrowserView::onDownloadRequested (const QNetworkRequest & request)
-{
-    m_downloader = new Downloader(this, request, (QNetworkCookieJar *)m_cookiejar);
-    m_downloader->go();
-    //FIXME When to delete the Downloader? Async -> no now...
-}
-
-void BrowserView::unsupportedReplyFinished()
-{
-    QByteArray ba = unsupReply->readAll();
-    curWebView->setContent(ba, QString("image/jpeg"));
-//    QFile* m_out = new QFile("c:/tmp.jpg");
-//    m_out->open(QIODevice::WriteOnly);
-//    m_out->write(unsupReply->readAll());
-//    m_out->close();
-
-    unsupReply->close();
-}
diff --git a/semperMerk/src/BrowserView.h b/semperMerk/src/BrowserView.h
deleted file mode 100644
index 3c48baa..0000000
--- a/semperMerk/src/BrowserView.h
+++ /dev/null
@@ -1,103 +0,0 @@
-#ifndef BROWSERVIEW_H
-#define BROWSERVIEW_H
-
-#include <QWidget>
-#include <QVector>
-#include <QSslError>
-#include <QWebPage>
-#include <QList>
-
-class MainWindow;
-class QUrl;
-class MWebPage;
-class MWebView;
-class QWebView;
-class QNetworkReply;
-class QTimeLine;
-class TitleBar;
-class ControlStrip;
-class ZoomStrip;
-class PersistentCookieJar;
-class Downloader;
-class BrowserCache;
-
-class BrowserView : public QWidget
-{
-    Q_OBJECT
-
-    friend class MWebView;
-
-public:
-    BrowserView(MainWindow *parent = 0);
-    ~BrowserView();
-
-    QString getCurrentName();
-    QString getCurrentAdress();
-
-    void updateButtons();
-public slots:
-    void showMedia(const QUrl &url);
-    void navigate(const QUrl &url);
-
-private slots:
-    void initialize();
-    void start();
-    void setProgress(int percent);
-    void finish(bool);
-    void updateTitleBar();
-    void updateHistory(const QUrl& url);
-#ifndef QT_NO_OPENSSL
-    void slotSslErrors(QNetworkReply* rep,QList<QSslError>);
-#endif
-    void slotFrameCreated(QWebFrame * frame);
-    void slotFrameInitialLayoutCompleted();
-    void backView();
-    void fwdView();
-    void stop();
-    void zoomBest();
-    void reload();
-
-    void slideFwd(int pos);
-    void slideFwdDone();
-    void slideBack(int pos);
-    void slideBackDone();
-
-    void onDownloadRequested (const QNetworkRequest & request);
-    void onUnsupportedContent (QNetworkReply * reply);
-    void unsupportedReplyFinished();
-
-signals:
-    void menuButtonClicked();
-    void preferencesClicked();
-
-protected:
-    void cleanupMemory();
-    void addWebview(bool appendToQ = true);
-
-    void resizeEvent(QResizeEvent *event);
-    void gotoHomePage();
-
-protected:
-    TitleBar *m_titleBar;
-    QList<MWebView *> m_webQ;
-    MWebView *oldWebView;
-    MWebView *curWebView;
-    MWebView *expiredWebView;
-    MWebPage *m_webPage;
-    BrowserCache* m_cache;
-    PersistentCookieJar* m_cookiejar;
-//    ZoomStrip *m_zoomStrip;
-    ControlStrip *m_controlStrip;
-    int m_progress;
-    QTimeLine *m_timeLineFwd;
-    QTimeLine *m_timeLineBack;
-
-    QList<QUrl> m_history;
-    int m_curHistIdx;
-
-    Downloader* m_downloader;
-    QNetworkReply* unsupReply;
-    bool unsupHandled;
-};
-
-#endif // BROWSERVIEW_H
diff --git a/semperMerk/src/ControlButton.h b/semperMerk/src/ControlButton.h
deleted file mode 100644
index 2baa32a..0000000
--- a/semperMerk/src/ControlButton.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef CONTROLBUTTON_H
-#define CONTROLBUTTON_H
-
-#include <QToolButton>
-#include <QStyle>
-#include <QStyleOption>
-#include <QPainter>
-#include <QAction>
-
-class ControlButton : public QToolButton
-{
-    Q_OBJECT
-
-public:
-    ControlButton(QAction* theAct, QSize sz, QWidget *parent)
-        : QToolButton(parent)
-    {
-        setDefaultAction(theAct);
-        setIconSize(sz);
-        setAttribute(Qt::WA_TransparentForMouseEvents);
-    }
-
-public slots:
-    void trigger()
-    {
-        defaultAction()->trigger();
-    }
-
-};
-
-#endif // CONTROLBUTTON_H
diff --git a/semperMerk/src/ControlStrip.cpp b/semperMerk/src/ControlStrip.cpp
deleted file mode 100644
index b793ecf..0000000
--- a/semperMerk/src/ControlStrip.cpp
+++ /dev/null
@@ -1,327 +0,0 @@
-#include "ControlStrip.h"
-#include "ControlButton.h"
-#include "MouseMachine/MouseMachine.h"
-
-#include <QtCore>
-#include <QtGui>
-#include <QObject>
-
-#define STRIP_WIDTH 60
-#define BAR_ALPHA 48
-
-ControlStrip::ControlStrip(QWidget *parent)
-    : QWidget(parent)
-    , BarLayout(0)
-    , collapsed(false)
-{
-    m_Charm = new MouseMachine(this, MouseMachine::SignalTap | MouseMachine::SignalScroll | MouseMachine::CascadedEventFilter);
-    m_Charm->setObjectName("ControlStrip_charm");
-    connect(m_Charm, SIGNAL(singleTap(QPoint)), SLOT(onSingleTap(QPoint)));
-    connect(m_Charm, SIGNAL(tapAndHold(QPoint)), SLOT(onTapAndHold(QPoint)));
-    connect(m_Charm, SIGNAL(scroll(QPoint,QPoint)), SLOT(onScroll(QPoint,QPoint)));
-    connect(m_Charm, SIGNAL(doubleTap(QPoint)), SLOT(onDoubleTap(QPoint)));
-
-    theBar = new QWidget(this);
-
-//    bookmarkAct = new QAction(QPixmap(":/icons/bookmark"), "Menu", theBar);
-//    connect(bookmarkAct, SIGNAL(triggered()), this, SIGNAL(bookmarkClicked()));
-//    backAct = new QAction(QPixmap(":/icons/back"), "Back", this);
-//    connect(backAct, SIGNAL(triggered()), this, SIGNAL(backClicked()));
-//    forwardAct = new QAction(QPixmap(":/icons/forward"), "Forward", theBar);
-//    connect(forwardAct, SIGNAL(triggered()), this, SIGNAL(forwardClicked()));
-//    stopAct = new QAction(QPixmap(":/icons/stop"), "Stop", theBar);
-//    connect(stopAct, SIGNAL(triggered()), this, SIGNAL(stopClicked()));
-//    zoomBestAct = new QAction(QPixmap(":/icons/zoomBest"), "Zoom Best", theBar);
-//    connect(zoomBestAct, SIGNAL(triggered()), SIGNAL(zoomBestClicked()));
-//    refreshAct = new QAction(QPixmap(":/icons/refresh"), "Refresh", theBar);
-//    connect(refreshAct, SIGNAL(triggered()), SIGNAL(refreshClicked()));
-//    editAct = new QAction(QPixmap(":/icons/edit"), "Edit", theBar);
-//    connect(editAct, SIGNAL(triggered()), SIGNAL(editClicked()));
-    prefAct = new QAction(QPixmap(":/icons/settings"), "Preferences", theBar);
-    connect(prefAct, SIGNAL(triggered()), this, SIGNAL(prefClicked()));
-    searchAct = new QAction(QPixmap(":/icons/search"), "Search", theBar);
-    connect(searchAct, SIGNAL(triggered()), SIGNAL(searchClicked()));
-    zoomInAct = new QAction(QPixmap(":/icons/zoomIn"), "Zoom In", theBar);
-    connect(zoomInAct, SIGNAL(triggered()), SIGNAL(zoomInClicked()));
-    zoomOutAct = new QAction(QPixmap(":/icons/zoomOut"), "Zoom Out", theBar);
-    connect(zoomOutAct, SIGNAL(triggered()), SIGNAL(zoomOutClicked()));
-    menuAct = new QAction(QPixmap(":/icons/menu"), "Zoom Out", theBar);
-    connect(menuAct, SIGNAL(triggered()), SIGNAL(menuClicked()));
-
-    QSize btSize(48, 48);
-//    backBt = new ControlButton(backAct, btSize, theBar);
-//    forwardBt = new ControlButton(forwardAct, btSize, theBar);
-//    bookmarkBt = new ControlButton(bookmarkAct, btSize, theBar);
-//    stopBt = new ControlButton(stopAct, btSize, theBar);
-//    searchBt = new ControlButton(searchAct, btSize, theBar);
-    prefBt = new ControlButton(prefAct, btSize, theBar);
-//    refreshBt = new ControlButton(refreshAct, btSize, theBar);
-//    editBt = new ControlButton(editAct, btSize, theBar);
-    searchBt = new ControlButton(searchAct, btSize, theBar);
-    zoomInBt = new ControlButton(zoomInAct, btSize, theBar);
-    zoomOutBt = new ControlButton(zoomOutAct, btSize, theBar);
-    menuBt = new ControlButton(menuAct, btSize, theBar);
-
-//    m_menuAct = new QAction(QPixmap(":/icons/back"), "Back", this);
-//    connect(m_menuAct, SIGNAL(triggered()), this, SIGNAL(backClicked()));
-//    m_menuButton = new ControlButton(backAct, btSize, this);
-//    m_menuButton->hide();
-
-//    QVBoxLayout* layout = new QVBoxLayout(this);
-//    layout->addWidget(theBar);
-//    layout->addWidget(m_menuButton);
-
-//    pal.setBrush(QPalette::Window, QColor(32, 32, 32, BAR_ALPHA));
-//    theBar->setPalette(pal);
-//    theBar->setBackgroundRole(QPalette::Window);
-//    theBar->setAutoFillBackground(true);
-
-//    QSpacerItem* verticalSpacer = new QSpacerItem(20, STRIP_WIDTH, QSizePolicy::Minimum, QSizePolicy::Expanding);
-//    theLayout->addItem(verticalSpacer);
-
-    m_dock = DockLeft;
-
-    m_timeLine = new QTimeLine(800, this);
-    m_timeLine->setCurveShape(QTimeLine::EaseInOutCurve);
-    m_timeLine->setUpdateInterval(100);
-    connect(m_timeLine, SIGNAL(valueChanged(qreal)), SLOT(onBarAnimation(qreal)));
-    connect(m_timeLine, SIGNAL(finished()), SLOT(onBarAnimationFinished()));
-
-    installEventFilter(m_Charm);
-}
-
-void ControlStrip::paintEvent(QPaintEvent *)
-{
-    QStyleOption opt;
-    opt.init(this);
-    QPainter p(this);
-    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
-
-//    p.setPen(QPen(Qt::green, 2));
-//    p.drawRect(opt.rect);
-}
-
-void ControlStrip::slotLoadingStarted()
-{
-    setUpdatesEnabled(false);
-    refreshBt->hide();
-//    theLayout->removeWidget(refreshBt);
-    stopBt->show();
-//    theLayout->insertWidget(2, stopBt);
-    setUpdatesEnabled(true);
-}
-
-void ControlStrip::slotLoadingFinished()
-{
-    setUpdatesEnabled(false);
-    stopBt->hide();
-//    theLayout->removeWidget(stopBt);
-    refreshBt->show();
-//    theLayout->insertWidget(2, refreshBt);
-    setUpdatesEnabled(true);
-}
-
-ControlButton* ControlStrip::getButtonAt(const QPoint& p)
-{
-    QObjectList ol = children();
-    foreach(QObject* o, ol) {
-        if (ControlButton* b = dynamic_cast<ControlButton*>(o)) {
-            if (b->geometry().contains(p) && b->isVisible()) {
-                return b;
-            }
-        }
-    }
-    ol = theBar->children();
-    foreach(QObject* o, ol) {
-        if (ControlButton* b = dynamic_cast<ControlButton*>(o)) {
-            if (b->geometry().contains(theBar->mapFrom(this, p)) && b->isVisible()) {
-                return b;
-            }
-        }
-    }
-    return NULL;
-}
-
-void ControlStrip::resizeBar(const QSize& sz, bool resetPos)
-{
-    switch (m_dock) {
-    case DockLeft:
-    case DockRight:
-        if (BarLayout)
-            delete BarLayout;
-        BarLayout = new QVBoxLayout(theBar);
-
-        if (sz.height() > sz.width()) {
-            theBar->resize(STRIP_WIDTH, sz.width());
-        } else {
-            theBar->resize(STRIP_WIDTH, sz.height());
-        }
-        break;
-
-    case DockTop:
-    case DockBottom:
-        if (BarLayout)
-            delete BarLayout;
-        BarLayout = new QHBoxLayout(theBar);
-        if (sz.height() > sz.width()) {
-            theBar->resize(sz.width(), STRIP_WIDTH);
-        } else {
-            theBar->resize(sz.height(), STRIP_WIDTH);
-        }
-        break;
-
-    default:
-        break;
-    }
-    if (resetPos) {
-        switch (m_dock) {
-        case DockLeft:
-            qDebug()  << sz.height() << theBar->height();
-            move(0, (sz.height() - theBar->height())/2);
-            break;
-        case DockRight:
-            move(sz.width() - STRIP_WIDTH, (sz.height() - height())/2);
-            break;
-
-        case DockTop:
-            move((sz.width() - width())/2, 0);
-            break;
-        case DockBottom:
-            move((sz.width() - width())/2, sz.height() - STRIP_WIDTH);
-            break;
-
-        default:
-            break;
-        }
-    }
-
-//    BarLayout->addWidget(backBt);
-//    BarLayout->addWidget(forwardBt);
-//    BarLayout->addWidget(stopBt);
-//    BarLayout->addWidget(refreshBt);
-//    BarLayout->addWidget(searchBt);
-//    BarLayout->addWidget(bookmarkBt);
-//    BarLayout->addWidget(editBt);
-    BarLayout->addWidget(searchBt);
-    BarLayout->addWidget(zoomInBt);
-    BarLayout->addWidget(zoomOutBt);
-    BarLayout->addWidget(menuBt);
-    BarLayout->addWidget(prefBt);
-
-    if (!collapsed)
-        resize(theBar->size());
-}
-
-void ControlStrip::onSingleTap(QPoint p)
-{
-    ControlButton* b = getButtonAt(p);
-    if (b)
-        b->trigger();
-}
-
-void ControlStrip::Collapse()
-{
-    if (collapsed)
-        return;
-
-//    m_menuButton->resize(backBt->size());
-//    resize(STRIP_WIDTH, STRIP_WIDTH);
-//    QPoint src = backBt->mapToGlobal(QPoint());
-//    QPoint dst = QPoint(STRIP_WIDTH/2, STRIP_WIDTH/2) - QPoint(m_menuButton->width()/2, m_menuButton->height()/2);
-//    move(parentWidget()->mapFromGlobal(src-dst));
-//    m_menuButton->move(mapFromGlobal(src));
-//    m_menuButton->show();
-//    theBar->hide();
-////        QPoint dst = src - QPoint((width() - m_menuButton->width())/2, (height() - m_menuButton->height())/2);
-////        move(parentWidget()->mapFromGlobal(dst));
-////        if (m_timeLine->state() == QTimeLine::NotRunning) {
-////            originalSize = theBar->size();
-////            originalPos = theBar->pos();
-////            m_timeLine->setDirection(QTimeLine::Backward);
-////            m_timeLine->start();
-////        }
-    collapsed = true;
-}
-
-void ControlStrip::Expand()
-{
-    if (!collapsed)
-        return;
-
-//    QPoint src = m_menuButton->mapToGlobal(QPoint());
-//    QPoint dest = backBt->pos();
-//    move(parentWidget()->mapFromGlobal(src-dest));
-//    m_menuButton->hide();
-//    theBar->show();
-//    resize(theBar->size());
-////        if (m_timeLine->state() == QTimeLine::NotRunning) {
-////            m_timeLine->setDirection(QTimeLine::Forward);
-////            m_timeLine->start();
-////        }
-    collapsed = false;
-}
-
-void ControlStrip::onDoubleTap(QPoint p)
-{
-//    ControlButton* b = getButtonAt(p);
-//    if (b && b == m_menuButton)
-//        bookmarkBt->trigger();
-}
-
-void ControlStrip::onTapAndHold(QPoint p)
-{
-    if (!collapsed) {
-        Collapse();
-    } else {
-        Expand();
-    }
-}
-
-void ControlStrip::onScroll(QPoint oldP, QPoint newP)
-{
-    QPoint oldPos = pos();
-    QPoint newPos = pos()+newP-oldP;
-    QPoint curPos = parentWidget()->mapFromGlobal(QCursor::pos());
-
-    if (curPos.y() > parentWidget()->height() - STRIP_WIDTH && newPos.y() > oldPos.y()) {
-        m_dock = DockBottom;
-        resizeBar(parentWidget()->size());
-        move(newPos.x(), parentWidget()->height() - STRIP_WIDTH);
-    } else if (curPos.x() > parentWidget()->width() - STRIP_WIDTH && newPos.x() > oldPos.x()) {
-        m_dock = DockRight;
-        resizeBar(parentWidget()->size());
-        move(parentWidget()->width() - STRIP_WIDTH, newPos.y());
-    } else if (curPos.y() < STRIP_WIDTH && newPos.y() < oldPos.y()) {
-        m_dock = DockTop;
-        resizeBar(parentWidget()->size());
-        move(newPos.x(), 0);
-    } else if (curPos.x() < STRIP_WIDTH && newPos.x() < oldPos.x()) {
-        m_dock = DockLeft;
-        resizeBar(parentWidget()->size());
-        move(0, newPos.y());
-    } else {
-        m_dock = DockNone;
-        move(newPos);
-    }
-}
-
-void ControlStrip::onBarAnimation(qreal val)
-{
-    theBar->resize(originalSize*val);
-    if (theBar->isHidden() && val > 0)
-        theBar->show();
-}
-
-void ControlStrip::onBarAnimationFinished()
-{
-    if (m_timeLine->currentFrame() == 0)
-        theBar->hide();
-    if (m_timeLine->currentFrame() > 0)
-        m_menuButton->hide();
-
-}
-
-bool ControlStrip::event(QEvent *event)
-{
-    return QWidget::event(event);
-}
diff --git a/semperMerk/src/ControlStrip.h b/semperMerk/src/ControlStrip.h
deleted file mode 100644
index 43e0d29..0000000
--- a/semperMerk/src/ControlStrip.h
+++ /dev/null
@@ -1,107 +0,0 @@
-#ifndef CONTROLSTRIP_H
-#define CONTROLSTRIP_H
-
-#include <QWidget>
-#include <QAction>
-#include <QTimeLine>
-
-class QBoxLayout;
-class ControlButton;
-class MouseMachine;
-
-class ControlStrip : public QWidget
-{
-    Q_OBJECT
-
-    friend class MainWindow;
-
-public:
-    enum Docking {
-        DockNone,
-        DockTop,
-        DockBottom,
-        DockLeft,
-        DockRight
-    };
-public:
-    ControlStrip(QWidget *parent = 0);
-
-    void resizeBar(const QSize& sz, bool resetPos=false);
-
-signals:
-    void bookmarkClicked();
-    void backClicked();
-    void forwardClicked();
-    void stopClicked();
-    void prefClicked();
-    void searchClicked();
-    void zoomInClicked();
-    void zoomOutClicked();
-    void refreshClicked();
-    void editClicked();
-    void menuClicked();
-
-public slots:
-    void slotLoadingStarted();
-    void slotLoadingFinished();
-
-    void Collapse();
-    void Expand();
-
-private slots:
-    void onSingleTap(QPoint p);
-    void onDoubleTap(QPoint p);
-    void onTapAndHold(QPoint p);
-    void onScroll(QPoint oldPos, QPoint newPos);
-    void onBarAnimation(qreal);
-    void onBarAnimationFinished();
-
-protected:
-    void paintEvent(QPaintEvent *event);
-    bool event (QEvent * event);
-    ControlButton * getButtonAt(const QPoint &p);
-
-private:
-    QPalette pal;
-    QWidget* theBar;
-    QBoxLayout* BarLayout;
-
-    ControlButton *backBt;
-    ControlButton *forwardBt;
-    ControlButton *bookmarkBt;
-    ControlButton *stopBt;
-    ControlButton *zoomInBt;
-    ControlButton *zoomOutBt;
-    ControlButton *searchBt;
-    ControlButton *prefBt;
-    ControlButton *refreshBt;
-    ControlButton *editBt;
-    ControlButton *menuBt;
-
-    ControlButton *m_menuButton;
-    MouseMachine* m_Charm;
-
-    QPoint lastMenuPos;
-    Docking m_dock;
-    QTimeLine *m_timeLine;
-    QSize originalSize;
-    QPoint originalPos;
-    bool collapsed;
-
-public:
-    QAction* bookmarkAct;
-    QAction* backAct;
-    QAction* forwardAct;
-    QAction* stopAct;
-    QAction* prefAct;
-    QAction* zoomInAct;
-    QAction* zoomOutAct;
-    QAction* searchAct;
-    QAction* refreshAct;
-    QAction* editAct;
-    QAction* menuAct;
-
-    QAction* m_menuAct;
-};
-
-#endif // CONTROLSTRIP_H
diff --git a/semperMerk/src/Downloader.cpp b/semperMerk/src/Downloader.cpp
deleted file mode 100644
index aad55ed..0000000
--- a/semperMerk/src/Downloader.cpp
+++ /dev/null
@@ -1,160 +0,0 @@
-#include "Downloader.h"
-
-#include "BrowserView.h"
-#include "MyPreferences.h"
-
-#include <QNetworkAccessManager>
-#include <QNetworkReply>
-#include <QNetworkProxyQuery>
-#include <QNetworkCookieJar>
-#include <QFileDialog>
-#include <QFileInfo>
-#include <QMessageBox>
-#include <QDesktopServices>
-
-Downloader::Downloader(BrowserView *parent) :
-    QObject(parent)
-{
-}
-
-Downloader::Downloader(BrowserView* parent, const QNetworkRequest& r, QNetworkCookieJar* j)
-    : QObject(parent)
-    , m_parent(parent)
-    , m_request(r)
-    , m_reply(0)
-    , m_cookieJar(j)
-    , m_out(0)
-    , m_launch(false)
-{
-    m_am = new QNetworkAccessManager(this);
-}
-
-Downloader::Downloader(BrowserView* parent, QNetworkReply* r)
-    : QObject(parent)
-    , m_parent(parent)
-    , m_am(0)
-    , m_reply(r)
-    , m_out(0)
-    , m_launch(true)
-{
-    m_reply->setParent(this);
-    //    qDebug() << "Filename: " << m_reply->url();
-    //    foreach(QByteArray k, m_reply->rawHeaderList()) {
-    //        qDebug() << k << m_reply->rawHeader(k);
-    //    }
-
-    QString m_filename;
-    if (m_reply->hasRawHeader("Content-Disposition")) {
-        QStringList s1 = QString(m_reply->rawHeader("Content-Disposition")).split(";", QString::SkipEmptyParts);
-        if (s1.count() && s1[0] == "attachment") {
-            QStringList s2 = s1[1].split("=");
-            if (s2.count() == 2) {
-                m_filename = s2[1].remove('"');
-            }
-        }
-    }
-    if (m_filename.isEmpty())
-        m_filename = m_reply->url().path().section('/', -1);
-
-    if (!m_filename.isEmpty()) {
-        m_out = new QFile(QDesktopServices::storageLocation(QDesktopServices::TempLocation) + "/" + m_filename, this);
-        m_out->open(QIODevice::WriteOnly);
-    } else {
-        m_out = new QTemporaryFile(this);
-        ((QTemporaryFile*)m_out)->open();
-    }
-
-    if (m_reply->isFinished())
-        slotFinished();
-    else {
-        connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)),
-            this, SLOT(slotError(QNetworkReply::NetworkError)));
-#ifndef QT_NO_OPENSSL
-        connect(m_reply, SIGNAL(sslErrors(QList<QSslError>)),
-            this, SLOT(slotSslErrors(QList<QSslError>)));
-#endif
-        connect(m_reply, SIGNAL(finished()), SLOT(slotFinished()));
-    }
-}
-
-void Downloader::go()
-{
-    QNetworkProxyQuery npq(m_request.url());
-    QList<QNetworkProxy> listOfProxies = QNetworkProxyFactory::systemProxyForQuery(npq);
-    if (listOfProxies.size())
-        m_am->setProxy(listOfProxies[0]);
-
-    m_am->setCookieJar(m_cookieJar);
-    m_cookieJar->setParent(0);
-
-    m_reply = m_am->get(m_request);
-    connect(m_reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
-#ifndef QT_NO_OPENSSL
-    connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)),
-        this, SLOT(slotError(QNetworkReply::NetworkError)));
-#endif
-    connect(m_reply, SIGNAL(sslErrors(QList<QSslError>)),
-        this, SLOT(slotSslErrors(QList<QSslError>)));
-    connect(m_reply, SIGNAL(finished()), SLOT(slotFinished()));
-
-    m_out = new QTemporaryFile(this);
-    ((QTemporaryFile*)m_out)->open();
-}
-
-void Downloader::setRequest(const QNetworkRequest &r)
-{
-    m_request = r;
-}
-
-#ifndef QT_NO_OPENSSL
-void Downloader::slotSslErrors(QList<QSslError>)
-{
-    m_reply->ignoreSslErrors();
-}
-#endif
-
-void Downloader::slotError(QNetworkReply::NetworkError err)
-{
-}
-
-void Downloader::slotReadyRead()
-{
-    m_out->write(m_reply->readAll());
-}
-
-void Downloader::slotFinished()
-{
-    m_out->write(m_reply->readAll());
-
-    m_reply->close();
-    m_out->close();
-    if (!m_reply->error()) {
-        if (m_launch)
-            QDesktopServices::openUrl(QUrl::fromLocalFile(m_out->fileName()));
-        else {
-            QString m_filename;
-            QString mimeType = m_reply->header(QNetworkRequest::ContentTypeHeader).toString().section(QLatin1Char(';'), 0, 0);
-            if (mimeType.startsWith("image")) {
-                m_filename = M_PREFS->getGeneralLastPicDownloadDir();
-                if (m_filename.isEmpty())
-                    m_filename = QDesktopServices::storageLocation(QDesktopServices::PicturesLocation);
-            } else {
-                m_filename = M_PREFS->getGeneralLastDataDownloadDir();
-                if (m_filename.isEmpty())
-                    m_filename = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
-            }
-            m_filename = QFileDialog::getSaveFileName(m_parent, tr("Save File"), m_filename + "/" + m_reply->url().path().section('/', -1));
-            if (m_filename.isEmpty())
-                m_reply->abort();
-            else {
-                if (mimeType.startsWith("image")) {
-                    M_PREFS->setGeneralLastPicDownloadDir(QFileInfo(m_filename).absolutePath());
-                } else {
-                    M_PREFS->setGeneralLastDataDownloadDir(QFileInfo(m_filename).absolutePath());
-                }
-                m_out->copy(m_filename);
-            }
-        }
-    }
-}
-
diff --git a/semperMerk/src/Downloader.h b/semperMerk/src/Downloader.h
deleted file mode 100644
index b3d51bd..0000000
--- a/semperMerk/src/Downloader.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef DOWNLOADER_H
-#define DOWNLOADER_H
-
-#include <QObject>
-#include <QNetworkRequest>
-#include <QNetworkReply>
-#include <QTemporaryFile>
-#include <QSslError>
-
-class QNetworkAccessManager;
-class QNetworkReply;
-class QNetworkCookieJar;
-class BrowserView;
-
-class Downloader : public QObject
-{
-Q_OBJECT
-public:
-    explicit Downloader(BrowserView *parent = 0);
-    Downloader(BrowserView* parent, const QNetworkRequest& r, QNetworkCookieJar* j);
-    Downloader(BrowserView* parent, QNetworkReply* r);
-
-public:
-    void setRequest(const QNetworkRequest& r);
-    void go();
-
-signals:
-
-public slots:
-    void slotReadyRead();
-    void slotFinished();
-#ifndef QT_NO_OPENSSL
-    void slotSslErrors( QList<QSslError>);
-#endif
-    void slotError(QNetworkReply::NetworkError err);
-
-protected:
-    BrowserView* m_parent;
-    QNetworkAccessManager* m_am;
-    QNetworkRequest m_request;
-    QNetworkReply* m_reply;
-    QNetworkCookieJar* m_cookieJar;
-
-    QFile *m_out;
-
-    bool m_launch;
-};
-
-#endif // DOWNLOADER_H
diff --git a/semperMerk/src/HomeView.cpp b/semperMerk/src/HomeView.cpp
deleted file mode 100644
index 5181196..0000000
--- a/semperMerk/src/HomeView.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-
-#include "HomeView.h"
-
-#include <QtCore>
-#include <QtGui>
-
-#include "AddressBar.h"
-#include "BookmarkBar.h"
-#include "BookmarksView.h"
-
-#include "MouseMachine/MouseMachine.h"
-
-HomeView::HomeView(QWidget *parent)
-    : QWidget(parent)
-    , m_addressBar(0)
-    , m_bookmarkBar(0)
-    , charm(0)
-{
-    m_addressBar = new AddressBar(parent);
-    connect(m_addressBar, SIGNAL(addressEntered(QString)), SLOT(gotoAddress(QString)));
-    connect(m_addressBar, SIGNAL(back()), SIGNAL(back()));
-
-    m_bookmarkBar = new BookmarkBar(parent);
-    m_bookmarks = new BookmarksView(parent);
-
-    connect(m_bookmarks, SIGNAL(urlSelected(QUrl)), SIGNAL(urlActivated(QUrl)));
-    connect(m_bookmarks, SIGNAL(bookmarkSelected(QString, QString)), m_bookmarkBar, SLOT(slotBookmarkSelected(QString, QString)));
-    connect(m_bookmarks, SIGNAL(bookmarkSelected(QString, QString)), this, SLOT(slotBookmarkSelected(QString, QString)));
-    connect(m_bookmarkBar, SIGNAL(bookmarkEntered(QString, QString)), m_bookmarks, SLOT(bookmarkAdd(QString, QString)));
-    connect(m_bookmarkBar, SIGNAL(bookmarkDeleted(QString)), m_bookmarks, SLOT(bookmarkDel(QString)));
-
-    QVBoxLayout *layout = new QVBoxLayout(this);
-    layout->setMargin(2);
-    layout->setSpacing(4);
-    layout->addWidget(m_addressBar);
-    layout->addWidget(m_bookmarks);
-    layout->addWidget(m_bookmarkBar);
-}
-
-void HomeView::gotoAddress(const QString &address)
-{
-    emit addressEntered(address);
-}
-
-void HomeView::setCurrentAdress(const QString & name, const QString& adress)
-{
-    m_bookmarkBar->slotBookmarkSelected(name, adress);
-}
-
-void HomeView::slotBookmarkSelected(const QString& name, const QString& url)
-{
-    m_addressBar->setUrl(url);
-}
-
-void HomeView::toggleEdit()
-{
-    if (charm) {
-        delete charm;
-        charm = NULL;
-
-        m_addressBar->show();
-        m_bookmarkBar->show();
-
-        m_addressBar->activateWindow();
-        m_addressBar->setFocus();
-    } else {
-        switchToBrowse();
-    }
-}
-
-void HomeView::switchToBrowse()
-{
-    m_addressBar->hide();
-    m_bookmarkBar->hide();
-
-    if (!charm) {
-        charm = new MouseMachine(m_bookmarks->view(), MouseMachine::AutoScroll | MouseMachine::SignalTap);
-        charm->setObjectName("Bookmark_charm");
-        connect(charm, SIGNAL(singleTap(QPoint)), m_bookmarks, SLOT(slotDoubleClicked(QPoint)));
-    }
-    m_bookmarks->toXml();
-}
diff --git a/semperMerk/src/HomeView.h b/semperMerk/src/HomeView.h
deleted file mode 100644
index 6c7f6ff..0000000
--- a/semperMerk/src/HomeView.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info at nokia.com)
-**
-** This file is part of the demos of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info at nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef HOMEVIEW_H
-#define HOMEVIEW_H
-
-#include <QWidget>
-
-class QUrl;
-
-class AddressBar;
-class BookmarkBar;
-class BookmarksView;
-
-class MouseMachine;
-
-class HomeView : public QWidget
-{
-    Q_OBJECT
-
-public:
-    HomeView(QWidget *parent);
-    void setCurrentAdress(const QString & name, const QString& adress);
-
-    AddressBar* addressBar() { return m_addressBar; }
-
-signals:
-    void urlActivated(const QUrl &url);
-    void addressEntered(const QString &address);
-    void back();
-
-private slots:
-    void gotoAddress(const QString &address);
-    void slotBookmarkSelected(const QString& name, const QString& url);
-    void toggleEdit();
-
-public slots:
-    void switchToBrowse();
-
-private:
-    AddressBar *m_addressBar;
-    BookmarkBar *m_bookmarkBar;
-    BookmarksView *m_bookmarks;
-
-    MouseMachine* charm;
-};
-
-#endif // HOMEVIEW_H
diff --git a/semperMerk/src/MWebView.cpp b/semperMerk/src/MWebView.cpp
deleted file mode 100644
index 1d12897..0000000
--- a/semperMerk/src/MWebView.cpp
+++ /dev/null
@@ -1,249 +0,0 @@
-#include "MWebView.h"
-
-#include "MouseMachine/MouseMachine.h"
-#include "BrowserView.h"
-#include "MyPreferences.h"
-
-#include <QApplication>
-#include <QMouseEvent>
-#include <QPainter>
-#include <QMenu>
-#include <QGesture>
-
-#define ZOOM_STEP 1.10
-
-MWebPage::MWebPage(QObject * parent)
-        : QWebPage(parent)
-{
-    setForwardUnsupportedContent(true);
-}
-
-MWebPage::~MWebPage()
-{
-}
-
-QString MWebPage::userAgentForUrl ( const QUrl & url ) const
-{
-    if (url.toString().toLower().contains("iphone"))
-        return("Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16");
-//		return("Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3");
-
-    switch (M_PREFS->getGeneralUserAgent())
-    {
-        case 1:  // Default symbian browser
-            return("Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Nokia5800d-1/30.0.011; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/532.4 (KHTML, like Gecko) Safari/532.4");
-            break;
-        case 2:  // iPhone
-//			return("Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3");
-            return("Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16");
-            break;
-        case 3:  // Android
-//			return("Mozilla/5.0 (Linux; U; Android 1.0; en-us; generic) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2");
-            return("Mozilla/5.0 (Linux; U; Android 2.0.1; en-us;sdk Build/ES54) AppleWebKit/530.17+ (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17");
-            break;
-        default:
-            return QWebPage::userAgentForUrl(url);
-            break;
-    }
-}
-
-bool MWebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type)
-{
-//	if (QWebPage::acceptNavigationRequest(frame, request, type)) {
-//		//	QNetworkProxy myProxy(QNetworkProxy::HttpProxy, "localhost", 8888);
-//		//	p->m_webPage->networkAccessManager()->setProxy(myProxy);
-//		QNetworkProxyQuery npq(request.url());
-//		QList<QNetworkProxy> listOfProxies = QNetworkProxyFactory::systemProxyForQuery(npq);
-//		if (listOfProxies.size())
-//			networkAccessManager()->setProxy(listOfProxies[0]);
-//		return true;
-//	} else
-//		return false;
-
-    QNetworkProxyQuery npq(request.url());
-    QList<QNetworkProxy> listOfProxies = QNetworkProxyFactory::systemProxyForQuery(npq);
-    if (listOfProxies.size())
-        networkAccessManager()->setProxy(listOfProxies[0]);
-
-//	QNetworkProxy myProxy(QNetworkProxy::HttpProxy, "localhost", 8888);
-//	networkAccessManager()->setProxy(myProxy);
-
-    if (request.url().scheme() == "rtsp") {
-        emit rtspRequested(request.url());
-        return false;
-    }
-    return QWebPage::acceptNavigationRequest(frame, request, type);
-
-}
-
-/**************************************/
-
-MWebView::MWebView(BrowserView * parent)
-    : QWebView(parent), m_BrowserView(parent), doubleClickHold(false), possibleSingleClick(false), charm(0)
-    , m_zoomedIn(false), m_zoomedOut(false), m_initZoom(1.0)
-{
-    setAttribute(Qt::WA_AcceptTouchEvents);
-    grabGesture(Qt::PinchGesture);
-
-    QTimer::singleShot(0, this, SLOT(initialize()));
-}
-
-void MWebView::initialize()
-{
-    setMouseTracking(false);
-    charm = new MouseMachine(this, MouseMachine::AutoScroll | MouseMachine::SignalTap | MouseMachine::SignalScroll);
-    charm->setObjectName("Browser_charm");
-    connect(charm, SIGNAL(scroll(QPoint,QPoint)), SLOT(slotScroll(QPoint,QPoint)));
-    connect(charm, SIGNAL(singleTap(QPoint)), SLOT(slotClicked(QPoint)));
-    connect(charm, SIGNAL(doubleTap(QPoint)), SLOT(slotDoubleClicked(QPoint)));
-    connect(charm, SIGNAL(tapAndHold(QPoint)), SLOT(slotTapAndHold(QPoint)));
-}
-
-void MWebView::slotScroll(QPoint oldPos, QPoint newPos)
-{
-    QWebFrame *frame = page()->mainFrame();
-    frame->setScrollPosition(frame->scrollPosition() - (newPos - oldPos));
-}
-
-void MWebView::slotClicked(QPoint pos)
-{
-    QWebFrame* f = page()->frameAt(pos);
-    if (f) {
-        QWebHitTestResult wh = f->hitTestContent(pos);
-        if (!wh.linkUrl().isEmpty()) {
-    //        QString code = "$('a').each( function () { $(this).css('background-color', 'yellow') } )";
-    //        QString code = QString("$(\":contains('%1')\").css('background-color', 'yellow')").arg(wh.linkUrl().toString());
-    //        f->evaluateJavaScript(code);
-        }
-    }
-    QMouseEvent *event1 = new QMouseEvent(QEvent::MouseButtonPress,
-                                          pos, Qt::LeftButton,
-                                          Qt::LeftButton, Qt::NoModifier);
-    QMouseEvent *event2 = new QMouseEvent(QEvent::MouseButtonRelease,
-                                          pos, Qt::LeftButton,
-                                          Qt::LeftButton, Qt::NoModifier);
-
-    QApplication::postEvent(page(), event1);
-    QApplication::postEvent(page(), event2);
-}
-
-void MWebView::slotDoubleClicked(QPoint pos)
-{
-    QWebFrame *frame = page()->mainFrame();
-
-    QPoint p = frame->scrollPosition();
-    qDebug() << p;
-    qDebug() << zoomFactor();
-
-    qreal targetZoom;
-    if (m_zoomedIn || m_zoomedOut) {
-        targetZoom = m_initZoom;
-        m_zoomedIn = false;
-        m_zoomedOut = false;
-    } else {
-        targetZoom = m_initZoom * 2.0;
-        m_zoomedIn = true;
-    }
-    QPointF p2 =  p * (targetZoom / zoomFactor());
-    QPointF pos2 = pos * (targetZoom / zoomFactor());
-    p2 += pos2 - pos;
-
-    setZoomFactor(targetZoom);
-
-    frame->setScrollPosition(p2.toPoint());
-}
-
-void MWebView::slotTapAndHold(QPoint pos)
-{
-//	QContextMenuEvent *event1 = new QContextMenuEvent(QContextMenuEvent::Other, pos);
-//	QApplication::postEvent(page(), event1);
-    page()->updatePositionDependentActions(pos);
-    QMenu* ctxMenu = page()->createStandardContextMenu();
-    ctxMenu->exec(mapToGlobal(pos));
-}
-
-void MWebView::zoomIn()
-{
-    double currentZoom = zoomFactor() * ZOOM_STEP;
-    setZoomFactor(currentZoom);
-}
-
-void MWebView::zoomOut()
-{
-    double currentZoom = zoomFactor() / ZOOM_STEP;
-    setZoomFactor(currentZoom);
-}
-
-void MWebView::zoomBest()
-{
-    QWebFrame *frame = page()->mainFrame();
-
-    QPoint lastZoomedPoint = frame->scrollPosition();
-
-    double currentZoom = (double)width() / page()->mainFrame()->contentsSize().width() * zoomFactor();
-    setZoomFactor(currentZoom);
-    m_zoomedOut = true;
-    m_zoomedIn = false;
-
-    frame->setScrollPosition(lastZoomedPoint);
-}
-
-bool MWebView::isZoomed()
-{
-    return (zoomFactor() != m_initZoom);
-}
-
-void MWebView::zoom100()
-{
-    setZoomFactor(m_initZoom);
-}
-
-QWebView *MWebView::createWindow(QWebPage::WebWindowType type)
-{
-    Q_UNUSED(type);
-
-    m_BrowserView->addWebview();
-    return qobject_cast<QWebView *>(m_BrowserView->curWebView);
-}
-
-bool MWebView::event(QEvent *event)
-{
-    switch(event->type()){
-
-    case QEvent::TouchBegin:
-        //accepting touch begin allows us to get touch updates
-        return true;
-        break;
-
-    case QEvent::Gesture:
-        return gestureEvent(static_cast<QGestureEvent*>(event));
-        break;
-
-    default:
-        return QWebView::event(event);
-    }
-}
-
-bool MWebView::gestureEvent(QGestureEvent *event)
-{
-    qDebug() << "gesture";
-    if (QGesture *pinch = event->gesture(Qt::PinchGesture)){
-         pinchTriggered(static_cast<QPinchGesture *>(pinch));
-    }
-    return true;
-}
-
-void MWebView::pinchTriggered(QPinchGesture *gesture)
-{
-    qDebug() << "pinch";
-    QPinchGesture::ChangeFlags changeFlags = gesture->changeFlags();
-    if (changeFlags & QPinchGesture::ScaleFactorChanged) {
-      qreal value = gesture->scaleFactor();
-               qreal zoom = value*zoomFactor();
-
-    if(zoom < 2 && zoom > 0.5){
-                 qDebug()<< "zooming";
-                 setZoomFactor(zoom);
-           }
-    }
-}
diff --git a/semperMerk/src/MWebView.h b/semperMerk/src/MWebView.h
deleted file mode 100644
index a7fed5f..0000000
--- a/semperMerk/src/MWebView.h
+++ /dev/null
@@ -1,80 +0,0 @@
-#ifndef MWEBVIEW_H
-#define MWEBVIEW_H
-
-#include <QtWebKit>
-
-class MouseMachine;
-class BrowserView;
-class QPinchGesture;
-
-class MWebPage : public QWebPage
-{
-    Q_OBJECT
-
-public:
-    MWebPage(QObject * parent = 0);
-    ~MWebPage();
-
-protected:
-    QString userAgentForUrl ( const QUrl & url ) const;
-    bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type);
-
-signals:
-    void rtspRequested(QUrl url);
-};
-
-class MWebView : public QWebView
-{
-    Q_OBJECT
-
-public:
-    MWebView(BrowserView * parent = 0);
-
-private slots:
-    void initialize();
-
-protected:
-//	virtual void mouseDoubleClickEvent (QMouseEvent * event);
-//  virtual void mousePressEvent ( QMouseEvent * event );
-//	virtual void mouseReleaseEvent ( QMouseEvent * event );
-//	virtual void mouseMoveEvent ( QMouseEvent * event );
-//	virtual void paintEvent ( QPaintEvent * event );
-    virtual QWebView *createWindow(QWebPage::WebWindowType type);
-
-    bool event(QEvent *event);
-    bool gestureEvent(QGestureEvent *event);
-    void pinchTriggered(QPinchGesture *gesture);
-
-protected slots:
-//	void mouseRelease ();
-    void slotScroll(QPoint oldPos, QPoint newPos);
-    void slotClicked(QPoint pos);
-    void slotDoubleClicked(QPoint pos);
-    void slotTapAndHold(QPoint pos);
-
-public slots:
-    void zoomIn();
-    void zoomOut();
-    void zoomBest();
-    void zoom100();
-
-public:
-    bool isZoomed();
-
-private:
-    BrowserView* m_BrowserView;
-    bool doubleClickHold;
-    bool possibleSingleClick;
-    double scaleRatio;
-    double curZoom;
-    QPoint lastMouse;
-    MouseMachine *charm;
-    QPixmap* theImage;
-    QMouseEvent * curEvent;
-
-    qreal m_initZoom;
-    bool m_zoomedIn;
-    bool m_zoomedOut;
-};
-
-#endif // MWEBVIEW_H
diff --git a/semperMerk/src/Main.cpp b/semperMerk/src/Main.cpp
deleted file mode 100644
index e57c7cf..0000000
--- a/semperMerk/src/Main.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-//
-// C++ Implementation: Main
-//
-// Description:
-//
-//
-// Author: Chris Browet <cbro at semperpax.com> (C) 2009
-//
-// Copyright: See COPYING file that comes with this distribution
-//
-//
-
-#include <QtCore>
-#include <QtGui>
-
-#include "MainWindow.h"
-#include "MyMessageHandler.h"
-#include "MerkaartorPreferences.h"
-
-#include "IMapAdapterFactory.h"
-
-int main(int argc, char *argv[])
-{
-    QApplication app(argc, argv);
-
-    QCoreApplication::setApplicationName("semperMerk");
-    QCoreApplication::setOrganizationName("SemperPax");
-    QCoreApplication::setOrganizationDomain("semperpax.com");
-    QCoreApplication::setApplicationVersion("1.0.0");
-
-#ifdef LOG_TO_FILE
-#if defined(Q_OS_UNIX)
-    QString logFilename = QString("/tmp/%1.log").arg(QCoreApplication::applicationName());
-#elif defined(Q_OS_WIN)
-    QString logFilename = QString(qApp->applicationDirPath() + "/%1.log").arg(QCoreApplication::applicationName());
-#elif defined(Q_OS_SYMBIAN)
-    QString logFilename = QString(QDir::homePath() + "/%1.log").arg(QCoreApplication::applicationName());
-#endif
-
-    pLogFile = new QFile(logFilename);
-    pLogFile->open(QIODevice::Append | QIODevice::Text);
-    ts.setDevice(pLogFile);
-    qInstallMsgHandler(myMessageOutput);
-
-    qDebug() << "**** " << QDateTime::currentDateTime().toString(Qt::ISODate) << " -- Starting " << QString("%1 %2")
-                            .arg(QCoreApplication::applicationName()).arg(QCoreApplication::applicationVersion());
-    qDebug() <<	"-------" << QString("using QT version %1 (built with %2)").arg(qVersion()).arg(QT_VERSION_STR);
-#ifdef Q_WS_X11
-    qDebug() << "-------" << "on X11";
-#endif
-#ifdef Q_WS_WIN
-    qDebug() << "-------" << "on Windows";
-#endif
-#ifdef Q_WS_MACX
-    qDebug() << "-------" << "on Mac OS/X";
-#endif
-#ifdef Q_WS_S60
-    qDebug() << "-------" << "on S60";
-#endif
-#endif // LOG_TO_FILE
-
-    MainWindow window;
-#if defined(Q_OS_SYMBIAN) || defined(Q_WS_SIMULATOR)
-    window.showFullScreen();
-#else
-    window.resize(360, 640);
-    window.show();
-    app.setStyle("windows");
-#endif
-
-    QString theStyle(
-//                "					ControlStrip {"
-//                "						background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(0, 0, 0, 160), stop:0.500 rgba(50, 50, 50, 160), stop:0.501 rgba(52, 52, 52, 160), stop:1 rgba(0, 0, 0, 160)) ;"
-//                "					}"
-                "					ControlStrip {"
-                "						background-color: rgba(0, 0, 0, 128);"
-                "					}"
-                "					ViewMenu {"
-                "						background-color: rgba(0, 0, 0, 128);"
-                "					}"
-                "ViewMenu QPushButton {"
-                "  color: #333;"
-                "  border: 1px solid #555;"
-                "  padding: 5px;"
-                "  background: qradialgradient(cx: 0.3, cy: -0.4,"
-                "    fx: 0.3, fy: -0.4,"
-                "    radius: 1.35, stop: 0 #fff, stop: 1 #bbb);"
-                "  min-width: 80px;"
-                "}"
-                "					ZoomStrip {"
-                "						background: rgba(128, 128, 128, 128) ;"
-                "					}"
-                "					ControlButton {"
-                "						border: none;"
-                "                       background-color: transparent;"
-                "					}"
-                "BookmarksView QTreeView {"
-                "   background-color: #333;"
-                "  font: bold 24px;"
-                "}"
-                ""
-                "BookmarksView QTreeView::item {"
-                "  color: #333;"
-                "  border: 1px solid #555;"
-                "  padding: 5px;"
-                "  background: qradialgradient(cx: 0.3, cy: -0.4,"
-                "    fx: 0.3, fy: -0.4,"
-                "    radius: 1.35, stop: 0 #fff, stop: 1 #bbb);"
-                "  min-width: 80px;"
-                "}"
-                ""
-                "BookmarksView QTreeView::item:has-children {"
-                "  color: #ddd;"
-                "  border: 1px solid #555;"
-                "  padding: 5px;"
-                "  background: qradialgradient(cx: 0.3, cy: -0.4,"
-                "    fx: 0.3, fy: -0.4,"
-                "    radius: 1.35, stop: 0 #fff, stop: 1 #333);"
-                "  min-width: 80px;"
-                "}"
-
-                );
-    app.setStyleSheet(theStyle);
-
-#ifdef QT_KEYPAD_NAVIGATION
-    QApplication::setNavigationMode(Qt::NavigationModeCursorAuto);
-#endif
-
-    // Plugins
-#if defined(Q_OS_WIN32)
-    QDir pluginsDir = QDir(qApp->applicationDirPath() + "/plugins");
-
-    // Fixes MacOSX plugin dir (fixes #2253)
-#elif defined(Q_OS_MAC)
-    QDir pluginsDir = QDir(qApp->applicationDirPath());
-    pluginsDir.cdUp();
-    pluginsDir.cd("plugins");
-#elif defined(Q_OS_SYMBIAN)
-    QDir pluginsDir(QLibraryInfo::location(QLibraryInfo::PluginsPath));
-#else
-    QDir pluginsDir = (g_Merk_Portable ? QDir(qApp->applicationDirPath() + "/plugins") : QDir(STRINGIFY(PLUGINS_DIR)));
-#endif
-    QCoreApplication::addLibraryPath(pluginsDir.path());
-
-    pluginsDir.cd("background");
-    foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
-        QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
-        QObject *plugin = loader.instance();
-        if (plugin) {
-            IMapAdapterFactory *fac = qobject_cast<IMapAdapterFactory *>(plugin);
-            if (fac)
-                M_PREFS->addBackgroundPlugin(fac);
-        }
-    }
-
-    int x =  app.exec();
-
-#ifdef LOG_TO_FILE
-    qDebug() << "**** " << QDateTime::currentDateTime().toString(Qt::ISODate)
-                << " -- Ending " << QString("%1 %2")
-                    .arg(QCoreApplication::applicationName()).arg(QCoreApplication::applicationVersion());
-    if(pLogFile) {
-        pLogFile->close();
-        delete pLogFile;
-    }
-#endif // LOG_TO_FILE
-
-    return x;
-}
diff --git a/semperMerk/src/MainWindow.cpp b/semperMerk/src/MainWindow.cpp
deleted file mode 100644
index a0cf91d..0000000
--- a/semperMerk/src/MainWindow.cpp
+++ /dev/null
@@ -1,395 +0,0 @@
-
-#include "MainWindow.h"
-
-#include <QtCore>
-#include <QtGui>
-
-#include "MapView.h"
-#include "Document.h"
-#include "ImageMapLayer.h"
-#include "EditInteraction.h"
-
-#include "HomeView.h"
-#include "MyPreferences.h"
-
-#include "AddressBar.h"
-#include "ControlStrip.h"
-#include "ControlButton.h"
-#include "ViewMenu.h"
-#include "MouseMachine/MouseMachine.h"
-
-#include "qgps.h"
-#include "qgpsdevice.h"
-
-MainWindow::MainWindow()
-    : QWidget()
-    , m_homeView(0)
-    , m_mapView(0)
-    , m_gpsview(0)
-    , m_controlStrip(0)
-    , viewToShow(0)
-{
-    m_timeLine = new QTimeLine(800, this);
-    m_timeLine->setCurveShape(QTimeLine::EaseInOutCurve);
-    QTimer::singleShot(0, this, SLOT(initialize()));
-}
-
-MainWindow::~MainWindow()
-{
-    M_PREFS->setInitialPosition(m_mapView);
-    M_PREFS->getQSettings()->sync();
-}
-
-void MainWindow::initialize()
-{
-    MyPreferences::m_prefInstance = new MyPreferences(this);
-    SEMPERMERK_PREFS->hide();
-    SEMPERMERK_PREFS->resize(size());
-    SEMPERMERK_PREFS->move(0, 0);
-
-    m_controlStrip = new ControlStrip(this);
-    m_controlStrip->resizeBar(size(), true);
-    m_controlStrip->show();
-
-    m_homeView = new HomeView(this);
-
-    m_mapView = new MapView(this);
-    m_mapView->show();
-    m_mapView->resize(QSize(width(), height()));
-
-    loadTemplateDocument(":/doc/initial.mdc");
-    m_mapView->setDocument(m_document);
-
-//    ImageMapLayer* ilayer = m_document->addImageLayer();
-//    ilayer->setMapAdapter(TMS_ADAPTER_UUID, "OSM Mapnik");
-//    ilayer->setVisible(true);
-
-    M_PREFS->initialPosition(m_mapView);
-    m_mapView->launch(new EditInteraction(m_mapView));
-    m_mapView->invalidate(true, true);
-
-    m_homeView->resize(QSize(width(), height()));
-    m_homeView->move(width(), m_homeView->y());
-    m_homeView->show();
-
-    m_gpsview = new QGPS(this);
-#if defined(Q_OS_SYMBIAN) || defined(Q_WS_SIMULATOR)
-    QGPSMobileDevice* aGps = new QGPSMobileDevice();
-    if (aGps->openDevice()) {
-        connect(aGps, SIGNAL(updatePosition(qreal, qreal, QDateTime, qreal, qreal, qreal)),
-            this, SLOT(updateGpsPosition(qreal, qreal, QDateTime, qreal, qreal, qreal)));
-
-//        ui->gpsConnectAction->setEnabled(false);
-//        ui->gpsReplayAction->setEnabled(false);
-//        ui->gpsDisconnectAction->setEnabled(true);
-//        ui->gpsRecordAction->setEnabled(true);
-//        ui->gpsPauseAction->setEnabled(true);
-        m_gpsview->setGpsDevice(aGps);
-        m_gpsview->resetGpsStatus();
-        m_gpsview->startGps();
-    }
-#elif defined(Q_WS_SIMULATOR)
-    QGPSFileDevice* aGps = new QGPSFileDevice(":/test/test.nma");
-    if (aGps->openDevice()) {
-        connect(aGps, SIGNAL(updatePosition(qreal, qreal, QDateTime, qreal, qreal, qreal)),
-            this, SLOT(updateGpsPosition(qreal, qreal, QDateTime, qreal, qreal, qreal)));
-
-//        ui->gpsConnectAction->setEnabled(false);
-//        ui->gpsReplayAction->setEnabled(false);
-//        ui->gpsDisconnectAction->setEnabled(true);
-//        ui->gpsRecordAction->setEnabled(true);
-//        ui->gpsPauseAction->setEnabled(true);
-        m_gpsview->setGpsDevice(aGps);
-        m_gpsview->resetGpsStatus();
-        m_gpsview->startGps();
-    }
-#endif
-    m_gpsview->resize(QSize(width(), height()));
-    m_gpsview->move(width(), m_gpsview->y());
-    m_gpsview->show();
-
-    SEMPERMERK_PREFS->show();
-
-    m_controlStrip->raise();
-
-    connect(m_homeView, SIGNAL(addressEntered(QString)), SLOT(gotoAddress(QString)));
-
-//    connect(m_mapView, SIGNAL(menuButtonClicked()), SLOT(showHomeView()));
-
-//    connect(m_controlStrip, SIGNAL(backClicked()), m_mapView, SLOT(backView()));
-//    connect(m_controlStrip, SIGNAL(forwardClicked()), m_mapView, SLOT(fwdView()));
-//    connect(m_controlStrip, SIGNAL(stopClicked()), m_mapView, SLOT(stop()));
-//    connect(m_controlStrip, SIGNAL(zoomBestClicked()), m_mapView, SLOT(zoomBest()));
-//    connect(m_controlStrip, SIGNAL(refreshClicked()), m_mapView, SLOT(reload()));
-//    connect(m_controlStrip, SIGNAL(bookmarkClicked()), m_mapView, SIGNAL(menuButtonClicked()));
-    connect(m_controlStrip, SIGNAL(zoomInClicked()), m_mapView, SLOT(zoomIn()));
-    connect(m_controlStrip, SIGNAL(zoomOutClicked()), m_mapView, SLOT(zoomOut()));
-    connect(m_controlStrip, SIGNAL(prefClicked()), SLOT(showPreferencesView()));
-    connect(m_controlStrip, SIGNAL(menuClicked()), SLOT(showMenu()));
-
-//    m_controlStrip->bookmarkBt->show();
-//    m_controlStrip->searchBt->show();
-//    m_controlStrip->editBt->hide();
-
-    downSlide(0);
-
-//    QTimer::singleShot(2000, this, SLOT(showHomeView()));
-}
-
-Document* MainWindow::doLoadDocument(QFile* file)
-{
-    QXmlStreamReader stream(file);
-    while (stream.readNext() && stream.tokenType() != QXmlStreamReader::Invalid && stream.tokenType() != QXmlStreamReader::StartElement);
-    if (stream.tokenType() != QXmlStreamReader::StartElement || stream.name() != "MerkaartorDocument") {
-        return NULL;
-    }
-    double version = stream.attributes().value("version").toString().toDouble();
-
-    Document* newDoc = NULL;
-
-    if (version < 2.) {
-        stream.readNext();
-        while(!stream.atEnd() && !stream.isEndElement()) {
-            if (stream.name() == "MapDocument") {
-                newDoc = Document::fromXML(QFileInfo(*file).fileName(), stream, version, NULL, NULL);
-            } else if (stream.name() == "MapView") {
-                m_mapView->fromXML(stream);
-            } else if (!stream.isWhitespace()) {
-                qDebug() << "Main: logic error: " << stream.name() << " : " << stream.tokenType() << " (" << stream.lineNumber() << ")";
-                stream.skipCurrentElement();
-            }
-
-            stream.readNext();
-        }
-    }
-    return newDoc;
-}
-
-void MainWindow::loadTemplateDocument(QString fn)
-{
-    Document* newDoc = NULL;
-    QFile file(fn);
-    if (file.open(QIODevice::ReadOnly)) {
-        newDoc = doLoadDocument(&file);
-        file.close();
-    }
-
-    if (newDoc) {
-        m_document = newDoc;
-        m_document->setTitle(tr("untitled"));
-    }
-}
-
-
-void MainWindow::sideSlide(int pos)
-{
-    m_mapView->move(pos, m_mapView->y());
-    if (viewToShow)
-        viewToShow->move(width() + pos, viewToShow->y());
-}
-
-void MainWindow::downSlide(int pos)
-{
-    m_mapView->move(m_mapView->x(), pos);
-    if (viewToShow)
-        viewToShow->move(viewToShow->x(), pos);
-    SEMPERMERK_PREFS->move(0, pos + height());
-}
-
-void MainWindow::showHomeView()
-{
-    if (m_timeLine->state() != QTimeLine::NotRunning)
-        return;
-
-    m_timeLine->setFrameRange(0, -width());
-    disconnect(m_timeLine, SIGNAL(frameChanged(int)), 0, 0);
-    connect(m_timeLine, SIGNAL(frameChanged(int)), SLOT(sideSlide(int)));
-
-//    m_controlStrip->backAct->setEnabled(true);
-//    m_controlStrip->forwardBt->hide();
-//    m_controlStrip->bookmarkBt->hide();
-//    m_controlStrip->stopBt->hide();
-//    m_controlStrip->searchBt->hide();
-//    m_controlStrip->refreshBt->hide();
-//    m_controlStrip->editBt->show();
-
-//    disconnect(m_controlStrip, 0, 0, 0);
-//    connect(m_controlStrip, SIGNAL(backClicked()), m_homeView, SIGNAL(back()));
-//    connect(m_controlStrip, SIGNAL(forwardClicked()), m_homeView->addressBar(), SLOT(processAddress()));
-//    connect(m_controlStrip, SIGNAL(editClicked()), m_homeView, SLOT(toggleEdit()));
-//    connect(m_controlStrip, SIGNAL(prefClicked()), SLOT(showPreferencesView()));
-
-    m_homeView->blockSignals(false);
-    m_mapView->blockSignals(true);
-    SEMPERMERK_PREFS->blockSignals(true);
-
-    m_controlStrip->Expand();
-
-    m_timeLine->start();
-//    m_homeView->setCurrentAdress(m_mapView->getCurrentName(), m_mapView->getCurrentAdress());
-    m_homeView->stackUnder(m_controlStrip);
-//    m_homeView->setFocus();
-}
-
-void MainWindow::showMapView()
-{
-    if (m_timeLine->state() != QTimeLine::NotRunning)
-        return;
-
-    m_timeLine->setFrameRange(-width(), 0);
-    disconnect(m_timeLine, SIGNAL(frameChanged(int)), 0, 0);
-    connect(m_timeLine, SIGNAL(frameChanged(int)), SLOT(sideSlide(int)));
-
-//    m_controlStrip->forwardBt->show();
-//    m_controlStrip->bookmarkBt->show();
-////    m_controlStrip->stopBt->show();
-//    m_controlStrip->searchBt->show();
-////    m_controlStrip->refreshBt->show();
-//    m_controlStrip->editBt->hide();
-
-//    disconnect(m_controlStrip, 0, 0, 0);
-//    connect(m_controlStrip, SIGNAL(backClicked()), m_mapView, SLOT(backView()));
-//    connect(m_controlStrip, SIGNAL(forwardClicked()), m_mapView, SLOT(fwdView()));
-//    connect(m_controlStrip, SIGNAL(stopClicked()), m_mapView, SLOT(stop()));
-//    connect(m_controlStrip, SIGNAL(zoomBestClicked()), m_mapView, SLOT(zoomBest()));
-//    connect(m_controlStrip, SIGNAL(refreshClicked()), m_mapView, SLOT(reload()));
-//    connect(m_controlStrip, SIGNAL(bookmarkClicked()), m_mapView, SIGNAL(menuButtonClicked()));
-//    connect(m_controlStrip, SIGNAL(prefClicked()), SLOT(showPreferencesView()));
-
-    m_homeView->blockSignals(true);
-    m_mapView->blockSignals(false);
-    SEMPERMERK_PREFS->blockSignals(true);
-
-//    m_mapView->updateButtons();
-    m_controlStrip->show();
-
-    m_timeLine->start();
-    m_mapView->stackUnder(m_controlStrip);
-//    m_browserView->setFocus();
-
-}
-
-void MainWindow::showGpsView()
-{
-    if (m_timeLine->state() != QTimeLine::NotRunning)
-        return;
-
-    m_timeLine->setFrameRange(0, -width());
-    disconnect(m_timeLine, SIGNAL(frameChanged(int)), 0, 0);
-    connect(m_timeLine, SIGNAL(frameChanged(int)), SLOT(sideSlide(int)));
-
-    viewToShow = m_gpsview;
-    m_timeLine->start();
-    m_gpsview->stackUnder(m_controlStrip);
-}
-
-void MainWindow::showPreferencesView()
-{
-    if (m_timeLine->state() != QTimeLine::NotRunning)
-        return;
-
-    m_timeLine->setFrameRange(0, -SEMPERMERK_PREFS->height());
-    disconnect(m_timeLine, SIGNAL(frameChanged(int)), 0, 0);
-    connect(m_timeLine, SIGNAL(frameChanged(int)), SLOT(downSlide(int)));
-    m_timeLine->start();
-    m_controlStrip->hide();
-
-    m_homeView->blockSignals(true);
-    m_mapView->blockSignals(true);
-    SEMPERMERK_PREFS->blockSignals(false);
-
-    SEMPERMERK_PREFS->execPreferences();
-
-    m_homeView->blockSignals(false);
-    m_mapView->blockSignals(false);
-    SEMPERMERK_PREFS->blockSignals(true);
-
-    m_controlStrip->show();
-    m_timeLine->setFrameRange(-height(), 0);
-    m_timeLine->start();
-}
-
-void MainWindow::keyReleaseEvent(QKeyEvent *event)
-{
-    QWidget::keyReleaseEvent(event);
-
-    if (event->key() == Qt::Key_F3) {
-        if (m_homeView->isVisible())
-            showMapView();
-        else
-            showHomeView();
-    }
-}
-
-void MainWindow::resizeEvent(QResizeEvent *event)
-{
-    if (m_homeView)
-        m_homeView->resize(QSize(width(), height()));
-    if (m_mapView)
-        m_mapView->resize(QSize(width(), height()));
-    if (m_gpsview)
-        m_gpsview->resize(QSize(width(), height()));
-    SEMPERMERK_PREFS->resize(size());
-    if (m_controlStrip)
-        m_controlStrip->resizeBar(size(), true);
-
-    if (m_mapView) {
-        if (m_mapView->x() < 0)
-            sideSlide(-width());
-        else
-            sideSlide(0);
-        if (m_mapView->y() < 0) {
-            downSlide(-SEMPERMERK_PREFS->height());
-        } else {
-            downSlide(0);
-        }
-    }
-}
-
-void MainWindow::invalidateView(bool UpdateDock)
-{
-    m_mapView->invalidate(true, true);
-//    //theLayers->updateContent();
-//    if (UpdateDock)
-//        p->theProperties->resetValues();
-}
-
-void MainWindow::updateLanguage()
-{
-}
-
-void MainWindow::showMenu()
-{
-    ViewMenu* menu = new ViewMenu(this);
-    menu->move((width()-menu->width())/2, (height()-menu->height())/2);
-    connect(menu, SIGNAL(mapRequested()), SLOT(showMapView()));
-    connect(menu, SIGNAL(gpsRequested()), SLOT(showGpsView()));
-    menu->exec();
-}
-
-void MainWindow::updateGpsPosition(qreal latitude, qreal longitude, QDateTime time, qreal altitude, qreal speed, qreal heading)
-{
-    Q_UNUSED(heading)
-    if (m_gpsview->getGpsDevice()) {
-        Coord gpsCoord(longitude,latitude);
-        CoordBox vp = m_mapView->viewport();
-        qreal lonDiff = vp.lonDiff();
-        qreal latDiff = vp.latDiff();
-        QRectF vpr = vp.adjusted(lonDiff / 4, -latDiff / 4, -lonDiff / 4, latDiff / 4);
-        if (!vpr.contains(gpsCoord)) {
-            m_mapView->setCenter(gpsCoord, m_mapView->rect());
-            m_mapView->invalidate(true, true);
-        }
-
-//        if (ui->gpsRecordAction->isChecked() && !ui->gpsPauseAction->isChecked()) {
-//            Node* pt = g_backend.allocNode(gpsRecLayer, gpsCoord);
-//            pt->setTime(time);
-//            pt->setElevation(altitude);
-//            pt->setSpeed(speed);
-//            gpsRecLayer->add(pt);
-//            curGpsTrackSegment->add(pt);
-//            m_mapView->invalidate(true, false);
-//        }
-    }
-    m_mapView->update();
-}
diff --git a/semperMerk/src/MainWindow.h b/semperMerk/src/MainWindow.h
deleted file mode 100644
index 76fe848..0000000
--- a/semperMerk/src/MainWindow.h
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifndef BROWSERWINDOW_H
-#define BROWSERWINDOW_H
-
-#include <QWidget>
-#include <QDateTime>
-#include <QFile>
-
-#include "IMerkMainWindow.h"
-#include "IProgressWindow.h"
-
-class QTimeLine;
-class QUrl;
-
-class MapView;
-class Document;
-class HomeView;
-class QGPS;
-
-class ControlStrip;
-class ControlButton;
-class MouseMachine;
-
-class MainWindow : public QWidget, public IMerkMainWindow, public IProgressWindow
-{
-    Q_OBJECT
-
-public:
-    MainWindow();
-    ~MainWindow();
-
-public:
-    ControlStrip* controlStrip() { return m_controlStrip; }
-    MapView* view() { return m_mapView; }
-    Document* document() { return m_document; }
-
-    QGPS* gps() { return m_gpsview; }
-    PropertiesDock* properties() { return NULL; }
-    InfoDock* info() { return NULL; }
-    FeaturesDock* features()  { return NULL; }
-
-    QProgressDialog* getProgressDialog() { return NULL; }
-    QProgressBar* getProgressBar() { return NULL; }
-    QLabel*		  getProgressLabel() { return NULL; }
-
-    void updateLanguage();
-
-private:
-    Document * doLoadDocument(QFile *file);
-    void loadTemplateDocument(QString fn);
-
-public slots:
-    void invalidateView(bool UpdateDock = true);
-    void updateGpsPosition(qreal latitude, qreal longitude, QDateTime time, qreal altitude, qreal speed, qreal heading);
-
-private slots:
-    void initialize();
-
-public slots:
-    void showMenu();
-    void showMapView();
-    void showGpsView();
-    void showHomeView();
-    void showPreferencesView();
-    void sideSlide(int);
-    void downSlide(int);
-
-protected:
-    void keyReleaseEvent(QKeyEvent *event);
-    void resizeEvent(QResizeEvent *event);
-
-private:
-    HomeView *m_homeView;
-    MapView *m_mapView;
-    Document *m_document;
-    ControlStrip *m_controlStrip;
-    QTimeLine *m_timeLine;
-    QGPS* m_gpsview;
-
-    QWidget* viewToShow;
-};
-
-#endif // BROWSERWINDOW_H
diff --git a/semperMerk/src/TitleBar.cpp b/semperMerk/src/TitleBar.cpp
deleted file mode 100644
index 24484bf..0000000
--- a/semperMerk/src/TitleBar.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info at nokia.com)
-**
-** This file is part of the demos of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info at nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "TitleBar.h"
-
-#include <QtCore>
-#include <QtGui>
-
-TitleBar::TitleBar(QWidget *parent)
-    : QWidget(parent)
-    , m_progress(0)
-    , curOpacity(1.0)
-{
-    m_timeLine = new QTimeLine(1000, this);
-    m_timeLine->setCurveShape(QTimeLine::EaseInCurve);
-
-    startHideTimer.setSingleShot(true);
-
-    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
-
-    QTimer::singleShot(0, this, SLOT(initialize()));
-}
-
-void TitleBar::initialize()
-{
-    connect(&startHideTimer, SIGNAL(timeout()), this, SLOT(slotStartHiding()));
-    connect(m_timeLine, SIGNAL(frameChanged(int)), SLOT(slide(int)));
-}
-
-void TitleBar::slide(int pos)
-{
-    move (defPos.x(), pos);
-    update();
-}
-
-void TitleBar::setHost(const QString &host)
-{
-    m_host = host;
-    update();
-}
-
-void TitleBar::setTitle(const QString &title)
-{
-    m_title = title;
-    update();
-}
-
-void TitleBar::setProgress(int percent)
-{
-    m_progress = percent;
-    if (m_progress == 0) {
-        startHideTimer.start(1000);
-    } else {
-        startHideTimer.stop();
-        move(defPos);
-    }
-
-    update();
-}
-
-void TitleBar::slotStartHiding()
-{
-    if (m_progress == 0 && m_timeLine->state() != QTimeLine::Running) {
-        m_timeLine->setFrameRange(defPos.y(), defPos.y() - height());
-        m_timeLine->start();
-    }
-}
-
-QSize TitleBar::sizeHint() const
-{
-    return minimumSizeHint();
-}
-
-QSize TitleBar::minimumSizeHint() const
-{
-    QFontMetrics fm = fontMetrics();
-    return QSize(100, fm.height());
-}
-
-void TitleBar::paintEvent(QPaintEvent *event)
-{
-    QString title = m_host;
-    if (!m_title.isEmpty())
-        title.append(": ").append(m_title);
-
-    QPalette pal = palette();
-    QPainter p(this);
-
-    if (m_progress > 0) {
-
-        p.fillRect(event->rect(), pal.color(QPalette::Highlight));
-
-        QRect box = rect();
-        box.setLeft(16);
-        box.setWidth(width() - box.left() - 110);
-
-        p.setPen(pal.color(QPalette::HighlightedText));
-        p.setOpacity(0.8);
-        p.drawText(box, Qt::AlignLeft + Qt::AlignVCenter, title);
-
-        int x = width() - 100 - 5;
-        int y = 1;
-        int h = height() - 4;
-
-        p.setOpacity(1.0);
-        p.setBrush(Qt::NoBrush);
-        p.setPen(pal.color(QPalette::HighlightedText));
-        p.drawRect(x, y, 100, h);
-        p.setPen(Qt::NoPen);
-        p.setBrush(pal.color(QPalette::HighlightedText));
-        p.drawRect(x, y, m_progress, h);
-    } else {
-        p.setOpacity(curOpacity);
-
-        p.fillRect(event->rect(), pal.color(QPalette::Highlight));
-
-        QRect box = rect();
-        box.setLeft(16);
-        box.setWidth(width() - box.left() - 5);
-        p.setPen(pal.color(QPalette::HighlightedText));
-        p.drawText(box, Qt::AlignLeft + Qt::AlignVCenter, title);
-    }
-
-    p.end();
-}
-
-//void TitleBar::mousePressEvent (QMouseEvent * event)
-//{
-//	if (m_timeLine->state() == QTimeLine::Running)
-//		m_timeLine->stop();
-//	m_timeLine->setDuration(500);
-//	m_timeLine->setFrameRange(90, 1);
-//	m_timeLine->start();
-//
-//	event->ignore();
-//}
-//
-//void TitleBar::mouseReleaseEvent (QMouseEvent * event)
-//{
-//	if (m_timeLine->state() == QTimeLine::Running)
-//		m_timeLine->stop();
-//	m_timeLine->setDuration(500);
-//	m_timeLine->setFrameRange(1, 90);
-//	m_timeLine->start();
-//
-//	event->ignore();
-//}
-//
diff --git a/semperMerk/src/TitleBar.h b/semperMerk/src/TitleBar.h
deleted file mode 100644
index 255bdd9..0000000
--- a/semperMerk/src/TitleBar.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info at nokia.com)
-**
-** This file is part of the demos of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info at nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef TITLEBAR_H
-#define TITLEBAR_H
-
-#include <QWidget>
-#include <QTimer>
-
-class QTimeLine;
-
-class TitleBar : public QWidget
-{
-    Q_OBJECT
-
-private slots:
-    void initialize();
-    void slotStartHiding();
-
-public slots:
-    void slide(int);
-
-public:
-    TitleBar(QWidget *parent = 0);
-
-    void setHost(const QString &host);
-    void setTitle(const QString &title);
-    void setProgress(int percent);
-
-    QSize sizeHint() const;
-    QSize minimumSizeHint() const;
-
-protected:
-    void paintEvent(QPaintEvent *event);
-//	void mousePressEvent (QMouseEvent * event);
-//	void mouseReleaseEvent (QMouseEvent * event);
-
-private:
-    QString m_host;
-    QString m_title;
-    int m_progress;
-    QTimeLine *m_timeLine;
-    qreal curOpacity;
-    QPoint defPos;
-    QTimer startHideTimer;
-};
-
-#endif // TITLEBAR_H
diff --git a/semperMerk/src/ViewMenu.cpp b/semperMerk/src/ViewMenu.cpp
deleted file mode 100644
index 7ec5f26..0000000
--- a/semperMerk/src/ViewMenu.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "ViewMenu.h"
-#include "ui_ViewMenu.h"
-
-ViewMenu::ViewMenu(QWidget *parent) :
-    QDialog(parent),
-    ui(new Ui::ViewMenu)
-{
-    ui->setupUi(this);
-}
-
-ViewMenu::~ViewMenu()
-{
-    delete ui;
-}
-
-void ViewMenu::changeEvent(QEvent *e)
-{
-    QDialog::changeEvent(e);
-    switch (e->type()) {
-    case QEvent::LanguageChange:
-        ui->retranslateUi(this);
-        break;
-    default:
-        break;
-    }
-}
-
-void ViewMenu::on_btMap_clicked()
-{
-    emit mapRequested();
-    accept();
-}
-
-void ViewMenu::on_btGps_clicked()
-{
-    emit gpsRequested();
-    accept();
-}
diff --git a/semperMerk/src/ViewMenu.h b/semperMerk/src/ViewMenu.h
deleted file mode 100644
index 081cad0..0000000
--- a/semperMerk/src/ViewMenu.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef VIEWMENU_H
-#define VIEWMENU_H
-
-#include <QDialog>
-
-namespace Ui {
-    class ViewMenu;
-}
-
-class ViewMenu : public QDialog
-{
-    Q_OBJECT
-
-public:
-    explicit ViewMenu(QWidget *parent = 0);
-    ~ViewMenu();
-
-private slots:
-    void on_btMap_clicked();
-    void on_btGps_clicked();
-
-signals:
-    void mapRequested();
-    void gpsRequested();
-
-protected:
-    void changeEvent(QEvent *e);
-
-private:
-    Ui::ViewMenu *ui;
-};
-
-#endif // VIEWMENU_H
diff --git a/semperMerk/src/ViewMenu.ui b/semperMerk/src/ViewMenu.ui
deleted file mode 100644
index 320dab2..0000000
--- a/semperMerk/src/ViewMenu.ui
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ViewMenu</class>
- <widget class="QWidget" name="ViewMenu">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>200</width>
-    <height>200</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QPushButton" name="btMap">
-     <property name="text">
-      <string>Map</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QPushButton" name="btGps">
-     <property name="text">
-      <string>Gps</string>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/semperMerk/src/ZoomStrip.cpp b/semperMerk/src/ZoomStrip.cpp
deleted file mode 100644
index 5b8a66e..0000000
--- a/semperMerk/src/ZoomStrip.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info at nokia.com)
-**
-** This file is part of the demos of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info at nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "ZoomStrip.h"
-#include "ControlButton.h"
-
-#include <QtCore>
-#include <QtGui>
-
-ZoomStrip::ZoomStrip(QWidget *parent)
-    : QWidget(parent)
-{
-    QSize IconSize(48, 48);
-
-    zoomIn = new QAction(QPixmap(":/icons/add"), "Zoom In", this);
-    zoomOut = new QAction(QPixmap(":/icons/remove"), "Zoom Out", this);
-    zoomBest = new QAction(QPixmap(":/icons/zoomBest"), "Zoom Best", this);
-    zoom100 = new QAction(QPixmap(":/icons/zoom100"), "Zoom 100%", this);
-
-    connect(zoomIn, SIGNAL(triggered()), SIGNAL(zoomInClicked()));
-    connect(zoomOut, SIGNAL(triggered()), SIGNAL(zoomOutClicked()));
-    connect(zoomBest, SIGNAL(triggered()), SIGNAL(zoomBestClicked()));
-    connect(zoom100, SIGNAL(triggered()), SIGNAL(zoom100Clicked()));
-
-    ControlButton *zoomInBt = new ControlButton(zoomIn, IconSize, this);
-    ControlButton *zoomOutBt = new ControlButton(zoomOut, IconSize, this);
-    ControlButton *zoomBestBt = new ControlButton(zoomBest, IconSize, this);
-    ControlButton *zoom100Bt = new ControlButton(zoom100, IconSize, this);
-
-    QVBoxLayout* lay = new QVBoxLayout(this);
-    lay->setSpacing(0);
-    lay->setMargin(0);
-    lay->addWidget(zoomInBt);
-    lay->addWidget(zoomBestBt);
-    lay->addWidget(zoom100Bt);
-    lay->addWidget(zoomOutBt);
-}
-
-void ZoomStrip::paintEvent(QPaintEvent *)
-{
-    QStyleOption opt;
-    opt.init(this);
-    QPainter p(this);
-    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
-}
diff --git a/semperMerk/src/ZoomStrip.h b/semperMerk/src/ZoomStrip.h
deleted file mode 100644
index 216aba9..0000000
--- a/semperMerk/src/ZoomStrip.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info at nokia.com)
-**
-** This file is part of the demos of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info at nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef ZOOMSTRIP_H
-#define ZOOMSTRIP_H
-
-#include <QWidget>
-
-class ZoomStrip : public QWidget
-{
-    Q_OBJECT
-
-public:
-    ZoomStrip(QWidget *parent = 0);
-
-protected:
-	void paintEvent(QPaintEvent *event);
-
-signals:
-    void zoomInClicked();
-    void zoomOutClicked();
-	void zoomBestClicked();
-	void zoom100Clicked();
-
-private:
-	QAction* zoomIn;
-	QAction* zoomOut;
-	QAction* zoomBest;
-	QAction* zoom100;
-};
-
-#endif // ZOOMSTRIP_H
diff --git a/semperMerk/src/images/arrow_down_48.png b/semperMerk/src/images/arrow_down_48.png
deleted file mode 100644
index d855d34..0000000
Binary files a/semperMerk/src/images/arrow_down_48.png and /dev/null differ
diff --git a/semperMerk/src/images/arrow_left_48.png b/semperMerk/src/images/arrow_left_48.png
deleted file mode 100644
index c5b4cbc..0000000
Binary files a/semperMerk/src/images/arrow_left_48.png and /dev/null differ
diff --git a/semperMerk/src/images/arrow_right_48.png b/semperMerk/src/images/arrow_right_48.png
deleted file mode 100644
index dfc9dc4..0000000
Binary files a/semperMerk/src/images/arrow_right_48.png and /dev/null differ
diff --git a/semperMerk/src/images/arrow_up_48.png b/semperMerk/src/images/arrow_up_48.png
deleted file mode 100644
index fee5df2..0000000
Binary files a/semperMerk/src/images/arrow_up_48.png and /dev/null differ
diff --git a/semperMerk/src/images/book_bookmark_48.png b/semperMerk/src/images/book_bookmark_48.png
deleted file mode 100644
index bd804f5..0000000
Binary files a/semperMerk/src/images/book_bookmark_48.png and /dev/null differ
diff --git a/semperMerk/src/images/edit-find-replace.png b/semperMerk/src/images/edit-find-replace.png
deleted file mode 100644
index 0f1b117..0000000
Binary files a/semperMerk/src/images/edit-find-replace.png and /dev/null differ
diff --git a/semperMerk/src/images/edit-find.png b/semperMerk/src/images/edit-find.png
deleted file mode 100644
index 5594785..0000000
Binary files a/semperMerk/src/images/edit-find.png and /dev/null differ
diff --git a/semperMerk/src/images/gear_48.png b/semperMerk/src/images/gear_48.png
deleted file mode 100644
index 3206d90..0000000
Binary files a/semperMerk/src/images/gear_48.png and /dev/null differ
diff --git a/semperMerk/src/images/go-down.png b/semperMerk/src/images/go-down.png
deleted file mode 100644
index dce3f15..0000000
Binary files a/semperMerk/src/images/go-down.png and /dev/null differ
diff --git a/semperMerk/src/images/go-next.png b/semperMerk/src/images/go-next.png
deleted file mode 100644
index a68e2db..0000000
Binary files a/semperMerk/src/images/go-next.png and /dev/null differ
diff --git a/semperMerk/src/images/go-previous.png b/semperMerk/src/images/go-previous.png
deleted file mode 100644
index c37bc04..0000000
Binary files a/semperMerk/src/images/go-previous.png and /dev/null differ
diff --git a/semperMerk/src/images/go-up.png b/semperMerk/src/images/go-up.png
deleted file mode 100644
index afb307b..0000000
Binary files a/semperMerk/src/images/go-up.png and /dev/null differ
diff --git a/semperMerk/src/images/heart_48.png b/semperMerk/src/images/heart_48.png
deleted file mode 100644
index 0fda5b8..0000000
Binary files a/semperMerk/src/images/heart_48.png and /dev/null differ
diff --git a/semperMerk/src/images/list-add.png b/semperMerk/src/images/list-add.png
deleted file mode 100644
index 2acdd8f..0000000
Binary files a/semperMerk/src/images/list-add.png and /dev/null differ
diff --git a/semperMerk/src/images/list-remove.png b/semperMerk/src/images/list-remove.png
deleted file mode 100644
index c5524f7..0000000
Binary files a/semperMerk/src/images/list-remove.png and /dev/null differ
diff --git a/semperMerk/src/images/magnifier_48.png b/semperMerk/src/images/magnifier_48.png
deleted file mode 100644
index 78a8d24..0000000
Binary files a/semperMerk/src/images/magnifier_48.png and /dev/null differ
diff --git a/semperMerk/src/images/minus_48.png b/semperMerk/src/images/minus_48.png
deleted file mode 100644
index f7c8a14..0000000
Binary files a/semperMerk/src/images/minus_48.png and /dev/null differ
diff --git a/semperMerk/src/images/on_off_48.png b/semperMerk/src/images/on_off_48.png
deleted file mode 100644
index a8cf998..0000000
Binary files a/semperMerk/src/images/on_off_48.png and /dev/null differ
diff --git a/semperMerk/src/images/pencil_48.png b/semperMerk/src/images/pencil_48.png
deleted file mode 100644
index 23881be..0000000
Binary files a/semperMerk/src/images/pencil_48.png and /dev/null differ
diff --git a/semperMerk/src/images/play_48.png b/semperMerk/src/images/play_48.png
deleted file mode 100644
index e7f9048..0000000
Binary files a/semperMerk/src/images/play_48.png and /dev/null differ
diff --git a/semperMerk/src/images/plus_48.png b/semperMerk/src/images/plus_48.png
deleted file mode 100644
index 0429d59..0000000
Binary files a/semperMerk/src/images/plus_48.png and /dev/null differ
diff --git a/semperMerk/src/images/process-stop.png b/semperMerk/src/images/process-stop.png
deleted file mode 100644
index e7a8d17..0000000
Binary files a/semperMerk/src/images/process-stop.png and /dev/null differ
diff --git a/semperMerk/src/images/reload_48.png b/semperMerk/src/images/reload_48.png
deleted file mode 100644
index c0d1f10..0000000
Binary files a/semperMerk/src/images/reload_48.png and /dev/null differ
diff --git a/semperMerk/src/images/star_48.png b/semperMerk/src/images/star_48.png
deleted file mode 100644
index 8921f61..0000000
Binary files a/semperMerk/src/images/star_48.png and /dev/null differ
diff --git a/semperMerk/src/images/stop_48.png b/semperMerk/src/images/stop_48.png
deleted file mode 100644
index 930cff2..0000000
Binary files a/semperMerk/src/images/stop_48.png and /dev/null differ
diff --git a/semperMerk/src/images/system-lock-screen.png b/semperMerk/src/images/system-lock-screen.png
deleted file mode 100644
index 2c220fc..0000000
Binary files a/semperMerk/src/images/system-lock-screen.png and /dev/null differ
diff --git a/semperMerk/src/images/system-log-out.png b/semperMerk/src/images/system-log-out.png
deleted file mode 100644
index fddbc2b..0000000
Binary files a/semperMerk/src/images/system-log-out.png and /dev/null differ
diff --git a/semperMerk/src/images/system-search.png b/semperMerk/src/images/system-search.png
deleted file mode 100644
index 950d792..0000000
Binary files a/semperMerk/src/images/system-search.png and /dev/null differ
diff --git a/semperMerk/src/images/system-shutdown.png b/semperMerk/src/images/system-shutdown.png
deleted file mode 100644
index 36acd46..0000000
Binary files a/semperMerk/src/images/system-shutdown.png and /dev/null differ
diff --git a/semperMerk/src/images/tray_full_48.png b/semperMerk/src/images/tray_full_48.png
deleted file mode 100644
index 13a60ec..0000000
Binary files a/semperMerk/src/images/tray_full_48.png and /dev/null differ
diff --git a/semperMerk/src/images/video_pause_48.png b/semperMerk/src/images/video_pause_48.png
deleted file mode 100644
index 3abc131..0000000
Binary files a/semperMerk/src/images/video_pause_48.png and /dev/null differ
diff --git a/semperMerk/src/images/video_stop_48.png b/semperMerk/src/images/video_stop_48.png
deleted file mode 100644
index 47ee156..0000000
Binary files a/semperMerk/src/images/video_stop_48.png and /dev/null differ
diff --git a/semperMerk/src/images/view-refresh.png b/semperMerk/src/images/view-refresh.png
deleted file mode 100644
index 606ea9e..0000000
Binary files a/semperMerk/src/images/view-refresh.png and /dev/null differ
diff --git a/semperMerk/src/images/wifi_48.png b/semperMerk/src/images/wifi_48.png
deleted file mode 100644
index 67c5f78..0000000
Binary files a/semperMerk/src/images/wifi_48.png and /dev/null differ
diff --git a/semperMerk/src/images/zoom-best-fit.png b/semperMerk/src/images/zoom-best-fit.png
deleted file mode 100644
index 9be058f..0000000
Binary files a/semperMerk/src/images/zoom-best-fit.png and /dev/null differ
diff --git a/semperMerk/src/images/zoom-original.png b/semperMerk/src/images/zoom-original.png
deleted file mode 100644
index 9d29580..0000000
Binary files a/semperMerk/src/images/zoom-original.png and /dev/null differ
diff --git a/semperMerk/src/images/zoom_in_48.png b/semperMerk/src/images/zoom_in_48.png
deleted file mode 100644
index 4128210..0000000
Binary files a/semperMerk/src/images/zoom_in_48.png and /dev/null differ
diff --git a/semperMerk/src/images/zoom_out_48.png b/semperMerk/src/images/zoom_out_48.png
deleted file mode 100644
index 772d6ac..0000000
Binary files a/semperMerk/src/images/zoom_out_48.png and /dev/null differ
diff --git a/semperMerk/src/resources/Merkaartor.svg b/semperMerk/src/resources/Merkaartor.svg
deleted file mode 100644
index b8dbc5a..0000000
--- a/semperMerk/src/resources/Merkaartor.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Converted with image2svgt -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg
-    xmlns="http://www.w3.org/2000/svg"
-    xmlns:xlink="http://www.w3.org/1999/xlink"
-    version="1.1"
-    width="100"
-    height="100">
-<image xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9gJCgwbC2fqXYEAACAASURBVHjaVLxZrGVpeiW0/mHPZz733HmMecjIjMixMmtIZ1VRbruNXV0CuT3JGFAbkBoQ4g0k4IUHhECIJxBCQrTaMrjdhY3tqsKuKmdWZtYUGTlFxnzjzsM5555hz3v/Ew9nR2X5PsXVvbqx9/d/w/rWWv8hf/enf2CglRTR5JhQZoyhlJZF9md/+cHrLy0vLy2kyaQoUs+rGWOkVO3uIgHZ233g2Faz3TNGW5YrRCnKDIQUed7qLNqOf/eTD/eO0+uXVza3Ltx/dPAv/vX9o1PJGaSG1jAGzRoaARZ6/uIciWK1dyy+/uX1L752rd8/+Zd//uFgrLR [...]
-</svg>
diff --git a/semperMerk/src/resources/btn_donate_LG.gif b/semperMerk/src/resources/btn_donate_LG.gif
deleted file mode 100644
index 43cef69..0000000
Binary files a/semperMerk/src/resources/btn_donate_LG.gif and /dev/null differ
diff --git a/semperMerk/src/resources/home.html b/semperMerk/src/resources/home.html
deleted file mode 100644
index c566b0d..0000000
--- a/semperMerk/src/resources/home.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<html>
-<body>
-
-<div class="centering" style="display: table; margin: 0 auto; height: 100%;">
-  <div style="display: table-cell; vertical-align: middle;">
-    <center>
-      <img src="qrc:/img/semperWeb-big.svg"/>
-      <p><big><b>semperWeb</b></big></p>
-      <p>by SemperPax  <a href="http://www.twitter.com/SmprPax"><img src="t_logo-a.png" alt="Follow me on Twitter"/></a></p>
-      <p><a href="http://redmine.semperpax.com/projects/semperweb">http://redmine.semperpax.com</a>
-
-<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
-<input type="hidden" name="cmd" value="_s-xclick">
-<input type="hidden" name="hosted_button_id" value="W4PNXC9M6SLRN">
-<input type="image" src="btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
-<img alt="" border="0" src="pixel.gif" width="1" height="1">
-</form>
-
-  </center>
-  </div>
-</div>
-
-</body>
-</html>
diff --git a/semperMerk/src/resources/pixel.gif b/semperMerk/src/resources/pixel.gif
deleted file mode 100644
index 1d11fa9..0000000
Binary files a/semperMerk/src/resources/pixel.gif and /dev/null differ
diff --git a/semperMerk/src/resources/resources.qrc b/semperMerk/src/resources/resources.qrc
deleted file mode 100644
index ab7942e..0000000
--- a/semperMerk/src/resources/resources.qrc
+++ /dev/null
@@ -1,21 +0,0 @@
-<RCC>
-    <qresource prefix="/html">
-        <file>home.html</file>
-        <file>btn_donate_LG.gif</file>
-        <file>pixel.gif</file>
-        <file>t_logo-a.png</file>
-    </qresource>
-    <qresource prefix="/img">
-        <file>semperWeb.svg</file>
-        <file>semperWeb-big.svg</file>
-    </qresource>
-    <qresource prefix="/test">
-        <file alias="test.nma">E:/cbro/Merkaartor/log_2009-04-18_16-40-39.bin.nma</file>
-    </qresource>
-    <qresource prefix="/doc">
-        <file>initial.mdc</file>
-    </qresource>
-    <qresource prefix="/Styles">
-        <file>Mapnik.mas</file>
-    </qresource>
-</RCC>
diff --git a/semperMerk/src/resources/semperWeb - Copy.svg b/semperMerk/src/resources/semperWeb - Copy.svg
deleted file mode 100644
index 990362c..0000000
--- a/semperMerk/src/resources/semperWeb - Copy.svg	
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg version="1.1" baseProfile="tiny"
-	 id="svg1" sodipodi:version="0.32" inkscape:version="0.46" sodipodi:docname="11949842201535358324globe_01.svg" sodipodi:docbase="/home/bana/misc/loen" inkscape:output_extension="org.inkscape.output.svg.inkscape" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.ink [...]
-	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="47.992px"
-	 height="48.007px" viewBox="0 0 47.992 48.007" xml:space="preserve">
-<defs>
-	
-	
-		<inkscape:perspective  id="perspective28" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" inkscape:vp_z="744.09448 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 526.18109 : 1" sodipodi:type="inkscape:persp3d">
-		</inkscape:perspective>
-</defs>
-<sodipodi:namedview  id="base" inkscape:window-y="-8" inkscape:window-x="-8" inkscape:window-height="746" inkscape:window-width="1360" inkscape:current-layer="svg1" inkscape:pageshadow="2" inkscape:pageopacity="0.0" inkscape:zoom="1.569201" showgrid="false" borderopacity="1.0" bordercolor="#666666" inkscape:cy="120.2455" pagecolor="#ffffff" inkscape:cx="181.18414">
-	</sodipodi:namedview>
-<g id="g1006" transform="matrix(0.1792847,0,0,0.1747529,-40.488306,-43.297229)">
-	<g id="path908">
-		
-			<image width="48" height="48" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsSAAALEgHS3X78AAAA
-GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoNJREFUeNrMms1Kw0AQx7OyBz8h
-PlSvvXrwVgpeKngREbwo9KKXQumht1567aEgpaD4DiKUgsV3sB+C0I6mUpuY3WZnd2ZjIbRJmslv
-Z/6zmd2NCIg+9/efMJ8HwWIB31uw3H72V7/Xx6OtXN4WFPd1MtLvf0ISFFLgKvjkeQhOT3eEtwY8
-Pv5Ap2FA4XV9RHQNu7jANWbLFj66WRw+uW8HH31XqzMgj8DTk87ra3iTiJjIKb5/c7MrnCMQh097
-mQ8+2i4vs6MhMPA6mCwQWzmtrrm72xPoBqzgXb3oAh//b62mboSwhcd6kcIRjUa6EUIFTy0BDHyW
-rWZzP8Es/zZgEzyuYfS5EO1vjMDDgypp+eGxcmq11lEQWfBqEBt50OVCdLzdPhAJCZlfTAPvKqdU
-DriENM9cWIah14vLhw+eWk6dzoGQSfn46CrpcuFXQpzwnHJaSqjbjeRD20P4LDMkB7xPOcn8ygaa
-MkNyVI4+5SQ5n5Y0ZcZmW5KzcnSXU7YjJOfT0q3MMLMluStHOzmZO0JyPurtygycLemjcuR0hPRR
-OXKOq6WvypHLEctyul7/AF8SoLT1/Byuy+k8vWjriN9ymhrelyMSg/rb2w/Iu0fB1FuDQaga1Ofb
-o2AcoRjUw7/MBd055cTW9fUM8upRMPZeX0OhnRu9uprlngubbMXhlXOjtAMXekcYTa+fn0/Bdy6Y
-2Hp7OxTGCxxnZ1PgHIhgHaGCz1xiqlSmwAlvKicdvNEq5cnJBHxP/JrCGy+zlkoToILHyCkLHr1S
-f3w8Bh+zE6PRoWB71eDoaAycM3UYeOeXPYrFMVD088Nh6O9lD92nUHgHzAPv5SUkufeXAAMAy7XM
-80+CxBwAAAAASUVORK5CYII=" sodipodi:cx="342.13577" sodipodi:cy="244.65948" sodipodi:rx="132.30278" sodipodi:ry="135.77428" sodipodi:type="arc" transform="matrix(5.5777 0 0 5.7224 225.8103 247.7821)">
-		</image>
-		<path d="M359.722,529.877h-0.063c-77.72,0-140.971-64.896-141.001-144.663c-0.014-38.746,14.641-75.092,41.266-102.435
-			c26.628-27.34,62.036-42.406,99.704-42.42c77.78,0,141.036,64.896,141.063,144.666c0.016,38.743-14.641,75.089-41.266,102.432
-			C432.801,514.8,397.39,529.865,359.722,529.877L359.722,529.877z M359.678,258.24c-33.055,0.011-64.086,13.213-87.421,37.179
-			c-23.335,23.962-36.182,55.818-36.168,89.697c0.025,70.001,55.458,126.878,123.57,126.878v8.941l0.057-8.941
-			c33.011-0.011,64.043-13.211,87.378-37.179c23.335-23.962,36.179-55.815,36.168-89.694
-			C483.24,315.118,427.801,258.24,359.678,258.24L359.678,258.24z"/>
-	</g>
-	<path id="path4042" sodipodi:nodetypes="ccc" fill="none" stroke="#000000" d="M353.891,250.115c0,0-37.562,15.706-38.33,136.051
-		c-0.771,120.346,42.187,134.724,42.187,134.724"/>
-	<path id="path7092" sodipodi:nodetypes="ccc" fill="none" stroke="#000000" d="M353.891,250.115
-		c0,0,115.716,15.429,114.942,135.775c-0.768,120.348-111.086,135.001-111.086,135.001"/>
-	<path id="path7093" sodipodi:nodetypes="ccc" fill="none" stroke="#000000" d="M353.891,250.115c0,0,41.403,16.214,40.634,136.56
-		c-0.773,120.346-36.778,134.216-36.778,134.216"/>
-	<path id="path7094" sodipodi:nodetypes="ccc" fill="none" stroke="#000000" d="M353.891,250.115
-		c0,0-105.157,13.898-105.925,134.244c-0.773,120.348,109.781,136.532,109.781,136.532"/>
-	<path id="path7095" sodipodi:nodetypes="ccc" fill="none" stroke="#000000" d="M353.891,250.115c0,0,77.146,13.887,76.372,134.232
-		c-0.773,120.348-72.516,136.543-72.516,136.543"/>
-	<path id="path7096" sodipodi:nodetypes="ccc" fill="none" stroke="#000000" d="M353.891,250.115c0,0-77.788,14.429-78.562,134.774
-		c-0.773,120.343,82.418,136.001,82.418,136.001"/>
-	<path id="path7097" sodipodi:nodetypes="ccc" fill="none" stroke="#000000" d="M353.891,250.115c0,0,2.315,11.573,1.542,131.919
-		c-0.768,120.348,2.315,138.857,2.315,138.857"/>
-	<path id="path7107" fill="none" stroke="#000000" d="M306.834,260.917c0,0,3.083,17.743,47.83,17.743
-		c44.742,0,57.858-16.2,57.858-16.2"/>
-	<path id="path7108" sodipodi:nodetypes="ccc" fill="none" stroke="#000000" d="M263.416,292.547c0,0,2.195,27,90.564,27
-		c88.358,0,105.042-25.457,103.501-24.686"/>
-	<path id="path7109" sodipodi:nodetypes="ccc" fill="none" stroke="#000000" d="M241.214,324.176c0,0,10.21,34.714,113.45,34.714
-		c103.242,0,124.246-31.629,124.246-31.629"/>
-	<path id="path7110" sodipodi:nodetypes="ccc" fill="none" stroke="#000000" d="M228.959,366.605c0,0,16.886,28.539,127.568,28.539
-		s133.871-26.997,133.871-26.997"/>
-	<path id="path7111" sodipodi:nodetypes="ccc" fill="none" stroke="#000000" d="M228.959,398.234c0,0,16.096,32.401,126.452,32.401
-		c110.35,0,134.214-30.858,134.214-30.858"/>
-	<path id="path7112" sodipodi:nodetypes="ccc" fill="none" stroke="#000000" d="M236.595,432.177c0,0,15.627,30.087,119.191,30.087
-		c103.558,0,125.428-28.545,125.428-28.545"/>
-	<path id="path7113" sodipodi:nodetypes="ccc" fill="none" stroke="#000000" d="M253.399,465.349c0,0,13.127,26.226,102.787,26.226
-		s108.991-24.683,108.991-24.683"/>
-	<path id="path7114" sodipodi:nodetypes="ccc" fill="none" stroke="#000000" d="M277.834,490.032c0,0,10.932,24.689,79.896,24.689
-		c68.97,0,83.012-23.146,83.012-23.146"/>
-</g>
-</svg>
diff --git a/semperMerk/src/resources/semperWeb-big.svg b/semperMerk/src/resources/semperWeb-big.svg
deleted file mode 100644
index c4c552a..0000000
--- a/semperMerk/src/resources/semperWeb-big.svg
+++ /dev/null
@@ -1,262 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363)  -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   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.1"
-   id="svg1"
-   sodipodi:version="0.32"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="semperWeb-big.svg"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   x="0px"
-   y="0px"
-   width="100"
-   height="100"
-   viewBox="0 0 99.999999 100"
-   xml:space="preserve"><metadata
-   id="metadata28"><rdf:RDF><cc:Work
-       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata>
-<defs
-   id="defs3">
-	
-	
-		<inkscape:perspective
-   id="perspective28"
-   inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
-   inkscape:vp_z="744.09448 : 526.18109 : 1"
-   inkscape:vp_y="0 : 1000 : 0"
-   inkscape:vp_x="0 : 526.18109 : 1"
-   sodipodi:type="inkscape:persp3d">
-		</inkscape:perspective>
-
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-
-		
-			
-		
-	<radialGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4114"
-   id="radialGradient4120"
-   gradientTransform="scale(1.64399,0.608276)"
-   cx="15.115514"
-   cy="63.965389"
-   fx="15.115514"
-   fy="63.965389"
-   r="12.289036"
-   gradientUnits="userSpaceOnUse" /><linearGradient
-   inkscape:collect="always"
-   id="linearGradient4114"><stop
-     stop-color="#000000"
-     stop-opacity="1"
-     offset="0"
-     id="stop4116" /><stop
-     stop-color="#000000"
-     stop-opacity="0"
-     offset="1"
-     id="stop4118" /></linearGradient><radialGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient3962"
-   id="radialGradient3968"
-   gradientTransform="scale(0.999989,1.000011)"
-   cx="18.247644"
-   cy="15.716079"
-   fx="18.247644"
-   fy="15.716079"
-   r="29.993349"
-   gradientUnits="userSpaceOnUse" /><linearGradient
-   id="linearGradient3962"><stop
-     stop-color="#d3e9ff"
-     stop-opacity="1.0000000"
-     offset="0.0000000"
-     id="stop3964" /><stop
-     stop-color="#d3e9ff"
-     stop-opacity="1.0000000"
-     offset="0.15517241"
-     id="stop4134" /><stop
-     stop-color="#4074ae"
-     stop-opacity="1.0000000"
-     offset="0.75000000"
-     id="stop4346" /><stop
-     stop-color="#36486c"
-     stop-opacity="1.0000000"
-     offset="1.0000000"
-     id="stop3966" /></linearGradient><radialGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4350"
-   id="radialGradient4356"
-   gradientTransform="scale(1.179536,0.847791)"
-   cx="11.826907"
-   cy="10.476453"
-   fx="11.826907"
-   fy="10.476453"
-   r="32.664848"
-   gradientUnits="userSpaceOnUse" /><linearGradient
-   inkscape:collect="always"
-   id="linearGradient4350"><stop
-     stop-color="#ffffff"
-     stop-opacity="1"
-     offset="0"
-     id="stop4352" /><stop
-     stop-color="#ffffff"
-     stop-opacity="0"
-     offset="1"
-     id="stop4354" /></linearGradient><radialGradient
-   r="32.664848"
-   fy="10.476453"
-   fx="11.826907"
-   cy="10.476453"
-   cx="11.826907"
-   gradientTransform="scale(1.179536,0.847791)"
-   gradientUnits="userSpaceOnUse"
-   id="radialGradient3188"
-   xlink:href="#linearGradient4350"
-   inkscape:collect="always" /></defs>
-<sodipodi:namedview
-   id="base"
-   inkscape:window-y="-8"
-   inkscape:window-x="-8"
-   inkscape:window-height="745"
-   inkscape:window-width="1360"
-   inkscape:current-layer="svg1"
-   inkscape:pageshadow="2"
-   inkscape:pageopacity="0.0"
-   inkscape:zoom="3.138402"
-   showgrid="false"
-   borderopacity="1.0"
-   bordercolor="#666666"
-   inkscape:cy="21.004812"
-   pagecolor="#ffffff"
-   inkscape:cx="29.513245"
-   inkscape:window-maximized="0">
-	</sodipodi:namedview>
-<g
-   transform="matrix(2.2367403,0,0,2.2367403,-4.7872027,-4.8196743)"
-   id="g3155"><path
-     style="fill:url(#radialGradient4120);fill-opacity:1;stroke:none"
-     transform="matrix(1,0,0,1.243244,0,-10.27241)"
-     d="m 45.052803,38.908627 c 0,4.128399 -9.045214,7.475128 -20.203051,7.475128 -11.157836,0 -20.2030502,-3.346729 -20.2030502,-7.475128 0,-4.1284 9.0452142,-7.475129 20.2030502,-7.475129 11.157837,0 20.203051,3.346729 20.203051,7.475129 z"
-     sodipodi:ry="7.4751287"
-     sodipodi:rx="20.203051"
-     sodipodi:cy="38.908627"
-     sodipodi:cx="24.849752"
-     id="path4112"
-     sodipodi:type="arc" /><path
-     style="fill:url(#radialGradient3968);fill-opacity:1;fill-rule:nonzero;stroke:#39396c;stroke-miterlimit:4;stroke-opacity:1"
-     inkscape:connector-curvature="0"
-     id="path3214"
-     d="m 43.959853,23.485499 c 0,10.709718 -8.682103,19.391723 -19.390348,19.391723 -10.709226,0 -19.3908387,-8.682103 -19.3908387,-19.391723 0,-10.709227 8.6816127,-19.3903473 19.3908387,-19.3903473 10.708245,0 19.390348,8.6811203 19.390348,19.3903473 l 0,0 z"
-     stroke-miterlimit="4.0000000" /><path
-     style="opacity:0.42159382;fill:url(#radialGradient3188);fill-opacity:1;stroke:none"
-     transform="matrix(0.835938,0,0,1,9.886868,0)"
-     d="m 30.708637,15.271057 c 0,5.132605 -5.788937,9.293404 -12.929952,9.293404 -7.141016,0 -12.929953,-4.160799 -12.929953,-9.293404 0,-5.132605 5.788937,-9.2934035 12.929953,-9.2934035 7.141015,0 12.929952,4.1607985 12.929952,9.2934035 z"
-     sodipodi:ry="9.2934036"
-     sodipodi:rx="12.929953"
-     sodipodi:cy="15.271057"
-     sodipodi:cx="17.778685"
-     id="path4348"
-     sodipodi:type="arc" /></g><g
-   id="g3043"
-   transform="matrix(1.7372186,0,0,1.7372186,14.822334,7.6227609)"><path
-     inkscape:connector-curvature="0"
-     id="path11"
-     d="m 20.321791,51.033973 h -0.01206 c -14.8843148,0 -26.9976422,-12.120645 -27.0033875,-27.018751 -0.00268,-7.236601 2.8039276,-14.0249541 7.9029354,-19.1318142 5.0995823,-5.10629969 11.8806401,-7.9201809 19.0945151,-7.9227957 14.895806,0 27.010091,12.1206448 27.015262,27.0193109 0.0031,7.236041 -2.803928,14.024394 -7.902936,19.131254 -5.098816,5.10686 -11.880448,7.920555 -19.094324,7.922796 l 0,0 z M 20.313365,0.30025169 C 13.982935,0.30230616 8.040125,2.7680475 3.5711918,7.2441843 [...]
-     id="path4042"
-     sodipodi:nodetypes="ccc"
-     d="m 19.205085,-1.2172569 c 0,0 -7.193575,2.9334142 -7.340656,25.4102849 -0.147656,22.477057 8.079318,25.16244 8.079318,25.16244"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /><path
-     id="path7092"
-     sodipodi:nodetypes="ccc"
-     d="m 19.205085,-1.2172569 c 0,0 22.161006,2.8816788 22.012776,25.3587359 C 41.070779,46.61891 19.943555,49.355655 19.943555,49.355655"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /><path
-     id="path7093"
-     sodipodi:nodetypes="ccc"
-     d="m 19.205085,-1.2172569 c 0,0 7.929172,3.0282935 7.7819,25.5053509 -0.148039,22.477057 -7.04343,25.067561 -7.04343,25.067561"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /><path
-     id="path7094"
-     sodipodi:nodetypes="ccc"
-     d="m 19.205085,-1.2172569 c 0,0 -20.13883073,2.5957335 -20.285912,25.0727909 -0.1480388,22.477431 21.024382,25.500121 21.024382,25.500121"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /><path
-     id="path7095"
-     sodipodi:nodetypes="ccc"
-     d="m 19.205085,-1.2172569 c 0,0 14.774387,2.593679 14.626157,25.0705499 -0.148039,22.477431 -13.887687,25.502175 -13.887687,25.502175"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /><path
-     id="path7096"
-     sodipodi:nodetypes="ccc"
-     d="m 19.205085,-1.2172569 c 0,0 -14.897338,2.6949085 -15.0455683,25.1717789 C 4.0114779,46.431019 19.943555,49.355468 19.943555,49.355468"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /><path
-     id="path7097"
-     sodipodi:nodetypes="ccc"
-     d="m 19.205085,-1.2172569 c 0,0 0.44335,2.16149255 0.295311,24.6385499 -0.147081,22.477431 0.443351,25.934362 0.443351,25.934362"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /><path
-     id="path7107"
-     d="m 10.193103,0.80023576 c 0,0 0.590432,3.31386524 9.160021,3.31386524 8.568631,0 11.080503,-3.0256787 11.080503,-3.0256787"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /><path
-     id="path7108"
-     sodipodi:nodetypes="ccc"
-     d="m 1.8780339,6.70778 c 0,0 0.4203689,5.042798 17.3440951,5.042798 16.92162,0 20.116807,-4.7546114 19.821687,-4.6106115"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /><path
-     id="path7109"
-     sodipodi:nodetypes="ccc"
-     d="m -2.3739162,12.615138 c 0,0 1.95533783,6.483543 21.7270402,6.483543 19.772085,0 23.794603,-5.907357 23.794603,-5.907357"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /><path
-     id="path7110"
-     sodipodi:nodetypes="ccc"
-     d="m -4.7208961,20.539614 c 0,0 3.2338721,5.330237 24.4308071,5.330237 21.196934,0 25.637906,-5.042237 25.637906,-5.042237"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /><path
-     id="path7111"
-     sodipodi:nodetypes="ccc"
-     d="m -4.7208961,26.446972 c 0,0 3.0825776,6.051544 24.2170791,6.051544 21.133353,0 25.703596,-5.763358 25.703596,-5.763358"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /><path
-     id="path7112"
-     sodipodi:nodetypes="ccc"
-     d="m -3.2585103,32.786516 c 0,0 2.99275853,5.619357 22.8265103,5.619357 19.832603,0 24.020971,-5.331358 24.020971,-5.331358"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /><path
-     id="path7113"
-     sodipodi:nodetypes="ccc"
-     d="m -0.04034211,38.98206 c 0,0 2.51397841,4.898237 19.68494711,4.898237 17.170969,0 20.873088,-4.610051 20.873088,-4.610051"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /><path
-     id="path7114"
-     sodipodi:nodetypes="ccc"
-     d="m 4.6392543,43.592111 c 0,0 2.0936096,4.611171 15.3010447,4.611171 13.208585,0 15.897797,-4.322985 15.897797,-4.322985"
-     inkscape:connector-curvature="0"
-     style="fill:none;stroke:#000000;stroke-width:0.1891263" /></g>
-</svg>
\ No newline at end of file
diff --git a/semperMerk/src/resources/semperWeb.svg b/semperMerk/src/resources/semperWeb.svg
deleted file mode 100644
index c142bb8..0000000
--- a/semperMerk/src/resources/semperWeb.svg
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   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"
-   version="1.1"
-   width="48"
-   height="48"
-   viewBox="0 0 48 48"
-   id="svg1"
-   xml:space="preserve"><metadata
-   id="metadata28"><rdf:RDF><cc:Work
-       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata>
-<defs
-   id="defs3">
-	
-	
-		
-
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-
-		
-			
-		
-	<linearGradient
-   id="linearGradient4114"><stop
-     id="stop4116"
-     style="stop-color:#000000;stop-opacity:1"
-     offset="0" /><stop
-     id="stop4118"
-     style="stop-color:#000000;stop-opacity:0"
-     offset="1" /></linearGradient><linearGradient
-   id="linearGradient3962"><stop
-     id="stop3964"
-     style="stop-color:#d3e9ff;stop-opacity:1"
-     offset="0" /><stop
-     id="stop4134"
-     style="stop-color:#d3e9ff;stop-opacity:1"
-     offset="0.15517241" /><stop
-     id="stop4346"
-     style="stop-color:#4074ae;stop-opacity:1"
-     offset="0.75" /><stop
-     id="stop3966"
-     style="stop-color:#36486c;stop-opacity:1"
-     offset="1" /></linearGradient><radialGradient
-   cx="11.826907"
-   cy="10.476453"
-   r="32.664848"
-   fx="11.826907"
-   fy="10.476453"
-   id="radialGradient4356"
-   xlink:href="#linearGradient4350"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="scale(1.179536,0.847791)" /><linearGradient
-   id="linearGradient4350"><stop
-     id="stop4352"
-     style="stop-color:#ffffff;stop-opacity:1"
-     offset="0" /><stop
-     id="stop4354"
-     style="stop-color:#ffffff;stop-opacity:0"
-     offset="1" /></linearGradient><radialGradient
-   cx="15.115514"
-   cy="63.965389"
-   r="12.289036"
-   fx="15.115514"
-   fy="63.965389"
-   id="radialGradient3993"
-   xlink:href="#linearGradient4114"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="scale(1.64399,0.608276)" /></defs>
-
-<path
-   d="m 45.052803,38.908627 a 20.203051,7.4751287 0 1 1 -40.4061012,0 20.203051,7.4751287 0 1 1 40.4061012,0 z"
-   transform="matrix(1.104732,0,0,1.3734514,-2.9783789,-14.517628)"
-   id="path4112"
-   style="fill:url(#radialGradient3993);fill-opacity:1;stroke:none" /><path
-   d="m 45.585477,22.775815 c 0,11.831368 -9.591397,21.422657 -21.421138,21.422657 -11.830824,0 -21.4216795,-9.591397 -21.4216795,-21.422657 0,-11.830826 9.5908555,-21.4211375 21.4216795,-21.4211375 11.829741,0 21.421138,9.5903115 21.421138,21.4211375 l 0,0 z"
-   id="path3214"
-   style="fill:#4074ae;fill-opacity:1;fill-rule:nonzero;stroke:#39396c;stroke-width:1.10473204;stroke-miterlimit:4;stroke-opacity:1" /><path
-   d="m 24.143263,46.763994 h -0.01035 C 11.361922,46.763994 0.96848257,36.364276 0.963553,23.58145 0.96125352,17.372324 3.3693702,11.547802 7.7444049,7.1660304 12.119933,2.7847391 17.938195,0.37038155 24.127821,0.36813801 c 12.780853,0 23.175114,10.39971799 23.179551,23.18302499 0.0027,6.208645 -2.405818,12.033166 -6.780853,16.414938 -4.37487,4.381772 -10.193625,6.79597 -16.383252,6.797893 l 0,0 z M 24.136033,3.2336051 C 18.704417,3.2353679 13.605386,5.3510156 9.770966,9.1916164 5.93654 [...]
-   id="path11" /><path
-   d="m 23.18511,1.9315571 c 0,0 -6.172209,2.5169189 -6.298407,21.8024529 -0.126691,19.285694 6.932192,21.589798 6.932192,21.589798"
-   id="path4042"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" /><path
-   d="m 23.18511,1.9315571 c 0,0 19.014517,2.4725291 18.887333,21.7582229 C 41.946244,42.975795 23.81873,45.323969 23.81873,45.323969"
-   id="path7092"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" /><path
-   d="m 23.18511,1.9315571 c 0,0 6.803363,2.598327 6.677002,21.8840209 -0.12702,19.285695 -6.043382,21.508391 -6.043382,21.508391"
-   id="path7093"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" /><path
-   d="m 23.18511,1.9315571 c 0,0 -17.2794564,2.2271832 -17.4056546,21.5128779 C 5.6524356,42.73045 23.81873,45.323969 23.81873,45.323969"
-   id="path7094"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" /><path
-   d="m 23.18511,1.9315571 c 0,0 12.676673,2.2254204 12.54949,21.5109549 -0.12702,19.286015 -11.91587,21.881296 -11.91587,21.881296"
-   id="path7095"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" /><path
-   d="m 23.18511,1.9315571 c 0,0 -12.782167,2.312277 -12.909351,21.5978109 -0.12702,19.285214 13.542971,21.79444 13.542971,21.79444"
-   id="path7096"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" /><path
-   d="m 23.18511,1.9315571 c 0,0 0.380402,1.8545971 0.253382,21.1402919 -0.126198,19.286015 0.380403,22.25212 0.380403,22.25212"
-   id="path7097"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" /><path
-   d="m 15.452678,3.6625999 c 0,0 0.5066,2.8433523 7.859452,2.8433523 7.35203,0 9.507259,-2.5960834 9.507259,-2.5960834"
-   id="path7107"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" /><path
-   d="m 8.318208,8.7313725 c 0,0 0.3606836,4.3268055 14.881526,4.3268055 14.519036,0 17.26056,-4.0795365 17.007342,-3.9559822"
-   id="path7108"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" /><path
-   d="m 4.6699631,13.799985 c 0,0 1.6777128,5.56299 18.6421669,5.56299 16.964783,0 20.416171,-5.068612 20.416171,-5.068612"
-   id="path7109"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" /><path
-   d="m 2.6562147,20.599319 c 0,0 2.7747168,4.573434 20.9620443,4.573434 18.187327,0 21.997756,-4.326325 21.997756,-4.326325"
-   id="path7110"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" /><path
-   d="m 2.6562147,25.667932 c 0,0 2.6449036,5.192327 20.7786623,5.192327 18.132774,0 22.054119,-4.945058 22.054119,-4.945058"
-   id="path7111"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" /><path
-   d="m 3.9109664,31.107368 c 0,0 2.5678373,4.821503 19.5855306,4.821503 17.016708,0 20.610399,-4.574395 20.610399,-4.574395"
-   id="path7112"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" /><path
-   d="m 6.672209,36.423249 c 0,0 2.1570359,4.20277 16.890017,4.20277 14.732981,0 17.909461,-3.955501 17.909461,-3.955501"
-   id="path7113"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" /><path
-   d="m 10.687382,40.378751 c 0,0 1.796352,3.956462 13.128554,3.956462 11.333189,0 13.640578,-3.709194 13.640578,-3.709194"
-   id="path7114"
-   style="fill:none;stroke:#000000;stroke-width:0.16227356" />
-</svg>
\ No newline at end of file
diff --git a/semperMerk/src/resources/t_logo-a.png b/semperMerk/src/resources/t_logo-a.png
deleted file mode 100644
index 1328a61..0000000
Binary files a/semperMerk/src/resources/t_logo-a.png and /dev/null differ
diff --git a/semperMerk/src/retinaIcons.qrc b/semperMerk/src/retinaIcons.qrc
deleted file mode 100644
index 656aa91..0000000
--- a/semperMerk/src/retinaIcons.qrc
+++ /dev/null
@@ -1,21 +0,0 @@
-<RCC>
-    <qresource prefix="/icons">
-        <file alias="up">images/arrow_up_48.png</file>
-        <file alias="down">images/arrow_down_48.png</file>
-        <file alias="back">images/arrow_left_48.png</file>
-        <file alias="forward">images/arrow_right_48.png</file>
-        <file alias="bookmark">images/heart_48.png</file>
-        <file alias="edit">images/pencil_48.png</file>
-        <file alias="stop">images/stop_48.png</file>
-        <file alias="refresh">images/reload_48.png</file>
-        <file alias="add">images/plus_48.png</file>
-        <file alias="remove">images/minus_48.png</file>
-        <file alias="exit">images/on_off_48.png</file>
-        <file alias="zoomOut">images/zoom_out_48.png</file>
-        <file alias="search">images/magnifier_48.png</file>
-        <file alias="zoomIn">images/zoom_in_48.png</file>
-        <file alias="gps">images/wifi_48.png</file>
-        <file alias="menu">images/tray_full_48.png</file>
-        <file alias="settings">images/gear_48.png</file>
-    </qresource>
-</RCC>
diff --git a/semperMerk/src/semperWeb.qrc b/semperMerk/src/semperWeb.qrc
deleted file mode 100644
index 5c49c75..0000000
--- a/semperMerk/src/semperWeb.qrc
+++ /dev/null
@@ -1,17 +0,0 @@
-<RCC>
-    <qresource prefix="/icons">
-        <file alias="forward">images/go-next.png</file>
-        <file alias="back">images/go-previous.png</file>
-        <file alias="bookmark">images/edit-find.png</file>
-        <file alias="add">images/list-add.png</file>
-        <file alias="remove">images/list-remove.png</file>
-        <file alias="stop">images/process-stop.png</file>
-        <file alias="exit">images/system-log-out.png</file>
-        <file alias="zoom100">images/zoom-original.png</file>
-        <file alias="zoomBest">images/zoom-best-fit.png</file>
-        <file alias="up">images/go-up.png</file>
-        <file alias="down">images/go-down.png</file>
-        <file alias="refresh">images/view-refresh.png</file>
-        <file alias="edit">images/edit-find-replace.png</file>
-    </qresource>
-</RCC>
diff --git a/semperMerk/src/sym_iap_util.h b/semperMerk/src/sym_iap_util.h
deleted file mode 100644
index cf07a89..0000000
--- a/semperMerk/src/sym_iap_util.h
+++ /dev/null
@@ -1,510 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info at nokia.com)
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info at nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef QSYM_IAP_UTIL_H
-#define QSYM_IAP_UTIL_H
-
-// Symbian
-#include <utf.h>
-#include <es_sock.h>
-#include <in_sock.h>
-#include <es_enum.h>
-#include <in_iface.h>
-#include <commdbconnpref.h>
-#include <e32cmn.h>
-
-// OpenC
-#include <sys/socket.h>
-#include <net/if.h>
-
-//Qt
-#include <QSettings>
-#include <QStringList>
-//#include <QTextCodec>
-
-_LIT(KIapNameSetting, "IAP\\Name");             // text - mandatory
-_LIT(KIapDialogPref, "IAP\\DialogPref");        // TUnit32 - optional
-_LIT(KIapService, "IAP\\IAPService");           // TUnit32 - mandatory
-_LIT(KIapServiceType, "IAP\\IAPServiceType");   // text - mandatory
-_LIT(KIapBearer, "IAP\\IAPBearer");             // TUint32 - optional
-_LIT(KIapBearerType, "IAP\\IAPBearerType");     // text - optional
-_LIT(KIapNetwork, "IAP\\IAPNetwork");           // TUint32 - optional
-
-const QLatin1String qtOrganizationTag("Trolltech");
-const QLatin1String qtNetworkModuleTag("QtNetwork");
-const QLatin1String iapGroupTag("IAP");
-const QLatin1String iapNamesArrayTag("Names");
-const QLatin1String iapNameItemTag("Name");
-
-static QTextCodec *utf16LETextCodec = 0;
-
-void clearIapNamesSettings(QSettings &settings) {
-    settings.beginGroup(qtNetworkModuleTag);
-        settings.beginGroup(iapGroupTag);
-           settings.remove(iapNamesArrayTag);
-        settings.endGroup();
-    settings.endGroup();
-}
-
-void writeIapNamesSettings(QSettings &settings, const QStringList& iapNames) {
-    clearIapNamesSettings(settings);
-    settings.beginGroup(qtNetworkModuleTag);
-        settings.beginGroup(iapGroupTag);
-            settings.beginWriteArray(iapNamesArrayTag);
-            for (int index = 0; index < iapNames.size(); ++index) {
-                settings.setArrayIndex(index);
-                settings.setValue(iapNameItemTag, iapNames.at(index));
-            }
-            settings.endArray();
-        settings.endGroup();
-    settings.endGroup();
-}
-
-void readIapNamesSettings(QSettings &settings, QStringList& iapNames) {
-    settings.beginGroup(qtNetworkModuleTag);
-        settings.beginGroup(iapGroupTag);
-            int last = settings.beginReadArray(iapNamesArrayTag);
-            for (int index = 0; index < last; ++index) {
-                settings.setArrayIndex(index);
-                iapNames.append(settings.value(iapNameItemTag).toString());
-            }
-            settings.endArray();
-        settings.endGroup();
-    settings.endGroup();
-}
-
-static QString qt_TNameToQString(TName data) {
-    if(utf16LETextCodec == 0)
-        utf16LETextCodec = QTextCodec::codecForName("UTF-16LE");
-
-    QByteArray tmpByteArray = QByteArray::fromRawData((char*)(data.PtrZ()), data.Length() * 2);
-    return utf16LETextCodec->toUnicode(tmpByteArray);
-}
-
-static QString qt_InterfaceInfoL()
-{
-    QString output;
-
-    TBuf8<512> buffer;
-    TBuf<128> t;
-    TAutoClose<RSocketServ> ss;
-    User::LeaveIfError(ss.iObj.Connect());
-    ss.PushL();
-
-    TAutoClose<RSocket> sock;
-    User::LeaveIfError(sock.iObj.Open(ss.iObj, _L("udp")));
-    sock.PushL();
-
-    User::LeaveIfError(sock.iObj.SetOpt(KSoInetEnumInterfaces, KSolInetIfCtrl));
-
-    TProtocolDesc in;
-    User::LeaveIfError(sock.iObj.Info(in));
-    printf("EPOC32 IP Configuration TCPIP Version %d.%d.%d\n", in.iVersion.iMajor, in.iVersion.iMinor, in.iVersion.iBuild);
-
-    TPckgBuf<TSoInetInterfaceInfo> info, next;
-
-    TInt res=sock.iObj.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, info);
-    if(res!=KErrNone)
-        User::Leave(res);
-    TInt count = 0;
-    while(res==KErrNone) {
-        res=sock.iObj.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, next);
-
-        if(info().iName != _L("") && info().iName != _L("loop6") && info().iName != _L("loop4")) {
-            printf("Interface %d\n", count++);
-
-            printf("Name \"%s\"\n", qt_TNameToQString(info().iName).toLatin1().data());
-            printf("NIF tag \"%s\"\n", qt_TNameToQString(info().iTag).toLatin1().data());
-
-            printf("State ");
-            switch (info().iState)
-            {
-                case EIfPending:
-                    printf("pending\n");
-                    break;
-                case EIfUp:
-                    printf("up\n");
-                    break;
-                case EIfBusy:
-                    printf("busy\n");
-                    break;
-                default:
-                    printf("down\n");
-                    break;
-            }
-
-            printf("Mtu %d\n", info().iMtu);
-            printf("Speed Metric %d\n", info().iSpeedMetric);
-
-            printf("Features:");
-            info().iFeatures & KIfIsLoopback         ? printf(" loopback") : printf("");
-            info().iFeatures & KIfIsDialup           ? printf(" dialup") : printf("");
-            info().iFeatures & KIfIsPointToPoint     ? printf(" pointtopoint") : printf("");
-            info().iFeatures & KIfCanBroadcast       ? printf(" canbroadcast") : printf("");
-            info().iFeatures & KIfCanMulticast       ? printf(" canmulticast") : printf("");
-            info().iFeatures & KIfCanSetMTU          ? printf(" cansetmtu") : printf("");
-            info().iFeatures & KIfHasHardwareAddr    ? printf(" hardwareaddr") : printf("");
-            info().iFeatures & KIfCanSetHardwareAddr ? printf(" cansethardwareaddr") : printf("");
-            printf("\n");
-
-            TName address;
-            info().iAddress.Output(address);
-            printf("Addr: %s\n", qt_TNameToQString(address).toLatin1().data());
-
-            if(info().iAddress.IsLinkLocal()) {
-                printf("  -link local\n");
-            } else if(info().iAddress.IsSiteLocal()) {
-                printf("  -site local\n");
-            } else {
-                printf("  -global\n");
-            }
-
-            info().iNetMask.Output(address);
-            printf("Netmask %s\n", qt_TNameToQString(address).toLatin1().data());
-
-            info().iBrdAddr.Output(address);
-            printf("Broadcast address %s\n", qt_TNameToQString(address).toLatin1().data());
-
-            info().iDefGate.Output(address);
-            printf("Gatew: %s\n", qt_TNameToQString(address).toLatin1().data());
-
-            info().iNameSer1.Output(address);
-            printf("DNS 1: %s\n", qt_TNameToQString(address).toLatin1().data());
-
-            info().iNameSer2.Output(address);
-            printf("DNS 2: %s\n", qt_TNameToQString(address).toLatin1().data());
-
-            if (info().iHwAddr.Family() != KAFUnspec) {
-                printf("Hardware address ");
-                TUint j;
-                for(j = sizeof(SSockAddr) ; j < sizeof(SSockAddr) + 6 ; ++j) {
-                    if(j < (TUint)info().iHwAddr.Length()) {
-                        printf("%02X", info().iHwAddr[j]);
-                    } else {
-                        printf("??");
-                    }
-                    if(j < sizeof(SSockAddr) + 5)
-                        printf("-");
-                    else
-                        printf("\n");
-                    }
-                }
-            }
-        if(res == KErrNone) {
-            info = next;
-            printf("\n");
-        } else {
-            printf("\n");
-        }
-    }
-
-    sock.Pop();
-    ss.Pop();
-
-    return output;
-}
-
-static QString qt_RouteInfoL() {
-    QString output;
-    TAutoClose<RSocketServ> ss;
-    User::LeaveIfError(ss.iObj.Connect());
-    ss.PushL();
-
-    TAutoClose<RSocket> sock;
-    User::LeaveIfError(sock.iObj.Open(ss.iObj, _L("udp")));
-    sock.PushL();
-
-    TSoInetRouteInfo routeInfo;
-    TPckg<TSoInetRouteInfo> routeInfoPkg(routeInfo);
-
-    TName destAddr;
-    TName netMask;
-    TName gateway;
-    TName ifAddr;
-
-    // Begins enumeration of routes by setting this option
-    User::LeaveIfError(sock.iObj.SetOpt(KSoInetEnumRoutes, KSolInetRtCtrl));
-
-    // The TSoInetRouteInfo contains information for a new route each time GetOpt returns KErrNone
-    for(TInt i = 0; sock.iObj.GetOpt(KSoInetNextRoute, KSolInetRtCtrl, routeInfoPkg) == KErrNone ; i++)
-    {
-      // Extract the destination and netmask
-      routeInfo.iDstAddr.Output(destAddr);
-      routeInfo.iNetMask.Output(netMask);
-      routeInfo.iGateway.Output(gateway);
-      routeInfo.iIfAddr.Output(ifAddr);
-/*
-      if(destAddr.Length() <= 2)
-          continue;
-
-      if(netMask.Find(_L("255.255.255.255")) != KErrNotFound
-              || netMask.Find(_L("0.0.0.0")) != KErrNotFound
-              || netMask.Find(_L("ffff:ffff:ffff:ffff")) != KErrNotFound)
-          continue;
-*/
-      printf("Route Info #[%i]\n", i);
-      printf("DstAddr %s\n", qt_TNameToQString(destAddr).toLatin1().data());
-      printf("NetMask %s\n", qt_TNameToQString(netMask).toLatin1().data());
-      printf("Gateway %s\n", qt_TNameToQString(gateway).toLatin1().data());
-      printf("IfAddr %s\n", qt_TNameToQString(ifAddr).toLatin1().data());
-      printf("\n");
-    }
-
-    sock.Pop();
-    ss.Pop();
-
-    return output;
-}
-
-QString qt_TDesC2QStringL(const TDesC& aDescriptor)
-{
-#ifdef QT_NO_UNICODE
-    return QString::fromLocal8Bit(aDescriptor.Ptr(), aDescriptor.Length());
-#else
-    return QString::fromUtf16(aDescriptor.Ptr(), aDescriptor.Length());
-#endif
-}
-
-static bool qt_SetDefaultIapName(const QString &iapName, int &error) {
-    struct ifreq ifReq;
-    // clear structure
-    memset(&ifReq, 0, sizeof(struct ifreq));
-    // set IAP name value
-    // make sure it is in UTF8
-    strcpy(ifReq.ifr_name, iapName.toUtf8().data());
-
-    if(setdefaultif(&ifReq) == 0) {
-        // OK
-        error = 0;
-        return true;
-    } else {
-        error = errno;
-        return false;
-    }
-
-}
-static bool qt_SetDefaultSnapId(const int snapId, int &error) {
-    struct ifreq ifReq;
-    // clear structure
-    memset(&ifReq, 0, sizeof(struct ifreq));
-    // set SNAP ID value
-    ifReq.ifr_ifru.snap_id = snapId;
-
-    if(setdefaultif(&ifReq) == 0) {
-        // OK
-        error = 0;
-        return true;
-    } else {
-        error = errno;
-        return false;
-    }
-
-}
-
-static void qt_SaveIapName(QSettings& settings, QStringList& iapNames, QString& iapNameValue) {
-    if(iapNames.contains(iapNameValue) && iapNames.first() == iapNameValue) {
-        // no need to update
-    } else {
-        if(iapNameValue != QString("Easy WLAN")) {
-            // new selection alway on top
-            iapNames.removeAll(iapNameValue);
-            iapNames.prepend(iapNameValue);
-            writeIapNamesSettings(settings, iapNames);
-        } else {
-            // Unbeliveable ... if IAP dodn't exist before
-            // no matter what you choose from IAP selection list
-            // you will get "Easy WLAN" as IAP name value
-
-            // somehow commsdb is not in sync
-        }
-    }
-}
-
-static QString qt_OfferIapDialog() {
-    TBuf8<256> iapName;
-
-    RSocketServ socketServ;
-    CleanupClosePushL(socketServ);
-
-    RConnection connection;
-    CleanupClosePushL(connection);
-
-    socketServ.Connect();
-    connection.Open(socketServ);
-    connection.Start();
-
-    connection.GetDesSetting(TPtrC(KIapNameSetting), iapName);
-
-    //connection.Stop();
-
-    iapName.ZeroTerminate();
-    QString strIapName((char*)iapName.Ptr());
-
-    int error = 0;
-    if(!qt_SetDefaultIapName(strIapName, error)) {
-        //printf("failed setdefaultif @ %i with %s and errno = %d \n", __LINE__, strIapName.toUtf8().data(), error);
-        strIapName = QString("");
-    }
-
-    CleanupStack::PopAndDestroy(&connection);
-    CleanupStack::PopAndDestroy(&socketServ);
-
-    return strIapName;
-}
-
-static QString qt_CheckForActiveConnection() {
-    TUint count;
-
-    RSocketServ serv;
-    CleanupClosePushL(serv);
-
-    RConnection conn;
-    CleanupClosePushL(conn);
-
-    serv.Connect();
-    conn.Open(serv);
-
-    TConnectionInfoBuf connInfo;
-
-    TBuf8<256> iapName;
-    TBuf8<256> iapServiceType;
-
-    QString strIapName;
-
-    if (conn.EnumerateConnections(count) == KErrNone) {
-        if(count > 0) {
-            for (TUint i = 1; i <= count; i++) {
-                if (conn.GetConnectionInfo(i, connInfo) == KErrNone) {
-                    RConnection tempConn;
-                    CleanupClosePushL(tempConn);
-                    tempConn.Open(serv);
-                    if (tempConn.Attach(connInfo, RConnection::EAttachTypeNormal) == KErrNone) {
-                       tempConn.GetDesSetting(TPtrC(KIapNameSetting), iapName);
-                       tempConn.GetDesSetting(TPtrC(KIapServiceType), iapServiceType);
-                       //tempConn.Stop();
-                       iapName.ZeroTerminate();
-		               iapServiceType.ZeroTerminate();
-
-//                        if(iapServiceType.Find(_L8("LANService")) != KErrNotFound) {
-//                            activeLanConnectionFound = ETrue;
-//                            break;
-//                        }
-			            strIapName = QString((char*)iapName.Ptr());
-                        int error = 0;
-                        if(!qt_SetDefaultIapName(strIapName, error)) {
-                            //printf("failed setdefaultif @ %i with %s and errno = %d \n", __LINE__, strIapName.toUtf8().data(), error);
-                            strIapName = QString("");
-                        }
-
-                        CleanupStack::PopAndDestroy(&tempConn);
-                        break;
-                    }
-                }
-            }
-        }
-    }
-
-    //conn.Stop();
-
-    CleanupStack::PopAndDestroy(&conn);
-    CleanupStack::PopAndDestroy(&serv);
-
-    return strIapName;
-}
-
-static QString qt_CheckSettingsForConnection(QStringList& iapNames) {
-    QString strIapName;
-    for(int index = 0; index < iapNames.size(); ++index) {
-        strIapName = iapNames.at(index);
-        int error = 0;
-        if(!qt_SetDefaultIapName(strIapName, error)) {
-            //printf("failed setdefaultif @ %i with %s and errno = %d \n", __LINE__, strIapName.toUtf8().data(), error);
-            strIapName = QString("");
-        } else {
-            return strIapName;
-        }
-    }
-    return strIapName;
-}
-
-static void qt_SetDefaultIapL()
-{
-    // settings @ /c/data/.config/Trolltech.com
-    QSettings settings(QSettings::UserScope, qtOrganizationTag);
-    // populate iap name list
-    QStringList iapNames;
-    readIapNamesSettings(settings, iapNames);
-
-    QString iapNameValue;
-
-    iapNameValue = qt_CheckForActiveConnection();
-
-    if(!iapNameValue.isEmpty()) {
-        qt_SaveIapName(settings, iapNames, iapNameValue);
-        return;
-    }
-
-//    iapNameValue = qt_CheckSettingsForConnection(iapNames);
-//
-//    if(!iapNameValue.isEmpty()) {
-//        qt_SaveIapName(settings, iapNames, iapNameValue);
-//        return;
-//    }
-
-    /*
-     * no active LAN connections yet
-     * no IAP in settings
-     * offer IAP dialog to user
-     */
-    iapNameValue = qt_OfferIapDialog();
-    qt_SaveIapName(settings, iapNames, iapNameValue);
-    return;
-
-}
-
-static int qt_SetDefaultIap()
-{
-    TRAPD(err1, qt_SetDefaultIapL());
-//    TRAPD(err2, qt_InterfaceInfoL());
-//    TRAPD(err3, qt_RouteInfoL());
-    return err1;
-}
-
-#endif // QSYM_IAP_UTIL_H
diff --git a/src/Backend/SpatialiteBackend.cpp b/src/Backend/SpatialiteBackend.cpp
index a0ac244..b72ca0b 100644
--- a/src/Backend/SpatialiteBackend.cpp
+++ b/src/Backend/SpatialiteBackend.cpp
@@ -27,42 +27,30 @@ public:
 SpatialiteBackend::SpatialiteBackend()
     : SpatialiteBase(), p(new SpatialBackendPrivate)
 {
-    /*
-    VERY IMPORTANT:
-    you must initialize the SpatiaLite extension [and related]
-    BEFORE attempting to perform any other SQLite call
-    */
-    spatialite_init (0);
+    isTemp = true;
+    theFilename = HOMEDIR + "/" + QDateTime::currentDateTime().toString("yyyyMMdd-hhmmsszzz") + ".spatialite";
+    open(HOMEDIR + "/temDb.spatialite", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
 
     /* showing the SQLite version */
     qDebug ("SQLite version: %s", sqlite3_libversion ());
     /* showing the SpatiaLite version */
     qDebug ("SpatiaLite version: %s", spatialite_version ());
 
-    isTemp = true;
-    theFilename = HOMEDIR + "/" + QDateTime::currentDateTime().toString("yyyyMMdd-hhmmsszzz") + ".spatialite";
-    open(HOMEDIR + "/temDb.spatialite", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
     InitializeNew();
 }
 
 SpatialiteBackend::SpatialiteBackend(const QString& filename)
     : SpatialiteBase(), p(new SpatialBackendPrivate)
 {
-    /*
-    VERY IMPORTANT:
-    you must initialize the SpatiaLite extension [and related]
-    BEFORE attempting to perform any other SQLite call
-    */
-    spatialite_init (0);
+    isTemp = false;
+    theFilename = filename;
+    open(theFilename, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
 
     /* showing the SQLite version */
     qDebug ("SQLite version: %s", sqlite3_libversion ());
     /* showing the SpatiaLite version */
     qDebug ("SpatiaLite version: %s", spatialite_version ());
 
-    isTemp = false;
-    theFilename = filename;
-    open(theFilename, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
     InitializeNew();
 }
 
@@ -266,6 +254,7 @@ void SpatialiteBackend::getFeatureSet(QMap<RenderPriority, QSet<Feature *> > &th
 
 const QList<Feature *> & SpatialiteBackend::indexFind(const QRectF &vp)
 {
+    return findResult;
 }
 
 void SpatialiteBackend::get(const QRectF &bb, QList<Feature *> &theFeatures)
diff --git a/src/Backend/SpatialiteBackend.h b/src/Backend/SpatialiteBackend.h
index 55b0f63..1b120bc 100644
--- a/src/Backend/SpatialiteBackend.h
+++ b/src/Backend/SpatialiteBackend.h
@@ -74,6 +74,7 @@ public slots:
 protected:
     bool isTemp;
     QString theFilename;
+    QList<Feature*> findResult;
 };
 
 #endif // SPATIALITEBACKEND_H
diff --git a/src/Backend/SpatialiteBase.cpp b/src/Backend/SpatialiteBase.cpp
index c4fb11e..33a3049 100644
--- a/src/Backend/SpatialiteBase.cpp
+++ b/src/Backend/SpatialiteBase.cpp
@@ -21,12 +21,15 @@ SpatialiteBase::SpatialiteBase()
 sqlite3* SpatialiteBase::open(const QString& aNom,
                                  const int aFlags)
 {
+    void *sp_connection = spatialite_alloc_connection();
     const int err = sqlite3_open_v2 (aNom.toUtf8().data(), &m_handle, aFlags, NULL);
     if (err != SQLITE_OK) {
         qDebug() << QString(sqlite3_errmsg(m_handle)) + " while opening: " + aNom;
         sqlite3_close (m_handle);
+        spatialite_cleanup_ex(sp_connection);
         return NULL;
     }
+    spatialite_init_ex(m_handle, sp_connection, 0);
     return m_handle;
 }
 
diff --git a/src/Backend/SpatialiteBase.h b/src/Backend/SpatialiteBase.h
index 113f374..e74c450 100644
--- a/src/Backend/SpatialiteBase.h
+++ b/src/Backend/SpatialiteBase.h
@@ -16,7 +16,7 @@
 these headers are required in order to support
 SQLite/SpatiaLite
 */
-#include <spatialite/sqlite3.h>
+#include <sqlite3.h>
 #include <spatialite/gaiageo.h>
 #include <spatialite.h>
 
diff --git a/src/Config.pri b/src/Config.pri
index a06a75e..80e35b6 100644
--- a/src/Config.pri
+++ b/src/Config.pri
@@ -1,23 +1,33 @@
 # see http://merkaartor.be/wiki/merkaartor/Compiling
 
-isEmpty(VERSION): VERSION="0.18"
+REVISION = $$system(git describe --tags)
+VERSION = $$system(git describe --tags | sed "'s/-g.*//;s/-/./g'")
+ARCH=""
+BITS=""
+win32 {
+	ARCH="-$$QMAKE_HOST.arch"
+	win32-g++:contains(QMAKE_HOST.arch, x86_64):{
+		BITS=64
+		REVISION=$${REVISION}-64bit
+	} else {
+		BITS=32
+		REVISION=$${REVISION}-32bit
+	}
+}
+
+linux-g++:contains(QT_ARCH, x86_64):{
+    REVISION=$${REVISION}-64bit
+}
 
-contains(RELEASE,1) {
-    DEFINES += RELEASE
-    SVNREV="release"
-} else {
-    isEmpty(SVNREV) {
-        SVNREV = $$system(git describe --tags)
-        REVISION="-git"
-    } else {
-        REVISION=
-    }
+linux-g++:contains(QT_ARCH, i386):{
+    REVISION=$${REVISION}-32bit
 }
 
-win32|macx {
-    system(echo $${LITERAL_HASH}define SVNREV $${SVNREV} > revision.h )
-} else {
-    system('echo -n "$${LITERAL_HASH}define SVNREV $${SVNREV}" > revision.h')
+
+
+win32 {
+	system(echo "!define VER $${REVISION}" > ../windows/version.nch )
+	system(echo "!define BITS $${BITS}" >> ../windows/version.nch )
 }
 
 QMAKE_CXXFLAGS_WARN_ON += -Wno-reorder
diff --git a/src/Docks/GeoImageDock.cpp b/src/Docks/GeoImageDock.cpp
index 5035ac1..c05d09f 100644
--- a/src/Docks/GeoImageDock.cpp
+++ b/src/Docks/GeoImageDock.cpp
@@ -12,13 +12,13 @@
 #include <zbar/QZBarImage.h>
 #endif
 
-#include <QtGui/QInputDialog>
-#include <QtGui/QMessageBox>
-#include <QtGui/QProgressDialog>
+#include <QtWidgets/QInputDialog>
+#include <QtWidgets/QMessageBox>
+#include <QtWidgets/QProgressDialog>
 #include <QtGui/QClipboard>
-#include <QtGui/QRadioButton>
-#include <QtGui/QTimeEdit>
-#include <QtGui/QDialogButtonBox>
+#include <QtWidgets/QRadioButton>
+#include <QtWidgets/QTimeEdit>
+#include <QtWidgets/QDialogButtonBox>
 #include <QFileDialog>
 
 #include <QNetworkAccessManager>
@@ -27,6 +27,33 @@
 
 #include "ui_PhotoLoadErrorDialog.h"
 
+#define WARNING(title, message) { \
+    if (QMessageBox::warning(this, title, message.arg(file), \
+     QMessageBox::Ignore | QMessageBox::Cancel, QMessageBox::Ignore) == QMessageBox::Ignore) \
+        continue; \
+    else { \
+        theView->invalidate(true, true, false); \
+        return; \
+    } \
+}
+
+#define QUESTION(title, message, always) { \
+    if (always == 0) { \
+        int replyButton = QMessageBox::question(this, title, message, \
+         QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Abort, QMessageBox::Yes ); \
+        if (replyButton == QMessageBox::No) \
+            continue; \
+        else if (replyButton == QMessageBox::Abort) { \
+            theView->invalidate(true, true, false); \
+            return; \
+        } \
+        else if (replyButton != QMessageBox::Yes) \
+            always = replyButton; \
+    } \
+    if (always == QMessageBox::NoToAll) \
+        continue; \
+}
+
 bool GeoImageDock::getWalkingPapersDetails(const QUrl& reqUrl, double &lat, double &lon, bool& positionValid) const
 {
     QNetworkAccessManager manager;
@@ -52,7 +79,7 @@ bool GeoImageDock::getWalkingPapersDetails(const QUrl& reqUrl, double &lat, doub
         return false;
     }
 
-    QString center = QString::fromAscii(reply->rawHeader("X-Print-Center"));
+    QString center = QString::fromLatin1(reply->rawHeader("X-Print-Center"));
     QStringList sl = center.split(" ");
     if (!sl.size() == 3)
         return false;
diff --git a/src/Docks/GeoImageDock.h b/src/Docks/GeoImageDock.h
index bfd3975..ab7bbf6 100644
--- a/src/Docks/GeoImageDock.h
+++ b/src/Docks/GeoImageDock.h
@@ -4,40 +4,12 @@
 #include "Document.h"
 
 #include <QtGui/QPainter>
-#include <QtGui/QDockWidget>
+#include <QtWidgets/QDockWidget>
 #include <QtGui/QMouseEvent>
-#include <QtGui/QShortcut>
+#include <QtWidgets/QShortcut>
 #include <exiv2/image.hpp>
 #include <exiv2/exif.hpp>
 
-
-#define WARNING(title, message) { \
-    if (QMessageBox::warning(this, title, message.arg(file), \
-     QMessageBox::Ignore | QMessageBox::Cancel, QMessageBox::Ignore) == QMessageBox::Ignore) \
-        continue; \
-    else { \
-        theView->invalidate(true, true, false); \
-        return; \
-    } \
-}
-
-#define QUESTION(title, message, always) { \
-    if (always == 0) { \
-        int replyButton = QMessageBox::question(this, title, message, \
-         QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Abort, QMessageBox::Yes ); \
-        if (replyButton == QMessageBox::No) \
-            continue; \
-        else if (replyButton == QMessageBox::Abort) { \
-            theView->invalidate(true, true, false); \
-            return; \
-        } \
-        else if (replyButton != QMessageBox::Yes) \
-            always = replyButton; \
-    } \
-    if (always == QMessageBox::NoToAll) \
-        continue; \
-}
-
 class ImageView;
 
 class GeoImageDock : public MDockAncestor
diff --git a/src/Docks/LayerDock.cpp b/src/Docks/LayerDock.cpp
index 57fd858..fff136d 100644
--- a/src/Docks/LayerDock.cpp
+++ b/src/Docks/LayerDock.cpp
@@ -285,7 +285,7 @@ void LayerDock::layerClosed(Layer* l)
 //	Main->document()->getUploadedLayer()->clear();
     //Main->document()->remove(l);
     //delete l;
-    l->clear();
+    l->deleteAll();
     l->setEnabled(false);
     l->setVisible(false);
     l->getWidget()->setVisible(false);
diff --git a/src/Docks/LayerDock.h b/src/Docks/LayerDock.h
index e9121e6..6e7629c 100644
--- a/src/Docks/LayerDock.h
+++ b/src/Docks/LayerDock.h
@@ -2,7 +2,7 @@
 #define MERKATOR_LAYERDOCK_H_
 
 #include "MDockAncestor.h"
-#include <QtGui/QScrollArea>
+#include <QScrollArea>
 #include <QVBoxLayout>
 #include <QGroupBox>
 #include <QButtonGroup>
diff --git a/src/Docks/PropertiesDock.cpp b/src/Docks/PropertiesDock.cpp
index 1b364a0..f1ea5f2 100644
--- a/src/Docks/PropertiesDock.cpp
+++ b/src/Docks/PropertiesDock.cpp
@@ -23,11 +23,11 @@
 #include "GeoImageDock.h"
 #endif
 
-#include <QtCore/QTimer>
-#include <QtGui/QHeaderView>
-#include <QtGui/QLineEdit>
-#include <QtGui/QListWidget>
-#include <QtGui/QTableView>
+#include <QTimer>
+#include <QHeaderView>
+#include <QLineEdit>
+#include <QListWidget>
+#include <QTableView>
 #include <QClipboard>
 #include <QMessageBox>
 #include <QMenu>
diff --git a/src/Features/Feature.cpp b/src/Features/Feature.cpp
index 2f938e2..9916e90 100644
--- a/src/Features/Feature.cpp
+++ b/src/Features/Feature.cpp
@@ -73,28 +73,10 @@ IFeature::FId Feature::newId(IFeature::FeatureType type) const
 //		memcpy(&buffer[25+(i*2)], &hex[uuid.data4[i+2]], 2);
 //	}
 //
-//	return QString::fromAscii(buffer,38);
+//	return QString::fromLatin1(buffer,38);
 //#endif
 //}
 
-namespace boost
-{
-    void intrusive_ptr_add_ref(Feature * p)
-    {
-        ++(p->m_references);
-    }
-    void intrusive_ptr_release(Feature * p)
-    {
-        if (--(p->m_references) == 0) {
-            if (p->layer())
-                p->layer()->deleteFeature(p);
-            else
-                delete p;
-        }
-    }
-} // namespace boost
-
-
 void copyTags(Feature* Dest, Feature* Src)
 {
     for (int i=0; i<Src->tagSize(); ++i)
@@ -180,7 +162,7 @@ public:
 };
 
 Feature::Feature()
-: p(0), MetaUpToDate(false), m_references(0), ReadOnly(false)
+: MetaUpToDate(false), m_references(0), ReadOnly(false)
 {
     p = new FeaturePrivate(this);
     p->Id = IFeature::FId(IFeature::Uninitialized, 0);
@@ -618,6 +600,7 @@ void FeaturePrivate::updatePainters(qreal PixelPerM)
     if (!PossiblePaintersUpToDate)
         updatePossiblePainters();
 
+    QMutexLocker mutlock(&theFeature->featMutex);
     CurrentPainter = NULL;
     PixelPerMForPainter = PixelPerM;
     for (int i=0; i<PossiblePainters.size(); ++i)
diff --git a/src/Features/Feature.h b/src/Features/Feature.h
index cfd79f2..14c7ad5 100644
--- a/src/Features/Feature.h
+++ b/src/Features/Feature.h
@@ -1,6 +1,8 @@
 #ifndef MERKATOR_MAPFEATURE_H_
 #define MERKATOR_MAPFEATURE_H_
 
+class Feature;
+
 #include "IFeature.h"
 #include "Coord.h"
 #include "MapView.h"
@@ -80,11 +82,6 @@ private:
     int theLayer;
 };
 
-namespace boost
-{
-void intrusive_ptr_add_ref(Feature * p);
-void intrusive_ptr_release(Feature * p);
-}
 
 /// Used to store objects of the map
 class Feature : public IFeature
@@ -103,7 +100,7 @@ public:
     /// @param other the MapFeature
     Feature(const Feature& other);
     /// Destructor
-    virtual ~Feature() = 0;
+    virtual ~Feature();
 
     /** Return the smalest box contening all the MapFeature
          * @return A coord box
@@ -356,8 +353,6 @@ protected:
     static void tagsFromXML(Document* d, Feature* f, QXmlStreamReader& stream);
 
     long    m_references;
-    friend void ::boost::intrusive_ptr_add_ref(Feature * p);
-    friend void ::boost::intrusive_ptr_release(Feature * p);
 
     QPainterPath thePath;
 };
diff --git a/src/Features/Node.cpp b/src/Features/Node.cpp
index bafd60f..e24dbd6 100644
--- a/src/Features/Node.cpp
+++ b/src/Features/Node.cpp
@@ -169,6 +169,10 @@ void Node::drawSimple(QPainter &P, MapView *theView)
     if (! ((isReadonly() || !isSelectable(theView->pixelPerM(), theView->renderOptions())) && (!isPOI() && !isWaypoint())))
         //        if (!Pt->isReadonly() && Pt->isSelectable(r))
     {
+        if (!layer()) {
+            qDebug() << "Node without layer: " << id().numId << xmlId();
+            return;
+        }
         qreal WW = theView->nodeWidth();
         if (WW >= 1) {
             QColor theColor = QColor(0,0,0,128);
@@ -697,13 +701,13 @@ void PhotoNode::drawTouchup(QPainter& thePainter , MapView* theView)
     QRect box(me - QPoint(5, 3), QSize(10, 6));
     thePainter.drawRect(box);
     if (theView->renderOptions().options.testFlag(RendererOptions::PhotosVisible) && theView->pixelPerM() > M_PREFS->getRegionalZoom()) {
-        qreal rt = qBound(0.2, theView->pixelPerM(), 1.0);
+        qreal rt = qBound(0.2, (double)theView->pixelPerM(), 1.0);
         QPoint phPt;
 
         if (photoLocationBR) {
             phPt = me + QPoint(10*rt, 10*rt);
         } else {
-            qreal rt = qBound(0.2, theView->pixelPerM(), 1.0);
+            qreal rt = qBound(0.2, (double)theView->pixelPerM(), 1.0);
             qreal phRt = 1. * Photo->width() / Photo->height();
             phPt = me - QPoint(10*rt, 10*rt) - QPoint(M_PREFS->getMaxGeoPicWidth()*rt, M_PREFS->getMaxGeoPicWidth()*rt/phRt);
         }
@@ -723,7 +727,7 @@ void PhotoNode::drawHover(QPainter& thePainter, MapView* theView)
     if (TEST_RFLAGS(RendererOptions::PhotosVisible) && theView->pixelPerM() > M_PREFS->getRegionalZoom()) {
         QPoint me(theView->toView(this));
 
-        qreal rt = qBound(0.2, theView->pixelPerM(), 1.0);
+        qreal rt = qBound(0.2, (double)theView->pixelPerM(), 1.0);
         qreal phRt = 1. * Photo->width() / Photo->height();
         QPoint phPt;
         if (photoLocationBR) {
@@ -739,14 +743,13 @@ void PhotoNode::drawHover(QPainter& thePainter, MapView* theView)
 
 qreal PhotoNode::pixelDistance(const QPointF& Target, qreal ClearDistance, const QList<Feature*>& NoSnap, MapView* theView) const
 {
-    QPoint me = theView->toView(const_cast<PhotoNode*>(this));
 #ifdef GEOIMAGE
+    QPoint me = theView->toView(const_cast<PhotoNode*>(this));
     if (TEST_RFLAGS(RendererOptions::PhotosVisible) && theView->pixelPerM() > M_PREFS->getRegionalZoom()) {
-        qreal rt = qBound(0.2, theView->pixelPerM(), 1.0);
+        qreal rt = qBound(0.2, (double)theView->pixelPerM(), 1.0);
         qreal phRt = 1. * Photo->width() / Photo->height();
         QPoint phPt;
         if (photoLocationBR) {
-            phPt = me + QPoint(10*rt, 10*rt);
         } else {
             phPt = me - QPoint(10*rt, 10*rt) - QPoint(M_PREFS->getMaxGeoPicWidth()*rt, M_PREFS->getMaxGeoPicWidth()*rt/phRt);
         }
diff --git a/src/Features/Node.h b/src/Features/Node.h
index d0fbdb8..83fc4a6 100644
--- a/src/Features/Node.h
+++ b/src/Features/Node.h
@@ -11,13 +11,6 @@
 #include <QtCore/QDateTime>
 #include <QtXml>
 
-#ifndef _MOBILE
-#if QT_VERSION < 0x040700 || defined(FORCE_46)
-#include <ggl/ggl.hpp>
-#include <ggl/geometries/register/point.hpp>
-#endif
-#endif
-
 class QProgressDialog;
 
 class Node : public Feature
@@ -157,50 +150,4 @@ protected:
 
 Q_DECLARE_METATYPE( Node * );
 
-#ifndef _MOBILE
-#if QT_VERSION < 0x040700 || defined(FORCE_46)
-// Register this point as being a recognizable point by the GGL
-//GEOMETRY_REGISTER_POINT_2D_CONST(TrackPoint, qreal, cs::cartesian, projection().x(), projection().y())
-
-namespace ggl { namespace traits {
-
-template<> struct tag<NodePtr>
-{ typedef point_tag type; };
-
-template<> struct coordinate_type<NodePtr>
-{ typedef qreal type; };
-
-template<> struct coordinate_system<NodePtr>
-{ typedef cs::cartesian type; };
-
-template<> struct dimension<NodePtr>
-        : boost::mpl::int_<2> {};
-
-template<>
-struct access<NodePtr>
-{
-    template <std::size_t I>
-    static inline qreal get(const NodePtr& p)
-    {
-        return I == 0 ? p->projected().x() : p->projected().y();
-    }
-
-    //    template <std::size_t I>
-    //    static inline void set(TrackPointPtr& p, const qreal& value)
-    //    {
-    //        // Or (better) implement an accessor with specializations
-    //        if (I == 0) p->position().setLon(value);
-    //        else if (I == 1) p->position().setLat(value);
-    //    }
-
-};
-
-}} // namespace ggl::traits
-
-#endif
 #endif
-
-
-#endif
-
-
diff --git a/src/Features/Relation.cpp b/src/Features/Relation.cpp
index 5d92533..8fc63e3 100644
--- a/src/Features/Relation.cpp
+++ b/src/Features/Relation.cpp
@@ -555,6 +555,8 @@ void Relation::updateMeta()
     p->PathUpToDate = false;
     p->CalculateWidth();
 
+    MetaUpToDate = true;
+
     p->theRenderPriority = RenderPriority(RenderPriority::IsSingular, 0., 0);
     for (int i=0; i<p->Members.size(); ++i) {
         if (Way* W = CAST_WAY(p->Members.at(i).second)) {
@@ -565,7 +567,6 @@ void Relation::updateMeta()
                 p->theRenderPriority = R->renderPriority();
         }
     }
-    MetaUpToDate = true;
 }
 
 bool Relation::toXML(QXmlStreamWriter& stream, QProgressDialog * progress, bool strict, QString changetsetid)
diff --git a/src/Features/Way.cpp b/src/Features/Way.cpp
index fdbf722..e8aadbe 100644
--- a/src/Features/Way.cpp
+++ b/src/Features/Way.cpp
@@ -21,13 +21,6 @@
 #include <algorithm>
 #include <QList>
 
-#if (QT_VERSION < 0x040700 || defined(FORCE_46)) && !defined(_MOBILE)
-#include <ggl/ggl.hpp>
-#include <ggl/geometries/cartesian2d.hpp>
-#include <ggl/geometries/adapted/std_as_linestring.hpp>
-#include <ggl/algorithms/intersects.hpp>
-#endif
-
 #define TEST_RFLAGS(x) theView->renderOptions().options.testFlag(x)
 
 class WayPrivate
@@ -93,7 +86,7 @@ void WayPrivate::CalculateWidth()
         SimpleColor = QColor(228, 109, 113);
     } else if (h == "secondary") {
         SimpleWidth =  2*LANEWIDTH; // 2 lanes
-        SimpleColor = QColor(253, 191, 252);
+        SimpleColor = QColor(253, 191, 111);
     } else if (h == "tertiary") {
         SimpleWidth =  1.5*LANEWIDTH; // shared middle lane
         SimpleColor = QColor(255, 229, 33);
@@ -239,6 +232,7 @@ void Way::add(Node* Pt)
 
 void Way::add(Node* Pt, int Idx)
 {
+    QMutexLocker mutlock(&featMutex);
     p->Nodes.insert(p->Nodes.begin() + Idx, Pt);
 //	p->Nodes.push_back(Pt);
 //	std::rotate(p->Nodes.begin()+Idx,p->Nodes.end()-1,p->Nodes.end());
@@ -271,6 +265,7 @@ int Way::findVirtual(Feature* Pt) const
 
 void Way::remove(int idx)
 {
+    QMutexLocker mutlock(&featMutex);
     Node* Pt = p->Nodes[idx];
     // only remove as parent if the node is only included once
     p->Nodes.erase(p->Nodes.begin()+idx);
@@ -382,9 +377,8 @@ void Way::drawSimple(QPainter &P, MapView *theView)
                 thePen = QPen(thePainter->BackgroundColor,thePainter->BackgroundOffset);
             else
                 thePen = QPen(p->SimpleColor,(qreal)p->SimpleWidth/LANEWIDTH);
-        } else
-            if (thePainter->DrawForeground)
-                thePen = QPen(thePainter->ForegroundColor,thePainter->ForegroundOffset);
+        } else if (thePainter->DrawForeground)
+                thePen = QPen(thePainter->ForegroundColor,thePainter->ForegroundOffset >= 1 ? thePainter->ForegroundOffset : (qreal)p->SimpleWidth/LANEWIDTH);
             else
                 thePen = QPen(p->SimpleColor,(qreal)p->SimpleWidth/LANEWIDTH);
     }
@@ -406,6 +400,8 @@ void Way::updateMeta()
     p->Distance = 0;
     p->CalculateWidth();
 
+    MetaUpToDate = true;
+
     p->NotEverythingDownloaded = false;
     if (lastUpdated() == Feature::NotYetDownloaded)
         p->NotEverythingDownloaded = true;
@@ -448,7 +444,6 @@ void Way::updateMeta()
     }
 
     p->doUpdateVirtuals();
-    MetaUpToDate = true;
 }
 
 qreal Way::distance()
diff --git a/src/Features/Way.h b/src/Features/Way.h
index 45f5442..d5e3034 100644
--- a/src/Features/Way.h
+++ b/src/Features/Way.h
@@ -7,12 +7,6 @@
 #include "Feature.h"
 #include "Layer.h"
 
-#ifndef _MOBILE
-#if QT_VERSION < 0x040700 || defined(FORCE_46)
-#include <ggl/ggl.hpp>
-#endif
-#endif
-
 class WayPrivate;
 class Node;
 class QProgressDialog;
diff --git a/src/GPS/SatelliteStrengthView.h b/src/GPS/SatelliteStrengthView.h
index c662a62..b2943f8 100644
--- a/src/GPS/SatelliteStrengthView.h
+++ b/src/GPS/SatelliteStrengthView.h
@@ -1,7 +1,7 @@
 #ifndef MERKAARTOR_SATELLITEVIEW_H_
 #define MERKAARTOR_SATELLITEVIEW_H_
 
-#include <QtGui/QWidget>
+#include <QWidget>
 #include <QList>
 
 class Satellite
diff --git a/src/GPS/qgpsdevice.cpp b/src/GPS/qgpsdevice.cpp
index de6b220..04889f6 100644
--- a/src/GPS/qgpsdevice.cpp
+++ b/src/GPS/qgpsdevice.cpp
@@ -589,6 +589,9 @@ bool QGPSDevice::parseGSV(const char *gsvString)
     currentSentence = tokens[2].toInt();
     totalSatellites = tokens[3].toInt();
 
+    qDebug() << "Parsing GSV string " << gsvString;
+    qDebug() << " --> sentence " << currentSentence << " of " << totalSentences << ", " << totalSatellites << " total satellites in view";
+
     for(int i = 0; (i < 4) && ((i*4)+4+3 < tokens.size()); i ++) {
         prn = tokens[(i*4)+4].toInt();
         elev = tokens[(i*4)+4+1].toInt();
@@ -958,27 +961,33 @@ void QGPSDDevice::run()
     connect(this,SIGNAL(doStopDevice()),&Forward,SLOT(onStop()));
 //    exec();
     QEventLoop l;
-
+#if GPSD_API_MAJOR_VERSION < 5
     Server = new gpsmm();
     errno = 0;
-    gpsdata = Server->open(M_PREFS->getGpsdHost().toAscii().data(),QString::number(M_PREFS->getGpsdPort()).toAscii().data());
+    gpsdata = Server->open(M_PREFS->getGpsdHost().toLatin1().data(),QString::number(M_PREFS->getGpsdPort()).toLatin1().data());
     if (!gpsdata) {
-#ifndef Q_OS_WIN32
+  #ifndef Q_OS_WIN32
         QString msg( (errno<0) ? gps_errstr(errno) : strerror(errno) );
-#else
+  #else
         QString msg( (errno<0) ? "" : strerror(errno) );
-#endif
+  #endif
         qDebug() << tr("Unable to connect to %1:%2").arg(M_PREFS->getGpsdHost()).arg(QString::number(M_PREFS->getGpsdPort()))
                  << ": " << msg;
         return;
     }
-
+#else
+    Server = new gpsmm(M_PREFS->getGpsdHost().toLatin1().data(),QString::number(M_PREFS->getGpsdPort()).toLatin1().data());
+#endif
     onLinkReady();
     l.processEvents();
 
     forever {
 #if GPSD_API_MAJOR_VERSION > 3
+#if GPSD_API_MAJOR_VERSION < 5
         if (Server->waiting())
+#else
+        if (Server->waiting(0))
+#endif
 #endif
             onDataAvailable();
         l.processEvents();
@@ -994,16 +1003,12 @@ void QGPSDDevice::onDataAvailable()
        if (!gpsdata)
            return;
     #else
-       if ( Server->waiting() )
+       gpsdata = Server->read();
+       if (!gpsdata)
            {
-           errno = 0;
-           gpsdata = Server->read();
-           if ( gpsdata == 0 )
-               {
-               QString msg( (errno==0) ? "socket to gpsd was closed" : strerror(errno) );
-               qDebug() << "gpsmm::read() failed: " << msg;
-               return;
-               }
+           QString msg( (errno==0) ? "socket to gpsd was closed" : strerror(errno) );
+           qDebug() << "gpsmm::read() failed: " << msg;
+           return;
            }
     #endif
 
diff --git a/src/ImportExport/ExportGPX.cpp b/src/ImportExport/ExportGPX.cpp
index 274f351..74553d0 100644
--- a/src/ImportExport/ExportGPX.cpp
+++ b/src/ImportExport/ExportGPX.cpp
@@ -11,6 +11,7 @@
 //
 
 #include <QtGui>
+#include <QApplication>
 
 #include "../ImportExport/ExportGPX.h"
 
diff --git a/src/ImportExport/ImportCSVDialog.cpp b/src/ImportExport/ImportCSVDialog.cpp
index b88a177..61236ff 100644
--- a/src/ImportExport/ImportCSVDialog.cpp
+++ b/src/ImportExport/ImportCSVDialog.cpp
@@ -519,7 +519,7 @@ void ImportCSVDialog::on_btSave_clicked()
     if (tDelim == "\t")
         tDelim = "tab";
     root.setAttribute("delimiter", tDelim);
-    root.setAttribute("header", ui->cbHasHeader->isChecked() ? "true" : false);
+    root.setAttribute("header", ui->cbHasHeader->isChecked() ? "true" : "false");
     root.setAttribute("from", QString::number(ui->sbFrom->value()));
     root.setAttribute("to", QString::number(ui->sbTo->value()));
 
diff --git a/src/ImportExport/ImportExportGdal.cpp b/src/ImportExport/ImportExportGdal.cpp
index 7c829f4..4641854 100644
--- a/src/ImportExport/ImportExportGdal.cpp
+++ b/src/ImportExport/ImportExportGdal.cpp
@@ -13,6 +13,7 @@
 #include "Global.h"
 
 #include <QtGui>
+#include <QApplication>
 
 #include "../ImportExport/ImportExportGdal.h"
 #include "Projection.h"
@@ -20,10 +21,13 @@
 #include "ProjectionChooser.h"
 #include "Global.h"
 
-#include "cpl_vsi.h"
+#include <cpl_vsi.h>
+#include <gdal.h>
+#include <gdal_priv.h>
 
 #include <QDir>
 
+
 bool parseContainer(QDomElement& e, Layer* aLayer);
 
 ImportExportGdal::ImportExportGdal(Document* doc)
@@ -54,6 +58,55 @@ bool ImportExportGdal::saveFile(QString)
 bool ImportExportGdal::export_(const QList<Feature *>& featList)
 {
     const char *pszDriverName = "SQLite";
+    QString fileName(HOMEDIR + "/test.sqlite");
+#ifdef GDAL2
+    GDALDriver *poDriver;
+    GDALDriverManager *driverManager = GetGDALDriverManager();
+    GDALAllRegister();
+    driverManager->AutoLoadDrivers();
+
+    poDriver = driverManager->GetDriverByName(pszDriverName);
+    if( poDriver == NULL )
+    {
+        qDebug( "%s driver not available.", pszDriverName );
+        return false;
+    }
+
+    /* Create create options */
+    char **createOptions = NULL;
+    createOptions = CSLSetNameValue( createOptions, "SPATIALITE", "YES" );
+
+    /* Open new dataset */
+    GDALDataset *poDS;
+
+    QFile::remove(fileName);
+    poDS = poDriver->Create( fileName.toUtf8().constData(), 0, 0, 0, GDT_Unknown, createOptions );
+    if( poDS == NULL )
+    {
+        qDebug( "Creation of output file failed." );
+        return false;
+    }
+    poDS->ExecuteSQL("PRAGMA synchronous = OFF", NULL, NULL);
+
+    /* Create Spatial reference object */
+    OGRSpatialReference *poSRS;
+    poSRS = new OGRSpatialReference();
+    poSRS->importFromEPSG(4326);
+
+    /* Create layer options */
+    char **layerOptions = NULL;
+    layerOptions = CSLSetNameValue( layerOptions, "FORMAT", "SPATIALITE" );
+    layerOptions = CSLSetNameValue( layerOptions, "SPATIAL_INDEX", "YES" );
+
+    /* Create layer */
+    OGRLayer *poLayer;
+    poLayer = poDS->CreateLayer( "osm", poSRS, wkbUnknown, layerOptions);
+
+    /* Free the options */
+    CSLDestroy( createOptions );
+    CSLDestroy( layerOptions );
+#else
+    /* This is legacy code, and is not tested at all */
     OGRSFDriver *poDriver;
 
     OGRRegisterAll();
@@ -67,8 +120,8 @@ bool ImportExportGdal::export_(const QList<Feature *>& featList)
 
     OGRDataSource *poDS;
 
-    QFile::remove(QString(HOMEDIR + "/test.sqlite"));
-    poDS = poDriver->CreateDataSource( QString(HOMEDIR + "/test.sqlite").toUtf8().constData(), NULL );
+    QFile::remove(fileName);
+    poDS = poDriver->CreateDataSource( fileName.toUtf8().constData(), NULL );
     if( poDS == NULL )
     {
         qDebug( "Creation of output file failed." );
@@ -88,6 +141,8 @@ bool ImportExportGdal::export_(const QList<Feature *>& featList)
     OGRLayer *poLayer;
     poLayer = poDS->CreateLayer( "osm", poSRS, wkbUnknown, papszOptions);
     CSLDestroy( papszOptions );
+#endif
+
 
     if( poLayer == NULL )
     {
@@ -141,7 +196,11 @@ bool ImportExportGdal::export_(const QList<Feature *>& featList)
         }
         OGRFeature::DestroyFeature( poFeature );
     }
+#ifdef GDAL2
+    GDALClose( (GDALDatasetH) poDS );
+#else
     OGRDataSource::DestroyDataSource( poDS );
+#endif
     return true;
 }
 
@@ -263,7 +322,11 @@ Feature* ImportExportGdal::parseGeometry(Layer* aLayer, OGRGeometry *poGeometry)
 
 // import the  input
 
-bool ImportExportGdal::importGDALDataset(OGRDataSource* poDS, Layer* aLayer, bool confirmProjection)
+#ifndef GDAL2
+#define GDALDataset OGRDataSource
+#endif
+bool ImportExportGdal::importGDALDataset(GDALDataset* poDS, Layer* aLayer, bool confirmProjection)
+#undef GDALDataset
 {
     int ogrError;
 
@@ -331,7 +394,8 @@ bool ImportExportGdal::importGDALDataset(OGRDataSource* poDS, Layer* aLayer, boo
         }
     }
 
-    theSrs->Release();
+    if (theSrs)
+        theSrs->Release();
     theSrs = new OGRSpatialReference();
     theSrs->importFromProj4(sPrj.toLatin1().data());
     toWGS84 = OGRCreateCoordinateTransformation(theSrs, &wgs84srs);
@@ -420,11 +484,16 @@ bool ImportExportGdal::importGDALDataset(OGRDataSource* poDS, Layer* aLayer, boo
 
 bool ImportExportGdal::import(Layer* aLayer)
 {
+#ifdef GDAL2
+    GDALAllRegister();
+    GDALDataset *poDS;
+    poDS = (GDALDataset *) GDALOpen( FileName.toUtf8().constData(), GA_ReadOnly );
+#else
     OGRRegisterAll();
-
-    OGRDataSource       *poDS;
-
+    OGRDataSource *poDS;
     poDS = OGRSFDriverRegistrar::Open( FileName.toUtf8().constData(), FALSE );
+#endif
+
     if( poDS == NULL )
     {
         qDebug( "GDAL Open failed.\n" );
@@ -433,22 +502,26 @@ bool ImportExportGdal::import(Layer* aLayer)
 
     importGDALDataset(poDS, aLayer, M_PREFS->getGdalConfirmProjection());
 
-    OGRDataSource::DestroyDataSource( poDS );
+    GDALClose( (GDALDatasetH) poDS );
 
     return true;
 }
 
 bool ImportExportGdal::import(Layer* aLayer, const QByteArray& ba, bool confirmProjection)
 {
-    OGRRegisterAll();
-
-    OGRDataSource       *poDS;
-//    int ogrError;
-
     GByte* content = (GByte*)(ba.constData());
     /*FILE* f = */VSIFileFromMemBuffer("/vsimem/temp", content, ba.size(), FALSE);
 
+#ifdef GDAL2
+    GDALAllRegister();
+    GDALDataset *poDS;
+    poDS = (GDALDataset *) GDALOpen( "/vsimem/temp", GA_ReadOnly );
+#else
+    OGRRegisterAll();
+    OGRDataSource *poDS;
     poDS = OGRSFDriverRegistrar::Open( "/vsimem/temp", FALSE );
+#endif
+
     if( poDS == NULL )
     {
         qDebug( "GDAL Open failed.\n" );
@@ -456,7 +529,7 @@ bool ImportExportGdal::import(Layer* aLayer, const QByteArray& ba, bool confirmP
     }
     importGDALDataset(poDS, aLayer, confirmProjection);
 
-    OGRDataSource::DestroyDataSource( poDS );
+    GDALClose( (GDALDatasetH) poDS );
 
     return true;
 }
diff --git a/src/ImportExport/ImportExportGdal.h b/src/ImportExport/ImportExportGdal.h
index 6082807..cfb7e80 100644
--- a/src/ImportExport/ImportExportGdal.h
+++ b/src/ImportExport/ImportExportGdal.h
@@ -13,7 +13,15 @@
 #define ImportExportGDAL_H
 
 #include "IImportExport.h"
-#include "ogrsf_frmts.h"
+
+#include <ogrsf_frmts.h>
+#include <gdal.h>
+#include <gdal_priv.h>
+#include <gdal_version.h>
+
+#if GDAL_VERSION_MAJOR == 2
+#define GDAL2
+#endif
 
 class Projection;
 class Layer;
@@ -52,7 +60,11 @@ protected:
     Node *nodeFor(Layer* aLayer, OGRPoint point);
     Way *readWay(Layer* aLayer, OGRLineString *poRing);
 
-    bool importGDALDataset(OGRDataSource *poDs, Layer *aLayer, bool confirmProjection);
+#ifndef GDAL2
+#define GDALDataset OGRDataSource
+#endif
+    bool importGDALDataset(GDALDataset *poDs, Layer *aLayer, bool confirmProjection);
+#undef GDALDataset
 
 private:
     QHash<OGRPoint, Node*> pointHash;
diff --git a/src/ImportExport/ImportExportKML.cpp b/src/ImportExport/ImportExportKML.cpp
index 8d2b565..c88d99a 100644
--- a/src/ImportExport/ImportExportKML.cpp
+++ b/src/ImportExport/ImportExportKML.cpp
@@ -301,17 +301,15 @@ bool parseKML(QDomElement& e, Layer* aLayer)
 // import the  input
 bool ImportExportKML::import(Layer* aLayer)
 {
-    QDomDocument* theXmlDoc = new QDomDocument();
-    if (!theXmlDoc->setContent(Device)) {
+    QDomDocument theXmlDoc;
+    if (!theXmlDoc.setContent(Device)) {
         //QMessageBox::critical(this, tr("Invalid file"), tr("%1 is not a valid XML file.").arg(fn));
         Device->close();
-        delete theXmlDoc;
-        theXmlDoc = NULL;
         return false;
     }
     Device->close();
 
-    QDomElement docElem = theXmlDoc->documentElement();
+    QDomElement docElem = theXmlDoc.documentElement();
     if (docElem.tagName() != "kml") {
         //QMessageBox::critical(this, tr("Invalid file"), tr("%1 is not a valid KML document.").arg(fn));
         return false;
diff --git a/src/ImportExport/ImportGPX.cpp b/src/ImportExport/ImportGPX.cpp
index 984dafb..c5bbd15 100644
--- a/src/ImportExport/ImportGPX.cpp
+++ b/src/ImportExport/ImportGPX.cpp
@@ -7,11 +7,11 @@
 #include "TrackSegment.h"
 #include "Global.h"
 
-#include <QtCore/QBuffer>
-#include <QtCore/QDateTime>
-#include <QtCore/QFile>
-#include <QtGui/QMessageBox>
-#include <QtXml/QDomDocument>
+#include <QBuffer>
+#include <QDateTime>
+#include <QFile>
+#include <QMessageBox>
+#include <QDomDocument>
 #include <QProgressDialog>
 
 
diff --git a/src/ImportExport/ImportNMEA.cpp b/src/ImportExport/ImportNMEA.cpp
index 8fc0cb6..a82dde1 100644
--- a/src/ImportExport/ImportNMEA.cpp
+++ b/src/ImportExport/ImportNMEA.cpp
@@ -11,6 +11,7 @@
 //
 
 #include <QtGui>
+#include <QApplication>
 
 #include "../ImportExport/ImportNMEA.h"
 #include "Global.h"
diff --git a/src/ImportExport/ImportOSM.cpp b/src/ImportExport/ImportOSM.cpp
index 6f8f6b4..f5f6735 100644
--- a/src/ImportExport/ImportOSM.cpp
+++ b/src/ImportExport/ImportOSM.cpp
@@ -12,15 +12,15 @@
 #include "IProgressWindow.h"
 
 #include <QApplication>
-#include <QtCore/QBuffer>
-#include <QtCore/QDateTime>
-#include <QtCore/QEventLoop>
-#include <QtCore/QFile>
-#include <QtGui/QMessageBox>
-#include <QtGui/QProgressBar>
-#include <QtGui/QProgressDialog>
-#include <QtXml/QDomDocument>
-#include <QtXml/QXmlAttributes>
+#include <QBuffer>
+#include <QDateTime>
+#include <QEventLoop>
+#include <QFile>
+#include <QMessageBox>
+#include <QProgressBar>
+#include <QProgressDialog>
+#include <QDomDocument>
+#include <QXmlAttributes>
 
 
 OSMHandler::OSMHandler(Document* aDoc, Layer* aLayer, Layer* aConflict)
@@ -86,10 +86,11 @@ void OSMHandler::parseNode(const QXmlAttributes& atts)
         else if (userPt->lastUpdated() != Feature::UserResolved)
         {
 #ifndef FRISIUS_BUILD
-            if (userPt->lastUpdated() == Feature::NotYetDownloaded || (Pt->time() > userPt->time() || Pt->versionNumber() != userPt->versionNumber())) {
+            if (userPt->lastUpdated() == Feature::NotYetDownloaded || (Pt->time() > userPt->time() || Pt->versionNumber() != userPt->versionNumber()))
 #else
-            if (userPt->lastUpdated() == Feature::NotYetDownloaded) {
+            if (userPt->lastUpdated() == Feature::NotYetDownloaded)
 #endif
+            {
                 g_backend.deallocFeature(theLayer, Pt);
                 Pt = userPt;
                 Pt->layer()->remove(Pt);
@@ -104,6 +105,11 @@ void OSMHandler::parseNode(const QXmlAttributes& atts)
                 Pt = userPt;
                 NewFeature = false;
             }
+        } else {
+            qDebug() << "Node conflicted, but already is tagged as Feature::UserResolved. Ignoring " << Pt->xmlId();
+            g_backend.deallocFeature(theLayer, Pt);
+            Pt = userPt;
+            NewFeature = false;
         }
     }
     else
diff --git a/src/Interactions/BuildBridgeInteraction.cpp b/src/Interactions/BuildBridgeInteraction.cpp
new file mode 100644
index 0000000..6ff4d9e
--- /dev/null
+++ b/src/Interactions/BuildBridgeInteraction.cpp
@@ -0,0 +1,170 @@
+#include "Global.h"
+#include "BuildBridgeInteraction.h"
+
+#include "MainWindow.h"
+#include "PropertiesDock.h"
+#include "DocumentCommands.h"
+#include "FeatureCommands.h"
+#include "WayCommands.h"
+#include "Projection.h"
+#include "Node.h"
+#include "LineF.h"
+#include "FeatureManipulations.h"
+#include "Global.h"
+
+#include <QList>
+#include <QMessageBox>
+#include <assert.h>
+
+BuildBridgeInteraction::BuildBridgeInteraction(MainWindow* aMain)
+    : FeatureSnapInteraction(aMain), freshSplit(false)
+{
+	g_Merk_MainWindow->properties()->setSelection(0);
+	g_Merk_MainWindow->view()->invalidate(true, true, false);
+}
+
+BuildBridgeInteraction::~BuildBridgeInteraction(void)
+{
+}
+
+QString BuildBridgeInteraction::toHtml()
+{
+    QString help;
+    //help = (MainWindow::tr("LEFT-CLICK to select; LEFT-DRAG to move"));
+
+    QString desc;
+    desc = QString("<big><b>%1</b></big><br/>").arg(MainWindow::tr("Create node Interaction"));
+    desc += QString("<b>%1</b><br/>").arg(help);
+
+    QString S =
+    "<html><head/><body>"
+    "<small><i>" + QString(metaObject()->className()) + "</i></small><br/>"
+    + desc;
+    S += "</body></html>";
+
+    return S;
+}
+
+/*
+void BuildBridgeInteraction::snapMousePressEvent(QMouseEvent * ev, Feature* aFeat)
+{
+	Q_UNUSED(ev);
+	Q_UNUSED(aFeat);
+#ifdef _MOBILE
+        theMain->view()->setCursor(cursor());
+#endif
+}
+
+void BuildBridgeInteraction::snapMouseMoveEvent(QMouseEvent* ev, Feature* aFeat)
+{
+#ifdef _MOBILE
+        theMain->view()->setCursor(cursor());
+#endif
+}
+*/
+
+void BuildBridgeInteraction::snapMouseReleaseEvent(QMouseEvent * ev, Feature* aFeat)
+{
+/*
+    if (theMoveInteraction) {
+		QMessageBox::critical(g_Merk_MainWindow, tr("BridgeBuilder"), tr("Hmm"));
+        theMoveInteraction->snapMouseReleaseEvent(ev, aFeat);
+        return;
+    } */
+
+
+	Node* addNode = NULL;
+
+    Way* aRoad = dynamic_cast<Way*>(aFeat);
+    if (aRoad) {
+        Coord P(XY_TO_COORD(ev->pos()));
+        addNode = createNode(P, aFeat);
+    } else if (aFeat) {
+		addNode = dynamic_cast<Node*>(aFeat);
+	}
+
+
+	if (freshSplit) {
+		freshSplit = false;
+		g_Merk_MainWindow->properties()->setSelection(0);
+	}
+
+	if (addNode) {
+		g_Merk_MainWindow->properties()->addSelection(addNode);
+	}
+	if (g_Merk_MainWindow->properties()->selectionSize() >= 2) {
+		splitAndMark();
+		freshSplit = true;
+	}
+}
+
+void BuildBridgeInteraction::splitAndMark() {
+	/* Do some sanity check */
+	Node*  firstNode = CAST_NODE(g_Merk_MainWindow->properties()->selection(0));
+	Node* secondNode = CAST_NODE(g_Merk_MainWindow->properties()->selection(1));
+	if ((g_Merk_MainWindow->properties()->selectionSize() > 2) || (!firstNode) || (!secondNode)) {
+		QMessageBox::critical(g_Merk_MainWindow, tr("BridgeBuilder"), tr("Sorry, I don't know how to build bridge from THAT. Please, give me two nodes only."));
+		g_Merk_MainWindow->properties()->setSelection(0);
+		return;
+	}
+	
+    CommandList* theList = new CommandList(tr("Convert segment to bridge"), NULL);
+	Way *R = cutoutRoad(g_Merk_MainWindow->document(), theList, g_Merk_MainWindow->properties(), firstNode, secondNode);
+	if (R) {
+		/* Add the bridge=yes/tunnel=culvert tag, including possible layer increase if nonexistent */
+		if (R->findKey("bridge") == -1 && R->findKey("tunnel") == -1) {
+			int layer = R->tagValue("layer", "0").toInt();
+			if (R->findKey("highway") != -1) {
+				theList->add(new SetTagCommand(R, "bridge", "yes"));
+				layer++;
+			}
+			if (R->findKey("waterway") != -1) {
+				theList->add(new SetTagCommand(R, "tunnel", "culvert"));
+				layer--;
+			}
+
+			if (layer == 0)
+				theList->add(new ClearTagCommand(R, "layer"));
+			else 
+				theList->add(new SetTagCommand(R, "layer", QString::number(layer)));
+		} else {
+			QMessageBox::critical(g_Merk_MainWindow, tr("BridgeBuilder"), tr("Selected segment is already tagged as bridge/tunnel. Please, make sure you know what you're doing."));
+		}
+		g_Merk_MainWindow->properties()->setSelection(R);
+		g_Merk_MainWindow->document()->addHistory(theList);
+		//g_Merk_MainWindow->view()->invalidate(true, true, false);
+		g_Merk_MainWindow->invalidateView();
+	} else {
+		QMessageBox::critical(g_Merk_MainWindow, tr("BridgeBuilder"), tr("Unsupported action: The bridge does not seem to be a single way."));
+		theList->undo();
+	}
+}
+
+#ifndef _MOBILE
+QCursor BuildBridgeInteraction::cursor() const
+{
+    return QCursor(Qt::CrossCursor);
+}
+#endif
+
+Node *BuildBridgeInteraction::createNode(Coord P, Feature* aFeat)
+{
+    Node* N = NULL;
+    CommandList* theList;
+    Way* aRoad = dynamic_cast<Way*>(aFeat);
+	/* Bridge can be only created from existing roads */
+    if (aRoad)
+    {
+        theList  = new CommandList(MainWindow::tr("Create node in Road: %1").arg(aRoad->id().numId), aRoad);
+        int SnapIdx = findSnapPointIndex(aRoad, P);
+        N = g_backend.allocNode(g_Merk_MainWindow->document()->getDirtyOrOriginLayer(aRoad->layer()), P);
+        theList->add(new AddFeatureCommand(g_Merk_MainWindow->document()->getDirtyOrOriginLayer(aRoad->layer()),N,true));
+        theList->add(new WayAddNodeCommand(aRoad,N,SnapIdx,g_Merk_MainWindow->document()->getDirtyOrOriginLayer(aRoad->layer())));
+
+		g_Merk_MainWindow->document()->addHistory(theList);
+		g_Merk_MainWindow->view()->invalidate(true, true, false);
+    } else {
+		assert(0);
+	}
+	return N;
+}
diff --git a/src/Interactions/BuildBridgeInteraction.h b/src/Interactions/BuildBridgeInteraction.h
new file mode 100644
index 0000000..a9b940c
--- /dev/null
+++ b/src/Interactions/BuildBridgeInteraction.h
@@ -0,0 +1,26 @@
+#ifndef MERKAARTOR_MARKBRIDGEINTERATION_H_
+#define MERKAARTOR_MARKBRIDGEINTERATION_H_
+
+#include "Interaction.h"
+#include "Feature.h"
+
+class BuildBridgeInteraction : public FeatureSnapInteraction
+{
+    public:
+        BuildBridgeInteraction(MainWindow* aMain);
+        ~BuildBridgeInteraction(void);
+
+
+        //virtual void snapMousePressEvent(QMouseEvent * event, Feature* aLast);
+        virtual void snapMouseReleaseEvent(QMouseEvent * event, Feature* aLast);
+        //virtual void snapMouseMoveEvent(QMouseEvent* event, Feature* aLast);
+        virtual QString toHtml();
+#ifndef _MOBILE
+        virtual QCursor cursor() const;
+#endif
+        static Node* createNode(Coord P, Feature* aFeat);
+		void splitAndMark();
+		bool freshSplit;
+};
+
+#endif
diff --git a/src/Interactions/CreateAreaInteraction.cpp b/src/Interactions/CreateAreaInteraction.cpp
index 60690e9..08e2aec 100644
--- a/src/Interactions/CreateAreaInteraction.cpp
+++ b/src/Interactions/CreateAreaInteraction.cpp
@@ -13,9 +13,9 @@
 #include "MDiscardableDialog.h"
 #include "Global.h"
 
-#include <QtGui/QDockWidget>
-#include <QtGui/QMessageBox>
-#include <QtGui/QPainter>
+#include <QDockWidget>
+#include <QMessageBox>
+#include <QPainter>
 
 CreateAreaInteraction::CreateAreaInteraction(MainWindow* aMain)
     : FeatureSnapInteraction(aMain),
diff --git a/src/Interactions/CreateDoubleWayInteraction.cpp b/src/Interactions/CreateDoubleWayInteraction.cpp
index 366a7d3..be6164b 100644
--- a/src/Interactions/CreateDoubleWayInteraction.cpp
+++ b/src/Interactions/CreateDoubleWayInteraction.cpp
@@ -10,8 +10,8 @@
 #include "MerkaartorPreferences.h"
 #include "Global.h"
 
-#include <QtGui/QDockWidget>
-#include <QtGui/QPainter>
+#include <QDockWidget>
+#include <QPainter>
 
 CreateDoubleWayInteraction::CreateDoubleWayInteraction(MainWindow* aMain)
     : Interaction(aMain), R1(0), R2(0), FirstPoint(0,0), HaveFirst(false), theDock(0)
diff --git a/src/Interactions/CreateRoundaboutInteraction.cpp b/src/Interactions/CreateRoundaboutInteraction.cpp
index 7721edd..c98c752 100644
--- a/src/Interactions/CreateRoundaboutInteraction.cpp
+++ b/src/Interactions/CreateRoundaboutInteraction.cpp
@@ -12,8 +12,8 @@
 #include "MerkaartorPreferences.h"
 #include "Global.h"
 
-#include <QtGui/QDockWidget>
-#include <QtGui/QPainter>
+#include <QDockWidget>
+#include <QPainter>
 
 #include <math.h>
 
diff --git a/src/Interactions/CreateSingleWayInteraction.cpp b/src/Interactions/CreateSingleWayInteraction.cpp
index 8b9cbaf..0e54a55 100644
--- a/src/Interactions/CreateSingleWayInteraction.cpp
+++ b/src/Interactions/CreateSingleWayInteraction.cpp
@@ -11,8 +11,8 @@
 #include "PropertiesDock.h"
 #include "Global.h"
 
-#include <QtGui/QDockWidget>
-#include <QtGui/QPainter>
+#include <QDockWidget>
+#include <QPainter>
 
 CreateSingleWayInteraction::CreateSingleWayInteraction(MainWindow* aMain, Node *firstNode, bool aCurved)
     : FeatureSnapInteraction(aMain), theRoad(0), FirstPoint(0,0),
diff --git a/src/Interactions/ExtrudeInteraction.cpp b/src/Interactions/ExtrudeInteraction.cpp
index 8c25bf6..c1effed 100644
--- a/src/Interactions/ExtrudeInteraction.cpp
+++ b/src/Interactions/ExtrudeInteraction.cpp
@@ -83,7 +83,11 @@ void ExtrudeInteraction::snapMouseMoveEvent(QMouseEvent* ev, Feature* lastSnap)
 {
     Q_UNUSED(lastSnap)
 
+#ifdef QT5
+    LastCursor = ev->localPos();
+#else
     LastCursor = ev->posF();
+#endif
     view()->update();
 }
 
@@ -110,7 +114,12 @@ void ExtrudeInteraction::snapMouseReleaseEvent(QMouseEvent* anEvent, Feature* la
     Q_UNUSED(lastSnap)
 
     if (Creating) {
-        QLineF l(OrigSegment.p1(), anEvent->posF());
+#ifdef QT5
+        QPointF pos = anEvent->localPos();
+#else
+        QPointF pos = anEvent->posF();
+#endif
+        QLineF l(OrigSegment.p1(), pos);
         qreal a = OrigSegment.angleTo(l);
         qreal largeur = sin(angToRad(a))*l.length();
 
diff --git a/src/Interactions/Interaction.cpp b/src/Interactions/Interaction.cpp
index 8d02324..0560f88 100644
--- a/src/Interactions/Interaction.cpp
+++ b/src/Interactions/Interaction.cpp
@@ -347,8 +347,7 @@ void FeatureSnapInteraction::paintEvent(QPaintEvent* anEvent, QPainter& thePaint
         theMain->properties()->highlighted(i)->drawHighlight(thePainter, view());
     }
 
-    //FIXME document()->exists necessary?
-    if (LastSnap && document()->exists(LastSnap)) {
+    if (LastSnap) {
         LastSnap->drawHover(thePainter, view());
         view()->setToolTip(LastSnap->toHtml());
     } else {
diff --git a/src/Interactions/Interaction.h b/src/Interactions/Interaction.h
index 80a000b..8c7363d 100644
--- a/src/Interactions/Interaction.h
+++ b/src/Interactions/Interaction.h
@@ -19,7 +19,7 @@ class QPainter;
 
 #include <QtCore/QObject>
 #include <QtCore/QTime>
-#include <QtGui/QApplication>
+#include <QApplication>
 #include <QtGui/QCursor>
 #include <QtGui/QMouseEvent>
 #include <QList>
diff --git a/src/Interactions/Interactions.pri b/src/Interactions/Interactions.pri
index 918da03..10e4e9e 100644
--- a/src/Interactions/Interactions.pri
+++ b/src/Interactions/Interactions.pri
@@ -14,7 +14,8 @@ HEADERS += \
     RotateInteraction.h \
     ScaleInteraction.h \
     ZoomInteraction.h \
-    ExtrudeInteraction.h
+    ExtrudeInteraction.h \
+    BuildBridgeInteraction.h
 
 SOURCES += \
     CreateAreaInteraction.cpp \
@@ -29,7 +30,8 @@ SOURCES += \
     RotateInteraction.cpp \
     ScaleInteraction.cpp \
     ZoomInteraction.cpp \
-    ExtrudeInteraction.cpp
+    ExtrudeInteraction.cpp \
+    BuildBridgeInteraction.cpp
 
 FORMS +=  \
     CreateDoubleWayDock.ui \
diff --git a/src/Interactions/MoveNodeInteraction.cpp b/src/Interactions/MoveNodeInteraction.cpp
index e67d457..67c2e43 100644
--- a/src/Interactions/MoveNodeInteraction.cpp
+++ b/src/Interactions/MoveNodeInteraction.cpp
@@ -26,6 +26,7 @@ MoveNodeInteraction::MoveNodeInteraction(MainWindow* aMain)
     , StartDragPosition(0,0)
     , theList(0)
 {
+    setDontSelectVirtual(true);
     if (M_PREFS->getSeparateMoveMode()) {
         setDontSelectVirtual(false);
     }
@@ -271,6 +272,7 @@ void MoveNodeInteraction::snapMouseMoveEvent(QMouseEvent* event, Feature* Closer
                 theList->add(new WayAddNodeCommand(aRoad,N,SnapIdx,main()->document()->getDirtyOrOriginLayer(aRoad->layer())));
 
                 Moving[i] = N;
+                LastSnap = N;
             } else {
                 Moving[i]->setPosition(OriginalPosition[i]+Diff);
             }
diff --git a/src/Layers/ImageMapLayer.cpp b/src/Layers/ImageMapLayer.cpp
index e982c2d..e237e84 100644
--- a/src/Layers/ImageMapLayer.cpp
+++ b/src/Layers/ImageMapLayer.cpp
@@ -46,9 +46,6 @@ public:
 #endif
     ImageManager* theNetworkImageManager;
 
-    TileMapAdapter* tmsa;
-    WMSMapAdapter* wmsa;
-    WmscMapAdapter* wmsca;
     QRect pr;
     QTransform theTransform;
     QRectF Viewport;
@@ -65,9 +62,6 @@ public:
         theBrowserImageManager = NULL;
 #endif
         theNetworkImageManager = NULL;
-        tmsa = NULL;
-        wmsa = NULL;
-        wmsca = NULL;
     }
     ~ImageMapLayerPrivate()
     {
@@ -207,20 +201,15 @@ void ImageMapLayer::setMapAdapter(const QUuid& theAdapterUid, const QString& ser
         } else {
             p->selServer = server;
             WmsServer theWmsServer(wsl->value(p->selServer));
+            p->theMapAdapter = new WMSMapAdapter(theWmsServer);
             switch (theWmsServer.WmsIsTiled) {
             case 0:
-                p->wmsa = new WMSMapAdapter(theWmsServer);
-                p->theMapAdapter = p->wmsa;
                 setName(tr("Map - WMS - %1").arg(p->theMapAdapter->getName()));
                 break;
             case 1:
-                p->wmsca = new WmscMapAdapter(theWmsServer);
-                p->theMapAdapter = p->wmsca;
                 setName(tr("Map - WMS-C - %1").arg(p->theMapAdapter->getName()));
                 break;
             case 2:
-                p->wmsca = new WmscMapAdapter(theWmsServer);
-                p->theMapAdapter = p->wmsca;
                 setName(tr("Map - WMS-Tiled - %1").arg(p->theMapAdapter->getName()));
                 break;
             }
@@ -234,8 +223,7 @@ void ImageMapLayer::setMapAdapter(const QUuid& theAdapterUid, const QString& ser
         } else {
             p->selServer = server;
             TmsServer ts = tsl->value(p->selServer);
-            p->tmsa = new TileMapAdapter(ts);
-            p->theMapAdapter = p->tmsa;
+            p->theMapAdapter = new TileMapAdapter(ts);
 
             setName(tr("Map - TMS - %1").arg(p->theMapAdapter->getName()));
             id += p->theMapAdapter->getName();
@@ -289,14 +277,11 @@ void ImageMapLayer::setMapAdapter(const QUuid& theAdapterUid, const QString& ser
                         }
                     }
                     if (!ui.cbAgree->isChecked()) {
-                        SAFE_DELETE(p->wmsa)
-                                SAFE_DELETE(p->wmsca)
-                                SAFE_DELETE(p->tmsa)
-                                if (p->theImageManager)
-                                    p->theImageManager->abortLoading();
+                        SAFE_DELETE(p->theMapAdapter)
+                        if (p->theImageManager)
+                            p->theImageManager->abortLoading();
                         SAFE_DELETE(p->theImageManager)
-                                on_loadingFinished();
-                        p->theMapAdapter = NULL;
+                        on_loadingFinished();
                         p->curPix = QPixmap();
 
                         p->bgType = NONE_ADAPTER_UUID;
@@ -404,8 +389,6 @@ QTransform QTransformFomXml(QXmlStreamReader& stream)
 
 bool ImageMapLayer::toXML(QXmlStreamWriter& stream, bool asTemplate, QProgressDialog * /* progress */)
 {
-    bool OK = true;
-
     stream.writeStartElement(metaObject()->className());
 
     stream.writeAttribute("xml:id", id());
@@ -448,7 +431,7 @@ bool ImageMapLayer::toXML(QXmlStreamWriter& stream, bool asTemplate, QProgressDi
     }
     stream.writeEndElement();
 
-    return OK;
+    return true;
 }
 
 ImageMapLayer * ImageMapLayer::fromXML(Document* d, QXmlStreamReader& stream, QProgressDialog * /*progress*/)
@@ -462,6 +445,7 @@ ImageMapLayer * ImageMapLayer::fromXML(Document* d, QXmlStreamReader& stream, QP
     QUuid bgtype = QUuid(stream.attributes().value("bgtype").toString());
 
     qreal alpha = stream.attributes().value("alpha").toString().toDouble();
+    // TODO: Note that the logic for "enabled" is slightly different. Why?
     bool visible = (stream.attributes().value("visible") == "true" ? true : false);
     bool selected = (stream.attributes().value("selected") == "true" ? true : false);
     bool enabled = (stream.attributes().value("enabled") == "false" ? false : true);
diff --git a/src/Layers/Layer.cpp b/src/Layers/Layer.cpp
index 3d0f692..07d1ed7 100644
--- a/src/Layers/Layer.cpp
+++ b/src/Layers/Layer.cpp
@@ -37,6 +37,7 @@ Layer::Layer()
 Layer::Layer(const QString& aName)
 :  p(new LayerPrivate), theWidget(0)
 {
+    qDebug() << "Created layer" << aName;
     p->Name = aName;
     p->alpha = 1.0;
     p->dirtyLevel = 0;
@@ -191,6 +192,13 @@ void Layer::clear()
     }
 }
 
+void Layer::deleteAll() {
+    while (p->Features.count())
+    {
+        deleteFeature(p->Features[0]);
+    }
+}
+
 void Layer::notifyIdUpdate(const IFeature::FId& id, Feature* aFeature)
 {
     QHash<qint64, MapFeaturePtr>::iterator i;
@@ -405,7 +413,7 @@ QString Layer::toMainHtml()
     "<small><i>" + QString(metaObject()->className()) + "</i></small><br/>"
     + desc;
     S += "<hr/>";
-    S += "<i>"+QApplication::translate("Layer", "Size")+": </i>" + QApplication::translate("Layer", "%n features", "", QCoreApplication::CodecForTr, getDisplaySize())+"<br/>";
+    S += "<i>"+QApplication::translate("Layer", "Size")+": </i>" + QApplication::translate("Layer", "%n features")+"<br/>";
     S += "%1";
     S += "</body></html>";
 
diff --git a/src/Layers/Layer.h b/src/Layers/Layer.h
index c1d4028..b238e86 100644
--- a/src/Layers/Layer.h
+++ b/src/Layers/Layer.h
@@ -79,6 +79,7 @@ public:
     virtual void remove(Feature* aFeature);
     virtual void deleteFeature(Feature* aFeature);
     virtual void clear();
+    virtual void deleteAll();
     bool exists(Feature* aFeature) const;
     int getDisplaySize() const;
     virtual int size() const;
diff --git a/src/Layers/LayerWidget.cpp b/src/Layers/LayerWidget.cpp
index f10507b..66c473e 100644
--- a/src/Layers/LayerWidget.cpp
+++ b/src/Layers/LayerWidget.cpp
@@ -16,6 +16,7 @@
 #include <QStylePainter>
 #include <QInputDialog>
 #include <QMessageBox>
+#include <QDrag>
 
 #include "SelectionDialog.h"
 
diff --git a/src/Layers/OsmRenderLayer.cpp b/src/Layers/OsmRenderLayer.cpp
index 43b5b3b..bf43f31 100644
--- a/src/Layers/OsmRenderLayer.cpp
+++ b/src/Layers/OsmRenderLayer.cpp
@@ -6,6 +6,10 @@
 #include "MapRenderer.h"
 #include "MerkaartorPreferences.h"
 
+#if QT_VERSION >= 0x050000
+#include <QtConcurrent>
+#endif
+
 inline uint qHash(const QPoint& p)
 {
     return (uint)(p.y() + (p.x() << 16));
@@ -51,6 +55,7 @@ public:
 
     void operator()(const TILE_TYPE& theTile)
     {
+#if 0
 #if defined(__MINGW32__)
         // Workaround for QTBUG-19886
         asm volatile ("mov %esp, %eax");
@@ -60,10 +65,13 @@ public:
         asm volatile ("push %eax");
         asm volatile ("alignmentok:");
 #endif
+#endif
 
         if (!p->theDocument)
             return;
 
+        p->theDocument->lockPainters();
+
         TILE_TYPE tile = theTile;
 
         QPointF projTL((TILE_X(tile)*p->tileSizeCoordW)+p->tileOriginCoord.x(), (TILE_Y(tile)*p->tileSizeCoordH)+p->tileOriginCoord.y());
@@ -97,6 +105,7 @@ public:
         MapRenderer r;
         r.render(&P, theFeatures, projR, /*QRect(0, 0, TILE_SIZE, TILE_SIZE)*/QRect(-((TILE_SIZE*TILE_SURROUND)-TILE_SIZE)/2, -((TILE_SIZE*TILE_SURROUND)-TILE_SIZE)/2, TILE_SIZE*TILE_SURROUND, TILE_SIZE*TILE_SURROUND), p->PixelPerM, p->ROptions);
         P.end();
+        p->theDocument->unlockPainters();
         tileLock.lockForWrite();
         tileCache->insert(tile, img);
 
@@ -118,7 +127,7 @@ OsmRenderLayer::OsmRenderLayer(QObject *parent)
     connect(&(renderGatheringWatcher), SIGNAL(finished()), SIGNAL(renderingDone()));
 }
 
-void OsmRenderLayer::setDocument(IDocument *aDocument)
+void OsmRenderLayer::setDocument(Document *aDocument)
 {
     theDocument = aDocument;
 }
diff --git a/src/Layers/OsmRenderLayer.h b/src/Layers/OsmRenderLayer.h
index 2f5f6ee..a252517 100644
--- a/src/Layers/OsmRenderLayer.h
+++ b/src/Layers/OsmRenderLayer.h
@@ -11,7 +11,7 @@
 #include "IRenderer.h"
 #include "Projection.h"
 
-class IDocument;
+class Document;
 class Projection;
 
 class OsmRenderLayer : public QObject
@@ -22,7 +22,7 @@ class OsmRenderLayer : public QObject
 
 public:
     OsmRenderLayer(QObject*parent=0);
-    void setDocument(IDocument *aDocument);
+    void setDocument(Document *aDocument);
     void setTransform(const QTransform& aTransform);
     void setProjection(const Projection& aProjection);
 
@@ -36,7 +36,7 @@ signals:
     void renderingDone();
 
 protected:
-    IDocument* theDocument;
+    Document* theDocument;
 
     QRectF projRect;
     qreal tileSizeCoordW;
diff --git a/src/Main.cpp b/src/Main.cpp
index cf50eff..975bb61 100644
--- a/src/Main.cpp
+++ b/src/Main.cpp
@@ -1,7 +1,7 @@
 #include "Global.h"
 
-#include <QtGui/QApplication>
-#include <QtGui/QMessageBox>
+#include <QApplication>
+#include <QMessageBox>
 
 #include <QLibraryInfo>
 #include <QSplashScreen>
@@ -9,25 +9,29 @@
 #include <qtsingleapplication.h>
 #include "MainWindow.h"
 #include "Preferences/MerkaartorPreferences.h"
-#include "revision.h"
 #include "proj_api.h"
 #include "gdal_version.h"
+//#include "QFatFs.h"
+//#include "ZipEngine.h"
+#include "Global.h"
 
-#include "IMapAdapterFactory.h"
-
-#if defined(Q_OS_WIN)
-extern Q_CORE_EXPORT void qWinMsgHandler(QtMsgType t, const char* str);
+#ifdef USE_SPATIALITE
+#include <sqlite3.h>
+#include <spatialite.h>
 #endif
 
+#include "IMapAdapterFactory.h"
+
 FILE* pLogFile = NULL;
 
-void myMessageOutput(QtMsgType msgType, const char *buf)
-{
+#ifdef QT5
+void myMessageOutput(QtMsgType msgType, const QMessageLogContext &, const QString & str) {
+    const char * buf = str.toStdString().c_str();
+#else
+void myMessageOutput(QtMsgType msgType, const char *buf) {
+#endif
 // From corelib/global/qglobal.cpp : qt_message_output
 
-#if defined(Q_OS_WIN) && !defined(NDEBUG)
-    qWinMsgHandler(msgType, buf);
-#endif
 #if defined(Q_CC_MWERKS) && !defined(Q_OS_SYMBIAN)
     mac_default_handler(buf);
 #elif defined(Q_OS_WINCE)
@@ -76,9 +80,9 @@ void myMessageOutput(QtMsgType msgType, const char *buf)
 void showVersion()
 {
     QString o;
-    o = QString("%1 %2%3(%4)\n").arg(STRINGIFY(PRODUCT)).arg(STRINGIFY(VERSION)).arg(STRINGIFY(REVISION)).arg(STRINGIFY(SVNREV));
+    o = QString("%1 %2\n").arg(STRINGIFY(PRODUCT)).arg(STRINGIFY(REVISION));
     fprintf(stdout, "%s", o.toLatin1().data());
-    o = QString("using QT version %1 (built with %2)\n").arg(qVersion()).arg(QT_VERSION_STR);
+    o = QString("using Qt version %1 (built with %2)\n").arg(qVersion()).arg(QT_VERSION_STR);
     fprintf(stdout, "%s", o.toLatin1().data());
     fprintf(stdout, "Copyright Bart Vanhauwaert, Chris Browet and others, 2006-2010\n");
     fprintf(stdout, "This program is licensed under the Version 2 of the GNU Public License or any later version\n");
@@ -103,6 +107,26 @@ void showHelp()
     fprintf(stdout, "  [filenames]\t\tOpen designated files \n");
 }
 
+void loadPluginsFromDir( QDir & pluginsDir ) {
+    qDebug() << "Loading plugins from directory " << pluginsDir.dirName();
+    foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
+        QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
+        QObject *plugin = loader.instance();
+        qDebug() << "  Loading" << fileName << "as plugin.";
+        if (plugin) {
+            IMapAdapterFactory *fac = qobject_cast<IMapAdapterFactory *>(plugin);
+            if (fac) {
+                M_PREFS->addBackgroundPlugin(fac);
+                qDebug() << "  Plugin loaded: " << fileName << ".";
+            } else {
+                qWarning() << "  Failed to load plugin: " << fileName << ".";
+            }
+        } else {
+            qWarning() << "  Not a plugin: " << fileName << ".";
+        }
+    }
+}
+
 int main(int argc, char** argv)
 {
     QtSingleApplication instance(argc,argv);
@@ -169,13 +193,21 @@ int main(int argc, char** argv)
 
     if (!logFilename.isNull())
         pLogFile = fopen(logFilename.toLatin1(), "a");
+#ifdef QT5
+    qInstallMessageHandler(myMessageOutput);
+#else
     qInstallMsgHandler(myMessageOutput);
+#endif
 
     qDebug() << "**** " << QDateTime::currentDateTime().toString(Qt::ISODate) << " -- Starting " << USER_AGENT;
-    qDebug() <<	"-------" << QString("using QT version %1 (built with %2)").arg(qVersion()).arg(QT_VERSION_STR);
+    qDebug() <<	"-------" << QString("using Qt version %1 (built with %2)").arg(qVersion()).arg(QT_VERSION_STR);
     QString projVer = QString(STRINGIFY(PJ_VERSION));
     qDebug() <<	"-------" << QString("using PROJ4 version %1.%2.%3").arg(projVer.left(1)).arg(projVer.mid(1, 1)).arg(projVer.right(1));
     qDebug() <<	"-------" << QString("using GDAL version %1").arg(GDAL_RELEASE_NAME);
+#ifdef USE_SPATIALITE
+    qDebug() <<	"-------" << QString("using Spatialite version %1").arg(spatialite_version());
+    qDebug() <<	"-------" << QString("using SQLite version %1").arg(sqlite3_libversion());
+#endif
     qDebug() << "-------" << "with arguments: " << QCoreApplication::arguments();
 
 #ifdef _MOBILE
@@ -207,9 +239,10 @@ int main(int argc, char** argv)
     splash.show();
     instance.processEvents();
 
-    splash.showMessage(QString(instance.translate("Main", "%1 v%2%3(%4)\nLoading plugins...")).arg(qApp->applicationName()).arg(STRINGIFY(VERSION)).arg(STRINGIFY(REVISION)).arg(STRINGIFY(SVNREV)), Qt::AlignBottom | Qt::AlignHCenter, Qt::black);
+    splash.showMessage(QString(instance.translate("Main", "%1 v%2\nLoading plugins...")).arg(qApp->applicationName()).arg(STRINGIFY(REVISION)), Qt::AlignBottom | Qt::AlignHCenter, Qt::black);
     instance.processEvents();
 
+    /* Create configuration directory for non-portable build. */
     if (!g_Merk_Portable) {
 #ifdef Q_OS_MAC
         if (!QDir::home().exists(HOMEDIR))
@@ -219,10 +252,10 @@ int main(int argc, char** argv)
             QDir::home().mkdir("." + qApp->applicationName().toLower());
 #endif
     }
+
+    /* Load plugins; this handles different OS habits. */
 #if defined(Q_OS_WIN32)
     QDir pluginsDir = QDir(qApp->applicationDirPath() + "/" + STRINGIFY(PLUGINS_DIR));
-
-    // Fixes MacOSX plugin dir (fixes #2253)
 #elif defined(Q_OS_MAC)
     QDir pluginsDir = QDir(qApp->applicationDirPath());
     pluginsDir.cdUp();
@@ -230,24 +263,27 @@ int main(int argc, char** argv)
 #elif defined(Q_OS_SYMBIAN)
     QDir pluginsDir(QLibraryInfo::location(QLibraryInfo::PluginsPath));
 #else
-    QDir pluginsDir = (g_Merk_Portable ? QDir(qApp->applicationDirPath() + "/plugins") : QDir(STRINGIFY(PLUGINS_DIR)));
+
+    /* Try directory with the application first. */
+    QDir pluginsDir = qApp->applicationDirPath() + "/plugins";
+    if (!pluginsDir.exists())
+        pluginsDir = QDir(STRINGIFY(PLUGINS_DIR));
 #endif
+
+    qDebug() << "PluginsDir:" << pluginsDir.path();
     QCoreApplication::addLibraryPath(pluginsDir.path());
+    loadPluginsFromDir(pluginsDir);
 
     pluginsDir.cd("background");
-    foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
-        QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
-        QObject *plugin = loader.instance();
-        if (plugin) {
-            IMapAdapterFactory *fac = qobject_cast<IMapAdapterFactory *>(plugin);
-            if (fac)
-                M_PREFS->addBackgroundPlugin(fac);
-        }
-    }
+    loadPluginsFromDir(pluginsDir);
 
-    splash.showMessage(QString(instance.translate("Main", "%1 v%2%3(%4)\nInitializing...")).arg(qApp->applicationName()).arg(STRINGIFY(VERSION)).arg(STRINGIFY(REVISION)).arg(STRINGIFY(SVNREV)), Qt::AlignBottom | Qt::AlignHCenter, Qt::black);
+    splash.showMessage(QString(instance.translate("Main", "%1 v%2\nInitializing...")).arg(qApp->applicationName()).arg(STRINGIFY(REVISION)), Qt::AlignBottom | Qt::AlignHCenter, Qt::black);
     instance.processEvents();
 
+//    QFatFsHandler* fatHandler = new QFatFsHandler(50000, 8192);
+    //ZipEngineHandler* zipHandler = new ZipEngineHandler();
+
+
     MainWindow Main;
     g_Merk_MainWindow = &Main;
     instance.setActivationWindow(&Main, false);
@@ -279,12 +315,15 @@ int main(int argc, char** argv)
         x = 255;
     }
 
-    qDebug() << "**** " << QDateTime::currentDateTime().toString(Qt::ISODate) << " -- Ending " << QString("%1 %2%3(%4)").arg(qApp->applicationName()).arg(STRINGIFY(VERSION)).arg(STRINGIFY(REVISION)).arg(STRINGIFY(SVNREV));
+    qDebug() << "**** " << QDateTime::currentDateTime().toString(Qt::ISODate) << " -- Ending " << QString("%1 %2").arg(qApp->applicationName()).arg(STRINGIFY(VERSION));
     if(pLogFile) {
         fclose(pLogFile);
         pLogFile = NULL;
     }
 
+//    delete fatHandler;
+    //delete zipHandler;
+
     return x;
 }
 
diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index 83aa460..116bb60 100755
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -22,6 +22,7 @@
 #include "CreateAreaInteraction.h"
 #include "CreateDoubleWayInteraction.h"
 #include "CreateNodeInteraction.h"
+#include "BuildBridgeInteraction.h"
 #include "CreateRoundaboutInteraction.h"
 #include "CreatePolygonInteraction.h"
 #include "CreateSingleWayInteraction.h"
@@ -75,11 +76,6 @@
 #include "GotoDialog.h"
 #include "TerraceDialog.h"
 
-#include "revision.h"
-#if QT_VERSION < 0x040700 || defined(FORCE_46)
-#include <boost/version.hpp>
-#endif
-
 #ifdef GEOIMAGE
 #include "GeoImageDock.h"
 #endif
@@ -94,10 +90,16 @@
 #include <QTcpServer>
 #include <QTcpSocket>
 #include <QXmlStreamReader>
+#include <QStyleFactory>
+#include <QMessageBox>
+#include <QFileDialog>
+#include <QInputDialog>
+#include <QToolTip>
 
 #include "qttoolbardialog.h"
 
 #include <locale.h>
+#include <limits.h>
 
 //For About
 #include "proj_api.h"
@@ -105,6 +107,15 @@
 
 #include "Utils/SlippyMapWidget.h"
 
+namespace {
+
+const QString MIME_OPENSTREETMAP_XML = "application/x-openstreetmap+xml";
+const QString MIME_GOOGLE_EARTH_KML = "application/vnd.google-earth.kml+xml";
+const QString MIME_GPX = "application/gpx+xml";
+const QString MIME_MERKAARTOR_UNDO_XML = "application/x-merkaartor-undo+xml";
+
+}  // namespace
+
 class MainWindowPrivate
 {
     public:
@@ -118,7 +129,7 @@ class MainWindowPrivate
     #endif
             , numImages(0)
         {
-            title = QString("%1 v%2%3(%4)").arg(STRINGIFY(PRODUCT)).arg(STRINGIFY(VERSION)).arg(STRINGIFY(REVISION)).arg(STRINGIFY(SVNREV));
+            title = QString("%1 v%2").arg(STRINGIFY(PRODUCT)).arg(STRINGIFY(REVISION));
         }
 
         QString FILTER_OPEN_SUPPORTED;
@@ -139,10 +150,23 @@ class MainWindowPrivate
         int numImages;
 };
 
+namespace {
+
+void SetOptionValue(RendererOptions& options,
+		RendererOptions::RenderOption option, bool on) {
+    if (on) {
+	options.options |= option;
+    } else {
+	options.options &= ~option;
+    }
+}
+
+}  // namespace
+
 MainWindow::MainWindow(QWidget *parent)
         : QMainWindow(parent)
         , ui(new Ui::MainWindow)
-        , fileName("")
+        , currentProjectFile("")
         , theDocument(0)
         , gpsRecLayer(0)
         , curGpsTrackSegment(0)
@@ -295,19 +319,19 @@ MainWindow::MainWindow(QWidget *parent)
     ui->viewLockZoomAction->setChecked(M_PREFS->getZoomBoris());
     ui->viewWireframeAction->setChecked(M_PREFS->getWireframeView());
 
-    if (M_PREFS->getBackgroundVisible()) p->renderOptions.options |= RendererOptions::BackgroundVisible; else p->renderOptions.options &= ~RendererOptions::BackgroundVisible;
-    if (M_PREFS->getForegroundVisible()) p->renderOptions.options |= RendererOptions::ForegroundVisible; else p->renderOptions.options &= ~RendererOptions::ForegroundVisible;
-    if (M_PREFS->getTouchupVisible()) p->renderOptions.options |= RendererOptions::TouchupVisible; else p->renderOptions.options &= ~RendererOptions::TouchupVisible;
-    if (M_PREFS->getNamesVisible()) p->renderOptions.options |= RendererOptions::NamesVisible; else p->renderOptions.options &= ~RendererOptions::NamesVisible;
-    if (M_PREFS->getPhotosVisible()) p->renderOptions.options |= RendererOptions::PhotosVisible; else p->renderOptions.options &= ~RendererOptions::PhotosVisible;
-    if (M_PREFS->getVirtualNodesVisible()) p->renderOptions.options |= RendererOptions::VirtualNodesVisible; else p->renderOptions.options &= ~RendererOptions::VirtualNodesVisible;
-    if (M_PREFS->getTrackPointsVisible()) p->renderOptions.options |= RendererOptions::NodesVisible; else p->renderOptions.options &= ~RendererOptions::NodesVisible;
-    if (M_PREFS->getTrackSegmentsVisible()) p->renderOptions.options |= RendererOptions::TrackSegmentVisible; else p->renderOptions.options &= ~RendererOptions::TrackSegmentVisible;
-    if (M_PREFS->getRelationsVisible()) p->renderOptions.options |= RendererOptions::RelationsVisible; else p->renderOptions.options &= ~RendererOptions::RelationsVisible;
-    if (M_PREFS->getDownloadedVisible()) p->renderOptions.options |= RendererOptions::DownloadedVisible; else p->renderOptions.options &= ~RendererOptions::DownloadedVisible;
-    if (M_PREFS->getScaleVisible()) p->renderOptions.options |= RendererOptions::ScaleVisible; else p->renderOptions.options &= ~RendererOptions::ScaleVisible;
-    if (M_PREFS->getLatLonGridVisible()) p->renderOptions.options |= RendererOptions::LatLonGridVisible; else p->renderOptions.options &= ~RendererOptions::LatLonGridVisible;
-    if (M_PREFS->getZoomBoris()) p->renderOptions.options |= RendererOptions::LockZoom; else p->renderOptions.options &= ~RendererOptions::LockZoom;
+    SetOptionValue(p->renderOptions, RendererOptions::BackgroundVisible, M_PREFS->getBackgroundVisible());
+    SetOptionValue(p->renderOptions, RendererOptions::ForegroundVisible, M_PREFS->getForegroundVisible());
+    SetOptionValue(p->renderOptions, RendererOptions::TouchupVisible, M_PREFS->getTouchupVisible());
+    SetOptionValue(p->renderOptions, RendererOptions::NamesVisible, M_PREFS->getNamesVisible());
+    SetOptionValue(p->renderOptions, RendererOptions::PhotosVisible, M_PREFS->getPhotosVisible());
+    SetOptionValue(p->renderOptions, RendererOptions::VirtualNodesVisible, M_PREFS->getVirtualNodesVisible());
+    SetOptionValue(p->renderOptions, RendererOptions::NodesVisible, M_PREFS->getTrackPointsVisible());
+    SetOptionValue(p->renderOptions, RendererOptions::TrackSegmentVisible, M_PREFS->getTrackSegmentsVisible());
+    SetOptionValue(p->renderOptions, RendererOptions::RelationsVisible, M_PREFS->getRelationsVisible());
+    SetOptionValue(p->renderOptions, RendererOptions::DownloadedVisible, M_PREFS->getDownloadedVisible());
+    SetOptionValue(p->renderOptions, RendererOptions::ScaleVisible, M_PREFS->getScaleVisible());
+    SetOptionValue(p->renderOptions, RendererOptions::LatLonGridVisible, M_PREFS->getLatLonGridVisible());
+    SetOptionValue(p->renderOptions, RendererOptions::LockZoom, M_PREFS->getZoomBoris());
 
     updateMenu();
 
@@ -383,8 +407,8 @@ MainWindow::MainWindow(QWidget *parent)
 #endif
 
 #ifndef GEOIMAGE
-        ui->windowGeoimageAction->setVisible(false);
-        ui->viewPhotosAction->setVisible(false);
+    ui->windowGeoimageAction->setVisible(false);
+    ui->viewPhotosAction->setVisible(false);
 #endif
 
     ui->viewStyleBackgroundAction->setVisible(false);
@@ -528,6 +552,7 @@ void MainWindow::launchInteraction(Interaction* anInteraction)
         ui->createRoadAction->setChecked(dynamic_cast<CreateSingleWayInteraction*>(anInteraction) != NULL);
         ui->createAreaAction->setChecked(dynamic_cast<CreateAreaInteraction*>(anInteraction) != NULL);
         ui->roadExtrudeAction->setChecked(dynamic_cast<ExtrudeInteraction*>(anInteraction) != NULL);
+        ui->markBridgeAction->setChecked(dynamic_cast<BuildBridgeInteraction*>(anInteraction) != NULL);
 
         EditInteraction* EI = dynamic_cast<EditInteraction*>(anInteraction);
         if (EI)
@@ -644,6 +669,10 @@ void MainWindow::onLoadingfinished(ImageMapLayer *)
 #endif
 }
 
+void MainWindow::updateSegmentMode(QMouseEvent* mouseEvent)
+{
+    g_Merk_Segment_Mode = (mouseEvent->modifiers() & Qt::AltModifier) || dynamic_cast<ExtrudeInteraction*>(theView->interaction());
+}
 
 bool MainWindow::eventFilter(QObject */* watched */, QEvent *event)
 {
@@ -741,10 +770,7 @@ bool MainWindow::eventFilter(QObject */* watched */, QEvent *event)
             return true;
 
         QMouseEvent* mevent = static_cast<QMouseEvent*>(event);
-        if ((mevent->modifiers() & Qt::AltModifier) || dynamic_cast<ExtrudeInteraction*>(theView->interaction()))
-            g_Merk_Segment_Mode = true;
-        else
-            g_Merk_Segment_Mode = false;
+        updateSegmentMode(mevent);
 
         theView->interaction()->updateSnap(mevent);
 
@@ -783,11 +809,7 @@ bool MainWindow::eventFilter(QObject */* watched */, QEvent *event)
             return true;
 
         QMouseEvent* mevent = static_cast<QMouseEvent*>(event);
-        if ((mevent->modifiers() & Qt::AltModifier) || dynamic_cast<ExtrudeInteraction*>(theView->interaction()))
-            g_Merk_Segment_Mode = true;
-        else
-            g_Merk_Segment_Mode = false;
-
+        updateSegmentMode(mevent);
 
         theView->interaction()->updateSnap(mevent);
         if (theInfo)
@@ -804,11 +826,7 @@ bool MainWindow::eventFilter(QObject */* watched */, QEvent *event)
             return true;
 
         QMouseEvent* mevent = static_cast<QMouseEvent*>(event);
-        if ((mevent->modifiers() & Qt::AltModifier) || dynamic_cast<ExtrudeInteraction*>(theView->interaction()))
-            g_Merk_Segment_Mode = true;
-        else
-            g_Merk_Segment_Mode = false;
-
+        updateSegmentMode(mevent);
 
         theView->interaction()->updateSnap(mevent);
 
@@ -826,10 +844,7 @@ bool MainWindow::eventFilter(QObject */* watched */, QEvent *event)
             return false;
 
         QMouseEvent* mevent = static_cast<QMouseEvent*>(event);
-        if ((mevent->modifiers() & Qt::AltModifier) || dynamic_cast<ExtrudeInteraction*>(theView->interaction()))
-            g_Merk_Segment_Mode = true;
-        else
-            g_Merk_Segment_Mode = false;
+        updateSegmentMode(mevent);
 
         theView->interaction()->updateSnap(mevent);
 
@@ -1074,75 +1089,39 @@ void MainWindow::readLocalConnection()
     }
 }
 
+namespace {
+
+void AddActionsIntoManager(QtToolBarManager* manager, QWidget* widget,
+		const QString& label) {
+    foreach(QAction* a, widget->actions()) {
+        if (!a->isSeparator() && !a->menu())
+            manager->addAction(a, label);
+    }
+}
+
+}  // namespace
+
 void MainWindow::createToolBarManager()
 {
     toolBarManager = new QtToolBarManager(this);
     toolBarManager->setMainWindow(this);
 
-    foreach(QAction* a, ui->menuFile->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("File"));;
-    }
-    foreach(QAction* a, ui->menuEdit->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("Edit"));;
-    }
-    foreach(QAction* a, ui->menuView->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("View"));;
-    }
-    foreach(QAction* a, ui->menu_Show->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("Show"));;
-    }
-    foreach(QAction* a, ui->menuShow_directional_Arrows->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("Directional Arrows"));;
-    }
-    foreach(QAction* a, ui->menuGps->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("GPS"));;
-    }
-    foreach(QAction* a, ui->menuLayers->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("Layers"));;
-    }
-    foreach(QAction* a, ui->menuCreate->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("Create"));;
-    }
-    foreach(QAction* a, ui->menu_Feature->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("Feature"));;
-    }
-    foreach(QAction* a, ui->menuOpenStreetBugs->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("OpenStreetBugs"));;
-    }
-    foreach(QAction* a, ui->menu_Node->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("Node"));;
-    }
-    foreach(QAction* a, ui->menuRoad->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("Way"));;
-    }
-    foreach(QAction* a, ui->menuRelation->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("Relation"));;
-    }
-    foreach(QAction* a, ui->menuTools->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("Tools"));;
-    }
-    foreach(QAction* a, ui->menuWindow->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("Windows"));;
-    }
-    foreach(QAction* a, ui->menuHelp->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            toolBarManager->addAction(a, tr("Help"));;
-    }
+    AddActionsIntoManager(toolBarManager, ui->menuFile, tr("File"));
+    AddActionsIntoManager(toolBarManager, ui->menuEdit, tr("Edit"));
+    AddActionsIntoManager(toolBarManager, ui->menuView, tr("View"));
+    AddActionsIntoManager(toolBarManager, ui->menu_Show, tr("Show"));
+    AddActionsIntoManager(toolBarManager, ui->menuShow_directional_Arrows, tr("Directional Arrows"));
+    AddActionsIntoManager(toolBarManager, ui->menuGps, tr("GPS"));
+    AddActionsIntoManager(toolBarManager, ui->menuLayers, tr("Layers"));
+    AddActionsIntoManager(toolBarManager, ui->menuCreate, tr("Create"));
+    AddActionsIntoManager(toolBarManager, ui->menu_Feature, tr("Feature"));
+    AddActionsIntoManager(toolBarManager, ui->menuOpenStreetBugs, tr("OpenStreetBugs"));
+    AddActionsIntoManager(toolBarManager, ui->menu_Node, tr("Node"));
+    AddActionsIntoManager(toolBarManager, ui->menuRoad, tr("Way"));
+    AddActionsIntoManager(toolBarManager, ui->menuRelation, tr("Relation"));
+    AddActionsIntoManager(toolBarManager, ui->menuTools, tr("Tools"));
+    AddActionsIntoManager(toolBarManager, ui->menuWindow, tr("Windows"));
+    AddActionsIntoManager(toolBarManager, ui->menuHelp, tr("Help"));
 
     toolBarManager->addToolBar(ui->toolBar, "");
 
@@ -1274,14 +1253,14 @@ void MainWindow::on_editCutAction_triggered()
     QList<Feature*> exportedFeatures = document()->exportCoreOSM(p->theProperties->selection());
     theDocument->exportOSM(this, &osmBuf, exportedFeatures);
     md->setText(QString(osmBuf.data()));
-    md->setData("application/x-openstreetmap+xml", osmBuf.data());
+    md->setData(MIME_OPENSTREETMAP_XML, osmBuf.data());
 
     ImportExportKML kmlexp(theDocument);
     QBuffer kmlBuf;
     kmlBuf.open(QIODevice::WriteOnly);
     if (kmlexp.setDevice(&kmlBuf)) {
         kmlexp.export_(p->theProperties->selection());
-        md->setData("application/vnd.google-earth.kml+xml", kmlBuf.data());
+        md->setData(MIME_GOOGLE_EARTH_KML, kmlBuf.data());
     }
 
     ExportGPX gpxexp(theDocument);
@@ -1289,7 +1268,7 @@ void MainWindow::on_editCutAction_triggered()
     gpxBuf.open(QIODevice::WriteOnly);
     if (gpxexp.setDevice(&gpxBuf)) {
         gpxexp.export_(p->theProperties->selection());
-        md->setData("application/gpx+xml", gpxBuf.data());
+        md->setData(MIME_GPX, gpxBuf.data());
     }
 
     //Deletion
@@ -1322,7 +1301,7 @@ void MainWindow::on_editCutAction_triggered()
     theList->toXML(stream);
     stream.writeEndElement();
     stream.writeEndDocument();
-    md->setData("application/x-merkaartor-undo+xml", xml.toUtf8());
+    md->setData(MIME_MERKAARTOR_UNDO_XML, xml.toUtf8());
 //    qDebug() << doc.toString(2);
 
     clipboard->setMimeData(md);
@@ -1343,14 +1322,14 @@ void MainWindow::on_editCopyAction_triggered()
     QList<Feature*> exportedFeatures = document()->exportCoreOSM(p->theProperties->selection(), true);
     theDocument->exportOSM(this, &osmBuf, exportedFeatures);
     md->setText(QString(osmBuf.data()));
-    md->setData("application/x-openstreetmap+xml", osmBuf.data());
+    md->setData(MIME_OPENSTREETMAP_XML, osmBuf.data());
 
     ImportExportKML kmlexp(theDocument);
     QBuffer kmlBuf;
     kmlBuf.open(QIODevice::WriteOnly);
     if (kmlexp.setDevice(&kmlBuf)) {
         kmlexp.export_(p->theProperties->selection());
-        md->setData("application/vnd.google-earth.kml+xml", kmlBuf.data());
+        md->setData(MIME_GOOGLE_EARTH_KML, kmlBuf.data());
     }
 
     ExportGPX gpxexp(theDocument);
@@ -1358,7 +1337,7 @@ void MainWindow::on_editCopyAction_triggered()
     gpxBuf.open(QIODevice::WriteOnly);
     if (gpxexp.setDevice(&gpxBuf)) {
         gpxexp.export_(p->theProperties->selection());
-        md->setData("application/gpx+xml", gpxBuf.data());
+        md->setData(MIME_GPX, gpxBuf.data());
     }
 
     clipboard->setMimeData(md);
@@ -1374,17 +1353,17 @@ void MainWindow::on_editPasteFeatureAction_triggered()
     Document* doc;
 
     QClipboard *clipboard = QApplication::clipboard();
-    if (clipboard->mimeData()->hasFormat("application/x-merkaartor-undo+xml")) {
-        QDomDocument* theXmlDoc = new QDomDocument();
-        if (!theXmlDoc->setContent(clipboard->mimeData()->data("application/x-merkaartor-undo+xml"))) {
-            delete theXmlDoc;
+    if (clipboard->mimeData()->hasFormat(MIME_MERKAARTOR_UNDO_XML)) {
+        QDomDocument theXmlDoc;
+        if (!theXmlDoc.setContent(clipboard->mimeData()->data(MIME_MERKAARTOR_UNDO_XML))) {
+            // Do nothing.
         } else {
-            QDomElement root = theXmlDoc->firstChildElement("MerkaartorUndo");
+            QDomElement root = theXmlDoc.firstChildElement("MerkaartorUndo");
             if (!root.isNull()) {
                 QString docId = root.attribute("documentid");
                 if (theDocument->id() == docId) {
 
-                    QDomNodeList nl = theXmlDoc->elementsByTagName("RemoveFeatureCommand");
+                    QDomNodeList nl = theXmlDoc.elementsByTagName("RemoveFeatureCommand");
                     for (int i=0; i<nl.size(); ++i) {
                         nl.at(i).toElement().setAttribute("layer", l->id());
                     }
@@ -1409,7 +1388,7 @@ void MainWindow::on_editPasteFeatureAction_triggered()
     }
 
     if (!(doc = Document::getDocumentFromClipboard())) {
-        QMessageBox::critical(this, tr("Clipboard invalid"), tr("Clipboard do not contain valid data."));
+        dieClipboardInvalid();
         return;
     }
 
@@ -1428,6 +1407,11 @@ void MainWindow::on_editPasteFeatureAction_triggered()
     view()->invalidate(true, true, false);
 }
 
+void MainWindow::dieClipboardInvalid()
+{
+    QMessageBox::critical(this, tr("Clipboard invalid"), tr("Clipboard do not contain valid data."));
+}
+
 void MainWindow::on_editPasteOverwriteAction_triggered()
 {
     QList<Feature*> sel = properties()->selection();
@@ -1436,7 +1420,7 @@ void MainWindow::on_editPasteOverwriteAction_triggered()
 
     Document* doc;
     if (!(doc = Document::getDocumentFromClipboard())) {
-        QMessageBox::critical(this, tr("Clipboard invalid"), tr("Clipboard do not contain valid data."));
+        dieClipboardInvalid();
         return;
     }
 
@@ -1470,7 +1454,7 @@ void MainWindow::on_editPasteMergeAction_triggered()
 
     Document* doc;
     if (!(doc = Document::getDocumentFromClipboard())) {
-        QMessageBox::critical(this, tr("Clipboard invalid"), tr("Clipboard do not contain valid data."));
+        dieClipboardInvalid();
         return;
     }
 
@@ -1503,30 +1487,26 @@ void MainWindow::clipboardChanged()
 
     QClipboard *clipboard = QApplication::clipboard();
     //qDebug() << "Clipboard mime: " << clipboard->mimeData()->formats();
-    QDomDocument* theXmlDoc = new QDomDocument();
+    QDomDocument theXmlDoc;
     bool ok = false;
-    if (clipboard->mimeData()->hasFormat("application/x-openstreetmap+xml"))
-        ok = theXmlDoc->setContent(clipboard->mimeData()->data("application/x-openstreetmap+xml"));
+    if (clipboard->mimeData()->hasFormat(MIME_OPENSTREETMAP_XML))
+        ok = theXmlDoc.setContent(clipboard->mimeData()->data(MIME_OPENSTREETMAP_XML));
     else if (clipboard->mimeData()->hasText())
-        ok = theXmlDoc->setContent(clipboard->text());
+        ok = theXmlDoc.setContent(clipboard->text());
 
     if (!ok) {
-        delete theXmlDoc;
         return;
     }
 
-    QDomElement c = theXmlDoc->documentElement();
+    QDomElement c = theXmlDoc.documentElement();
 
     if (c.tagName() != "osm" && c.tagName() != "kml") {
-        delete theXmlDoc;
         return;
     }
 
     ui->editPasteFeatureAction->setEnabled(true);
     ui->editPasteMergeAction->setEnabled(true);
     ui->editPasteOverwriteAction->setEnabled(true);
-
-    delete theXmlDoc;
 }
 
 void MainWindow::on_editRedoAction_triggered()
@@ -1637,157 +1617,174 @@ static bool mayDiscardStyleChanges(QWidget* aWidget)
                                  QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::No;
 }
 
-bool MainWindow::importFiles(Document * mapDocument, const QStringList & fileNames, QStringList * importedFileNames )
-{
-    createProgressDialog();
+void MainWindow::startBusyCursor() {
 #ifndef Q_OS_SYMBIAN
     QApplication::setOverrideCursor(Qt::BusyCursor);
 #endif
+}
 
-    bool foundImport = false;
-
-    QStringListIterator it(fileNames);
-    while (it.hasNext())
-    {
-        const QString & fn = it.next();
-        changeCurrentDirToFile(fn);
-
-        QString baseFileName = fn.section('/', - 1);
-        Layer* newLayer = NULL;
-
-        bool importOK = false;
-        bool importAborted = false;
+void MainWindow::endBusyCursor() {
+#ifndef Q_OS_SYMBIAN
+    QApplication::restoreOverrideCursor();
+#endif
+}
 
-        if (fn.toLower().endsWith(".gpx")) {
-            QList<TrackLayer*> theTracklayers;
-            TrackLayer* newLayer = new TrackLayer( baseFileName + " - " + tr("Waypoints"), baseFileName);
-            mapDocument->add(newLayer);
-            theTracklayers.append(newLayer);
-            importOK = importGPX(this, baseFileName, mapDocument, theTracklayers);
-            if (!importOK) {
-                for (int i=0; i<theTracklayers.size(); i++) {
-                    mapDocument->remove(theTracklayers[i]);
-                    delete theTracklayers[i];
-                }
-            } else {
-                if (!newLayer->size()) {
-                    mapDocument->remove(newLayer);
-                    delete newLayer;
-                }
-                for (int i=1; i<theTracklayers.size(); i++) {
-                    if (theTracklayers[i]->name().isEmpty())
-                        theTracklayers[i]->setName(QString(baseFileName + " - " + tr("Track %1").arg(i)));
-                    if (importOK && M_PREFS->getAutoExtractTracks()) {
-                        theTracklayers[i]->extractLayer();
-                    }
+MainWindow::ImportStatus MainWindow::importFile(Document * mapDocument, const QString& fileName, Layer*& newLayer) {
+    QString baseFileName = fileName.section('/', - 1);
+    if (fileName.toLower().endsWith(".gpx")) {
+        QList<TrackLayer*> theTracklayers;
+        newLayer = new TrackLayer( baseFileName + " - " + tr("Waypoints"), baseFileName);
+        mapDocument->add(newLayer);
+        theTracklayers.append((TrackLayer*) newLayer);
+        bool importOK = importGPX(this, baseFileName, mapDocument, theTracklayers);
+        if (!importOK) {
+            for (int i=0; i<theTracklayers.size(); i++) {
+                mapDocument->remove(theTracklayers[i]);
+                delete theTracklayers[i];
+            }
+        } else {
+            if (!newLayer->size()) {
+                mapDocument->remove(newLayer);
+                delete newLayer;
+            }
+            for (int i=1; i<theTracklayers.size(); i++) {
+                if (theTracklayers[i]->name().isEmpty())
+                    theTracklayers[i]->setName(QString(baseFileName + " - " + tr("Track %1").arg(i)));
+                if (importOK && M_PREFS->getAutoExtractTracks()) {
+                    theTracklayers[i]->extractLayer();
                 }
             }
         }
-        else if (fn.toLower().endsWith(".osm")) {
+	return importOK ? IMPORT_OK : IMPORT_ERROR;
+    }
+    else if (fileName.toLower().endsWith(".osm")) {
+        newLayer = new DrawingLayer( baseFileName );
+        mapDocument->add(newLayer);
+        return importOSM(this, baseFileName, mapDocument, newLayer) ? IMPORT_OK : IMPORT_ERROR;
+    }
+#ifndef FRISIUS_BUILD
+    else if (fileName.toLower().endsWith(".osc")) {
+        if (g_Merk_Frisius) {
             newLayer = new DrawingLayer( baseFileName );
             mapDocument->add(newLayer);
-            importOK = importOSM(this, baseFileName, mapDocument, newLayer);
-        }
-#ifndef FRISIUS_BUILD
-        else if (fn.toLower().endsWith(".osc")) {
-            if (g_Merk_Frisius) {
-                newLayer = new DrawingLayer( baseFileName );
-                mapDocument->add(newLayer);
-            } else {
-                newLayer = mapDocument->getDirtyOrOriginLayer();
-            }
-            importOK = mapDocument->importOSC(fn, (DrawingLayer*)newLayer);
+        } else {
+            newLayer = mapDocument->getDirtyOrOriginLayer();
         }
+        return mapDocument->importOSC(fileName, (DrawingLayer*)newLayer) ? IMPORT_OK : IMPORT_ERROR;
+    }
 #endif
-        else if (fn.toLower().endsWith(".ngt")) {
-            newLayer = new TrackLayer( baseFileName );
-            newLayer->setUploadable(false);
-            mapDocument->add(newLayer);
-            importOK = importNGT(this, baseFileName, mapDocument, newLayer);
-            if (importOK && M_PREFS->getAutoExtractTracks()) {
-                ((TrackLayer *)newLayer)->extractLayer();
-            }
-        }
-        else if (fn.toLower().endsWith(".nmea") || (fn.toLower().endsWith(".nma"))) {
-            newLayer = new TrackLayer( baseFileName );
-            newLayer->setUploadable(false);
-            mapDocument->add(newLayer);
-            importOK = mapDocument->importNMEA(baseFileName, (TrackLayer *)newLayer);
-            if (importOK && M_PREFS->getAutoExtractTracks()) {
-                ((TrackLayer *)newLayer)->extractLayer();
-            }
+    else if (fileName.toLower().endsWith(".ngt")) {
+        newLayer = new TrackLayer( baseFileName );
+        newLayer->setUploadable(false);
+        mapDocument->add(newLayer);
+        bool importOK = importNGT(this, baseFileName, mapDocument, newLayer);
+        if (importOK && M_PREFS->getAutoExtractTracks()) {
+            ((TrackLayer *)newLayer)->extractLayer();
         }
-        else if (fn.toLower().endsWith(".kml")) {
-            if (QMessageBox::warning(this, MainWindow::tr("Big Fat Copyright Warning"),
-                     MainWindow::tr(
-                     "You are trying to import a KML file. Please be aware that:\n"
-                     "\n"
-                     " - You cannot import to OSM a KML file created from Google Earth. While you might\n"
-                     "   think that nodes you created from GE are yours, they are not!\n"
-                     "   They are still a derivative work from GE, and, as such, cannot be used in OSM.\n"
-                     "\n"
-                     " - If you downloaded it from the Internet, chances are that there is a copyright on it.\n"
-                     "   Please be absolutely sure that using those data in OSM is permitted by the author, or\n"
-                     "   that the data is public domain.\n"
-                     "\n"
-                     "If unsure, please seek advice on the \"legal\" or \"talk\" openstreetmap mailing lists.\n"
-                     "\n"
-                     "Are you absolutely sure this KML can legally be imported in OSM?"),
-                     QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes)
-            {
-                newLayer = new DrawingLayer( baseFileName );
-                newLayer->setUploadable(false);
-                mapDocument->add(newLayer);
-                importOK = mapDocument->importKML(baseFileName, (TrackLayer *)newLayer);
-            } else
-                importAborted = true;
+        return importOK ? IMPORT_OK : IMPORT_ERROR;
+    }
+    else if (fileName.toLower().endsWith(".nmea") || (fileName.toLower().endsWith(".nma"))) {
+        newLayer = new TrackLayer( baseFileName );
+        newLayer->setUploadable(false);
+        mapDocument->add(newLayer);
+        bool importOK = mapDocument->importNMEA(baseFileName, (TrackLayer *)newLayer);
+        if (importOK && M_PREFS->getAutoExtractTracks()) {
+            ((TrackLayer *)newLayer)->extractLayer();
         }
-        else if (fn.toLower().endsWith(".csv")) {
-#ifndef Q_OS_SYMBIAN
-            QApplication::restoreOverrideCursor();
-#endif
+        return importOK ? IMPORT_OK : IMPORT_ERROR;
+    }
+    else if (fileName.toLower().endsWith(".kml")) {
+        if (QMessageBox::warning(this, MainWindow::tr("Big Fat Copyright Warning"),
+                 MainWindow::tr(
+                 "You are trying to import a KML file. Please be aware that:\n"
+                 "\n"
+                 " - You cannot import to OSM a KML file created from Google Earth. While you might\n"
+                 "   think that nodes you created from GE are yours, they are not!\n"
+                 "   They are still a derivative work from GE, and, as such, cannot be used in OSM.\n"
+                 "\n"
+                 " - If you downloaded it from the Internet, chances are that there is a copyright on it.\n"
+                 "   Please be absolutely sure that using those data in OSM is permitted by the author, or\n"
+                 "   that the data is public domain.\n"
+                 "\n"
+                 "If unsure, please seek advice on the \"legal\" or \"talk\" openstreetmap mailing lists.\n"
+                 "\n"
+                 "Are you absolutely sure this KML can legally be imported in OSM?"),
+                 QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes)
+        {
             newLayer = new DrawingLayer( baseFileName );
             newLayer->setUploadable(false);
             mapDocument->add(newLayer);
-            importOK = mapDocument->importCSV(baseFileName, (DrawingLayer*)newLayer);
-        }
+            return mapDocument->importKML(baseFileName, (TrackLayer *)newLayer) ? IMPORT_OK : IMPORT_ERROR;
+        } else
+            return IMPORT_ABORTED;
+    }
+    else if (fileName.toLower().endsWith(".csv")) {
+#ifndef Q_OS_SYMBIAN
+        QApplication::restoreOverrideCursor();
+#endif
+        newLayer = new DrawingLayer( baseFileName );
+        newLayer->setUploadable(false);
+        mapDocument->add(newLayer);
+        return mapDocument->importCSV(baseFileName, (DrawingLayer*)newLayer) ? IMPORT_OK : IMPORT_ERROR;
+    }
 #ifdef USE_PROTOBUF
-        else if (fn.toLower().endsWith(".pbf")) {
-            newLayer = new DrawingLayer( baseFileName );
-            mapDocument->add(newLayer);
-            importOK = mapDocument->importPBF(baseFileName, (DrawingLayer*)newLayer);
-        }
+    else if (fileName.toLower().endsWith(".pbf")) {
+        newLayer = new DrawingLayer( baseFileName );
+        mapDocument->add(newLayer);
+        return mapDocument->importPBF(baseFileName, (DrawingLayer*)newLayer) ? IMPORT_OK : IMPORT_ERROR;
+    }
 #endif
-        else { // Fallback to GDAL
-            qDebug() << "Trying GDAL";
-            newLayer = new DrawingLayer( baseFileName );
-            newLayer->setUploadable(false);
-            mapDocument->add(newLayer);
-            importOK = mapDocument->importGDAL(baseFileName, (DrawingLayer*)newLayer);
-        }
+    else { // Fallback to GDAL
+        qDebug() << "Trying GDAL";
+        newLayer = new DrawingLayer( baseFileName );
+        newLayer->setUploadable(false);
+        mapDocument->add(newLayer);
+        return mapDocument->importGDAL(baseFileName, (DrawingLayer*)newLayer) ? IMPORT_OK : IMPORT_ERROR;
+    }
+}
 
-        if (!importOK && newLayer)
-            mapDocument->remove(newLayer);
+bool MainWindow::importFiles(Document * mapDocument, const QStringList & fileNames, QStringList * importedFileNames )
+{
+    createProgressDialog();
+#ifndef Q_OS_SYMBIAN
+    QApplication::setOverrideCursor(Qt::BusyCursor);
+#endif
 
-        if (importOK)
-        {
-            foundImport = true;
+    bool foundImport = false;
 
-            if (importedFileNames)
-                importedFileNames->append(fn);
+    QStringListIterator it(fileNames);
+    while (it.hasNext())
+    {
+        const QString & fn = it.next();
+        changeCurrentDirToFile(fn);  // TODO: Whyyyyy?!
 
-            emit content_changed();
-        }
-        else
-        if (!importAborted)
-        {
-            delete newLayer;
-            QMessageBox::warning(this, tr("No valid file"), tr("%1 could not be opened.").arg(fn));
+        Layer* newLayer = NULL;
+	// TODO: The passing mechanism of newLayer is evil black magic.
+	ImportStatus fileImportResult = importFile(mapDocument, fn, newLayer);
+
+	// TODO: Cleaning up after an unsuccessful import should be done
+	// in importFile.
+        if (fileImportResult != IMPORT_OK && newLayer)
+            mapDocument->remove(newLayer);
+
+	switch (fileImportResult) {
+	    case IMPORT_OK:
+                foundImport = true;
+
+                if (importedFileNames)
+                    importedFileNames->append(fn);
+
+                emit content_changed();
+		break;
+	    case IMPORT_ERROR:
+                delete newLayer;
+                QMessageBox::warning(this, tr("No valid file"), tr("%1 could not be opened.").arg(fn));
+	    case IMPORT_ABORTED:
+		// noop
+		break;
         }
     }
-#ifndef Q_OS_SYMBIAN
-    QApplication::restoreOverrideCursor();
-#endif
+    endBusyCursor();
     deleteProgressDialog();
 
     return foundImport;
@@ -1795,7 +1792,6 @@ bool MainWindow::importFiles(Document * mapDocument, const QStringList & fileNam
 
 void MainWindow::loadFiles(const QStringList & fileList)
 {
-
     QStringList fileNames(fileList);
 
 #ifdef GEOIMAGE
@@ -1890,15 +1886,57 @@ void MainWindow::loadFiles(const QStringList & fileList)
     invalidateView(false);
 }
 
-void MainWindow::loadUrl(const QUrl& u)
+void MainWindow::loadUrl(const QUrl& theUrl)
 {
     activateWindow();
 
-    if (u.path() == "/load_and_zoom") {
-        qreal t = u.queryItemValue("top").toDouble();
-        qreal b = u.queryItemValue("bottom").toDouble();
-        qreal r = u.queryItemValue("right").toDouble();
-        qreal l = u.queryItemValue("left").toDouble();
+#ifdef QT5
+    QUrlQuery theQuery(theUrl);
+#define theQuery theQuery
+#else
+#define theQuery theUrl
+#endif
+    if (theUrl.path() == "/load_object") {
+        QString obj = theQuery.queryItemValue("objects");
+        IFeature::FId mId;
+        if (obj.startsWith("n")) {
+            obj.remove("n");
+            mId.type = IFeature::Point;
+            mId.numId = obj.toLongLong();
+        } else if (obj.startsWith("w")) {
+            obj.remove("w");
+            mId.type = IFeature::LineString;
+            mId.numId = obj.toLongLong();
+        } else if (obj.startsWith("r")) {
+            obj.remove("r");
+            mId.type = IFeature::LineString;
+            mId.numId = obj.toLongLong();
+        } else {
+            QMessageBox::critical(this, tr("Incoming Remote Control Request"),
+                tr("Wanted to load object '%1', but don't know how to do that. Sorry.").arg(theUrl.toString()));
+            return;
+        }
+        Feature* F = theDocument->getFeature(mId);
+        if (!F) {
+            /* The feature is missing, download it first. */
+            createProgressDialog();
+            downloadFeature(this, mId, theDocument, NULL);
+            deleteProgressDialog();
+            F = theDocument->getFeature(mId);
+        }
+        /* The feature is on our map, just select it. */
+        if (theView) {
+            theView->setViewport(F->boundingBox(), theView->rect());
+            on_fileDownloadMoreAction_triggered();
+        }
+        properties()->setSelection(0);
+        properties()->addSelection(F);
+        emit content_changed();
+    } else if (theUrl.path() == "/load_and_zoom") {
+        qreal t = theQuery.queryItemValue("top").toDouble();
+        qreal b = theQuery.queryItemValue("bottom").toDouble();
+        qreal r = theQuery.queryItemValue("right").toDouble();
+        qreal l = theQuery.queryItemValue("left").toDouble();
 
         if (theView) {
             CoordBox vp(Coord(l,b), Coord(r,t));
@@ -1909,7 +1947,7 @@ void MainWindow::loadUrl(const QUrl& u)
 
         Feature* F;
         IFeature::FId mId;
-        QString sel = u.queryItemValue("select");
+        QString sel = theQuery.queryItemValue("select");
         if (!sel.isNull()) {
             QStringList sl = sel.split(",");
             foreach (QString f, sl) {
@@ -1932,8 +1970,9 @@ void MainWindow::loadUrl(const QUrl& u)
             }
         }
     } else {
-        QMessageBox::critical(this, tr("Incoming Remote control request"), tr("Unknow action url: %1").arg(u.toString()));
+        QMessageBox::critical(this, tr("Incoming Remote control request"), tr("Unknow action url: %1").arg(theUrl.toString()));
     }
+#undef theQuery
 }
 
 void MainWindow::on_fileOpenAction_triggered()
@@ -1979,6 +2018,10 @@ void MainWindow::on_fileUploadAction_triggered()
     invalidateView();
 }
 
+void MainWindow::warnMapDownloadFailed() {
+    QMessageBox::warning(this, tr("Error downloading"), tr("The map could not be downloaded"));
+}
+
 void MainWindow::on_fileDownloadAction_triggered()
 {
     createProgressDialog();
@@ -1986,7 +2029,7 @@ void MainWindow::on_fileDownloadAction_triggered()
     if (downloadOSM(this, theView->viewport(), theDocument)) {
         on_editPropertiesAction_triggered();
     } else
-        QMessageBox::warning(this, tr("Error downloading"), tr("The map could not be downloaded"));
+        warnMapDownloadFailed();
 
     deleteProgressDialog();
 
@@ -2000,7 +2043,7 @@ void MainWindow::on_fileDownloadMoreAction_triggered()
     createProgressDialog();
 
     if (!downloadMoreOSM(this, theView->viewport(), theDocument)) {
-        QMessageBox::warning(this, tr("Error downloading"), tr("The map could not be downloaded"));
+        warnMapDownloadFailed();
     }
 
     deleteProgressDialog();
@@ -2100,15 +2143,8 @@ void MainWindow::on_helpAboutAction_triggered()
     About.setupUi(&dlg);
     dlg.setWindowFlags(dlg.windowFlags() & ~Qt::WindowContextHelpButtonHint);
     dlg.setWindowFlags(dlg.windowFlags() | Qt::MSWindowsFixedSizeDialogHint);
-    About.Version->setText(About.Version->text().arg(STRINGIFY(VERSION)).arg(STRINGIFY(REVISION)).arg(STRINGIFY(SVNREV)));
+    About.Version->setText(About.Version->text().arg(STRINGIFY(REVISION)));
     About.QTVersion->setText(About.QTVersion->text().arg(qVersion()).arg(QT_VERSION_STR));
-#if QT_VERSION < 0x040700 || defined(FORCE_46)
-    int boostMajVer = BOOST_VERSION / 100000;
-    int boostMinVer = BOOST_VERSION / 100 % 1000;
-    About.BoostVersion->setText(About.BoostVersion->text().arg(QString::number(boostMajVer)+"."+QString::number(boostMinVer)));
-#else
-    About.BoostVersion->setVisible(false);
-#endif
     QString projVer = QString(STRINGIFY(PJ_VERSION));
     About.Proj4Version->setText(About.Proj4Version->text().arg(QString("%1.%2.%3").arg(projVer.left(1)).arg(projVer.mid(1, 1)).arg(projVer.right(1))));
     About.GdalVersion->setText(About.GdalVersion->text().arg(GDAL_RELEASE_NAME));
@@ -2151,7 +2187,7 @@ void MainWindow::on_viewZoomWindowAction_triggered()
 void MainWindow::on_viewLockZoomAction_triggered()
 {
     M_PREFS->setZoomBoris(!M_PREFS->getZoomBoris());
-    if (M_PREFS->getZoomBoris()) p->renderOptions.options |= RendererOptions::LockZoom; else p->renderOptions.options &= ~RendererOptions::LockZoom;
+    SetOptionValue(p->renderOptions, RendererOptions::LockZoom, M_PREFS->getZoomBoris());
     ui->viewLockZoomAction->setChecked(M_PREFS->getZoomBoris());
     ImageMapLayer* l = NULL;
     for (LayerIterator<ImageMapLayer*> ImgIt(theDocument); !ImgIt.isEnd(); ++ImgIt) {
@@ -2170,7 +2206,7 @@ void MainWindow::on_viewLockZoomAction_triggered()
 void MainWindow::on_viewDownloadedAction_triggered()
 {
     M_PREFS->setDownloadedVisible(!M_PREFS->getDownloadedVisible());
-    if (M_PREFS->getDownloadedVisible()) p->renderOptions.options |= RendererOptions::DownloadedVisible; else p->renderOptions.options &= ~RendererOptions::DownloadedVisible;
+    SetOptionValue(p->renderOptions, RendererOptions::DownloadedVisible, M_PREFS->getDownloadedVisible());
     ui->viewDownloadedAction->setChecked(M_PREFS->getDownloadedVisible());
     invalidateView();
 }
@@ -2178,7 +2214,7 @@ void MainWindow::on_viewDownloadedAction_triggered()
 void MainWindow::on_viewDirtyAction_triggered()
 {
     M_PREFS->setDirtyVisible(!M_PREFS->getDirtyVisible());
-    if (M_PREFS->getDirtyVisible()) p->renderOptions.options |= RendererOptions::DirtyVisible; else p->renderOptions.options &= ~RendererOptions::DirtyVisible;
+    SetOptionValue(p->renderOptions, RendererOptions::DirtyVisible, M_PREFS->getDirtyVisible());
     ui->viewDirtyAction->setChecked(M_PREFS->getDirtyVisible());
     invalidateView();
 }
@@ -2186,7 +2222,7 @@ void MainWindow::on_viewDirtyAction_triggered()
 void MainWindow::on_viewScaleAction_triggered()
 {
     M_PREFS->setScaleVisible(!M_PREFS->getScaleVisible());
-    if (M_PREFS->getScaleVisible()) p->renderOptions.options |= RendererOptions::ScaleVisible; else p->renderOptions.options &= ~RendererOptions::ScaleVisible;
+    SetOptionValue(p->renderOptions, RendererOptions::ScaleVisible, M_PREFS->getScaleVisible());
     ui->viewScaleAction->setChecked(M_PREFS->getScaleVisible());
     invalidateView();
 }
@@ -2194,7 +2230,7 @@ void MainWindow::on_viewScaleAction_triggered()
 void MainWindow::on_viewPhotosAction_triggered()
 {
     M_PREFS->setPhotosVisible(!M_PREFS->getPhotosVisible());
-    if (M_PREFS->getPhotosVisible()) p->renderOptions.options |= RendererOptions::PhotosVisible; else p->renderOptions.options &= ~RendererOptions::PhotosVisible;
+    SetOptionValue(p->renderOptions, RendererOptions::PhotosVisible, M_PREFS->getPhotosVisible());
     ui->viewPhotosAction->setChecked(M_PREFS->getPhotosVisible());
     invalidateView();
 }
@@ -2202,7 +2238,7 @@ void MainWindow::on_viewPhotosAction_triggered()
 void MainWindow::on_viewShowLatLonGridAction_triggered()
 {
     M_PREFS->setLatLonGridVisible(!M_PREFS->getLatLonGridVisible());
-    if (M_PREFS->getLatLonGridVisible()) p->renderOptions.options |= RendererOptions::LatLonGridVisible; else p->renderOptions.options &= ~RendererOptions::LatLonGridVisible;
+    SetOptionValue(p->renderOptions, RendererOptions::LatLonGridVisible, M_PREFS->getLatLonGridVisible());
     ui->viewShowLatLonGridAction->setChecked(M_PREFS->getLatLonGridVisible());
     invalidateView();
 }
@@ -2210,7 +2246,7 @@ void MainWindow::on_viewShowLatLonGridAction_triggered()
 void MainWindow::on_viewStyleBackgroundAction_triggered()
 {
     M_PREFS->setBackgroundVisible(!M_PREFS->getBackgroundVisible());
-    if (M_PREFS->getBackgroundVisible()) p->renderOptions.options |= RendererOptions::BackgroundVisible; else p->renderOptions.options &= ~RendererOptions::BackgroundVisible;
+    SetOptionValue(p->renderOptions, RendererOptions::BackgroundVisible, M_PREFS->getBackgroundVisible());
     ui->viewStyleBackgroundAction->setChecked(M_PREFS->getBackgroundVisible());
     invalidateView();
 }
@@ -2218,7 +2254,7 @@ void MainWindow::on_viewStyleBackgroundAction_triggered()
 void MainWindow::on_viewStyleForegroundAction_triggered()
 {
     M_PREFS->setForegroundVisible(!M_PREFS->getForegroundVisible());
-    if (M_PREFS->getForegroundVisible()) p->renderOptions.options |= RendererOptions::ForegroundVisible; else p->renderOptions.options &= ~RendererOptions::ForegroundVisible;
+    SetOptionValue(p->renderOptions, RendererOptions::ForegroundVisible, M_PREFS->getForegroundVisible());
     ui->viewStyleForegroundAction->setChecked(M_PREFS->getForegroundVisible());
     invalidateView();
 }
@@ -2226,7 +2262,7 @@ void MainWindow::on_viewStyleForegroundAction_triggered()
 void MainWindow::on_viewStyleTouchupAction_triggered()
 {
     M_PREFS->setTouchupVisible(!M_PREFS->getTouchupVisible());
-    if (M_PREFS->getTouchupVisible()) p->renderOptions.options |= RendererOptions::TouchupVisible; else p->renderOptions.options &= ~RendererOptions::TouchupVisible;
+    SetOptionValue(p->renderOptions, RendererOptions::TouchupVisible, M_PREFS->getTouchupVisible());
     ui->viewStyleTouchupAction->setChecked(M_PREFS->getTouchupVisible());
     invalidateView();
 }
@@ -2234,7 +2270,7 @@ void MainWindow::on_viewStyleTouchupAction_triggered()
 void MainWindow::on_viewNamesAction_triggered()
 {
     M_PREFS->setNamesVisible(!M_PREFS->getNamesVisible());
-    if (M_PREFS->getNamesVisible()) p->renderOptions.options |= RendererOptions::NamesVisible; else p->renderOptions.options &= ~RendererOptions::NamesVisible;
+    SetOptionValue(p->renderOptions, RendererOptions::NamesVisible, M_PREFS->getNamesVisible());
     ui->viewNamesAction->setChecked(M_PREFS->getNamesVisible());
     invalidateView();
 }
@@ -2242,7 +2278,7 @@ void MainWindow::on_viewNamesAction_triggered()
 void MainWindow::on_viewVirtualNodesAction_triggered()
 {
     M_PREFS->setVirtualNodesVisible(!M_PREFS->getVirtualNodesVisible());
-    if (M_PREFS->getVirtualNodesVisible()) p->renderOptions.options |= RendererOptions::VirtualNodesVisible; else p->renderOptions.options &= ~RendererOptions::VirtualNodesVisible;
+    SetOptionValue(p->renderOptions, RendererOptions::VirtualNodesVisible, M_PREFS->getVirtualNodesVisible());
     ui->viewVirtualNodesAction->setChecked(M_PREFS->getVirtualNodesVisible());
     invalidateView();
 }
@@ -2250,7 +2286,7 @@ void MainWindow::on_viewVirtualNodesAction_triggered()
 void MainWindow::on_viewTrackPointsAction_triggered()
 {
     M_PREFS->setTrackPointsVisible(!M_PREFS->getTrackPointsVisible());
-    if (M_PREFS->getTrackPointsVisible()) p->renderOptions.options |= RendererOptions::NodesVisible; else p->renderOptions.options &= ~RendererOptions::NodesVisible;
+    SetOptionValue(p->renderOptions, RendererOptions::NodesVisible, M_PREFS->getTrackPointsVisible());
     ui->viewTrackPointsAction->setChecked(M_PREFS->getTrackPointsVisible());
     invalidateView();
 }
@@ -2258,7 +2294,7 @@ void MainWindow::on_viewTrackPointsAction_triggered()
 void MainWindow::on_viewTrackSegmentsAction_triggered()
 {
     M_PREFS->setTrackSegmentsVisible(!M_PREFS->getTrackSegmentsVisible());
-    if (M_PREFS->getTrackSegmentsVisible()) p->renderOptions.options |= RendererOptions::TrackSegmentVisible; else p->renderOptions.options &= ~RendererOptions::TrackSegmentVisible;
+    SetOptionValue(p->renderOptions, RendererOptions::TrackSegmentVisible, M_PREFS->getTrackSegmentsVisible());
     ui->viewTrackSegmentsAction->setChecked(M_PREFS->getTrackSegmentsVisible());
     invalidateView();
 }
@@ -2266,7 +2302,7 @@ void MainWindow::on_viewTrackSegmentsAction_triggered()
 void MainWindow::on_viewRelationsAction_triggered()
 {
     M_PREFS->setRelationsVisible(!M_PREFS->getRelationsVisible());
-    if (M_PREFS->getRelationsVisible()) p->renderOptions.options |= RendererOptions::RelationsVisible; else p->renderOptions.options &= ~RendererOptions::RelationsVisible;
+    SetOptionValue(p->renderOptions, RendererOptions::RelationsVisible, M_PREFS->getRelationsVisible());
     ui->viewRelationsAction->setChecked(M_PREFS->getRelationsVisible());
     invalidateView();
 }
@@ -2348,7 +2384,7 @@ void MainWindow::on_fileNewAction_triggered()
                 this, SLOT(onLoadingfinished(ImageMapLayer*)), Qt::QueuedConnection);
         theDirty->updateList();
 
-        fileName = "";
+        currentProjectFile = "";
         setWindowTitle(QString("%1 - %2").arg(theDocument->title()).arg(p->title));
 
         updateProjectionMenu();
@@ -2376,10 +2412,23 @@ void MainWindow::on_createRoundaboutAction_triggered()
     theInfo->setHtml(theView->interaction()->toHtml());
 }
 
+namespace {
+
+// TODO: Move Qt4/Qt5 wrappers to a separate file.
+int getInteger(QWidget* parent, const QString& title, const QString& label, int value = 0, int minimum = INT_MIN, int maximum = INT_MAX, int step = 1, bool* ok = NULL) {
+#ifdef QT5
+    return QInputDialog::getInt(parent, title, label, value, minimum, maximum, step, ok);
+#else
+    return QInputDialog::getInteger(parent, title, label, value, minimum, maximum, step, ok);
+#endif
+}
+
+}
+
 void MainWindow::on_createPolygonAction_triggered()
 {
     QList< QPair <QString, QString> > tags;
-    int Sides = QInputDialog::getInteger(this, MainWindow::tr("Create Polygon"), MainWindow::tr("Specify the number of sides"), M_PREFS->getPolygonSides(), 3);
+    int Sides = getInteger(this, tr("Create Polygon"), tr("Specify the number of sides"), M_PREFS->getPolygonSides(), 3);
     M_PREFS->setPolygonSides(Sides);
     launchInteraction(new CreatePolygonInteraction(this, Sides, tags));
     theInfo->setHtml(theView->interaction()->toHtml());
@@ -2425,6 +2474,12 @@ void MainWindow::on_createNodeAction_triggered()
     theInfo->setHtml(theView->interaction()->toHtml());
 }
 
+void MainWindow::on_markBridgeAction_triggered()
+{
+    launchInteraction(new BuildBridgeInteraction(this));
+    theInfo->setHtml(theView->interaction()->toHtml());
+}
+
 void MainWindow::on_roadJoinAction_triggered()
 {
     CommandList* theList = new CommandList(MainWindow::tr("Join Roads"), NULL);
@@ -2560,7 +2615,13 @@ void MainWindow::on_featureOsbClose_triggered()
     QUrl osbUrl;
     osbUrl.setUrl(M_PREFS->getOpenStreetBugsUrl());
     osbUrl.setPath(osbUrl.path() + "closePOIexec");
+#ifdef QT5
+    QUrlQuery theQuery(osbUrl);
+    theQuery.addQueryItem("id", Feature::stripToOSMId(bugNd->id()));
+    osbUrl.setQuery(theQuery);
+#else
     osbUrl.addQueryItem("id", Feature::stripToOSMId(bugNd->id()));
+#endif
     qDebug() << osbUrl.toString();
 
     QString rply;
@@ -2623,7 +2684,7 @@ void MainWindow::on_roadSubdivideAction_triggered()
 {
 #if QT_VERSION < 0x040500
     {
-        int divisions = QInputDialog::getInteger(this, MainWindow::tr("Number of segments to divide into"), MainWindow::tr("Specify the number of segments"), 2, 99);
+        int divisions = getInteger(this, tr("Number of segments to divide into"), tr("Specify the number of segments"), 2, 99);
 #else
     QInputDialog *Dlg = new QInputDialog(this);
     Dlg->setInputMode(QInputDialog::IntInput);
@@ -2655,7 +2716,7 @@ void MainWindow::on_roadAxisAlignAction_triggered()
     axes = axisAlignGuessAxes(p->theProperties, view()->projection(), max_axes);
     if (!axes)
         axes = 4;
-    axes = QInputDialog::getInteger(this, tr("Axis Align"),
+    axes = getInteger(this, tr("Axis Align"),
                                     tr("Specify the number of regular axes to align edges on (e.g. 4 for rectangular)"),
                                     axes, 3, max_axes, 1, &ok);
     if (!ok)
@@ -2881,17 +2942,12 @@ void MainWindow::on_editMapStyleAction_triggered()
     GlobalPainter saveGlobalPainter = M_STYLE->getGlobalPainter();
     QList<Painter> savePainters = M_STYLE->getPainters();
     if (dlg->exec() == QDialog::Accepted) {
-        M_STYLE->setGlobalPainter(dlg->theGlobalPainter);
-        M_STYLE->setPainters(dlg->thePainters);
+        applyPainters(&dlg->theGlobalPainter, &dlg->thePainters);
     } else {
-        M_STYLE->setGlobalPainter(saveGlobalPainter);
-        M_STYLE->setPainters(savePainters);
+        /* FIXME: Is it really needed? The painter should be already set up. */
+        applyPainters(&saveGlobalPainter, &savePainters);
     }
 
-    theDocument->setPainters(dlg->thePainters);
-    for (VisibleFeatureIterator i(theDocument); !i.isEnd(); ++i)
-        i.get()->invalidatePainter();
-    invalidateView();
     delete dlg;
 }
 
@@ -2904,11 +2960,7 @@ void MainWindow::applyStyles(QString NewStyle)
         }
         M_PREFS->setDefaultStyle(NewStyle);
         M_STYLE->loadPainters(M_PREFS->getDefaultStyle());
-        document()->setPainters(M_STYLE->getPainters());
-        for (FeatureIterator it(document()); !it.isEnd(); ++it)
-        {
-            it.get()->invalidatePainter();
-        }
+        theDocument->setPainters(M_STYLE->getPainters());
         invalidateView(false);
     }
 }
@@ -2919,8 +2971,6 @@ void MainWindow::applyPainters(GlobalPainter* theGlobalPainter, QList<Painter>*
     M_STYLE->setPainters(*thePainters);
 
     theDocument->setPainters(*thePainters);
-    for (VisibleFeatureIterator i(theDocument); !i.isEnd(); ++i)
-        i.get()->invalidatePainter();
     invalidateView(false);
 }
 
@@ -2958,7 +3008,6 @@ void MainWindow::on_mapStyleSaveAsAction_triggered()
         if (dlg.selectedFiles().size())
             f = dlg.selectedFiles()[0];
     }
-//    f = QFileDialog::getSaveFileName(this, tr("Save map style"), M_PREFS->getCustomStyle(), tr("Merkaartor map style (*.mas)"));
     if (!f.isNull()) {
         M_STYLE->savePainters(f);
     }
@@ -2981,8 +3030,6 @@ void MainWindow::on_mapStyleLoadAction_triggered()
         else {
             M_STYLE->loadPainters(f);
             document()->setPainters(M_STYLE->getPainters());
-            for (VisibleFeatureIterator i(theDocument); !i.isEnd(); ++i)
-                i.get()->invalidatePainter();
             invalidateView();
         }
     }
@@ -3043,77 +3090,39 @@ void MainWindow::on_toolsRebuildHistoryAction_triggered()
     }
 }
 
-void MainWindow::on_toolsShortcutsAction_triggered()
-{
-    QList<QAction*> theActions;
+namespace {
 
-    foreach(QAction* a, ui->menuFile->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menuEdit->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menuView->actions()) {
+void CollectActions(QList<QAction*>& collectedActions, const QWidget* widget) {
+    foreach(QAction* a, widget->actions()) {
         if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menu_Show->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menuShow_directional_Arrows->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menuGps->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menuLayers->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menuCreate->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menu_Feature->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menuOpenStreetBugs->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menu_Node->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menuRoad->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menuRelation->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menuTools->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menuWindow->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
-    }
-    foreach(QAction* a, ui->menuHelp->actions()) {
-        if (!a->isSeparator() && !a->menu())
-            theActions << a;
+            collectedActions << a;
     }
+}
 
-    ActionsDialog dlg(theActions, this);
-    dlg.exec();
+}  // namespace
+
+void MainWindow::on_toolsShortcutsAction_triggered()
+{
+    QList<QAction*> theActions;
+
+    CollectActions(theActions, ui->menuFile);
+    CollectActions(theActions, ui->menuEdit);
+    CollectActions(theActions, ui->menuView);
+    CollectActions(theActions, ui->menu_Show);
+    CollectActions(theActions, ui->menuShow_directional_Arrows);
+    CollectActions(theActions, ui->menuGps);
+    CollectActions(theActions, ui->menuLayers);
+    CollectActions(theActions, ui->menuCreate);
+    CollectActions(theActions, ui->menu_Feature);
+    CollectActions(theActions, ui->menuOpenStreetBugs);
+    CollectActions(theActions, ui->menu_Node);
+    CollectActions(theActions, ui->menuRoad);
+    CollectActions(theActions, ui->menuRelation);
+    CollectActions(theActions, ui->menuTools);
+    CollectActions(theActions, ui->menuWindow);
+    CollectActions(theActions, ui->menuHelp);
+
+    ActionsDialog(theActions, this).exec();
 }
 
 void MainWindow::toolsPreferencesAction_triggered(bool focusData)
@@ -3135,13 +3144,10 @@ void MainWindow::preferencesChanged(PreferencesDialog* prefs)
     if (iQVer < 451) {
         QApplication::setStyle(QStyleFactory::create("skulpture"));
     } else {
-        if (!M_PREFS->getMerkaartorStyle())
-        {
+        if (!M_PREFS->getMerkaartorStyle()) {
             if (QApplication::style()->objectName() != p->defStyle)
                 QApplication::setStyle(p->defStyle);
-        }
-        else
-        {
+        } else {
             QApplication::setStyle(QStyleFactory::create(M_PREFS->getMerkaartorStyleString()));
         }
     }
@@ -3180,53 +3186,42 @@ void MainWindow::preferencesChanged(PreferencesDialog* prefs)
     invalidateView(false);
 }
 
-void MainWindow::on_fileSaveAsAction_triggered()
-{
-    QFileDialog dlg(this, tr("Save Merkaartor document"), QString("%1/%2.mdc").arg(M_PREFS->getworkingdir()).arg(tr("untitled")), tr("Merkaartor documents Files (*.mdc)") + "\n" + tr("All Files (*)"));
+bool MainWindow::getPathToSave(const QString& title, const QString& extension, const QString& allowedTypes, QString* path) {
+    const QString defaultFile = QString("%1/%2.%3").arg(M_PREFS->getworkingdir()).arg(tr("untitled")).arg(extension);
+    QFileDialog dlg(this, title, defaultFile, allowedTypes);
     dlg.setFileMode(QFileDialog::AnyFile);
-    dlg.setDefaultSuffix("mdc");
+    dlg.setDefaultSuffix(extension);
     dlg.setAcceptMode(QFileDialog::AcceptSave);
 
-    if (dlg.exec()) {
-        if (dlg.selectedFiles().size())
-            fileName = dlg.selectedFiles()[0];
+    if (dlg.exec() && dlg.selectedFiles().size() && !dlg.selectedFiles()[0].isEmpty()) {
+	*path = dlg.selectedFiles()[0];
+        return true;
     }
+    return false;
+}
 
-//    fileName = QFileDialog::getSaveFileName(this,
-//        tr("Save Merkaartor document"), QString("%1/%2.mdc").arg(M_PREFS->getworkingdir()).arg(tr("untitled")), tr("Merkaartor documents Files (*.mdc)"));
-
-    if (!fileName.isEmpty()) {
-        saveDocument(fileName);
-        M_PREFS->addRecentOpen(fileName);
+void MainWindow::on_fileSaveAsAction_triggered()
+{
+    QString path;
+    if (getPathToSave(tr("Save Merkaartor document"), "mdc", tr("Merkaartor documents Files (*.mdc)") + "\n" + tr("All Files (*)"), &path)) {
+        saveDocument(path);
+        M_PREFS->addRecentOpen(path);
         updateRecentOpenMenu();
     }
 }
 
 void MainWindow::on_fileSaveAsTemplateAction_triggered()
 {
-    QString tfileName;
-
-    QFileDialog dlg(this, tr("Save Merkaartor template document"), QString("%1/%2.mdc").arg(M_PREFS->getworkingdir()).arg(tr("untitled")), tr("Merkaartor documents Files (*.mdc)") + "\n" + tr("All Files (*)"));
-    dlg.setFileMode(QFileDialog::AnyFile);
-    dlg.setDefaultSuffix("mdc");
-    dlg.setAcceptMode(QFileDialog::AcceptSave);
-
-    if (dlg.exec()) {
-        if (dlg.selectedFiles().size())
-            tfileName = dlg.selectedFiles()[0];
-    }
-//    QString tfileName = QFileDialog::getSaveFileName(this,
-//        tr("Save Merkaartor template document"), QString("%1/%2.mdc").arg(M_PREFS->getworkingdir()).arg(tr("untitled")), tr("Merkaartor documents Files (*.mdc)"));
-
-    if (!tfileName.isEmpty()) {
-        saveTemplateDocument(tfileName);
+    QString path;
+    if (getPathToSave(tr("Save Merkaartor template document"), "mdc", tr("Merkaartor documents Files (*.mdc)") + "\n" + tr("All Files (*)"), &path)) {
+        saveTemplateDocument(path);
     }
 }
 
 void MainWindow::on_fileSaveAction_triggered()
 {
-    if (fileName != "") {
-        saveDocument(fileName);
+    if (currentProjectFile != "") {
+        saveDocument(currentProjectFile);
     } else {
         on_fileSaveAsAction_triggered();
     }
@@ -3234,12 +3229,7 @@ void MainWindow::on_fileSaveAction_triggered()
 
 void MainWindow::doSaveDocument(QFile* file, bool asTemplate)
 {
-
-#ifndef Q_OS_SYMBIAN
-    QApplication::setOverrideCursor(Qt::BusyCursor);
-#endif
-
-
+    startBusyCursor();
     QXmlStreamWriter stream(file);
     stream.setAutoFormatting(true);
     stream.setAutoFormattingIndent(2);
@@ -3258,12 +3248,10 @@ void MainWindow::doSaveDocument(QFile* file, bool asTemplate)
 
     progress.setValue(progress.maximum());
 
-    theDocument->setTitle(QFileInfo(fileName).fileName());
+    theDocument->setTitle(QFileInfo(currentProjectFile).fileName());
     setWindowTitle(QString("%1 - %2").arg(theDocument->title()).arg(p->title));
 
-#ifndef Q_OS_SYMBIAN
-    QApplication::restoreOverrideCursor();
-#endif
+    endBusyCursor();
 }
 
 void MainWindow::saveDocument(const QString& fn)
@@ -3277,6 +3265,7 @@ void MainWindow::saveDocument(const QString& fn)
 
     doSaveDocument(&file);
     file.close();
+    currentProjectFile = fn;
 
     p->latSaveDirtyLevel = theDocument->getDirtySize();
 }
@@ -3371,7 +3360,7 @@ void MainWindow::loadDocument(QString fn)
         connect(theDocument, SIGNAL(loadingFinished(ImageMapLayer*)),
                 this, SLOT(onLoadingfinished(ImageMapLayer*)), Qt::QueuedConnection);
         theDirty->updateList();
-        fileName = fn;
+        currentProjectFile = fn;
         setWindowTitle(QString("%1 - %2").arg(theDocument->title()).arg(p->title));
         p->latSaveDirtyLevel = theDocument->getDirtySize();
     }
@@ -3405,28 +3394,14 @@ void MainWindow::on_exportOSMAction_triggered()
     if (!selectExportedFeatures(theFeatures))
         return;
 
-    QString fileName;
-    QFileDialog dlg(this, tr("Export OSM"), QString("%1/%2.osm").arg(M_PREFS->getworkingdir()).arg(tr("untitled")), tr("OSM Files (*.osm)") + "\n" + tr("All Files (*)"));
-    dlg.setFileMode(QFileDialog::AnyFile);
-    dlg.setDefaultSuffix("osm");
-    dlg.setAcceptMode(QFileDialog::AcceptSave);
-
-    if (dlg.exec()) {
-        if (dlg.selectedFiles().size())
-            fileName = dlg.selectedFiles()[0];
-    }
-//    QString fileName = QFileDialog::getSaveFileName(this,
-//        tr("Export OSM"), M_PREFS->getworkingdir() + "/untitled.osm", tr("OSM Files (*.osm)"));
-
-    if (fileName != "") {
-
-        QFile file(fileName);
+    QString path;
+    if (getPathToSave(tr("Export OSM"), "osm", tr("OSM Files (*.osm)") + "\n" + tr("All Files (*)"), &path)) {
+        QFile file(path);
         if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
             return;
 
         theDocument->exportOSM(this, &file, theFeatures);
         file.close();
-
     }
     deleteProgressDialog();
 }
@@ -3434,32 +3409,14 @@ void MainWindow::on_exportOSMAction_triggered()
 void MainWindow::on_exportOSCAction_triggered()
 {
 #ifndef FRISIUS_BUILD
-    QString fileName;
-    QFileDialog dlg(this, tr("Export osmChange"), QString("%1/%2.osc").arg(M_PREFS->getworkingdir()).arg(tr("untitled")), tr("osmChange Files (*.osc)") + "\n" + tr("All Files (*)"));
-    dlg.setFileMode(QFileDialog::AnyFile);
-    dlg.setDefaultSuffix("osc");
-    dlg.setAcceptMode(QFileDialog::AcceptSave);
-
-    if (dlg.exec()) {
-        if (dlg.selectedFiles().size())
-            fileName = dlg.selectedFiles()[0];
-    }
-//    QString fileName = QFileDialog::getSaveFileName(this,
-//        tr("Export osmChange"), M_PREFS->getworkingdir() + "/untitled.osc", tr("osmChange Files (*.osc)"));
-
-    if (fileName != "") {
-#ifndef Q_OS_SYMBIAN
-        QApplication::setOverrideCursor(Qt::BusyCursor);
-#endif
-
+    QString path;
+    if (getPathToSave(tr("Export osmChange"), "osc", tr("osmChange Files (*.osc)") + "\n" + tr("All Files (*)"), &path)) {
+        startBusyCursor();
         ImportExportOSC osc(document());
-        if (osc.saveFile(fileName)) {
+        if (osc.saveFile(path)) {
             osc.export_();
         }
-
-#ifndef Q_OS_SYMBIAN
-        QApplication::restoreOverrideCursor();
-#endif
+        endBusyCursor();
     }
 #endif
 }
@@ -3473,32 +3430,14 @@ void MainWindow::on_exportGPXAction_triggered()
     if (!selectExportedFeatures(theFeatures))
         return;
 
-    QString fileName;
-    QFileDialog dlg(this, tr("Export GPX"), QString("%1/%2.gpx").arg(M_PREFS->getworkingdir()).arg(tr("untitled")), tr("GPX Files (*.gpx)") + "\n" + tr("All Files (*)"));
-    dlg.setFileMode(QFileDialog::AnyFile);
-    dlg.setDefaultSuffix("gpx");
-    dlg.setAcceptMode(QFileDialog::AcceptSave);
-
-    if (dlg.exec()) {
-        if (dlg.selectedFiles().size())
-            fileName = dlg.selectedFiles()[0];
-    }
-//    QString fileName = QFileDialog::getSaveFileName(this,
-//        tr("Export GPX"), M_PREFS->getworkingdir() + "/untitled.gpx", tr("GPX Files (*.gpx)"));
-
-    if (fileName != "") {
-#ifndef Q_OS_SYMBIAN
-        QApplication::setOverrideCursor(Qt::BusyCursor);
-#endif
-
+    QString path;
+    if (getPathToSave(tr("Export GPX"), "gpx", tr("GPX Files (*.gpx)") + "\n" + tr("All Files (*)"), &path)) {
+        startBusyCursor();
         ExportGPX gpx(document());
-        if (gpx.saveFile(fileName)) {
+        if (gpx.saveFile(path)) {
             gpx.export_(theFeatures);
         }
-
-#ifndef Q_OS_SYMBIAN
-        QApplication::restoreOverrideCursor();
-#endif
+        endBusyCursor();
     }
     deleteProgressDialog();
 }
@@ -3510,16 +3449,10 @@ void MainWindow::on_exportGDALAction_triggered()
     createProgressDialog();
     if (!selectExportedFeatures(theFeatures))
         return;
-#ifndef Q_OS_SYMBIAN
-    QApplication::setOverrideCursor(Qt::BusyCursor);
-#endif
-
+    startBusyCursor();
     ImportExportGdal gdal(document());
     gdal.export_(theFeatures);
-
-#ifndef Q_OS_SYMBIAN
-    QApplication::restoreOverrideCursor();
-#endif
+    endBusyCursor();
 
     deleteProgressDialog();
 }
@@ -3532,32 +3465,14 @@ void MainWindow::on_exportKMLAction_triggered()
     if (!selectExportedFeatures(theFeatures))
         return;
 
-    QString fileName;
-    QFileDialog dlg(this, tr("Export KML"), QString("%1/%2.kml").arg(M_PREFS->getworkingdir()).arg(tr("untitled")), tr("KML Files (*.kml)") + "\n" + tr("All Files (*)"));
-    dlg.setFileMode(QFileDialog::AnyFile);
-    dlg.setDefaultSuffix("kml");
-    dlg.setAcceptMode(QFileDialog::AcceptSave);
-
-    if (dlg.exec()) {
-        if (dlg.selectedFiles().size())
-            fileName = dlg.selectedFiles()[0];
-    }
-//    QString fileName = QFileDialog::getSaveFileName(this,
-//        tr("Export KML"), M_PREFS->getworkingdir() + "/untitled.kml", tr("KML Files (*.kml)"));
-
-    if (fileName != "") {
-#ifndef Q_OS_SYMBIAN
-        QApplication::setOverrideCursor(Qt::BusyCursor);
-#endif
-
+    QString path;
+    if (getPathToSave(tr("Export KML"), "kml", tr("KML Files (*.kml)") + "\n" + tr("All Files (*)"), &path)) {
+        startBusyCursor();
         ImportExportKML kml(document());
-        if (kml.saveFile(fileName)) {
+        if (kml.saveFile(path)) {
             kml.export_(theFeatures);
         }
-
-#ifndef Q_OS_SYMBIAN
-        QApplication::restoreOverrideCursor();
-#endif
+        endBusyCursor();
     }
     deleteProgressDialog();
 }
@@ -3857,7 +3772,7 @@ void MainWindow::updateStyleMenu()
         p->theStyle->addItem(a);
     }
     if (!M_PREFS->getCustomStyle().isEmpty()) {
-        QDir customStyles(M_PREFS->getCustomStyle(), "*.mas");
+        QDir customStyles(M_PREFS->getCustomStyle(), "*.mas *.msz");
         for (int i=0; i < customStyles.entryList().size(); ++i) {
             QAction* a = new QAction(customStyles.entryList().at(i), ui->menuStyles);
             actgrp->addAction(a);
@@ -4274,19 +4189,9 @@ void MainWindow::on_gpsPauseAction_triggered()
 
 void MainWindow::on_toolTemplatesSaveAction_triggered()
 {
-    QString f;
-    QFileDialog dlg(this, tr("Save Tag Templates"), QString("%1/%2.mat").arg(M_PREFS->getworkingdir()).arg(tr("untitled")), tr("Merkaartor tag templates (*.mat)") + "\n" + tr("All Files (*)"));
-    dlg.setFileMode(QFileDialog::AnyFile);
-    dlg.setDefaultSuffix("mat");
-    dlg.setAcceptMode(QFileDialog::AcceptSave);
-
-    if (dlg.exec()) {
-        if (dlg.selectedFiles().size())
-            f = dlg.selectedFiles()[0];
-    }
-//    QString f = QFileDialog::getSaveFileName(this, tr("Save Tag Templates"), "", tr("Merkaartor tag templates (*.mat)"));
-    if (!f.isNull()) {
-        p->theProperties->saveTemplates(f);
+    QString path;
+    if (getPathToSave(tr("Save Tag Templates"), "mat", tr("Merkaartor tag templates (*.mat)") + "\n" + tr("All Files (*)"), &path)) {
+	p->theProperties->saveTemplates(path);
     }
 }
 
@@ -4318,71 +4223,84 @@ void MainWindow::on_toolTemplatesLoadAction_triggered()
     p->theProperties->resetValues();
 }
 
-void MainWindow::updateLanguage()
-{
-    if (qtTranslator) {
-        QCoreApplication::removeTranslator(qtTranslator);
-    }
-    if (merkaartorTranslator) {
-        QCoreApplication::removeTranslator(merkaartorTranslator);
-    }
-    QString DefaultLanguage = getDefaultLanguage();
-    if (DefaultLanguage != "-" && DefaultLanguage != "en")
-    {
+QString MainWindow::translationsPath() {
+    return QCoreApplication::applicationDirPath() + "/translations";
+}
+
 #if defined(Q_OS_MAC)
-        QDir resources = QDir(QCoreApplication::applicationDirPath());
-        resources.cdUp();
-        resources.cd("Resources");
+QString MainWindow::macOsTranslationsPath() {
+    QDir resources = QDir(QCoreApplication::applicationDirPath());
+    resources.cdUp();
+    resources.cd("Resources");
+    return resources.absolutePath();
+}
 #endif
-        qtTranslator = new QTranslator;
-        bool retQt;
-        if (g_Merk_Portable) {
-            retQt = qtTranslator->load("qt_" + DefaultLanguage.left(2), QCoreApplication::applicationDirPath() + "/translations");
-        } else {
+
+bool MainWindow::tryLoadQtTranslator(const QString& languagePrefix)
+{
+    if (g_Merk_Portable) {
+        return qtTranslator->load("qt_" + languagePrefix, translationsPath());
+    } else {
 #ifdef TRANSDIR_SYSTEM
-            if (!QDir::isAbsolutePath(STRINGIFY(TRANSDIR_SYSTEM)))
-                retQt = qtTranslator->load("qt_" + DefaultLanguage.left(2), QCoreApplication::applicationDirPath() + "/" + STRINGIFY(TRANSDIR_SYSTEM));
-            else
-                retQt = qtTranslator->load("qt_" + DefaultLanguage.left(2), STRINGIFY(TRANSDIR_SYSTEM));
+        if (!QDir::isAbsolutePath(STRINGIFY(TRANSDIR_SYSTEM)))
+            return qtTranslator->load("qt_" + languagePrefix, QCoreApplication::applicationDirPath() + "/" + STRINGIFY(TRANSDIR_SYSTEM));
+        else
+            return qtTranslator->load("qt_" + languagePrefix, STRINGIFY(TRANSDIR_SYSTEM));
 #else
 #if defined(Q_OS_MAC)
-            retQt = qtTranslator->load("qt_" + DefaultLanguage.left(2), resources.absolutePath());
+        return qtTranslator->load("qt_" + languagePrefix, macOsTranslationsPath());
 #else
-            retQt = qtTranslator->load("qt_" + DefaultLanguage.left(2), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
+        return qtTranslator->load("qt_" + languagePrefix, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
 #endif // Q_OS_MAC
 #endif // TRANSDIR_SYSTEM
-        }
-
-        if (retQt)
-            QCoreApplication::installTranslator(qtTranslator);
-
-        merkaartorTranslator = new QTranslator;
-        // Do not prevent Merkaartor translations to be loaded, even if there is no Qt translation for the language.
+    }
+}
 
-        bool retM;
-        if (g_Merk_Portable) {
-            retM = merkaartorTranslator->load("merkaartor_" + DefaultLanguage, QCoreApplication::applicationDirPath() + "/translations");
-        } else {
+bool MainWindow::tryLoadMerkaartorTranslator(const QString& language)
+{
+    if (g_Merk_Portable) {
+        return merkaartorTranslator->load("merkaartor_" + language, translationsPath());
+    } else {
+	bool success;
 #if defined(Q_OS_MAC)
-            retM = merkaartorTranslator->load("merkaartor_" + DefaultLanguage, resources.absolutePath());
+        success = merkaartorTranslator->load("merkaartor_" + language, macOsTranslationsPath());
 #else
-            retM = merkaartorTranslator->load("merkaartor_" + DefaultLanguage, QCoreApplication::applicationDirPath());
+        success = merkaartorTranslator->load("merkaartor_" + language, QCoreApplication::applicationDirPath());
 #endif
 #ifdef TRANSDIR_MERKAARTOR
-            if (!retM) {
-                // Next, try the TRANSDIR_MERKAARTOR, if defined
-                if (!QDir::isAbsolutePath(STRINGIFY(TRANSDIR_MERKAARTOR)))
-                    retM = merkaartorTranslator->load("merkaartor_" + DefaultLanguage, QCoreApplication::applicationDirPath() + "/" + STRINGIFY(TRANSDIR_MERKAARTOR));
-                else
-                    retM = merkaartorTranslator->load("merkaartor_" + DefaultLanguage, STRINGIFY(TRANSDIR_MERKAARTOR));
-            }
-#endif
+        if (!success) {
+            // Next, try the TRANSDIR_MERKAARTOR, if defined
+            if (!QDir::isAbsolutePath(STRINGIFY(TRANSDIR_MERKAARTOR)))
+                return merkaartorTranslator->load("merkaartor_" + language, QCoreApplication::applicationDirPath() + "/" + STRINGIFY(TRANSDIR_MERKAARTOR));
+            else
+                return merkaartorTranslator->load("merkaartor_" + language, STRINGIFY(TRANSDIR_MERKAARTOR));
         }
+#endif
+	return success;
+    }
+}
 
-        if (retM)
+void MainWindow::updateLanguage()
+{
+    if (qtTranslator) {
+        QCoreApplication::removeTranslator(qtTranslator);
+    }
+    if (merkaartorTranslator) {
+        QCoreApplication::removeTranslator(merkaartorTranslator);
+    }
+    QString language = getDefaultLanguage();
+    if (language != "-" && language != "en") {
+        qtTranslator = new QTranslator;
+        const QString languagePrefix = language.left(2);
+        if (tryLoadQtTranslator(languagePrefix))
+            QCoreApplication::installTranslator(qtTranslator);
+
+        // Do not prevent Merkaartor translations to be loaded, even if there is no Qt translation for the language.
+        merkaartorTranslator = new QTranslator;
+        if (tryLoadMerkaartorTranslator(language))
             QCoreApplication::installTranslator(merkaartorTranslator);
         else
-            statusBar()->showMessage(tr("Warning! Could not load the Merkaartor translations for the \"%1\" language. Switching to default English.").arg(DefaultLanguage), 15000);
+            statusBar()->showMessage(tr("Warning! Could not load the Merkaartor translations for the \"%1\" language. Switching to default English.").arg(language), 15000);
     }
     ui->retranslateUi(this);
 }
@@ -4439,35 +4357,31 @@ bool MainWindow::hasUnsavedChanges()
 void MainWindow::syncOSM(const QString& aWeb, const QString& aUser, const QString& aPwd)
 {
 #ifndef FRISIUS_BUILD
-    if (checkForConflicts(theDocument))
-    {
+    if (checkForConflicts(theDocument)) {
         QMessageBox::warning(this,tr("Unresolved conflicts"), tr("Please resolve existing conflicts first"));
         return;
     }
 
-    bool ok;
     DirtyListBuild Future;
     theDocument->history().buildDirtyList(Future);
     DirtyListDescriber Describer(theDocument,Future);
-    if (Describer.showChanges(this) && Describer.tasks())
-    {
+    if (Describer.showChanges(this) && Describer.tasks()) {
         Future.resetUpdates();
         DirtyListExecutorOSC Exec(theDocument,Future,aWeb,aUser,aPwd,Describer.tasks());
-        ok = Exec.executeChanges(this);
-        if (ok) {
+        if (Exec.executeChanges(this)) {
             if (M_PREFS->getAutoHistoryCleanup() && !theDocument->getDirtyOrOriginLayer()->getDirtySize())
                 theDocument->history().cleanup();
 
             p->latSaveDirtyLevel = theDocument->getDirtySize();
 
-            if (!fileName.isEmpty()) {
+            if (!currentProjectFile.isEmpty()) {
                 if (M_PREFS->getAutoSaveDoc()) {
-                    saveDocument(fileName);
+                    saveDocument(currentProjectFile);
                 } else {
                     if (QMessageBox::warning(this,tr("Unsaved changes"),
                                              tr("It is strongly recommended to save the changes to your document after an upload.\nDo you want to do this now?"),
                                              QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) {
-                        saveDocument(fileName);
+                        saveDocument(currentProjectFile);
 
                     }
                 }
diff --git a/src/MainWindow.h b/src/MainWindow.h
index b11e269..c7200c4 100644
--- a/src/MainWindow.h
+++ b/src/MainWindow.h
@@ -4,7 +4,7 @@
 #include "IMerkMainWindow.h"
 #include "IProgressWindow.h"
 
-#include <QtGui/QMainWindow>
+#include <QMainWindow>
 #include <QtXml>
 #include <QProgressBar>
 #include <QLabel>
@@ -59,6 +59,7 @@ public slots:
     virtual void on_createRectangleAction_triggered();
     virtual void on_createDoubleWayAction_triggered();
     virtual void on_createNodeAction_triggered();
+    virtual void on_markBridgeAction_triggered();
     virtual void on_createRoadAction_triggered();
     virtual void on_createCurvedRoadAction_triggered();
     virtual void on_createRelationAction_triggered();
@@ -220,7 +221,7 @@ public:
     MainWindowPrivate* p;
     Ui::MainWindow *ui;
 
-    QString fileName;
+    QString currentProjectFile;
     PropertiesDock* properties();
     FeaturesDock* features();
     InfoDock* info();
@@ -274,9 +275,10 @@ public:
     void updateLanguage();
 
     bool hasUnsavedChanges();
-    void syncOSM(const QString &aWeb, const QString &aUser, const QString &aPwd);
 
     void launchInteraction(Interaction *anInteraction);
+    enum ImportStatus { IMPORT_OK, IMPORT_ABORTED, IMPORT_ERROR };
+    bool getPathToSave(const QString& title, const QString& extension, const QString& allowedTypes, QString* path);
 
 protected:
     MapView* theView;
@@ -309,6 +311,7 @@ private slots:
     void on_viewWireframeAction_toggled(bool arg1);
 
 private:
+    ImportStatus importFile(Document* mapDocument, const QString& fileName, Layer*& newLayer);
     void updateMenu();
     void updateRecentOpenMenu();
     void updateRecentImportMenu();
@@ -319,6 +322,23 @@ private:
     Document* doLoadDocument(QFile* file);
     void doSaveDocument(QFile* fn, bool asTemplate=false);
 
+    QString translationsPath();
+#if defined(Q_OS_MAC)
+    QString macOsTranslationsPath();
+#endif
+
+    bool tryLoadQtTranslator(const QString& languagePrefix);
+    bool tryLoadMerkaartorTranslator(const QString& defaultLanguage);
+
+    void dieClipboardInvalid();
+    void warnMapDownloadFailed();
+
+    void updateSegmentMode(QMouseEvent* mouseEvent);
+
+    void startBusyCursor();
+    void endBusyCursor();
+
+    void syncOSM(const QString &aWeb, const QString &aUser, const QString &aPwd);
 protected:
     void closeEvent(QCloseEvent * event);
     virtual QMenu * createPopupMenu ();
diff --git a/src/MainWindow.ui b/src/MainWindow.ui
index 69a3adf..32e97ea 100644
--- a/src/MainWindow.ui
+++ b/src/MainWindow.ui
@@ -24,7 +24,7 @@
      <x>0</x>
      <y>0</y>
      <width>1100</width>
-     <height>20</height>
+     <height>19</height>
     </rect>
    </property>
    <widget class="QMenu" name="menuHelp">
@@ -388,6 +388,8 @@
    <addaction name="areaSplitAction"/>
    <addaction name="areaTerraceAction"/>
    <addaction name="roadAxisAlignAction"/>
+   <addaction name="separator"/>
+   <addaction name="markBridgeAction"/>
   </widget>
   <action name="fileQuitAction">
    <property name="text">
@@ -1834,7 +1836,7 @@
   </action>
   <action name="exportGDALAction">
    <property name="text">
-    <string>GDAL</string>
+    <string>GDAL SQLite/SpatiLite</string>
    </property>
   </action>
   <action name="roadBingExtractAction">
@@ -1873,6 +1875,24 @@
     <string>Download missing children</string>
    </property>
   </action>
+  <action name="markBridgeAction">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="icon">
+    <iconset resource="../Icons/AllIcons.qrc">
+     <normaloff>:/Icons/actions/build_bridge.png</normaloff>:/Icons/actions/build_bridge.png</iconset>
+   </property>
+   <property name="text">
+    <string>&Bridge</string>
+   </property>
+   <property name="toolTip">
+    <string><html><head/><body><p>Transform way to a bridge</p></body></html></string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+B</string>
+   </property>
+  </action>
  </widget>
  <resources>
   <include location="../Icons/AllIcons.qrc"/>
diff --git a/src/NameFinder/httpquery.cpp b/src/NameFinder/httpquery.cpp
index 37fbdd9..e4266bb 100644
--- a/src/NameFinder/httpquery.cpp
+++ b/src/NameFinder/httpquery.cpp
@@ -19,21 +19,20 @@
  ***************************************************************************/
 #include "httpquery.h"
 #include <QtDebug>
+#include "Global.h"
 
 #include "MerkaartorPreferences.h"
 
 namespace NameFinder
 {
 
-    HttpQuery::HttpQuery ( QObject *parent, QIODevice *device ) : QObject ( parent )
+    HttpQuery::HttpQuery ( QObject *parent ) : QObject ( parent )
     {
         myService = M_PREFS->getNominatimUrl();
-        myDevice = device;
     }
-    HttpQuery::HttpQuery ( QObject *parent, QUrl service, QIODevice *device ) : QObject ( parent )
+    HttpQuery::HttpQuery ( QObject *parent, QUrl service ) : QObject ( parent )
     {
         myService = service;
-        myDevice = device;
     }
 
 
@@ -43,48 +42,52 @@ namespace NameFinder
 
     bool HttpQuery::startSearch ( QString question )
     {
-        connect(&connection, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)), this, SLOT(on_responseHeaderReceived(const QHttpResponseHeader &)));
-        connect(&connection,SIGNAL(requestFinished(int, bool)),this,SLOT(on_requestFinished(int, bool)));
-        //if (!myService.isValid() || myService.scheme() != "http" || myService.path().isEmpty())
-        //  return false;
+        connect(&connection,SIGNAL(finished(QNetworkReply*)),this,SLOT(on_requestFinished(QNetworkReply*)));
 
-        myService.addQueryItem ( "q",question );
-        myService.addQueryItem ( "format","xml" );
-        connection.setHost ( myService.host(), myService.port ( 80 ) );
+#ifdef QT5
+        QUrlQuery theQuery(myService);
+#define theQuery theQuery
+#else
+#define theQuery myService
+#endif
+        theQuery.addQueryItem ( "q",question );
+        theQuery.addQueryItem ( "format","xml" );
+#ifdef QT5
+        myService.setQuery(theQuery);
+#endif
+#undef theQuery
 
-        QHttpRequestHeader request( "GET", myService.path() + "?" + myService.encodedQuery() );
-        if (myService.port(80) != 80)
-            request.setValue( "Host", myService.host() + ":" + myService.port ( 80 ) );
-        else
-            request.setValue( "Host", myService.host() );
-        request.setValue( "Connection", "Keep-Alive" );
-        request.setValue("User-Agent", USER_AGENT);
+        QUrl url("http://"+myService.host());
+        url.setPath(myService.path());
+#ifdef QT5
+        url.setQuery(myService.query());
+#else
+        url.setEncodedQuery(myService.encodedQuery());
+#endif
+
+        qDebug() << "HttpQuery: getting " << url;
+        QNetworkRequest req(url);
+
+        req.setRawHeader(QByteArray("User-Agent"), USER_AGENT.toLatin1());
 
         connection.setProxy(M_PREFS->getProxy(myService));
-        reqId = connection.request( request, NULL, myDevice );
-        connection.close();
-        return true;
-    }
 
-    void HttpQuery::on_responseHeaderReceived(const QHttpResponseHeader & hdr)
-    {
-        switch (hdr.statusCode()) {
-            case 200:
-                break;
-            default:
-                qDebug() << hdr.statusCode();
-                qDebug() << hdr.reasonPhrase();
-                break;
-        }
+        myReply = connection.get( req );
+        return true;
     }
 
-    void HttpQuery::on_requestFinished ( int id, bool error )
+    void HttpQuery::on_requestFinished ( QNetworkReply *reply )
     {
-        if ((id == reqId) && !error) {
-            emit done();
-        }
-        else if ((id == reqId) && error) {
-            emit doneWithError(connection.error());
+        if (reply == myReply) {
+            if (!reply->error()) {
+                qDebug() << "HttpQuery: request completed without error.";
+                emit done(reply);
+            } else {
+                qDebug() << "HttpQuery: request returned with error " << reply->error() << ": " << reply->errorString();
+                emit doneWithError(reply->error());
+            }
+        } else {
+            qDebug() << "HttpQuery: reply received to unknown request";
         }
     }
 }
diff --git a/src/NameFinder/httpquery.h b/src/NameFinder/httpquery.h
index 4b5be70..9fec7b4 100644
--- a/src/NameFinder/httpquery.h
+++ b/src/NameFinder/httpquery.h
@@ -22,7 +22,8 @@
 
 #include <QObject>
 #include <QIODevice>
-#include <QtNetwork/QHttp>
+#include <QNetworkAccessManager>
+#include <QNetworkReply>
 #include <QUrl>
 
 namespace NameFinder {
@@ -33,29 +34,25 @@ namespace NameFinder {
 class HttpQuery : public QObject {
         Q_OBJECT
 public:
-        HttpQuery(QObject *parent, QIODevice *device);
-        HttpQuery(QObject *parent, QUrl service, QIODevice *device);
+        HttpQuery(QObject *parent );
+        HttpQuery(QObject *parent, QUrl service );
         ~HttpQuery();
 
         bool   startSearch(QString question);
 
 signals:
-	void done();
-	void doneWithError(QHttp::Error error);
+	void done(QIODevice *reply);
+	void doneWithError(QNetworkReply::NetworkError error);
 
 private:
-        QHttp connection;
+        QNetworkAccessManager connection;
         QUrl url;
-//! What we are looking for...
         QString myQuestion;
         QUrl myService;
-//! Our input device - so we can use QFile, QBuffer, etc...
-        QIODevice *myDevice;
-		int reqId;
+		QNetworkReply *myReply;
 
 private slots:
-		void on_requestFinished ( int id, bool error );
-		void on_responseHeaderReceived(const QHttpResponseHeader & hdr);
+		void on_requestFinished ( QNetworkReply *reply );
 };
 
 }
diff --git a/src/NameFinder/namefindertablemodel.cpp b/src/NameFinder/namefindertablemodel.cpp
index d7ed0eb..2256c4e 100644
--- a/src/NameFinder/namefindertablemodel.cpp
+++ b/src/NameFinder/namefindertablemodel.cpp
@@ -53,8 +53,9 @@ namespace NameFinder
 
     void NameFinderTableModel::setResults ( QList<NameFinderResult> *results )
     {
+        beginResetModel();
         myResults = results;
-        reset();
+        endResetModel();
     }
     QVariant NameFinderTableModel::headerData ( int section, Qt::Orientation orientation, int role ) const
     {
diff --git a/src/NameFinder/namefinderwidget.cpp b/src/NameFinder/namefinderwidget.cpp
index 7538871..a84360d 100644
--- a/src/NameFinder/namefinderwidget.cpp
+++ b/src/NameFinder/namefinderwidget.cpp
@@ -67,16 +67,16 @@ namespace NameFinder
     void NameFinderWidget::search ( QString object, QPointF coord )
     {
         theCenter = coord;
-        query = new HttpQuery ( this, &buffer );
-        connect ( query, SIGNAL ( done() ), this, SLOT ( display() ) );
-        connect ( query, SIGNAL ( doneWithError(QHttp::Error) ), this, SLOT ( displayError(QHttp::Error) ));
+        query = new HttpQuery ( this );
+        connect ( query, SIGNAL ( done( QIODevice* ) ), this, SLOT ( display(QIODevice*) ) );
+        connect ( query, SIGNAL ( doneWithError(QNetworkReply::NetworkError) ), this, SLOT ( displayError(QNetworkReply::NetworkError) ));
 
         query->startSearch ( object );
     }
 
-    void NameFinderWidget::display()
+    void NameFinderWidget::display(QIODevice *reply)
     {
-        XmlStreamReader reader ( &buffer, theCenter );
+        XmlStreamReader reader ( reply, theCenter );
         reader.read();
         model->setResults ( new QList<NameFinderResult> ( reader.getResults() ) );
 
@@ -84,23 +84,22 @@ namespace NameFinder
     }
 
     //! Displays a QMessageBox with the connection error
-    void NameFinderWidget::displayError(QHttp::Error error)
+    void NameFinderWidget::displayError(QNetworkReply::NetworkError error)
     {
         QMessageBox errorBox;
         errorBox.setIcon(QMessageBox::Critical);
         errorBox.setWindowTitle(tr("Error!"));
-        switch (error)
-        {
-        case QHttp::HostNotFound:
-            errorBox.setText(tr("Name finder service host not found."));
-            break;
-        case QHttp::ConnectionRefused:
-            errorBox.setText(tr("Name finder service host refused connection."));
-            break;
-        case QHttp::AuthenticationRequiredError:
+        if (error == QNetworkReply::AuthenticationRequiredError) {
             errorBox.setText(tr("Name finder service requires authentication."));
-        default:
-            errorBox.setText(tr("Unknown error."));
+        } else {
+            QMetaObject meta = QNetworkReply::staticMetaObject;
+            for (int i=0; i < meta.enumeratorCount(); ++i) {
+                QMetaEnum m = meta.enumerator(i);
+                if (m.name() == QLatin1String("NetworkError")) {
+                    errorBox.setText(QLatin1String(m.valueToKey(error)));
+                    break;
+                }
+            }
         }
         errorBox.exec();
         emit done();
diff --git a/src/NameFinder/namefinderwidget.h b/src/NameFinder/namefinderwidget.h
index 593bdc6..e44ac03 100644
--- a/src/NameFinder/namefinderwidget.h
+++ b/src/NameFinder/namefinderwidget.h
@@ -20,7 +20,7 @@
 #ifndef NAMEFINDERWIDGET_H
 #define NAMEFINDERWIDGET_H
 
-#include <QtGui/QWidget>
+#include <QWidget>
 #include "httpquery.h"
 #include <QBuffer>
 #include "namefindertablemodel.h"
@@ -66,7 +66,6 @@ namespace NameFinder {
     private:
         Ui::NameFinderWidgetUi *m_ui;
 
-        QBuffer buffer;
         HttpQuery *query;
         NameFinderTableModel *model;
         QList<NameFinderResult> *results;
@@ -75,8 +74,8 @@ namespace NameFinder {
 
 
     private slots:
-        void display();
-        void displayError(QHttp::Error);
+        void display(QIODevice *reply);
+        void displayError(QNetworkReply::NetworkError);
         void selection_selectionChanged(const QItemSelection & selected, const QItemSelection & deselected);
         void doubleClick();
     };
diff --git a/src/PaintStyle/MasPaintStyle.cpp b/src/PaintStyle/MasPaintStyle.cpp
index 84d1fc7..6730b21 100644
--- a/src/PaintStyle/MasPaintStyle.cpp
+++ b/src/PaintStyle/MasPaintStyle.cpp
@@ -6,6 +6,7 @@
 #include <QtGui/QPainterPath>
 #include <QtXml/QDomDocument>
 #include <QtXml/QDomNode>
+#include <QFileInfo>
 
 
 #include <math.h>
@@ -53,8 +54,15 @@ void MasPaintStyle::savePainters(const QString& filename)
     m_isDirty = false;
 }
 
-void MasPaintStyle::loadPainters(const QString& filename)
+void MasPaintStyle::loadPainters(const QString& fn)
 {
+    QString filename = fn;
+    if (filename.endsWith("msz", Qt::CaseInsensitive)) {
+        QFileInfo fi(filename);
+        QString basename = fi.baseName();
+        filename = fn + "/" + basename + ".mas";
+    }
+
     QDomDocument doc;
     QFile file(filename);
     if (!file.open(QIODevice::ReadOnly))
diff --git a/src/PaintStyle/PaintStyleEditor.cpp b/src/PaintStyle/PaintStyleEditor.cpp
index 496c351..b6cb0ed 100644
--- a/src/PaintStyle/PaintStyleEditor.cpp
+++ b/src/PaintStyle/PaintStyleEditor.cpp
@@ -7,14 +7,14 @@
 
 #include "SelectionDialog.h"
 
-#include <QtGui/QCheckBox>
-#include <QtGui/QColorDialog>
-#include <QtGui/QDoubleSpinBox>
-#include <QtGui/QIcon>
-#include <QtGui/QListWidget>
-#include <QtGui/QPainter>
-#include <QtGui/QPixmap>
-#include <QtGui/QToolButton>
+#include <QCheckBox>
+#include <QColorDialog>
+#include <QDoubleSpinBox>
+#include <QIcon>
+#include <QListWidget>
+#include <QPainter>
+#include <QPixmap>
+#include <QToolButton>
 
 static void makeBoundaryIcon(QToolButton* bt, QColor C)
 {
diff --git a/src/PaintStyle/PaintStyleEditor.h b/src/PaintStyle/PaintStyleEditor.h
index dde5f7a..26fa508 100644
--- a/src/PaintStyle/PaintStyleEditor.h
+++ b/src/PaintStyle/PaintStyleEditor.h
@@ -4,7 +4,7 @@
 #include <ui_PaintStyleEditor.h>
 #include "Painter.h"
 
-#include <QtGui/QDialog>
+#include <QDialog>
 
 #include <QList>
 
diff --git a/src/Preferences/MerkaartorPreferences.cpp b/src/Preferences/MerkaartorPreferences.cpp
index f63aa77..8d9570b 100644
--- a/src/Preferences/MerkaartorPreferences.cpp
+++ b/src/Preferences/MerkaartorPreferences.cpp
@@ -30,6 +30,11 @@
 #include "MasPaintStyle.h"
 
 
+// TODO: Replace 'g_Merk_Ignore_Preferences' by having two implementations
+// of the "preferences API": one that behaves as if
+// g_Merk_Ignore_Preferences == false, and one that ignores writes
+// and always returns default settings.
+
 #define M_PARAM_IMPLEMENT_BOOL(Param, Category, Default) \
     bool mb_##Param = false; \
     void MerkaartorPreferences::set##Param(bool theValue) \
@@ -217,31 +222,37 @@ Tool::Tool()
 
 /* MekaartorPreferences */
 
+namespace {
+
+QSettings* getSettings() {
+    if (!g_Merk_Portable) {
+        return new QSettings();
+    } else {
+        return new QSettings(qApp->applicationDirPath() + "/merkaartor.ini", QSettings::IniFormat);
+    }
+}
+
+}  // namespace
+
 MerkaartorPreferences::MerkaartorPreferences()
-    : Sets(0)
 {
     if (!g_Merk_Ignore_Preferences) {
-        if (!g_Merk_Portable) {
-            Sets = new QSettings();
-
-            QSettings oldSettings("BartVanhauwaert", "Merkaartor");
-            QStringList oldKeys = oldSettings.allKeys();
-            foreach(QString k, oldKeys) {
-                Sets->setValue(k, oldSettings.value(k));
-                Sets->sync();
-                oldSettings.remove(k);
-            }
-            oldSettings.clear();
-        } else {
-            Sets = new QSettings(qApp->applicationDirPath() + "/merkaartor.ini", QSettings::IniFormat);
+        Sets = getSettings();
+
+        QSettings oldSettings("BartVanhauwaert", "Merkaartor");
+        QStringList oldKeys = oldSettings.allKeys();
+        foreach(QString k, oldKeys) {
+            Sets->setValue(k, oldSettings.value(k));
+            Sets->sync();
+            oldSettings.remove(k);
         }
+        oldSettings.clear();
         version = Sets->value("version/version", "0").toString();
     }
 
-    theToolList = new ToolList();
-
-    connect(&httpRequest, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)), this, SLOT(on_responseHeaderReceived(const QHttpResponseHeader &)));
-    connect(&httpRequest,SIGNAL(requestFinished(int, bool)),this,SLOT(on_requestFinished(int, bool)));
+    connect(&httpRequest, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)), this, SLOT(on_authenticationRequired(QNetworkReply*, QAuthenticator*)));
+    connect(&httpRequest, SIGNAL(finished(QNetworkReply*)),this,SLOT(on_requestFinished(QNetworkReply*)));
+    connect(&httpRequest, SIGNAL(sslErrors(QNetworkReply *, const QList<QSslError>&)), this, SLOT(on_sslErrors(QNetworkReply*, const QList<QSslError>&)));
 
 #ifdef USE_LIBPROXY
     // Initialise libproxy
@@ -259,7 +270,6 @@ MerkaartorPreferences::MerkaartorPreferences()
 
 MerkaartorPreferences::~MerkaartorPreferences()
 {
-    delete theToolList;
     delete Sets;
 #ifdef USE_LIBPROXY
     px_proxy_factory_free(proxyFactory);
@@ -272,8 +282,6 @@ void MerkaartorPreferences::save(bool UserPwdChanged)
         return;
 
     Sets->setValue("version/version", QString("%1").arg(STRINGIFY(VERSION)));
-    setWmsServers();
-    setTmsServers();
     setTools();
     setAlphaList();
 
@@ -287,6 +295,9 @@ void MerkaartorPreferences::save(bool UserPwdChanged)
     saveTagListFirstColumnWidth();
     Sets->sync();
 
+    // TODO: There is either some misnaming here or a bug. Why would settings
+    // be pulled from OSM only if the password changed, and pushed to OSM
+    // only otherwise?
     if (UserPwdChanged)
         fromOsmPref();
     else
@@ -316,6 +327,7 @@ void MerkaartorPreferences::toOsmPref()
     QByteArray ba = qCompress(theXmlDoc.toString().toUtf8());
     QByteArray PrefsXML = ba.toBase64();
 
+    // TODO: Why is it required to load from PrefsXML in chunk of 254?
     QStringList slicedPrefs;
     for (int i=0; i<PrefsXML.size(); i+=254) {
         QString s = PrefsXML.mid(i, 254);
@@ -348,38 +360,67 @@ void MerkaartorPreferences::fromOsmPref()
 {
     if (getOfflineMode()) return;
 
+    qDebug() << "Requesting preferences from OSM server.";
+
     if (getOsmUser().isEmpty() || getOsmPassword().isEmpty()) return;
 
-    QUrl osmWeb(getOsmApiUrl());
-    if (osmWeb.port() == -1)
-        osmWeb.setPort(80);
+    QUrl osmWeb(getOsmApiUrl()+"/user/preferences");
 
-    httpRequest.setHost(osmWeb.host(), osmWeb.port());
+    QNetworkRequest req(osmWeb);
+    req.setRawHeader(QByteArray("User-Agent"), USER_AGENT.toLatin1());
 
-    QHttpRequestHeader Header("GET", osmWeb.path() + "/user/preferences/");
-    if (osmWeb.port() == 80)
-        Header.setValue("Host",osmWeb.host());
-    else
-        Header.setValue("Host",osmWeb.host() + ':' + QString::number(osmWeb.port()));
-    Header.setValue("User-Agent", USER_AGENT);
+    httpRequest.setProxy(getProxy(osmWeb));
+    OsmPrefLoadReply = httpRequest.get(req);
+}
 
-    QString auth = QString("%1:%2").arg(getOsmUser()).arg(getOsmPassword());
-    QByteArray ba_auth = auth.toUtf8().toBase64();
-    Header.setValue("Authorization", QString("Basic %1").arg(QString(ba_auth)));
+void MerkaartorPreferences::on_authenticationRequired( QNetworkReply *reply, QAuthenticator *auth ) {
+    static QNetworkReply *lastReply = NULL;
 
-    httpRequest.setProxy(getProxy(osmWeb));
-    OsmPrefLoadId = httpRequest.request(Header, NULL, &OsmPrefContent);
+    /* Only provide authentication the first time we see this reply, to avoid
+     * infinite loop providing the same credentials. */
+    if (lastReply != reply) {
+        lastReply = reply;
+        qDebug() << "Authentication required and provided.";
+        auth->setUser(getOsmUser());
+        auth->setPassword(getOsmPassword());
+    }
 }
 
-void MerkaartorPreferences::on_requestFinished ( int id, bool error )
-{
-    if (id != OsmPrefLoadId || error)
+void MerkaartorPreferences::on_sslErrors(QNetworkReply *reply, const QList<QSslError>& errors) {
+    qDebug() << "We stumbled upon some SSL errors: ";
+    foreach ( QSslError error, errors ) {
+        qDebug() << "1:";
+        qDebug() << error.errorString();
+    }
+}
+
+void MerkaartorPreferences::on_requestFinished ( QNetworkReply *reply )
+{
+    int error = reply->error();
+    if (error != QNetworkReply::NoError) {
+        qDebug() << "Received response with code " << error << "(" << reply->errorString() << ")";
+        switch (error) {
+            case 406:
+                QMessageBox::critical(NULL,QApplication::translate("MerkaartorPreferences","Preferences upload failed"), QApplication::translate("MerkaartorPreferences","Duplicate key"));
+                return;
+            case 413:
+                QMessageBox::critical(NULL,QApplication::translate("MerkaartorPreferences","Preferences upload failed"), QApplication::translate("MerkaartorPreferences","More than 150 preferences"));
+                return;
+            default:
+                QMessageBox::critical(NULL,QApplication::translate("MerkaartorPreferences","Preferences communication failed"), QApplication::translate("MerkaartorPreferences", "Communication error")+":\n"+reply->errorString());
+                return;
+        }
+    } else {
+        qDebug() << "Received response.";
+    }
+
+    if (reply != OsmPrefLoadReply)
         return;
 
-    QMap<QString, QString> OsmPref;
+    qDebug() << "Reading preferences.";
 
     QDomDocument aOsmPrefDoc;
-    aOsmPrefDoc.setContent(OsmPrefContent.buffer(), false);
+    aOsmPrefDoc.setContent(reply, false);
 
     QDomNodeList prefList = aOsmPrefDoc.elementsByTagName("preference");
 
@@ -410,7 +451,7 @@ void MerkaartorPreferences::on_requestFinished ( int id, bool error )
 
     QByteArray PrefsXML;
     for (int i=0; i<sz; i++)
-        PrefsXML.append(slicedPrefs[i].toAscii());
+        PrefsXML.append(slicedPrefs[i].toLatin1());
 
     //qDebug() << "Size: " << PrefsXML.size();
 
@@ -454,81 +495,43 @@ void MerkaartorPreferences::on_requestFinished ( int id, bool error )
 
         c = c.nextSiblingElement();
     }
+
+    reply->deleteLater();
 }
 
 
 void MerkaartorPreferences::putOsmPref(const QString& k, const QString& v)
 {
-    QUrl osmWeb(getOsmApiUrl());
-    if (osmWeb.port() == -1)
-        osmWeb.setPort(80);
+    qDebug() << "Saving OSM preference online: " << k << "=" << v;
+    QUrl osmWeb(getOsmApiUrl()+QString("/user/preferences/%1").arg(k));
 
     QByteArray ba(v.toUtf8());
     QBuffer Buf(&ba);
 
-    httpRequest.setHost(osmWeb.host(), osmWeb.port());
-
-    QHttpRequestHeader Header("PUT", osmWeb.path() + QString("/user/preferences/%1").arg(k));
-    if (osmWeb.port() == 80)
-        Header.setValue("Host",osmWeb.host());
-    else
-        Header.setValue("Host",osmWeb.host() + ':' + QString::number(osmWeb.port()));
-    Header.setValue("User-Agent", USER_AGENT);
-
-    QString auth = QString("%1:%2").arg(getOsmUser()).arg(getOsmPassword());
-    QByteArray ba_auth = auth.toUtf8().toBase64();
-    Header.setValue("Authorization", QString("Basic %1").arg(QString(ba_auth)));
+    QNetworkRequest req(osmWeb);
 
     httpRequest.setProxy(getProxy(osmWeb));
-    OsmPrefSaveId = httpRequest.request(Header,ba);
+    OsmPrefSaveReply = httpRequest.put(req, ba);
 }
 
 void MerkaartorPreferences::deleteOsmPref(const QString& k)
 {
-    QUrl osmWeb(getOsmApiUrl());
-    if (osmWeb.port() == -1)
-        osmWeb.setPort(80);
-
-    httpRequest.setHost(osmWeb.host(), osmWeb.port());
+    qDebug() << "Deleting OSM preference online: " << k;
 
-    QHttpRequestHeader Header("DELETE", osmWeb.path() + QString("/user/preferences/%1").arg(k));
-    if (osmWeb.port() == 80)
-        Header.setValue("Host",osmWeb.host());
-    else
-        Header.setValue("Host",osmWeb.host() + ':' + QString::number(osmWeb.port()));
-    Header.setValue("User-Agent", USER_AGENT);
+    QUrl osmWeb(getOsmApiUrl()+QString("/user/preferences/%1").arg(k));
 
-    QString auth = QString("%1:%2").arg(getOsmUser()).arg(getOsmPassword());
-    QByteArray ba_auth = auth.toUtf8().toBase64();
-    Header.setValue("Authorization", QString("Basic %1").arg(QString(ba_auth)));
+    QNetworkRequest req(osmWeb);
 
     httpRequest.setProxy(getProxy(osmWeb));
-    httpRequest.request(Header);
-}
-
-void MerkaartorPreferences::on_responseHeaderReceived(const QHttpResponseHeader & hdr)
-{
-    switch (hdr.statusCode()) {
-        case 200:
-            break;
-        case 406:
-            QMessageBox::critical(NULL,QApplication::translate("MerkaartorPreferences","Preferences upload failed"), QApplication::translate("MerkaartorPreferences","Duplicate key"));
-            break;
-        case 413:
-            QMessageBox::critical(NULL,QApplication::translate("MerkaartorPreferences","Preferences upload failed"), QApplication::translate("MerkaartorPreferences","More than 150 preferences"));
-            break;
-        default:
-            qDebug() << "MerkaartorPreferences::on_responseHeaderReceived :" << hdr.statusCode() << hdr.reasonPhrase();
-            break;
-    }
+    OsmPrefSaveReply = httpRequest.sendCustomRequest(req,"DELETE");
 }
 
 void MerkaartorPreferences::initialize()
 {
-//	Use06Api = Sets->value("osm/use06api", "true").toBool();
+//  Use06Api = Sets->value("osm/use06api", "true").toBool();
     Use06Api = true;
 
-    // PRoxy upgrade
+    // Proxy upgrade
     if (!g_Merk_Ignore_Preferences && !g_Merk_Reset_Preferences) {
         if (Sets->contains("proxy/Use")) {
             bool b = Sets->value("proxy/Use").toBool();
@@ -582,17 +585,20 @@ void MerkaartorPreferences::initialize()
         tl = Sets->value("Tools/list").toStringList();
         for (int i=0; i<tl.size(); i+=TOOL_FIELD_SIZE) {
             Tool t(tl[i], tl[i+1]);
-            theToolList->insert(tl[i], t);
+            theToolList.insert(tl[i], t);
         }
     }
-    if (!theToolList->contains("Inkscape")) {
+    if (!theToolList.contains("Inkscape")) {
         Tool t("Inkscape", "");
-        theToolList->insert("Inkscape", t);
+        theToolList.insert("Inkscape", t);
     }
 
     QStringList Servers;
     if (!g_Merk_Ignore_Preferences && !g_Merk_Reset_Preferences) {
         Servers = Sets->value("WSM/servers").toStringList();
+	// TODO: Apparently WMS/servers is a list, and every 7 consecutive
+	// items describe a single server. There should be some documentation
+	// about what do the fields mean. Same with TMS/servers.
         if (Servers.size()) {
             for (int i=0; i<Servers.size(); i+=7) {
                 WmsServer S(Servers[i], Servers[i+1], Servers[i+2], Servers[i+3], Servers[i+4], Servers[i+5], Servers[i+6], "", "");
@@ -663,28 +669,10 @@ BookmarkList* MerkaartorPreferences::getBookmarks()
 
 WmsServerList* MerkaartorPreferences::getWmsServers()
 {
-//	return Sets->value("WSM/servers").toStringList();
+//  return Sets->value("WSM/servers").toStringList();
     return theWmsServerList.getServers();
 }
 
-void MerkaartorPreferences::setWmsServers()
-{
-    //QStringList Servers;
-    //WmsServerListIterator i(theWmsServerList);
-    //while (i.hasNext()) {
-    //	i.next();
-    //	WmsServer S = i.value();
-    //	Servers.append(S.WmsName);
-    //	Servers.append(S.WmsAdress);
-    //	Servers.append(S.WmsPath);
-    //	Servers.append(S.WmsLayers);
-    //	Servers.append(S.WmsProjections);
-    //	Servers.append(S.WmsStyles);
-    //	Servers.append(S.WmsImgFormat);
-    //}
-    //Sets->setValue("WSM/servers", Servers);
-}
-
 OsmServerList* MerkaartorPreferences::getOsmServers()
 {
     return &theOsmServers;
@@ -694,27 +682,10 @@ OsmServerList* MerkaartorPreferences::getOsmServers()
 
 TmsServerList* MerkaartorPreferences::getTmsServers()
 {
-//	return Sets->value("WSM/servers").toStringList();
+//  return Sets->value("WSM/servers").toStringList();
     return theTmsServerList.getServers();
 }
 
-void MerkaartorPreferences::setTmsServers()
-{
-    //QStringList Servers;
-    //TmsServerListIterator i(theTmsServerList);
-    //while (i.hasNext()) {
-    //	i.next();
-    //	TmsServer S = i.value();
-    //	Servers.append(S.TmsName);
-    //	Servers.append(S.TmsAdress);
-    //	Servers.append(S.TmsPath);
-    //	Servers.append(QString::number(S.TmsTileSize));
-    //	Servers.append(QString::number(S.TmsMinZoom));
-    //	Servers.append(QString::number(S.TmsMaxZoom));
-    //}
-    //Sets->setValue("TMS/servers", Servers);
-}
-
 /* */
 
 M_PARAM_IMPLEMENT_STRING(SelectedServer, backgroundImage, "");
@@ -892,12 +863,6 @@ ProjectionItem MerkaartorPreferences::getProjection(QString aProj)
 }
 #endif
 
-void MerkaartorPreferences::setCurrentFilter(FilterType theValue)
-{
-    if (!g_Merk_Ignore_Preferences)
-        Sets->setValue("filter/Type", theValue);
-}
-
 QString MerkaartorPreferences::getCurrentFilter()
 {
     if (!g_Merk_Ignore_Preferences && !g_Merk_Reset_Preferences)
@@ -1102,16 +1067,16 @@ ExportType MerkaartorPreferences::getExportType() const
 }
 
 /* Tools */
-ToolList* MerkaartorPreferences::getTools() const
+ToolList* MerkaartorPreferences::getTools()
 {
-    return theToolList;
+    return &theToolList;
 }
 
 void MerkaartorPreferences::setTools()
 {
     if (!g_Merk_Ignore_Preferences) {
         QStringList tl;
-        ToolListIterator i(*theToolList);
+        ToolListIterator i(theToolList);
         while (i.hasNext()) {
             i.next();
             Tool t = i.value();
@@ -1126,7 +1091,7 @@ Tool MerkaartorPreferences::getTool(QString toolName) const
 {
     Tool ret;
 
-    ToolListIterator i(*theToolList);
+    ToolListIterator i(theToolList);
     while (i.hasNext()) {
         i.next();
         if (i.key() == toolName) {
@@ -1377,55 +1342,74 @@ M_PARAM_IMPLEMENT_BOOL(ReadonlyTracksDefault, data, false)
 /* FeaturesDock */
 M_PARAM_IMPLEMENT_BOOL(FeaturesWithin, FeaturesDock, true)
 
+namespace {
+
+// Preference XMLs may be stored in several directories depending
+// on the platform. This method returns the list of directories to load
+// preference XMLs from.
+QStringList getPreferenceDirectories() {
+    QList<QString> directories;
+    directories << HOMEDIR;
+    // TODO: Some files are loaded without this override for Q_OS_MAC. Why?
+#if defined(Q_OS_MAC)
+    {
+        QDir resources = QDir(QCoreApplication::applicationDirPath());
+        resources.cdUp();
+        resources.cd("Resources");
+        directories << resources.absolutePath();
+    }
+#else
+    directories << QString(SHAREDIR);
+#endif
+    directories << ":";
+    return directories;
+}
+
+// Returns the list of all alternative locations of the given preference
+// file.
+QStringList getPreferenceFilePaths(QString fileName) {
+    QList<QString> paths;
+    const QStringList directories = getPreferenceDirectories();
+    for (QStringList::const_iterator i = directories.begin(); i != directories.end(); ++i) {
+	paths << (*i) + "/" + fileName;
+    }
+    return paths;
+}
+
+}  // namespace
+
 /* Projections */
-void MerkaartorPreferences::loadProjection(QString fn)
+void MerkaartorPreferences::loadProjectionsFromFile(QString fileName)
 {
-    if (QDir::isRelativePath(fn))
-        fn = QCoreApplication::applicationDirPath() + "/" + fn;
+    if (QDir::isRelativePath(fileName))
+        fileName = QCoreApplication::applicationDirPath() + "/" + fileName;
 
-    qDebug() << "loadProjection " << fn;
-    QFile file(fn);
+    qDebug() << "loadProjection " << fileName;
+    QFile file(fileName);
     if (!file.open(QIODevice::ReadOnly)) {
-//		QMessageBox::critical(this, tr("Invalid file"), tr("%1 could not be opened.").arg(fn));
+//      QMessageBox::critical(this, tr("Invalid file"), tr("%1 could not be opened.").arg(fileName));
         return;
     }
 
-    QDomDocument* theXmlDoc = new QDomDocument();
-    if (!theXmlDoc->setContent(&file)) {
-//		QMessageBox::critical(this, tr("Invalid file"), tr("%1 is not a valid XML file.").arg(fn));
+    QDomDocument theXmlDoc;
+    if (!theXmlDoc.setContent(&file)) {
+//		QMessageBox::critical(this, tr("Invalid file"), tr("%1 is not a valid XML file.").arg(fileName));
         file.close();
         return;
     }
     file.close();
 
-    QDomElement docElem = theXmlDoc->documentElement();
+    QDomElement docElem = theXmlDoc.documentElement();
     ProjectionsList aProjList = ProjectionsList::fromXml(docElem.firstChildElement());
     theProjectionsList.add(aProjList);
-
-    delete theXmlDoc;
 }
 
 void MerkaartorPreferences::loadProjections()
 {
-    QString fn;
-
-    fn = HOMEDIR + "/Projections.xml";
-    loadProjection(fn);
-
-#if defined(Q_OS_MAC)
-    {
-        QDir resources = QDir(QCoreApplication::applicationDirPath());
-        resources.cdUp();
-        resources.cd("Resources");
-        fn = resources.absolutePath() + "/Projections.xml";
+    const QStringList paths = getPreferenceFilePaths("Projections.xml");
+    for (QStringList::const_iterator i = paths.begin(); i != paths.end(); ++i) {
+	loadProjectionsFromFile(*i);
     }
-#else
-    fn = QString(SHAREDIR) + "/Projections.xml";
-#endif
-    loadProjection(fn);
-
-    fn = ":/Projections.xml";
-    loadProjection(fn);
 }
 
 void MerkaartorPreferences::saveProjections()
@@ -1448,52 +1432,35 @@ void MerkaartorPreferences::saveProjections()
 }
 
 /* Filters */
-void MerkaartorPreferences::loadFilter(QString fn)
+void MerkaartorPreferences::loadFiltersFromFile(QString fileName)
 {
-    if (QDir::isRelativePath(fn))
-        fn = QCoreApplication::applicationDirPath() + "/" + fn;
+    if (QDir::isRelativePath(fileName))
+        fileName = QCoreApplication::applicationDirPath() + "/" + fileName;
 
-    qDebug() << "loadFilter " << fn;
-    QFile file(fn);
+    qDebug() << "loadFiltersFromFile " << fileName;
+    QFile file(fileName);
     if (!file.open(QIODevice::ReadOnly)) {
         return;
     }
 
-    QDomDocument* theXmlDoc = new QDomDocument();
-    if (!theXmlDoc->setContent(&file)) {
+    QDomDocument theXmlDoc;
+    if (!theXmlDoc.setContent(&file)) {
         file.close();
         return;
     }
     file.close();
 
-    QDomElement docElem = theXmlDoc->documentElement();
+    QDomElement docElem = theXmlDoc.documentElement();
     FiltersList aFilterList = FiltersList::fromXml(docElem.firstChildElement());
     theFiltersList.add(aFilterList);
-
-    delete theXmlDoc;
 }
 
 void MerkaartorPreferences::loadFilters()
 {
-    QString fn;
-
-    fn = HOMEDIR + "/Filters.xml";
-    loadFilter(fn);
-
-#if defined(Q_OS_MAC)
-    {
-        QDir resources = QDir(QCoreApplication::applicationDirPath());
-        resources.cdUp();
-        resources.cd("Resources");
-        fn = resources.absolutePath() + "/Filters.xml";
+    const QStringList paths = getPreferenceFilePaths("Filters.xml");
+    for (QStringList::const_iterator i = paths.begin(); i != paths.end(); ++i) {
+        loadFiltersFromFile(*i);
     }
-#else
-    fn = QString(SHAREDIR) + "/Filters.xml";
-#endif
-    loadFilter(fn);
-
-    fn = ":/Filters.xml";
-    loadFilter(fn);
 }
 
 void MerkaartorPreferences::saveFilters()
@@ -1516,44 +1483,37 @@ void MerkaartorPreferences::saveFilters()
 
 
 /* WMS Servers */
-void MerkaartorPreferences::loadWMS(QString fn)
+void MerkaartorPreferences::loadWMSesFromFile(QString fileName)
 {
-    if (QDir::isRelativePath(fn))
-        fn = QCoreApplication::applicationDirPath() + "/" + fn;
+    if (QDir::isRelativePath(fileName))
+        fileName = QCoreApplication::applicationDirPath() + "/" + fileName;
 
-    QFile file(fn);
+    QFile file(fileName);
     if (!file.open(QIODevice::ReadOnly)) {
-//		QMessageBox::critical(this, tr("Invalid file"), tr("%1 could not be opened.").arg(fn));
+//      QMessageBox::critical(this, tr("Invalid file"), tr("%1 could not be opened.").arg(fileName));
         return;
     }
 
-    QDomDocument* theXmlDoc = new QDomDocument();
-    if (!theXmlDoc->setContent(&file)) {
-//		QMessageBox::critical(this, tr("Invalid file"), tr("%1 is not a valid XML file.").arg(fn));
+    QDomDocument theXmlDoc;
+    if (!theXmlDoc.setContent(&file)) {
+//		QMessageBox::critical(this, tr("Invalid file"), tr("%1 is not a valid XML file.").arg(fileName));
         file.close();
         return;
     }
     file.close();
 
-    QDomElement docElem = theXmlDoc->documentElement();
+    QDomElement docElem = theXmlDoc.documentElement();
     WmsServersList aWmsList = WmsServersList::fromXml(docElem.firstChildElement());
     theWmsServerList.add(aWmsList);
-
-    delete theXmlDoc;
 }
 
 void MerkaartorPreferences::loadWMSes()
 {
-    QString fn;
-
-    fn = HOMEDIR + "/WmsServersList.xml";
-    loadWMS(fn);
-
-    fn = QString(SHAREDIR) + "/WmsServersList.xml";
-    loadWMS(fn);
-
-    fn = ":/WmsServersList.xml";
-    loadWMS(fn);
+    loadWMSesFromFile(HOMEDIR + "/WmsServersList.xml");
+    // TODO: Why is the Q_OS_MAC override in getPreferenceDirectories()
+    // missing here? Is that a bug, or an intention?
+    loadWMSesFromFile(QString(SHAREDIR) + "/WmsServersList.xml");
+    loadWMSesFromFile(":/WmsServersList.xml");
 }
 
 void MerkaartorPreferences::saveWMSes()
@@ -1576,44 +1536,37 @@ void MerkaartorPreferences::saveWMSes()
 }
 
 /* TMS Servers */
-void MerkaartorPreferences::loadTMS(QString fn)
+void MerkaartorPreferences::loadTMSesFromFile(QString fileName)
 {
-    if (QDir::isRelativePath(fn))
-        fn = QCoreApplication::applicationDirPath() + "/" + fn;
+    if (QDir::isRelativePath(fileName))
+        fileName = QCoreApplication::applicationDirPath() + "/" + fileName;
 
-    QFile file(fn);
+    QFile file(fileName);
     if (!file.open(QIODevice::ReadOnly)) {
-//		QMessageBox::critical(this, tr("Invalid file"), tr("%1 could not be opened.").arg(fn));
+//      QMessageBox::critical(this, tr("Invalid file"), tr("%1 could not be opened.").arg(fileName));
         return;
     }
 
-    QDomDocument* theXmlDoc = new QDomDocument();
-    if (!theXmlDoc->setContent(&file)) {
-//		QMessageBox::critical(this, tr("Invalid file"), tr("%1 is not a valid XML file.").arg(fn));
+    QDomDocument theXmlDoc;
+    if (!theXmlDoc.setContent(&file)) {
+//		QMessageBox::critical(this, tr("Invalid file"), tr("%1 is not a valid XML file.").arg(fileName));
         file.close();
         return;
     }
     file.close();
 
-    QDomElement docElem = theXmlDoc->documentElement();
+    QDomElement docElem = theXmlDoc.documentElement();
     TmsServersList aTmsList = TmsServersList::fromXml(docElem.firstChildElement());
     theTmsServerList.add(aTmsList);
-
-    delete theXmlDoc;
 }
 
 void MerkaartorPreferences::loadTMSes()
 {
-    QString fn;
-
-    fn = HOMEDIR + "/TmsServersList.xml";
-    loadTMS(fn);
-
-    fn = QString(SHAREDIR) + "/TmsServersList.xml";
-    loadTMS(fn);
-
-    fn = ":/TmsServersList.xml";
-    loadTMS(fn);
+    loadTMSesFromFile(HOMEDIR + "/TmsServersList.xml");
+    // TODO: Why is the Q_OS_MAC override in getPreferenceDirectories()
+    // missing here? Is that a bug, or an intention?
+    loadTMSesFromFile(QString(SHAREDIR) + "/TmsServersList.xml");
+    loadTMSesFromFile(":/TmsServersList.xml");
 }
 
 void MerkaartorPreferences::saveTMSes()
@@ -1636,44 +1589,37 @@ void MerkaartorPreferences::saveTMSes()
 }
 
 /* Bookmarks */
-void MerkaartorPreferences::loadBookmark(QString fn)
+void MerkaartorPreferences::loadBookmarksFromFile(QString fileName)
 {
-    if (QDir::isRelativePath(fn))
-        fn = QCoreApplication::applicationDirPath() + "/" + fn;
+    if (QDir::isRelativePath(fileName))
+        fileName = QCoreApplication::applicationDirPath() + "/" + fileName;
 
-    QFile file(fn);
+    QFile file(fileName);
     if (!file.open(QIODevice::ReadOnly)) {
-//		QMessageBox::critical(this, tr("Invalid file"), tr("%1 could not be opened.").arg(fn));
+//      QMessageBox::critical(this, tr("Invalid file"), tr("%1 could not be opened.").arg(fileName));
         return;
     }
 
-    QDomDocument* theXmlDoc = new QDomDocument();
-    if (!theXmlDoc->setContent(&file)) {
-//		QMessageBox::critical(this, tr("Invalid file"), tr("%1 is not a valid XML file.").arg(fn));
+    QDomDocument theXmlDoc;
+    if (!theXmlDoc.setContent(&file)) {
+//		QMessageBox::critical(this, tr("Invalid file"), tr("%1 is not a valid XML file.").arg(fileName));
         file.close();
         return;
     }
     file.close();
 
-    QDomElement docElem = theXmlDoc->documentElement();
+    QDomElement docElem = theXmlDoc.documentElement();
     BookmarksList aBkList = BookmarksList::fromXml(docElem.firstChildElement());
     theBookmarkList.add(aBkList);
-
-    delete theXmlDoc;
 }
 
 void MerkaartorPreferences::loadBookmarks()
 {
-    QString fn;
-
-    fn = HOMEDIR + "/BookmarksList.xml";
-    loadBookmark(fn);
-
-    fn = QString(SHAREDIR) + "/BookmarksList.xml";
-    loadBookmark(fn);
-
-    fn = ":/BookmarksList.xml";
-    loadBookmark(fn);
+    loadBookmarksFromFile(HOMEDIR + "/BookmarksList.xml");
+    // TODO: Why is the Q_OS_MAC override in getPreferenceDirectories()
+    // missing here? Is that a bug, or an intention?
+    loadBookmarksFromFile(QString(SHAREDIR) + "/BookmarksList.xml");
+    loadBookmarksFromFile(":/BookmarksList.xml");
 }
 
 void MerkaartorPreferences::saveBookmarks()
@@ -1735,14 +1681,9 @@ void MerkaartorPreferences::saveOsmServers()
 QString getDefaultLanguage(bool returnDefault)
 {
     if (!g_Merk_Ignore_Preferences && !g_Merk_Reset_Preferences) {
-        QSettings* Sets;
-        if (!g_Merk_Portable) {
-            Sets = new QSettings();
-        } else {
-            Sets = new QSettings(qApp->applicationDirPath() + "/merkaartor.ini", QSettings::IniFormat);
-        }
-        QString lang = Sets->value("locale/language").toString();
-        delete Sets;
+        QSettings* sets = getSettings();
+        QString lang = sets->value("locale/language").toString();
+        delete sets;
         if (lang == "")
             if (returnDefault)
                 lang = QLocale::system().name().split("_")[0];
@@ -1758,12 +1699,8 @@ QString getDefaultLanguage(bool returnDefault)
 void setDefaultLanguage(const QString& theValue)
 {
     if (!g_Merk_Ignore_Preferences) {
-        QSettings* Sets;
-        if (!g_Merk_Portable) {
-            Sets = new QSettings();
-        } else {
-            Sets = new QSettings(qApp->applicationDirPath() + "/merkaartor.ini", QSettings::IniFormat);
-        }
-        Sets->setValue("locale/language", theValue);
+        QSettings* sets = getSettings();
+        sets->setValue("locale/language", theValue);
+        // TODO: 'sets' memory leak?
     }
 }
diff --git a/src/Preferences/MerkaartorPreferences.h b/src/Preferences/MerkaartorPreferences.h
index 64827f3..bab0768 100644
--- a/src/Preferences/MerkaartorPreferences.h
+++ b/src/Preferences/MerkaartorPreferences.h
@@ -15,10 +15,14 @@
 #include <QtCore>
 #include <QtCore/QSettings>
 #include <QColor>
-#include <QHttp>
+#include <QNetworkAccessManager>
+#include <QNetworkRequest>
+#include <QNetworkReply>
+#include <QAuthenticator>
 #include <QBuffer>
 #include <QUuid>
 #include <QNetworkProxy>
+#include <QSslError>
 
 #ifdef USE_LIBPROXY
 #include <proxy.h>
@@ -41,7 +45,7 @@ class IPaintStyle;
 #ifdef Q_WS_X11
 #define PLATFORM "X11"
 #else
-#ifdef Q_WS_WIN
+#ifdef Q_OS_WIN
 #define PLATFORM "Windows"
 #else
 #ifdef Q_WS_MACX
@@ -51,7 +55,7 @@ class IPaintStyle;
 #endif
 #endif
 #endif
-#define USER_AGENT (QString("%1/%2%3 (%4;%5)").arg(qApp->applicationName()).arg(STRINGIFY(VERSION)).arg(STRINGIFY(REVISION)).arg(PLATFORM).arg(STRINGIFY(SVNREV)))
+#define USER_AGENT (QString("%1/%2 (%4)").arg(qApp->applicationName()).arg(STRINGIFY(REVISION))).arg(PLATFORM)
 
 #define WORLD_COORDBOX CoordBox(Coord(-COORD_MAX*.80, COORD_MAX*.80/2), Coord(COORD_MAX*.80, -COORD_MAX*.80/2))
 #define BUILTIN_STYLES_DIR ":/Styles"
@@ -171,11 +175,6 @@ public:
     QSettings* getQSettings() const { return Sets; }
     void save(bool UserPwdChanged = false);
 
-    void toOsmPref();
-    void fromOsmPref();
-    void putOsmPref(const QString& k, const QString& v);
-    void deleteOsmPref(const QString& k);
-
     const QVector<qreal> getParentDashes() const;
 
     //bool use06Api() const;
@@ -203,7 +202,6 @@ public:
 
     /* Visual */
     QStringList getAlphaList() const;
-    void setAlphaList();
     qreal getAlpha(QString lvl);
     QHash<QString, qreal>* getAlphaPtr();
 
@@ -229,8 +227,8 @@ public:
     M_PARAM_DECLARE_INT_DELAYED(TagListFirstColumnWidth)
 
     /* MainWindow state */
-    void saveMainWindowState(const class MainWindow * mainWindow);
-    void restoreMainWindowState(class MainWindow * mainWindow) const;
+    void saveMainWindowState(const MainWindow * mainWindow);
+    void restoreMainWindowState(MainWindow * mainWindow) const;
 
     void setInitialPosition(MapView* vw);
     void initialPosition(MapView* vw);
@@ -264,7 +262,9 @@ public:
     ExportType getExportType() const;
 
     /* Tools */
-    ToolList* getTools() const;
+    // TODO: Returning ToolList* here is very promiscuous.
+    // 'getTools()' should probably return 'const ToolList&' instead.
+    ToolList* getTools();
     Tool getTool(QString toolName) const;
 
     QStringList getShortcuts() const;
@@ -273,11 +273,15 @@ public:
     M_PARAM_DECLARE_INT(PolygonSides)
 
     /* Recent */
+private:
     void setRecentOpen(const QStringList & theValue);
+public:
     QStringList getRecentOpen() const;
     void addRecentOpen(const QString & theValue);
 
+private:
     void setRecentImport(const QStringList & theValue);
+public:
     QStringList getRecentImport() const;
     void addRecentImport(const QString & theValue);
 
@@ -394,10 +398,6 @@ public:
     IMapAdapterFactory* getBackgroundPlugin(const QUuid& anAdapterUid);
     QMap<QUuid, IMapAdapterFactory *> getBackgroundPlugins();
 
-    /* Projections */
-    void loadProjection(QString fn);
-    void loadProjections();
-    void saveProjections();
 #ifndef _MOBILE
     void setProjectionType(QString theValue);
     QString getProjectionType();
@@ -405,27 +405,36 @@ public:
     ProjectionItem getProjection(QString aProj);
 #endif
 
-    /* Filters */
-    void loadFilter(QString fn);
-    void loadFilters();
-    void saveFilters();
-    void setCurrentFilter(FilterType theValue);
     FilterType getCurrentFilter();
     FiltersList* getFiltersList();
     FilterItem getFilter(QString aFilter);
 
+    BookmarkList*  getBookmarks();
+    WmsServerList* getWmsServers();
+    TmsServerList* getTmsServers();
+    OsmServerList* getOsmServers();
+
+    M_PARAM_DECLARE_STRING(SelectedServer);
+
+private:
+    void fromOsmPref();
+    void toOsmPref();
+    void putOsmPref(const QString& k, const QString& v);
+    void deleteOsmPref(const QString& k);
+    void setAlphaList();
+
     /* WMSes */
-    void loadWMS(QString fn);
+    void loadWMSesFromFile(QString fileName);
     void loadWMSes();
     void saveWMSes();
 
     /* TMSes */
-    void loadTMS(QString fn);
+    void loadTMSesFromFile(QString fileName);
     void loadTMSes();
     void saveTMSes();
 
     /* Bookmarks */
-    void loadBookmark(QString fn);
+    void loadBookmarksFromFile(QString fileName);
     void loadBookmarks();
     void saveBookmarks();
 
@@ -433,42 +442,34 @@ public:
     void loadOsmServers();
     void saveOsmServers();
 
-    BookmarkList*  getBookmarks();
-    WmsServerList* getWmsServers();
-    TmsServerList* getTmsServers();
-    OsmServerList* getOsmServers();
+    /* Filters */
+    void loadFiltersFromFile(QString fileName);
+    void loadFilters();
+    void saveFilters();
 
-    M_PARAM_DECLARE_STRING(SelectedServer);
+    /* Projections */
+    void loadProjectionsFromFile(QString fileName);
+    void loadProjections();
+    void saveProjections();
 
-protected:
     QVector<qreal> parentDashes;
 
     bool Use06Api;
     QString version;
-    bool RightSideDriving;
-    qreal DoubleRoadDistance;
-    QString WorkingDir;
-    QString OsmWebsite;
-    QString OsmUser;
-    QString OsmPassword;
-
-    QHttp httpRequest;
-    int OsmPrefLoadId;
-    int OsmPrefSaveId;
-    int OsmPrefDeleteId;
-    QBuffer OsmPrefContent;
-    QMap<QString, int> OsmPrefListsCount;
-
-    void setWmsServers();
-    void setTmsServers();
+
+    // TODO: These network objects shouldn't be shared between methods
+    // of MerkaartorPreferences.
+    QNetworkAccessManager httpRequest;
+    QNetworkReply *OsmPrefLoadReply;
+    QNetworkReply *OsmPrefSaveReply;
+    QNetworkReply *OsmPrefDeleteReply;
+
     void setTools();
     void initialize();
 
-private:
     QHash<QString, qreal> alpha;
-    ToolList* theToolList;
+    ToolList theToolList;
     QSettings * Sets;
-    QStringList projTypes;
     QMap<QUuid, IMapAdapterFactory *> mBackgroundPlugins;
     ProjectionsList theProjectionsList;
     FiltersList theFiltersList;
@@ -486,8 +487,9 @@ private:
     static IPaintStyle* m_EPSInstance;
 
 private slots:
-    void on_responseHeaderReceived(const QHttpResponseHeader & hdr);
-    void on_requestFinished ( int id, bool error );
+    void on_requestFinished ( QNetworkReply *reply );
+    void on_authenticationRequired( QNetworkReply *reply, QAuthenticator *auth );
+    void on_sslErrors(QNetworkReply *reply, const QList<QSslError>& errors);
 
 signals:
     void bookmarkChanged();
diff --git a/src/Preferences/PreferencesDialog.cpp b/src/Preferences/PreferencesDialog.cpp
index fb53587..6e40453 100644
--- a/src/Preferences/PreferencesDialog.cpp
+++ b/src/Preferences/PreferencesDialog.cpp
@@ -514,13 +514,17 @@ void PreferencesDialog::on_BrowseTemplate_clicked()
         CustomTemplateName->setText(QDir::toNativeSeparators(s));
 }
 
-void PreferencesDialog::on_btBgColor_clicked()
-{
-    QColor rgb = QColorDialog::getColor(BgColor, this
+QColor PreferencesDialog::pickColor(QColor defaultColor) {
+    return QColorDialog::getColor(defaultColor, this
 #if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
                                         , tr("Select Color"), QColorDialog::ShowAlphaChannel
 #endif
                                        );
+}
+
+void PreferencesDialog::on_btBgColor_clicked()
+{
+    QColor rgb = pickColor(BgColor);
     if (rgb.isValid()) {
         BgColor = rgb;
         makeBoundaryIcon(btBgColor, BgColor);
@@ -529,11 +533,7 @@ void PreferencesDialog::on_btBgColor_clicked()
 
 void PreferencesDialog::on_btFocusColor_clicked()
 {
-    QColor rgb = QColorDialog::getColor(FocusColor, this
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-                                        , tr("Select Color"), QColorDialog::ShowAlphaChannel
-#endif
-                                       );
+    QColor rgb = pickColor(FocusColor);
     if (rgb.isValid()) {
         FocusColor = rgb;
         makeBoundaryIcon(btFocusColor, FocusColor);
@@ -542,11 +542,7 @@ void PreferencesDialog::on_btFocusColor_clicked()
 
 void PreferencesDialog::on_btHoverColor_clicked()
 {
-    QColor rgb = QColorDialog::getColor(HoverColor, this
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-                                        , tr("Select Color"), QColorDialog::ShowAlphaChannel
-#endif
-                                       );
+    QColor rgb = pickColor(HoverColor);
     if (rgb.isValid()) {
         HoverColor = rgb;
         makeBoundaryIcon(btHoverColor, HoverColor);
@@ -555,11 +551,7 @@ void PreferencesDialog::on_btHoverColor_clicked()
 
 void PreferencesDialog::on_btHighlightColor_clicked()
 {
-    QColor rgb = QColorDialog::getColor(HighlightColor, this
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-                                        , tr("Select Color"), QColorDialog::ShowAlphaChannel
-#endif
-                                       );
+    QColor rgb = pickColor(HighlightColor);
     if (rgb.isValid()) {
         HighlightColor = rgb;
         makeBoundaryIcon(btHighlightColor, HighlightColor);
@@ -568,11 +560,7 @@ void PreferencesDialog::on_btHighlightColor_clicked()
 
 void PreferencesDialog::on_btDirtyColor_clicked()
 {
-    QColor rgb = QColorDialog::getColor(DirtyColor, this
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-                                        , tr("Select Color"), QColorDialog::ShowAlphaChannel
-#endif
-                                       );
+    QColor rgb = pickColor(DirtyColor);
     if (rgb.isValid()) {
         DirtyColor = rgb;
         makeBoundaryIcon(btDirtyColor, DirtyColor);
@@ -581,11 +569,7 @@ void PreferencesDialog::on_btDirtyColor_clicked()
 
 void PreferencesDialog::on_btRelationsColor_clicked()
 {
-    QColor rgb = QColorDialog::getColor(RelationsColor, this
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-                                        , tr("Select Color"), QColorDialog::ShowAlphaChannel
-#endif
-                                       );
+    QColor rgb = pickColor(RelationsColor);
     if (rgb.isValid()) {
         RelationsColor = rgb;
         makeBoundaryIcon(btRelationsColor, RelationsColor);
@@ -593,11 +577,7 @@ void PreferencesDialog::on_btRelationsColor_clicked()
 }
 void PreferencesDialog::on_btGpxTrackColor_clicked()
 {
-    QColor rgb = QColorDialog::getColor(GpxTrackColor, this
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
-                                        , tr("Select Color"), QColorDialog::ShowAlphaChannel
-#endif
-                                       );
+    QColor rgb = pickColor(GpxTrackColor);
     if (rgb.isValid()) {
         GpxTrackColor = rgb;
         makeBoundaryIcon(btGpxTrackColor, GpxTrackColor);
diff --git a/src/Preferences/PreferencesDialog.h b/src/Preferences/PreferencesDialog.h
index bfd3204..f885105 100644
--- a/src/Preferences/PreferencesDialog.h
+++ b/src/Preferences/PreferencesDialog.h
@@ -13,7 +13,6 @@
 #define PREFERENCESDIALOG_H
 
 #include <QWidget>
-#include <QHttp>
 #include <QBuffer>
 #include <QListWidgetItem>
 
@@ -78,6 +77,7 @@ private:
     void savePrefs();
 
     void changeEvent(QEvent *);
+    QColor pickColor(QColor defaultColor);
 
 private:
     QList<Tool> theTools;
diff --git a/src/Preferences/TMSPreferencesDialog.cpp b/src/Preferences/TMSPreferencesDialog.cpp
index 602e4d2..e6e7a34 100644
--- a/src/Preferences/TMSPreferencesDialog.cpp
+++ b/src/Preferences/TMSPreferencesDialog.cpp
@@ -25,6 +25,8 @@ TMSPreferencesDialog::TMSPreferencesDialog(QWidget* parent)
 
     setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
 
+    connect (&http, SIGNAL(finished(QNetworkReply*)), this, SLOT(httpRequestFinished(QNetworkReply*)));
+
     loadPrefs();
 }
 
@@ -220,36 +222,23 @@ void TMSPreferencesDialog::on_btGetServices_clicked()
     lvTmsServices->clear();
     services.clear();
 
-    http = new QHttp(this);
-    http->setProxy(M_PREFS->getProxy(theUrl));
-    connect (http, SIGNAL(requestFinished(int, bool)), this, SLOT(httpRequestFinished(int, bool)));
-    connect(http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)),
-        this, SLOT(readResponseHeader(const QHttpResponseHeader &)));
-
-    httpGetId = sendRequest(theUrl);
+    http.setProxy(M_PREFS->getProxy(theUrl));
 
+    sendRequest(theUrl);
 }
 
-int TMSPreferencesDialog::sendRequest(QUrl url)
+QNetworkReply* TMSPreferencesDialog::sendRequest(QUrl url)
 {
-    QString requestUrl = url.encodedPath();
-    if (!url.encodedQuery().isNull())
-        requestUrl += "?" + url.encodedQuery();
-    QHttpRequestHeader header("GET", requestUrl);
-    qDebug() << header.toString();
-
-    QString host = url.host();
-    if (url.port() != -1)
-        host += ":" + QString::number(url.port());
-    header.setValue("Host", host);
-    header.setValue("User-Agent", USER_AGENT);
-
-    http->setHost(url.host(), url.port() == -1 ? 80 : url.port());
-    http->setProxy(M_PREFS->getProxy(url));
-
-    return http->request(header);
+    qDebug() << "TMS: Sending request to " << url;
+    QNetworkRequest req(url);
+    req.setRawHeader(QByteArray("User-Agent"), USER_AGENT.toLatin1());
+
+    http.setProxy(M_PREFS->getProxy(url));
+
+    return http.get(req);
 }
 
+/*
 void TMSPreferencesDialog::readResponseHeader(const QHttpResponseHeader &responseHeader)
 {
     qDebug() << responseHeader.toString();
@@ -272,17 +261,26 @@ void TMSPreferencesDialog::readResponseHeader(const QHttpResponseHeader &respons
                                   .arg(responseHeader.reasonPhrase()));
     }
 }
+*/
 
-void TMSPreferencesDialog::httpRequestFinished(int /*id*/, bool error)
+void TMSPreferencesDialog::httpRequestFinished( QNetworkReply *reply)
 {
-    if (error) {
-        if (http->error() != QHttp::Aborted)
-            QMessageBox::critical(this, tr("Merkaartor: GetServices"), tr("Error reading services.\n") + http->errorString(), QMessageBox::Ok);
+    qDebug() << "TMS: request finished.";
+    reply->deleteLater();
+    if (reply->error()) {
+        if (reply->error() != QNetworkReply::OperationCanceledError)
+            QMessageBox::critical(this, tr("Merkaartor: GetServices"), tr("Error reading services.\n") + reply->errorString(), QMessageBox::Ok);
         return;
     }
 
+    /* Check for redirects */
+    QVariant redir = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
+    if (redir.isValid()) {
+        sendRequest(QUrl(redir.toString()));
+    }
+
     QDomDocument doc;
-    QString content = http->readAll();
+    QString content = reply->readAll();
     qDebug() << content;
     doc.setContent(content);
     if (doc.isNull())
diff --git a/src/Preferences/TMSPreferencesDialog.h b/src/Preferences/TMSPreferencesDialog.h
index 8dbc60a..a50c3ed 100644
--- a/src/Preferences/TMSPreferencesDialog.h
+++ b/src/Preferences/TMSPreferencesDialog.h
@@ -13,8 +13,8 @@
 #define TMSPREFERENCESDIALOG_H
 
 #include <QWidget>
-#include <QHttp>
 #include <QBuffer>
+#include <QNetworkAccessManager>
 
 
 #include <ui_TMSPreferencesDialog.h>
@@ -65,11 +65,10 @@ private:
     void loadPrefs();
     void savePrefs();
 
-    int sendRequest(QUrl url);
+    QNetworkReply* sendRequest(QUrl url);
 
 private slots:
-    void readResponseHeader(const QHttpResponseHeader &responseHeader);
-    void httpRequestFinished(int id, bool error);
+    void httpRequestFinished( QNetworkReply *reply);
 
 public:
     QList<TmsServer> theTmsServers;
@@ -78,8 +77,7 @@ public:
 
 private:
     QString selectedServer;
-    QHttp *http;
-    int httpGetId;
+    QNetworkAccessManager http;
     QBuffer* buf;
     TileServiceList services;
 
diff --git a/src/Preferences/WMSPreferencesDialog.cpp b/src/Preferences/WMSPreferencesDialog.cpp
index 9178d2e..1cfd5b8 100644
--- a/src/Preferences/WMSPreferencesDialog.cpp
+++ b/src/Preferences/WMSPreferencesDialog.cpp
@@ -53,17 +53,27 @@ WMSPreferencesDialog::~WMSPreferencesDialog()
 void WMSPreferencesDialog::updateUrl()
 {
     QUrl theUrl(edWmsUrl->text());
-    if (!theUrl.hasQueryItem("VERSION"))
-        theUrl.addQueryItem("VERSION", "1.1.1");
-    if (!theUrl.hasQueryItem("SERVICE"))
-        theUrl.addQueryItem("SERVICE", "WMS");
-
-    theUrl.removeQueryItem("TRANSPARENT"); theUrl.addQueryItem("TRANSPARENT", "TRUE");
-    theUrl.removeQueryItem("LAYERS"); theUrl.addQueryItem("LAYERS", edWmsLayers->text());
-    theUrl.removeQueryItem("SRS"); theUrl.addQueryItem("SRS", cbWmsProj->currentText());
-    theUrl.removeQueryItem("STYLES"); theUrl.addQueryItem("STYLES", cbWmsStyle->currentText());
-    theUrl.removeQueryItem("FORMAT"); theUrl.addQueryItem("FORMAT", cbWmsImgFormat->currentText());
-
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    // FIXME: I'm not sure this is correct. Needs testing.
+    QUrlQuery theQuery(theUrl);
+#else
+#define theQuery theUrl
+#endif
+    if (!theQuery.hasQueryItem("VERSION"))
+        theQuery.addQueryItem("VERSION", "1.1.1");
+    if (!theQuery.hasQueryItem("SERVICE"))
+        theQuery.addQueryItem("SERVICE", "WMS");
+
+    theQuery.removeQueryItem("TRANSPARENT"); theQuery.addQueryItem("TRANSPARENT", "TRUE");
+    theQuery.removeQueryItem("LAYERS"); theQuery.addQueryItem("LAYERS", edWmsLayers->text());
+    theQuery.removeQueryItem("SRS"); theQuery.addQueryItem("SRS", cbWmsProj->currentText());
+    theQuery.removeQueryItem("STYLES"); theQuery.addQueryItem("STYLES", cbWmsStyle->currentText());
+    theQuery.removeQueryItem("FORMAT"); theQuery.addQueryItem("FORMAT", cbWmsImgFormat->currentText());
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    theUrl.setQuery(theQuery);
+#else
+#undef theQuery
+#endif
     edWmsUrl->setText(theUrl.toString());
 }
 
@@ -103,16 +113,23 @@ void WMSPreferencesDialog::generateWmscLayer()
 
 void WMSPreferencesDialog::on_edWmsUrl_textEdited(const QString &newText)
 {
-    QUrl u(newText);
-
-    if (u.hasEncodedQueryItem("LAYERS"))
-        edWmsLayers->setText(QUrl::fromPercentEncoding(u.queryItemValue("LAYERS").toLatin1()));
-    if (u.hasEncodedQueryItem("SRS"))
-        cbWmsProj->setEditText(QUrl::fromPercentEncoding(u.queryItemValue("SRS").toLatin1()));
-    if (u.hasEncodedQueryItem("STYLES"))
-        cbWmsStyle->setEditText(QUrl::fromPercentEncoding(u.queryItemValue("STYLES").toLatin1()));
-    if (u.hasEncodedQueryItem("FORMAT"))
-        cbWmsImgFormat->setEditText(QUrl::fromPercentEncoding(u.queryItemValue("FORMAT").toLatin1()));
+    QUrl theUrl(newText);
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    QUrlQuery theQuery(theUrl);
+#define theQuery theQuery
+#else
+#define theQuery theUrl
+#endif
+
+    if (theQuery.hasQueryItem("LAYERS"))
+        edWmsLayers->setText(QUrl::fromPercentEncoding(theQuery.queryItemValue("LAYERS").toLatin1()));
+    if (theQuery.hasQueryItem("SRS"))
+        cbWmsProj->setEditText(QUrl::fromPercentEncoding(theQuery.queryItemValue("SRS").toLatin1()));
+    if (theQuery.hasQueryItem("STYLES"))
+        cbWmsStyle->setEditText(QUrl::fromPercentEncoding(theQuery.queryItemValue("STYLES").toLatin1()));
+    if (theQuery.hasQueryItem("FORMAT"))
+        cbWmsImgFormat->setEditText(QUrl::fromPercentEncoding(theQuery.queryItemValue("FORMAT").toLatin1()));
+#undef theQuery
 }
 
 void WMSPreferencesDialog::on_edWmsUrl_editingFinished()
@@ -342,19 +359,30 @@ void WMSPreferencesDialog::showCapabilities(void)
         return;
 
     QUrl theUrl(edWmsUrl->text());
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    QUrlQuery theQuery(theUrl);
+#define theQuery theQuery
+#else
+#define theQuery theUrl
+#endif
     if ((theUrl.host() == "") || (theUrl.path() == "")) {
         QMessageBox::critical(this, tr("Merkaartor: GetCapabilities"), tr("Address and Path cannot be blank."), QMessageBox::Ok);
     }
 
-    if (!theUrl.hasQueryItem("VERSION"))
-        theUrl.addQueryItem("VERSION", "1.1.1");
-    if (!theUrl.hasQueryItem("SERVICE"))
-        theUrl.addQueryItem("SERVICE", "WMS");
-    theUrl.removeAllQueryItems("LAYERS");
-    theUrl.removeAllQueryItems("SRS");
-    theUrl.removeAllQueryItems("FORMAT");
-    theUrl.removeAllQueryItems("STYLES");
-    theUrl.addQueryItem("REQUEST", "GetCapabilities");
+    if (!theQuery.hasQueryItem("VERSION"))
+        theQuery.addQueryItem("VERSION", "1.1.1");
+    if (!theQuery.hasQueryItem("SERVICE"))
+        theQuery.addQueryItem("SERVICE", "WMS");
+    theQuery.removeAllQueryItems("LAYERS");
+    theQuery.removeAllQueryItems("SRS");
+    theQuery.removeAllQueryItems("FORMAT");
+    theQuery.removeAllQueryItems("STYLES");
+    theQuery.addQueryItem("REQUEST", "GetCapabilities");
+
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    theUrl.setQuery(theQuery);
+#endif
+#undef theQuery
 //    QUrl url(edWmsUrl->text() + "VERSION=1.1.1&SERVICE=WMS&request=GetCapabilities");
 
     requestCapabilities(theUrl);
diff --git a/src/Preferences/WMSPreferencesDialog.h b/src/Preferences/WMSPreferencesDialog.h
index ba03dcd..86f6593 100644
--- a/src/Preferences/WMSPreferencesDialog.h
+++ b/src/Preferences/WMSPreferencesDialog.h
@@ -36,24 +36,35 @@ public:
 
     State validate ( QString & input, int & /*pos*/ ) const
     {
-        QUrl u(input);
-        if (!u.isValid())
+        QUrl theUrl(input);
+
+        if (!theUrl.isValid())
             return QValidator::Intermediate;
 
-        if (u.hasEncodedQueryItem("BBOX"))
-            u.removeEncodedQueryItem("BBOX");
-        if (u.hasEncodedQueryItem("REQUEST"))
-            u.removeEncodedQueryItem("REQUEST");
-        if (u.hasEncodedQueryItem("WIDTH"))
-            u.removeEncodedQueryItem("WIDTH");
-        if (u.hasEncodedQueryItem("HEIGHT"))
-            u.removeEncodedQueryItem("HEIGHT");
-        if (u.hasEncodedQueryItem("TRANSPARENT"))
-            u.removeEncodedQueryItem("TRANSPARENT");
-        if (u.hasEncodedQueryItem("tiled"))
-            u.removeEncodedQueryItem("tiled");
-
-        input = u.toString();
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+        QUrlQuery theQuery(theUrl);
+#define theQuery theQuery
+#else
+#define theQuery theUrl
+#endif
+
+        if (theQuery.hasQueryItem("BBOX"))
+            theQuery.removeQueryItem("BBOX");
+        if (theQuery.hasQueryItem("REQUEST"))
+            theQuery.removeQueryItem("REQUEST");
+        if (theQuery.hasQueryItem("WIDTH"))
+            theQuery.removeQueryItem("WIDTH");
+        if (theQuery.hasQueryItem("HEIGHT"))
+            theQuery.removeQueryItem("HEIGHT");
+        if (theQuery.hasQueryItem("TRANSPARENT"))
+            theQuery.removeQueryItem("TRANSPARENT");
+        if (theQuery.hasQueryItem("tiled"))
+            theQuery.removeQueryItem("tiled");
+
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+        theUrl.setQuery(theQuery);
+#endif
+        input = theUrl.toString();
         return QValidator::Acceptable;
     }
 
diff --git a/src/QMapControl/WmscMapAdapter.cpp b/src/QMapControl/WmscMapAdapter.cpp
index 373b73d..56dc3fc 100644
--- a/src/QMapControl/WmscMapAdapter.cpp
+++ b/src/QMapControl/WmscMapAdapter.cpp
@@ -18,6 +18,7 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 #include "WmscMapAdapter.h"
+#include "Global.h"
 
 WmscMapAdapter::WmscMapAdapter(WmsServer aServer)
     : MapAdapter("", "", 0, 0), theServer(aServer)
@@ -87,32 +88,42 @@ QString WmscMapAdapter::getQuery(int i, int j, int /* z */) const
     QPointF br = QPointF((i+1)*tileWidth+getBoundingbox().topLeft().x(), getBoundingbox().bottomLeft().y()- (j+1)*tileHeight);
 
     QUrl theUrl(theServer.WmsPath);
-    if (!theUrl.hasQueryItem("VERSION"))
-        theUrl.addQueryItem("VERSION", "1.1.1");
-    if (!theUrl.hasQueryItem("SERVICE"))
-        theUrl.addQueryItem("SERVICE", "WMS");
-    theUrl.addQueryItem("REQUEST", "GetMap");
-
-    if (!theUrl.hasQueryItem("TRANSPARENT"))
-        theUrl.addQueryItem("TRANSPARENT", "TRUE");
-    if (!theUrl.hasQueryItem("LAYERS"))
-        theUrl.addQueryItem("LAYERS", theServer.WmsLayers);
-    if (!theUrl.hasQueryItem("SRS"))
-        theUrl.addQueryItem("SRS", theServer.WmsProjections);
-    if (!theUrl.hasQueryItem("STYLES"))
-        theUrl.addQueryItem("STYLES", theServer.WmsStyles);
-    if (!theUrl.hasQueryItem("FORMAT"))
-        theUrl.addQueryItem("FORMAT", theServer.WmsImgFormat);
-    theUrl.addQueryItem("WIDTH", QString::number(getTileSizeW()));
-    theUrl.addQueryItem("HEIGHT", QString::number(getTileSizeH()));
-    theUrl.addQueryItem("BBOX", QString()
+#ifdef QT5
+    QUrlQuery theQuery;
+#define theQuery theQuery
+#else
+#define theQuery theUrl
+#endif
+    if (!theQuery.hasQueryItem("VERSION"))
+        theQuery.addQueryItem("VERSION", "1.1.1");
+    if (!theQuery.hasQueryItem("SERVICE"))
+        theQuery.addQueryItem("SERVICE", "WMS");
+    theQuery.addQueryItem("REQUEST", "GetMap");
+
+    if (!theQuery.hasQueryItem("TRANSPARENT"))
+        theQuery.addQueryItem("TRANSPARENT", "TRUE");
+    if (!theQuery.hasQueryItem("LAYERS"))
+        theQuery.addQueryItem("LAYERS", theServer.WmsLayers);
+    if (!theQuery.hasQueryItem("SRS"))
+        theQuery.addQueryItem("SRS", theServer.WmsProjections);
+    if (!theQuery.hasQueryItem("STYLES"))
+        theQuery.addQueryItem("STYLES", theServer.WmsStyles);
+    if (!theQuery.hasQueryItem("FORMAT"))
+        theQuery.addQueryItem("FORMAT", theServer.WmsImgFormat);
+    theQuery.addQueryItem("WIDTH", QString::number(getTileSizeW()));
+    theQuery.addQueryItem("HEIGHT", QString::number(getTileSizeH()));
+    theQuery.addQueryItem("BBOX", QString()
                         .append(loc.toString(ul.x(),'f',6)).append(",")
                         .append(loc.toString(br.y(),'f',6)).append(",")
                         .append(loc.toString(br.x(),'f',6)).append(",")
                         .append(loc.toString(ul.y(),'f',6))
             );
     if (theServer.WmsIsTiled == 1)
-        theUrl.addQueryItem("tiled", "true");
+        theQuery.addQueryItem("tiled", "true");
+#ifdef QT5
+    theUrl.setQuery(theQuery);
+#endif
+#undef theQuery
 
 
     return theUrl.toString(QUrl::RemoveScheme | QUrl::RemoveAuthority);
diff --git a/src/QMapControl/browserimagemanager.cpp b/src/QMapControl/browserimagemanager.cpp
index 7ea96e6..42eda0e 100644
--- a/src/QMapControl/browserimagemanager.cpp
+++ b/src/QMapControl/browserimagemanager.cpp
@@ -174,7 +174,7 @@ QImage BrowserImageManager::getImage(IMapAdapter* anAdapter, QString url)
 
     QString host = anAdapter->getHost();
     QString strHash = QString("%1%2").arg(anAdapter->getName()).arg(url);
-    QString hash = QString(strHash.toAscii().toBase64());
+    QString hash = QString(strHash.toLatin1().toBase64());
     if (hash.size() > 255) {
         QCryptographicHash crypt(QCryptographicHash::Md5);
         crypt.addData(hash.toLatin1());
@@ -258,7 +258,7 @@ void BrowserImageManager::pageLoadFinished(bool ok)
 
         if (!(pt.isNull())) {
             QPixmapCache::insert(R.hash, pt);
-            QString strHash = QByteArray::fromBase64(R.hash.toAscii());
+            QString strHash = QByteArray::fromBase64(R.hash.toLatin1());
 
             if (cacheMaxSize && !strHash.startsWith("Yahoo")) {
                 pt.save(cacheDir.absolutePath() + "/" + R.hash + ".png");
@@ -301,7 +301,7 @@ QImage BrowserImageManager::prefetchImage(IMapAdapter* anAdapter, int x, int y,
     QString host = anAdapter->getHost();
     QString url = anAdapter->getQuery(x, y, z);
     QString strHash = QString("%1;%2;%3;%4;%5").arg(anAdapter->getName()).arg(QString::number(x)).arg(QString::number(y)).arg(QString::number(z)).arg(anAdapter->getTileSizeW());
-    QString hash = QString(strHash.toAscii().toBase64());
+    QString hash = QString(strHash.toLatin1().toBase64());
 
     prefetch.append(hash);
     return getImage(anAdapter, anAdapter->getQuery(x, y, z));
diff --git a/src/QMapControl/browserimagemanager.h b/src/QMapControl/browserimagemanager.h
index 12eff4e..d7abac6 100644
--- a/src/QMapControl/browserimagemanager.h
+++ b/src/QMapControl/browserimagemanager.h
@@ -24,7 +24,7 @@
 #include <QPixmap>
 
 #include <QtNetwork/QtNetwork>
-#include "qwebframe.h"
+#include <QWebFrame>
 #include "qwebhistory.h"
 #include "qwebhistoryinterface.h"
 #include "qwebkitglobal.h"
diff --git a/src/QMapControl/imagemanager.cpp b/src/QMapControl/imagemanager.cpp
index 005892f..fcf3aad 100644
--- a/src/QMapControl/imagemanager.cpp
+++ b/src/QMapControl/imagemanager.cpp
@@ -48,7 +48,7 @@ QByteArray ImageManager::getData(IMapAdapter* anAdapter, QString url)
 {
     QString host = anAdapter->getHost();
     QString strHash = QString("%1%2").arg(anAdapter->getName()).arg(url);
-    QString hash = QString(strHash.toAscii().toBase64());
+    QString hash = QString(strHash.toLatin1().toBase64());
     if (hash.size() > 255) {
         QCryptographicHash crypt(QCryptographicHash::Md5);
         crypt.addData(hash.toLatin1());
@@ -78,7 +78,7 @@ QImage ImageManager::getImage(IMapAdapter* anAdapter, QString url)
 
     QString host = anAdapter->getHost();
     QString strHash = QString("%1%2").arg(anAdapter->getName()).arg(url);
-    QString hash = QString(strHash.toAscii().toBase64());
+    QString hash = QString(strHash.toLatin1().toBase64());
     if (hash.size() > 255) {
         QCryptographicHash crypt(QCryptographicHash::Md5);
         crypt.addData(hash.toLatin1());
@@ -123,7 +123,7 @@ QImage ImageManager::prefetchImage(IMapAdapter* anAdapter, int x, int y, int z)
     QString host = anAdapter->getHost();
     QString url = anAdapter->getQuery(x, y, z);
     QString strHash = QString("%1%2").arg(anAdapter->getName()).arg(url);
-    QString hash = QString(strHash.toAscii().toBase64());
+    QString hash = QString(strHash.toLatin1().toBase64());
 
     prefetch.append(hash);
     return getImage(anAdapter, anAdapter->getQuery(x, y, z));
diff --git a/src/QMapControl/mapcontrol.h b/src/QMapControl/mapcontrol.h
index f08432e..3535859 100644
--- a/src/QMapControl/mapcontrol.h
+++ b/src/QMapControl/mapcontrol.h
@@ -20,7 +20,7 @@
 #ifndef MAPCONTROL_H
 #define MAPCONTROL_H
 
-#include <QtGui>
+#include <QtWidgets>
 
 #include "layermanager.h"
 #include "layer.h"
diff --git a/src/QMapControl/wmsmapadapter.cpp b/src/QMapControl/wmsmapadapter.cpp
index 7b3a9e7..91b2ab3 100644
--- a/src/QMapControl/wmsmapadapter.cpp
+++ b/src/QMapControl/wmsmapadapter.cpp
@@ -18,6 +18,7 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 #include "wmsmapadapter.h"
+#include "Global.h"
 
 WMSMapAdapter::WMSMapAdapter(WmsServer aServer)
  : theServer(aServer)
@@ -73,29 +74,39 @@ IMapAdapter::Type WMSMapAdapter::getType() const
 QString WMSMapAdapter::getQuery(const QRectF& /*wgs84Bbox*/, const QRectF& projBbox, const QRect& size) const
 {
     QUrl theUrl(theServer.WmsPath);
-    if (!theUrl.hasQueryItem("VERSION"))
-        theUrl.addQueryItem("VERSION", "1.1.1");
-    if (!theUrl.hasQueryItem("SERVICE"))
-        theUrl.addQueryItem("SERVICE", "WMS");
-    theUrl.addQueryItem("REQUEST", "GetMap");
+#ifdef QT5
+    QUrlQuery theQuery(theUrl);
+#define theQuery theQuery
+#else
+#define theQuery theUrl
+#endif
+    if (!theQuery.hasQueryItem("VERSION"))
+        theQuery.addQueryItem("VERSION", "1.1.1");
+    if (!theQuery.hasQueryItem("SERVICE"))
+        theQuery.addQueryItem("SERVICE", "WMS");
+    theQuery.addQueryItem("REQUEST", "GetMap");
 
-    if (!theUrl.hasQueryItem("TRANSPARENT"))
-        theUrl.addQueryItem("TRANSPARENT", "TRUE");
-    if (!theUrl.hasQueryItem("LAYERS"))
-        theUrl.addQueryItem("LAYERS", theServer.WmsLayers);
-    if (!theUrl.hasQueryItem("SRS"))
-        theUrl.addQueryItem("SRS", theServer.WmsProjections);
-    if (!theUrl.hasQueryItem("STYLES"))
-        theUrl.addQueryItem("STYLES", theServer.WmsStyles);
-    if (!theUrl.hasQueryItem("FORMAT"))
-        theUrl.addQueryItem("FORMAT", theServer.WmsImgFormat);
-    theUrl.addQueryItem("WIDTH", QString::number(size.width()));
-    theUrl.addQueryItem("HEIGHT", QString::number(size.height()));
-    theUrl.addQueryItem("BBOX", loc.toString(projBbox.bottomLeft().x(),'f',6).append(",")
+    if (!theQuery.hasQueryItem("TRANSPARENT"))
+        theQuery.addQueryItem("TRANSPARENT", "TRUE");
+    if (!theQuery.hasQueryItem("LAYERS"))
+        theQuery.addQueryItem("LAYERS", theServer.WmsLayers);
+    if (!theQuery.hasQueryItem("SRS"))
+        theQuery.addQueryItem("SRS", theServer.WmsProjections);
+    if (!theQuery.hasQueryItem("STYLES"))
+        theQuery.addQueryItem("STYLES", theServer.WmsStyles);
+    if (!theQuery.hasQueryItem("FORMAT"))
+        theQuery.addQueryItem("FORMAT", theServer.WmsImgFormat);
+    theQuery.addQueryItem("WIDTH", QString::number(size.width()));
+    theQuery.addQueryItem("HEIGHT", QString::number(size.height()));
+    theQuery.addQueryItem("BBOX", loc.toString(projBbox.bottomLeft().x(),'f',6).append(",")
             .append(loc.toString(projBbox.bottomLeft().y(),'f',6)).append(",")
             .append(loc.toString(projBbox.topRight().x(),'f',6)).append(",")
             .append(loc.toString(projBbox.topRight().y(),'f',6))
             );
+#ifdef QT5
+    theUrl.setQuery(theQuery);
+#endif
+#undef theQuery
 
     return theUrl.toString(QUrl::RemoveScheme | QUrl::RemoveAuthority);
 }
diff --git a/src/QToolBarDialog/QToolBarDialog.pri b/src/QToolBarDialog/QToolBarDialog.pri
new file mode 100644
index 0000000..6ab4648
--- /dev/null
+++ b/src/QToolBarDialog/QToolBarDialog.pri
@@ -0,0 +1,7 @@
+INCLUDEPATH += $$MERKAARTOR_SRC_DIR/QToolBarDialog
+DEPENDPATH += $$MERKAARTOR_SRC_DIR/QToolBarDialog
+
+HEADERS +=  qttoolbardialog.h
+SOURCES +=  qttoolbardialog.cpp
+RESOURCES += ../../Icons/QToolBarDialog/qttoolbardialog.qrc
+FORMS +=  qttoolbardialog.ui
diff --git a/src/QToolBarDialog/qttoolbardialog.cpp b/src/QToolBarDialog/qttoolbardialog.cpp
new file mode 100644
index 0000000..7eedfd1
--- /dev/null
+++ b/src/QToolBarDialog/qttoolbardialog.cpp
@@ -0,0 +1,1892 @@
+/****************************************************************************
+** 
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info at nokia.com)
+** 
+** This file is part of a Qt Solutions component.
+**
+** Commercial Usage  
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Solutions Commercial License Agreement provided
+** with the Software or, alternatively, in accordance with the terms
+** contained in a written agreement between you and Nokia.
+** 
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+** 
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
+** package.
+** 
+** GNU General Public License Usage 
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+** 
+** Please note Third Party Software included with Qt Solutions may impose
+** additional restrictions and it is the user's responsibility to ensure
+** that they have met the licensing requirements of the GPL, LGPL, or Qt
+** Solutions Commercial license and the relevant license of the Third
+** Party Software they are using.
+** 
+** If you are unsure which license is appropriate for your use, please
+** contact Nokia at qt-info at nokia.com.
+** 
+****************************************************************************/
+
+#include "qttoolbardialog.h"
+#include "ui_qttoolbardialog.h"
+#include <QtCore/QSet>
+#include <QAction>
+#include <QToolBar>
+#include <QMainWindow>
+#include <QShowEvent>
+#include <QHideEvent>
+#include <QHeaderView>
+
+class QtFullToolBarManagerPrivate
+{
+    class QtFullToolBarManager *q_ptr;
+    Q_DECLARE_PUBLIC(QtFullToolBarManager)
+
+public:
+
+    QToolBar *toolBarWidgetAction(QAction *action) const;
+    void removeWidgetActions(const QMap<QToolBar *, QList<QAction *> > &actions);
+
+    enum {
+        VersionMarker = 0xff,
+        ToolBarMarker = 0xfe,
+        CustomToolBarMarker = 0xfd,
+    };
+
+    void saveState(QDataStream &stream) const;
+    bool restoreState(QDataStream &stream) const;
+    QToolBar *findDefaultToolBar(const QString &objectName) const;
+    QAction *findAction(const QString &actionName) const;
+
+    QToolBar *toolBarByName(const QString &toolBarName) const;
+
+    QtFullToolBarManagerPrivate();
+
+    QMap<QString, QList<QAction *> > categoryToActions;
+    QMap<QAction *, QString>         actionToCategory;
+
+    QSet<QAction *> allActions;
+    QMap<QAction *, QToolBar *> widgetActions;
+    QSet<QAction *> regularActions;
+    QMap<QAction *, QList<QToolBar *> > actionToToolBars;
+
+    QMap<QToolBar *, QList<QAction *> > toolBars;
+    QMap<QToolBar *, QList<QAction *> > toolBarsWithSeparators;
+    QMap<QToolBar *, QList<QAction *> > defaultToolBars;
+    QList<QToolBar *> customToolBars;
+
+    QMainWindow *theMainWindow;
+};
+
+
+class QtFullToolBarManager : public QObject
+{
+    Q_OBJECT
+public:
+    QtFullToolBarManager(QObject *parent);
+    ~QtFullToolBarManager();
+
+    void setMainWindow(QMainWindow *mainWindow);
+    QMainWindow *mainWindow() const;
+
+    void addCategory(const QString &category);
+    bool hasCategory(const QString &category) const;
+    QStringList categories() const;
+    QList<QAction *> categoryActions(const QString &category) const;
+    QString actionCategory(QAction *action) const;
+
+    // only non-separator
+    void addAction(QAction *action, const QString &category);
+
+    void removeAction(QAction *action);
+
+    QSet<QAction *> actions() const;
+    bool isWidgetAction(QAction *action) const;
+
+    /*
+    Adds (registers) toolBar. Adds (registers) actions that already exists in toolBar.
+    Remembers toolbar and its actions as a default.
+    */
+    void addDefaultToolBar(QToolBar *toolBar, const QString &category);
+
+    void removeDefaultToolBar(QToolBar *toolBar);
+    // NULL on action list means separator.
+    QMap<QToolBar *, QList<QAction *> > defaultToolBars() const;
+    bool isDefaultToolBar(QToolBar *toolBar) const;
+
+    QToolBar *createToolBar(const QString &toolBarName);
+    void deleteToolBar(QToolBar *toolBar); // only those which were created, not added
+
+    QList<QAction *> actions(QToolBar *toolBar) const;
+
+    void setToolBars(const QMap<QToolBar *, QList<QAction *> > &actions);
+    void setToolBar(QToolBar *toolBar, const QList<QAction *> &actions);
+
+    QMap<QToolBar *, QList<QAction *> > toolBarsActions() const;
+    QByteArray saveState(int version = 0) const;
+    bool restoreState(const QByteArray &state, int version = 0);
+
+public slots:
+
+    void resetToolBar(QToolBar *toolBar);
+    void resetAllToolBars();
+
+signals:
+    void toolBarCreated(QToolBar *toolBar);
+    void toolBarRemoved(QToolBar *toolBar);
+
+    /*
+    If QToolBarWidgetAction was in another tool bar and is inserted into
+    this toolBar, toolBarChanged is first emited for other toolbar - without
+    that action. (Another approach may be that user first must call setToolBar
+    without that action for old tool bar)
+    */
+    void toolBarChanged(QToolBar *toolBar, const QList<QAction *> &actions);
+
+private:
+    QtFullToolBarManagerPrivate *d_ptr;
+    Q_DECLARE_PRIVATE(QtFullToolBarManager)
+    Q_DISABLE_COPY(QtFullToolBarManager)
+};
+
+
+QtFullToolBarManagerPrivate::QtFullToolBarManagerPrivate()
+    : theMainWindow(0)
+{
+}
+
+QToolBar *QtFullToolBarManagerPrivate::toolBarWidgetAction(QAction *action) const
+{
+    if (widgetActions.contains(action))
+        return widgetActions.value(action);
+    return 0;
+}
+
+void QtFullToolBarManagerPrivate::removeWidgetActions(const QMap<QToolBar *, QList<QAction *> >
+            &actions)
+{
+    QMap<QToolBar *, QList<QAction *> >::ConstIterator itToolBar = actions.constBegin();
+    while (itToolBar != actions.constEnd()) {
+        QToolBar *toolBar = itToolBar.key();
+        QList<QAction *> newActions = toolBars.value(toolBar);
+        QList<QAction *> newActionsWithSeparators = toolBarsWithSeparators.value(toolBar);
+
+        QList<QAction *> removedActions;
+        QList<QAction *> actionList = itToolBar.value();
+        QListIterator<QAction *> itAction(actionList);
+        while (itAction.hasNext()) {
+            QAction *action = itAction.next();
+            if (newActions.contains(action) && toolBarWidgetAction(action) == toolBar) {
+                newActions.removeAll(action);
+                newActionsWithSeparators.removeAll(action);
+                removedActions.append(action);
+            }
+        }
+
+        //emit q_ptr->toolBarChanged(toolBar, newActions);
+
+        toolBars.insert(toolBar, newActions);
+        toolBarsWithSeparators.insert(toolBar, newActionsWithSeparators);
+        QListIterator<QAction *> itRemovedAction(removedActions);
+        while (itRemovedAction.hasNext()) {
+            QAction *oldAction = itRemovedAction.next();
+            widgetActions.insert(oldAction, 0);
+            actionToToolBars[oldAction].removeAll(toolBar);
+        }
+
+        itToolBar++;
+    }
+}
+
+void QtFullToolBarManagerPrivate::saveState(QDataStream &stream) const
+{
+    stream << (uchar) ToolBarMarker;
+    stream << defaultToolBars.size();
+    QMap<QToolBar *, QList<QAction *> >::ConstIterator itToolBar =
+                defaultToolBars.constBegin();
+    while (itToolBar != defaultToolBars.constEnd()) {
+        QToolBar *tb = itToolBar.key();
+        if (tb->objectName().isEmpty()) {
+            qWarning("QtToolBarManager::saveState(): 'objectName' not set for QToolBar "
+                "%p '%s', using 'windowTitle' instead",
+            tb, tb->windowTitle().toLocal8Bit().constData());
+            stream << tb->windowTitle();
+        } else {
+            stream << tb->objectName();
+        }
+
+        stream << toolBars[tb].size();
+        QListIterator<QAction *> itAction(toolBars[tb]);
+        while (itAction.hasNext()) {
+            QAction *action = itAction.next();
+
+            if (action) {
+                if (action->objectName().isEmpty()) {
+                    qWarning("QtToolBarManager::saveState(): 'objectName' not set for QAction "
+                                "%p '%s', using 'text' instead",
+                            action, action->text().toLocal8Bit().constData());
+                    stream << action->text();
+                } else {
+                    stream << action->objectName();
+                }
+            } else {
+                stream << QString();
+            }
+        }
+        itToolBar++;
+    }
+
+
+    stream << (uchar) CustomToolBarMarker;
+    stream << toolBars.size() - defaultToolBars.size();
+    itToolBar = toolBars.constBegin();
+    while (itToolBar != toolBars.constEnd()) {
+        QToolBar *tb = itToolBar.key();
+        if (!defaultToolBars.contains(tb)) {
+            stream << tb->objectName();
+            stream << tb->windowTitle();
+
+            stream << toolBars[tb].size();
+            QListIterator<QAction *> itAction(toolBars[tb]);
+            while (itAction.hasNext()) {
+                QAction *action = itAction.next();
+
+                if (action) {
+                    if (action->objectName().isEmpty()) {
+                        qWarning("QtToolBarManager::saveState(): 'objectName' not set for QAction "
+                                    "%p '%s', using 'text' instead",
+                                action, action->text().toLocal8Bit().constData());
+                        stream << action->text();
+                    } else {
+                        stream << action->objectName();
+                    }
+                } else {
+                    stream << QString();
+                }
+            }
+        }
+        itToolBar++;
+    }
+}
+
+bool QtFullToolBarManagerPrivate::restoreState(QDataStream &stream) const
+{
+    uchar tmarker;
+    stream >> tmarker;
+    if (tmarker != ToolBarMarker)
+        return false;
+
+    int toolBars;
+    stream >> toolBars;
+    for (int i = 0; i < toolBars; i++) {
+        QString objectName;
+        stream >> objectName;
+        int actionCount;
+        stream >> actionCount;
+        QList<QAction *> actions;
+        for (int j = 0; j < actionCount; j++) {
+            QString actionName;
+            stream >> actionName;
+
+            if (actionName.isEmpty())
+                actions.append(0);
+            else {
+                QAction *action = findAction(actionName);
+                if (action)
+                    actions.append(action);
+            }
+        }
+
+        QToolBar *toolBar = findDefaultToolBar(objectName);
+        if (toolBar)
+            q_ptr->setToolBar(toolBar, actions);
+    }
+
+
+
+    uchar ctmarker;
+    stream >> ctmarker;
+    if (ctmarker != CustomToolBarMarker)
+        return false;
+
+    QList<QToolBar *> oldCustomToolBars = customToolBars;
+
+    stream >> toolBars;
+    for (int i = 0; i < toolBars; i++) {
+        QString objectName;
+        QString toolBarName;
+        int actionCount;
+        stream >> objectName;
+        stream >> toolBarName;
+        stream >> actionCount;
+        QList<QAction *> actions;
+        for (int j = 0; j < actionCount; j++) {
+            QString actionName;
+            stream >> actionName;
+
+            if (actionName.isEmpty())
+                actions.append(0);
+            else {
+                QAction *action = findAction(actionName);
+                if (action)
+                    actions.append(action);
+            }
+        }
+
+        QToolBar *toolBar = toolBarByName(objectName);
+        if (toolBar) {
+            toolBar->setWindowTitle(toolBarName);
+            oldCustomToolBars.removeAll(toolBar);
+        }
+        else
+            toolBar = q_ptr->createToolBar(toolBarName);
+        if (toolBar) {
+            toolBar->setObjectName(objectName);
+            q_ptr->setToolBar(toolBar, actions);
+        }
+    }
+    QListIterator<QToolBar *> itToolBar(oldCustomToolBars);
+    while (itToolBar.hasNext())
+        q_ptr->deleteToolBar(itToolBar.next());
+    return true;
+}
+
+QToolBar *QtFullToolBarManagerPrivate::findDefaultToolBar(const QString &objectName) const
+{
+    QMap<QToolBar *, QList<QAction *> >::ConstIterator itToolBar =
+                defaultToolBars.constBegin();
+    while (itToolBar != defaultToolBars.constEnd()) {
+        QToolBar *tb = itToolBar.key();
+        if (tb->objectName() == objectName)
+            return tb;
+
+        itToolBar++;
+    }
+
+    qWarning("QtToolBarManager::restoreState(): cannot find a QToolBar named "
+        "'%s', trying to match using 'windowTitle' instead.",
+        objectName.toLocal8Bit().constData());
+
+    itToolBar = defaultToolBars.constBegin();
+    while (itToolBar != defaultToolBars.constEnd()) {
+        QToolBar *tb = itToolBar.key();
+        if (tb->windowTitle() == objectName)
+            return tb;
+
+        itToolBar++;
+    }
+    qWarning("QtToolBarManager::restoreState(): cannot find a QToolBar with "
+        "matching 'windowTitle' (looking for '%s').",
+        objectName.toLocal8Bit().constData());
+
+    return 0;
+}
+
+QAction *QtFullToolBarManagerPrivate::findAction(const QString &actionName) const
+{
+    QSetIterator<QAction *> itAction(allActions);
+    while (itAction.hasNext()) {
+        QAction *action = itAction.next();
+
+        if (action->objectName() == actionName)
+            return action;
+    }
+    qWarning("QtToolBarManager::restoreState(): cannot find a QAction named "
+        "'%s', trying to match using 'text' instead.",
+        actionName.toLocal8Bit().constData());
+
+    itAction.toFront();
+    while (itAction.hasNext()) {
+        QAction *action = itAction.next();
+
+        if (action->text() == actionName)
+            return action;
+    }
+    qWarning("QtToolBarManager::restoreState(): cannot find a QAction with "
+        "matching 'text' (looking for '%s').",
+        actionName.toLocal8Bit().constData());
+
+    return 0;
+}
+
+QToolBar *QtFullToolBarManagerPrivate::toolBarByName(const QString &toolBarName) const
+{
+    QMap<QToolBar *, QList<QAction *> >::ConstIterator itToolBar = toolBars.constBegin();
+    while (itToolBar != toolBars.constEnd()) {
+        QToolBar *toolBar = itToolBar.key();
+        if (toolBar->objectName() == toolBarName)
+            return toolBar;
+
+        itToolBar++;
+    }
+    return 0;
+}
+
+//////////////////////////////
+
+QtFullToolBarManager::QtFullToolBarManager(QObject *parent)
+    : QObject(parent)
+{
+    d_ptr = new QtFullToolBarManagerPrivate;
+    d_ptr->q_ptr = this;
+}
+
+QtFullToolBarManager::~QtFullToolBarManager()
+{
+    delete d_ptr;
+}
+
+void QtFullToolBarManager::setMainWindow(QMainWindow *mainWindow)
+{
+    d_ptr->theMainWindow = mainWindow;
+}
+
+QMainWindow *QtFullToolBarManager::mainWindow() const
+{
+    return d_ptr->theMainWindow;
+}
+
+void QtFullToolBarManager::addCategory(const QString &category)
+{
+    d_ptr->categoryToActions[category] = QList<QAction *>();
+}
+
+bool QtFullToolBarManager::hasCategory(const QString &category) const
+{
+    return d_ptr->categoryToActions.contains(category);
+}
+
+QStringList QtFullToolBarManager::categories() const
+{
+    return d_ptr->categoryToActions.keys();
+}
+
+QList<QAction *> QtFullToolBarManager::categoryActions(const QString &category) const
+{
+    QMap<QString, QList<QAction *> >::ConstIterator it =
+                d_ptr->categoryToActions.find(category);
+    if (it != d_ptr->categoryToActions.constEnd())
+        return it.value();
+    return QList<QAction *>();
+}
+
+QString QtFullToolBarManager::actionCategory(QAction *action) const
+{
+    QMap<QAction *, QString>::ConstIterator it = d_ptr->actionToCategory.find(action);
+    if (it != d_ptr->actionToCategory.constEnd())
+        return it.value();
+    return QString();
+}
+
+void QtFullToolBarManager::addAction(QAction *action, const QString &category)
+{
+    if (!action)
+        return;
+//    if (!d_ptr->categoryToActions.contains(category))
+//        return;
+    if (action->isSeparator())
+        return;
+    if (d_ptr->allActions.contains(action))
+        return;
+    if (QLatin1String(action->metaObject()->className()) ==
+                QLatin1String("QToolBarWidgetAction"))
+        d_ptr->widgetActions.insert(action, 0);
+    else
+        d_ptr->regularActions.insert(action);
+    d_ptr->allActions.insert(action);
+    d_ptr->categoryToActions[category].append(action);
+    d_ptr->actionToCategory[action] = category;
+}
+
+void QtFullToolBarManager::removeAction(QAction *action)
+{
+    if (!d_ptr->allActions.contains(action))
+        return;
+
+    QList<QToolBar *> toolBars = d_ptr->actionToToolBars[action];
+    QListIterator<QToolBar *> itToolBar(toolBars);
+    while (itToolBar.hasNext()) {
+        QToolBar *toolBar = itToolBar.next();
+
+        d_ptr->toolBars[toolBar].removeAll(action);
+        d_ptr->toolBarsWithSeparators[toolBar].removeAll(action);
+
+        toolBar->removeAction(action);
+    }
+
+    QMap<QToolBar *, QList<QAction *> >::ConstIterator itDefault =
+            d_ptr->defaultToolBars.constBegin();
+    while (itDefault != d_ptr->defaultToolBars.constEnd()) {
+        if (itDefault.value().contains(action))
+            d_ptr->defaultToolBars[itDefault.key()].removeAll(action);
+
+        itDefault++;
+    }
+
+    d_ptr->allActions.remove(action);
+    d_ptr->widgetActions.remove(action);
+    d_ptr->regularActions.remove(action);
+    d_ptr->actionToToolBars.remove(action);
+
+    QString category = d_ptr->actionToCategory.value(action);
+    d_ptr->actionToCategory.remove(action);
+    d_ptr->categoryToActions[category].removeAll(action);
+
+    if (d_ptr->categoryToActions[category].isEmpty())
+        d_ptr->categoryToActions.remove(category);
+}
+
+QSet<QAction *> QtFullToolBarManager::actions() const
+{
+    return d_ptr->allActions;
+}
+
+bool QtFullToolBarManager::isWidgetAction(QAction *action) const
+{
+    if (d_ptr->widgetActions.contains(action))
+        return true;
+    return false;
+}
+
+void QtFullToolBarManager::addDefaultToolBar(QToolBar *toolBar, const QString &category)
+{
+    if (!toolBar)
+        return;
+    if (d_ptr->toolBars.contains(toolBar))
+        return;
+//    if (!d_ptr->categoryToActions.contains(category))
+//        return;
+    // could be also checked if toolBar belongs to mainwindow
+
+    QList<QAction *> newActionsWithSeparators;
+    QList<QAction *> newActions;
+    QList<QAction *> actions = toolBar->actions();
+    QListIterator<QAction *> itAction(actions);
+    while (itAction.hasNext()) {
+        QAction *action = itAction.next();
+        addAction(action, category);
+        if (d_ptr->widgetActions.contains(action))
+            d_ptr->widgetActions.insert(action, toolBar);
+        newActionsWithSeparators.append(action);
+        if (action->isSeparator())
+            action = 0;
+        else
+            d_ptr->actionToToolBars[action].append(toolBar);
+        newActions.append(action);
+    }
+    d_ptr->defaultToolBars.insert(toolBar, newActions);
+    //Below could be done by call setToolBar() if we want signal emission here.
+    d_ptr->toolBars.insert(toolBar, newActions);
+    d_ptr->toolBarsWithSeparators.insert(toolBar, newActionsWithSeparators);
+}
+
+void QtFullToolBarManager::removeDefaultToolBar(QToolBar *toolBar)
+{
+    if (!d_ptr->defaultToolBars.contains(toolBar))
+        return;
+
+    QList<QAction *> defaultActions = d_ptr->defaultToolBars[toolBar];
+    setToolBar(toolBar, QList<QAction *>());
+    QListIterator<QAction *> itAction(defaultActions);
+    while (itAction.hasNext())
+        removeAction(itAction.next());
+
+    d_ptr->toolBars.remove(toolBar);
+    d_ptr->toolBarsWithSeparators.remove(toolBar);
+    d_ptr->defaultToolBars.remove(toolBar);
+
+    itAction.toFront();
+    while (itAction.hasNext()) {
+        QAction *action = itAction.next();
+        if (action)
+            toolBar->insertAction(0, action);
+        else
+            toolBar->insertSeparator(0);
+    }
+}
+
+QMap<QToolBar *, QList<QAction *> > QtFullToolBarManager::defaultToolBars() const
+{
+    return d_ptr->defaultToolBars;
+}
+
+bool QtFullToolBarManager::isDefaultToolBar(QToolBar *toolBar) const
+{
+    if (d_ptr->defaultToolBars.contains(toolBar))
+        return true;
+    return false;
+}
+
+QToolBar *QtFullToolBarManager::createToolBar(const QString &toolBarName)
+{
+    if (!mainWindow())
+        return 0;
+    QToolBar *toolBar = new QToolBar(toolBarName, mainWindow());
+    int i = 1;
+    QLatin1String prefix("_Custom_Toolbar_");
+    QString name = QString("%1%2").arg(prefix).arg(i);
+    while (d_ptr->toolBarByName(name))
+        name = QString("%1%2").arg(prefix).arg(++i);
+    toolBar->setObjectName(name);
+    mainWindow()->addToolBar(toolBar);
+    d_ptr->customToolBars.append(toolBar);
+    d_ptr->toolBars.insert(toolBar, QList<QAction *>());
+    d_ptr->toolBarsWithSeparators.insert(toolBar, QList<QAction *>());
+    //emit toolBarCreated(toolBar);
+    return toolBar;
+}
+
+void QtFullToolBarManager::deleteToolBar(QToolBar *toolBar)
+{
+    if (!d_ptr->toolBars.contains(toolBar))
+        return;
+    if (d_ptr->defaultToolBars.contains(toolBar))
+        return;
+    setToolBar(toolBar, QList<QAction *>());
+    //emit toolBarRemoved(toolBar);
+    d_ptr->customToolBars.removeAll(toolBar);
+    d_ptr->toolBars.remove(toolBar);
+    d_ptr->toolBarsWithSeparators.remove(toolBar);
+    delete toolBar;
+}
+
+QList<QAction *> QtFullToolBarManager::actions(QToolBar *toolBar) const
+{
+    if (d_ptr->toolBars.contains(toolBar))
+        return d_ptr->toolBars.value(toolBar);
+    return QList<QAction *>();
+}
+
+void QtFullToolBarManager::setToolBars(const QMap<QToolBar *, QList<QAction *> > &actions)
+{
+    QMap<QToolBar *, QList<QAction *> >::ConstIterator it = actions.constBegin();
+    while (it != actions.constEnd()) {
+        setToolBar(it.key(), it.value());
+        it++;
+    }
+}
+
+void QtFullToolBarManager::setToolBar(QToolBar *toolBar, const QList<QAction *> &actions)
+{
+    if (!toolBar)
+        return;
+    if (!d_ptr->toolBars.contains(toolBar))
+        return;
+
+    if (actions == d_ptr->toolBars[toolBar])
+        return;
+
+    QMap<QToolBar *, QList<QAction *> > toRemove;
+
+    QList<QAction *> newActions;
+    QListIterator<QAction *> itAction(actions);
+    while (itAction.hasNext()) {
+        QAction *action = itAction.next();
+        if (!action || (!newActions.contains(action) && d_ptr->allActions.contains(action)))
+            newActions.append(action);
+
+        QToolBar *oldToolBar = d_ptr->toolBarWidgetAction(action);
+        if (oldToolBar && oldToolBar != toolBar)
+            toRemove[oldToolBar].append(action);
+    }
+
+    d_ptr->removeWidgetActions(toRemove);
+    //emit toolBarChanged(toolBar, newActions);
+
+    QList<QAction *> oldActions = d_ptr->toolBarsWithSeparators.value(toolBar);
+    QListIterator<QAction *> itOldAction(oldActions);
+    while (itOldAction.hasNext()) {
+        QAction *action = itOldAction.next();
+        /*
+        When addDefaultToolBar() separator actions could be checked if they are
+        inserted in other toolbars - if yes then create new one.
+        */
+        if (d_ptr->toolBarWidgetAction(action) == toolBar)
+            d_ptr->widgetActions.insert(action, 0);
+        toolBar->removeAction(action);
+        if (action->isSeparator())
+            delete action;
+        else
+            d_ptr->actionToToolBars[action].removeAll(toolBar);
+    }
+
+    QList<QAction *> newActionsWithSeparators;
+    QListIterator<QAction *> itNewActions(newActions);
+    while (itNewActions.hasNext()) {
+        QAction *action = itNewActions.next();
+        QAction *newAction = 0;
+        if (!action)
+            newAction = toolBar->insertSeparator(0);
+        if (d_ptr->allActions.contains(action)) {
+            toolBar->insertAction(0, action);
+            newAction = action;
+            d_ptr->actionToToolBars[action].append(toolBar);
+        }
+        newActionsWithSeparators.append(newAction);
+    }
+    d_ptr->toolBars.insert(toolBar, newActions);
+    d_ptr->toolBarsWithSeparators.insert(toolBar, newActionsWithSeparators);
+}
+
+QMap<QToolBar *, QList<QAction *> > QtFullToolBarManager::toolBarsActions() const
+{
+    return d_ptr->toolBars;
+}
+
+void QtFullToolBarManager::resetToolBar(QToolBar *toolBar)
+{
+    if (!isDefaultToolBar(toolBar))
+        return;
+    setToolBar(toolBar, defaultToolBars().value(toolBar));
+}
+
+void QtFullToolBarManager::resetAllToolBars()
+{
+    setToolBars(defaultToolBars());
+    QList<QToolBar *> oldCustomToolBars = d_ptr->customToolBars;
+    QListIterator<QToolBar *> itToolBar(oldCustomToolBars);
+    while (itToolBar.hasNext()) {
+        deleteToolBar(itToolBar.next());
+    }
+}
+
+QByteArray QtFullToolBarManager::saveState(int version) const
+{
+    QByteArray data;
+    QDataStream stream(&data, QIODevice::WriteOnly);
+    stream << QtFullToolBarManagerPrivate::VersionMarker;
+    stream << version;
+    d_ptr->saveState(stream);
+    return data;
+}
+
+bool QtFullToolBarManager::restoreState(const QByteArray &state, int version)
+{
+    QByteArray sd = state;
+    QDataStream stream(&sd, QIODevice::ReadOnly);
+    int marker, v;
+    stream >> marker;
+    stream >> v;
+    if (marker != QtFullToolBarManagerPrivate::VersionMarker || v != version)
+        return false;
+    return d_ptr->restoreState(stream);
+}
+
+
+class QtToolBarManagerPrivate
+{
+    class QtToolBarManager *q_ptr;
+    Q_DECLARE_PUBLIC(QtToolBarManager)
+public:
+    QtFullToolBarManager *manager;
+};
+
+//////////////////////////////////////
+
+/*! \class QtToolBarManager
+
+    \brief The QtToolBarManager class provides toolbar management for
+    main windows.
+
+    The QtToolBarManager is typically used with a QtToolBarDialog
+    which allows the user to customize the toolbars for a given main
+    window. The QtToolBarDialog class's functionality is controlled by
+    an instance of the QtToolBarManager class, and the main window is
+    specified using the QtToolBarManager class's setMainWindow()
+    function.
+
+    The currently specified main window can be retrieved using the
+    mainWindow() function.
+
+    The toolbar manager holds lists of the given main window's actions
+    and toolbars, and can add actions and toolbars to these
+    lists using the addAction() and addToolBar() functions
+    respectively. The actions can in addition be categorized
+    acccording to the user's preferences. The toolbar manager can also
+    remove custom actions and toolbars using the removeAction() and
+    removeToolBar() functions.
+
+    Finally, the QtToolBarManager is able to save the customized state
+    of its toolbars using the saveState() function as well as restore
+    the toolbars' saved state using restoreState() function.
+
+    \sa QtToolBarDialog
+*/
+
+/*!
+    Creates a toolbar manager with the given \a parent.
+*/
+QtToolBarManager::QtToolBarManager(QObject *parent)
+    : QObject(parent)
+{
+    d_ptr = new QtToolBarManagerPrivate;
+    d_ptr->q_ptr = this;
+
+    d_ptr->manager = new QtFullToolBarManager(this);
+}
+
+/*!
+    Destroys the toolbar manager.
+*/
+QtToolBarManager::~QtToolBarManager()
+{
+    delete d_ptr;
+}
+
+/*!
+    Sets the main window upon which the toolbar manager operates, to
+    be the given \a mainWindow.
+*/
+void QtToolBarManager::setMainWindow(QMainWindow *mainWindow)
+{
+    d_ptr->manager->setMainWindow(mainWindow);
+}
+
+/*!
+    Returns the main window associated this toolbar manager.
+*/
+QMainWindow *QtToolBarManager::mainWindow() const
+{
+    return d_ptr->manager->mainWindow();
+}
+
+/*!
+    Adds the given \a action to the given \a category in the manager's
+    list of actions. If the \a category doesn't exist it is created.
+    Only non separator actions can be added. If the action is already
+    added to the list, the function doesn't do anything.
+
+    \sa removeAction()
+*/
+void QtToolBarManager::addAction(QAction *action, const QString &category)
+{
+    d_ptr->manager->addAction(action, category);
+}
+
+/*!
+    Removes the specified \a action from the manager's list of
+    actions. The action is also removed from all the registered
+    toolbars.  If the specified \a action is the only action in its
+    category, that category is removed as well.
+
+    \sa addAction()
+*/
+void QtToolBarManager::removeAction(QAction *action)
+{
+    d_ptr->manager->removeAction(action);
+}
+
+/*!
+    Adds the given \a toolBar to the manager's toolbar list.
+
+    All the \a toolBar's actions are automatically added to the given
+    \a category in the manager's list of actions if they're not
+    already there. The manager remembers which toolbar the actions
+    belonged to, so, when the \a toolBar is removed, its actions will
+    be removed as well.
+
+    Custom toolbars are created with the main window returned by
+    the mainWindow() function, as its parent.
+
+    \sa removeToolBar()
+*/
+void QtToolBarManager::addToolBar(QToolBar *toolBar, const QString &category)
+{
+    d_ptr->manager->addDefaultToolBar(toolBar, category);
+}
+
+/*!
+    Removes the specified \a toolBar from the manager's list. All the
+    actions that existed in the specified \a toolBar when it was
+    added are removed as well.
+
+    \sa addToolBar()
+*/
+void QtToolBarManager::removeToolBar(QToolBar *toolBar)
+{
+    d_ptr->manager->removeDefaultToolBar(toolBar);
+}
+
+/*!
+    Returns the manager's toolbar list.
+*/
+QList<QToolBar *> QtToolBarManager::toolBars() const
+{
+    return d_ptr->manager->toolBarsActions().keys();
+}
+
+/*
+void QtToolBarManager::resetToolBar(QToolBar *toolBar)
+{
+    d_ptr->manager->resetToolBar(toolBar);
+}
+
+void QtToolBarManager::resetAllToolBars()
+{
+    d_ptr->manager->resetAllToolBars();
+}
+*/
+
+/*!
+    Saves the state of the toolbar manager's toolbars. The \a version
+    number is stored as part of the data.
+
+    Identifies all the QToolBar and QAction objects by their object
+    name property. Ensure that this property is unique for each
+    QToolBar and QAction that you add using the QtToolBarManager.
+
+    Returns an identifier for the state which can be passed along with
+    the version number to the restoreState() function to restore the
+    saved state.
+
+    \sa restoreState()
+*/
+QByteArray QtToolBarManager::saveState(int version) const
+{
+    return d_ptr->manager->saveState(version);
+}
+
+/*!
+    Restores the saved state of the toolbar manager's toolbars.  The
+    \a version number is compared with the version number of the
+    stored \a state.
+
+    Returns true if the version numbers are matching and the toolbar
+    manager's state is restored; otherwise the toolbar manager's state
+    is left unchanged and the function returns false.
+
+    Note that the state of the toolbar manager's toolbars should be
+    restored before restoring the state of the main window's toolbars
+    and dockwidgets using the QMainWindow::restoreState() function. In
+    that way the restoreState() function can create the custom
+    toolbars before the QMainWindow::restoreState() function restores
+    the custom toolbars' positions.
+
+    \sa saveState()
+*/
+bool QtToolBarManager::restoreState(const QByteArray &state, int version)
+{
+    return d_ptr->manager->restoreState(state, version);
+}
+
+//////////////////////
+
+class ToolBarItem {
+public:
+    ToolBarItem() : tb(0) {}
+    ToolBarItem(QToolBar *toolBar) : tb(toolBar) {}
+    ToolBarItem(QToolBar *toolBar, const QString &toolBarName)
+            : tb(toolBar), tbName(toolBarName) {}
+    ToolBarItem(const QString &toolBarName) : tb(0), tbName(toolBarName) {}
+    QToolBar *toolBar() const
+        { return tb; }
+    void setToolBar(QToolBar *toolBar)
+        { tb = toolBar; }
+    QString toolBarName() const
+        { return tbName; }
+    void setToolBarName(const QString &toolBarName)
+        { tbName = toolBarName; }
+private:
+    QToolBar *tb;
+    QString tbName;
+};
+
+class QtToolBarDialogPrivate {
+    QtToolBarDialog *q_ptr;
+    Q_DECLARE_PUBLIC(QtToolBarDialog)
+public:
+    QtToolBarDialogPrivate()
+        : toolBarManager(0),
+          currentAction(0),
+          currentToolBar(0)
+          { }
+
+    ToolBarItem *createItem(QToolBar *toolBar);
+    ToolBarItem *createItem(const QString &toolBarName);
+    void deleteItem(ToolBarItem *item);
+
+    void newClicked();
+    void removeClicked();
+    void defaultClicked();
+    void okClicked();
+    void applyClicked();
+    void cancelClicked();
+    void upClicked();
+    void downClicked();
+    void leftClicked();
+    void rightClicked();
+    void renameClicked();
+    void toolBarRenamed(QListWidgetItem *item);
+    void currentActionChanged(QTreeWidgetItem *current);
+    void currentToolBarChanged(QListWidgetItem *current);
+    void currentToolBarActionChanged(QListWidgetItem *current);
+
+    void removeToolBar(ToolBarItem *item);
+    bool isDefaultToolBar(ToolBarItem *item) const;
+    void setButtons();
+    void clearOld();
+    void fillNew();
+    QtFullToolBarManager *toolBarManager;
+    QMap<ToolBarItem *, QList<QAction *> > currentState;
+    QMap<QToolBar *, ToolBarItem *> toolBarItems;
+    QSet<ToolBarItem *> createdItems;
+    QSet<ToolBarItem *> removedItems;
+
+    QSet<ToolBarItem *> allToolBarItems;
+
+    // static
+    QTreeWidgetItem *currentAction;
+    QMap<QAction *, QTreeWidgetItem *> actionToItem;
+    QMap<QTreeWidgetItem *, QAction *> itemToAction;
+
+    // dynamic
+    ToolBarItem *currentToolBar;
+    QMap<ToolBarItem *, QListWidgetItem *> toolBarToItem;
+    QMap<QListWidgetItem *, ToolBarItem *> itemToToolBar;
+
+    // dynamic
+    QMap<QAction *, QListWidgetItem *> actionToCurrentItem;
+    QMap<QListWidgetItem *, QAction *> currentItemToAction;
+
+    QMap<QAction *, ToolBarItem *> widgetActionToToolBar;
+    QMap<ToolBarItem *, QSet<QAction *> > toolBarToWidgetActions;
+
+    QString separatorText;
+    Ui::QtToolBarDialog ui;
+};
+
+ToolBarItem *QtToolBarDialogPrivate::createItem(QToolBar *toolBar)
+{
+    if (!toolBar)
+        return 0;
+    ToolBarItem *item = new ToolBarItem(toolBar, toolBar->windowTitle());
+    allToolBarItems.insert(item);
+    return item;
+}
+
+ToolBarItem *QtToolBarDialogPrivate::createItem(const QString &toolBarName)
+{
+    ToolBarItem *item = new ToolBarItem(toolBarName);
+    allToolBarItems.insert(item);
+    return item;
+}
+
+void QtToolBarDialogPrivate::deleteItem(ToolBarItem *item)
+{
+    if (!allToolBarItems.contains(item))
+        return;
+    allToolBarItems.remove(item);
+    delete item;
+}
+
+void QtToolBarDialogPrivate::clearOld()
+{
+    ui.actionTree->clear();
+    ui.toolBarList->clear();
+    ui.currentToolBarList->clear();
+    ui.removeButton->setEnabled(false);
+    ui.newButton->setEnabled(false);
+    ui.upButton->setEnabled(false);
+    ui.downButton->setEnabled(false);
+    ui.leftButton->setEnabled(false);
+    ui.rightButton->setEnabled(false);
+
+    actionToItem.clear();
+    itemToAction.clear();
+    toolBarToItem.clear();
+    itemToToolBar.clear();
+    actionToCurrentItem.clear();
+    currentItemToAction.clear();
+    widgetActionToToolBar.clear();
+    toolBarToWidgetActions.clear();
+
+    toolBarItems.clear();
+    currentState.clear();
+    createdItems.clear();
+    removedItems.clear();
+    QSetIterator<ToolBarItem *> itItem(allToolBarItems);
+    while (itItem.hasNext())
+        delete itItem.next();
+    allToolBarItems.clear();
+
+    currentToolBar = 0;
+    currentAction = 0;
+}
+
+void QtToolBarDialogPrivate::fillNew()
+{
+    if (!toolBarManager)
+        return;
+
+    QTreeWidgetItem *item = new QTreeWidgetItem(ui.actionTree);
+    item->setText(0, separatorText);
+    ui.actionTree->setCurrentItem(item);
+    currentAction = item;
+    actionToItem.insert(0, item);
+    itemToAction.insert(item, 0);
+    QStringList categories = toolBarManager->categories();
+    QStringListIterator itCategory(categories);
+    while (itCategory.hasNext()) {
+        QString category = itCategory.next();
+        QTreeWidgetItem *categoryItem = new QTreeWidgetItem(ui.actionTree);
+        categoryItem->setText(0, category);
+        QList<QAction *> actions = toolBarManager->categoryActions(category);
+        QListIterator<QAction *> itAction(actions);
+        while (itAction.hasNext()) {
+            QAction *action = itAction.next();
+            item = new QTreeWidgetItem(categoryItem);
+            item->setText(0, action->text());
+            item->setIcon(0, action->icon());
+            item->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic);
+            actionToItem.insert(action, item);
+            itemToAction.insert(item, action);
+            if (toolBarManager->isWidgetAction(action)) {
+                item->setData(0, Qt::TextColorRole, QColor(Qt::blue));
+                widgetActionToToolBar.insert(action, 0);
+            }
+            item->setFlags(item->flags() | Qt::ItemIsDragEnabled);
+        }
+        ui.actionTree->setItemExpanded(categoryItem, true);
+    }
+    //ui.actionTree->sortItems(0, Qt::AscendingOrder);
+
+    QMap<QToolBar *, QList<QAction *> > toolBars = toolBarManager->toolBarsActions();
+    QMap<QToolBar *, QList<QAction *> >::ConstIterator it = toolBars.constBegin();
+    while (it != toolBars.constEnd()) {
+        QToolBar *toolBar = it.key();
+        ToolBarItem *tbItem = createItem(toolBar);
+        toolBarItems.insert(toolBar, tbItem);
+        QListWidgetItem *item = new QListWidgetItem(toolBar->windowTitle(),
+                ui.toolBarList);
+        toolBarToItem.insert(tbItem, item);
+        itemToToolBar.insert(item, tbItem);
+        QList<QAction *> actions = it.value();
+        QListIterator<QAction *> itAction(actions);
+        while (itAction.hasNext()) {
+            QAction *action = itAction.next();
+            if (toolBarManager->isWidgetAction(action)) {
+                widgetActionToToolBar.insert(action, tbItem);
+                toolBarToWidgetActions[tbItem].insert(action);
+            }
+        }
+        currentState.insert(tbItem, actions);
+        if (it == toolBars.constBegin())
+            ui.toolBarList->setCurrentItem(item);
+        if (isDefaultToolBar(tbItem))
+            item->setData(Qt::TextColorRole, QColor(Qt::darkGreen));
+        else
+            item->setFlags(item->flags() | Qt::ItemIsEditable);
+
+        it++;
+    }
+    ui.toolBarList->sortItems();
+    setButtons();
+}
+
+bool QtToolBarDialogPrivate::isDefaultToolBar(ToolBarItem *item) const
+{
+    if (!item)
+        return false;
+    if (!item->toolBar())
+        return false;
+    return toolBarManager->isDefaultToolBar(item->toolBar());
+}
+
+void QtToolBarDialogPrivate::setButtons()
+{
+    bool newEnabled = false;
+    bool removeEnabled = false;
+    bool renameEnabled = false;
+    bool upEnabled = false;
+    bool downEnabled = false;
+    bool leftEnabled = false;
+    bool rightEnabled = false;
+
+    if (toolBarManager) {
+        newEnabled = true;
+        removeEnabled = !isDefaultToolBar(currentToolBar);
+        renameEnabled = removeEnabled;
+        QListWidgetItem *currentToolBarAction = ui.currentToolBarList->currentItem();
+        if (currentToolBarAction) {
+            int row = ui.currentToolBarList->row(currentToolBarAction);
+            upEnabled = row > 0;
+            downEnabled = row < ui.currentToolBarList->count() - 1;
+            leftEnabled = true;
+        }
+        if (currentAction && currentToolBar)
+            rightEnabled = true;
+    }
+    ui.newButton->setEnabled(newEnabled);
+    ui.removeButton->setEnabled(removeEnabled);
+    ui.renameButton->setEnabled(renameEnabled);
+    ui.upButton->setEnabled(upEnabled);
+    ui.downButton->setEnabled(downEnabled);
+    ui.leftButton->setEnabled(leftEnabled);
+    ui.rightButton->setEnabled(rightEnabled);
+}
+
+void QtToolBarDialogPrivate::newClicked()
+{
+    QString toolBarName = q_ptr->tr("Custom Toolbar"); // = QInputDialog::getString();
+    // produce unique name
+    ToolBarItem *item = createItem(toolBarName);
+    currentState.insert(item, QList<QAction *>());
+    createdItems.insert(item);
+    QListWidgetItem *i = new QListWidgetItem(toolBarName, ui.toolBarList);
+    i->setFlags(i->flags() | Qt::ItemIsEditable);
+    ui.toolBarList->setCurrentItem(i);
+    itemToToolBar.insert(i, item);
+    toolBarToItem.insert(item, i);
+    ui.toolBarList->sortItems();
+    ui.toolBarList->setCurrentItem(i);
+    currentToolBarChanged(i);
+    renameClicked();
+}
+
+void QtToolBarDialogPrivate::removeToolBar(ToolBarItem *item)
+{
+    if (!item)
+        return;
+    if (item->toolBar() && toolBarManager->isDefaultToolBar(item->toolBar()))
+        return;
+    if (!toolBarToItem.contains(item))
+        return;
+    QListWidgetItem *i = toolBarToItem.value(item);
+    bool wasCurrent = false;
+    if (i == ui.toolBarList->currentItem())
+        wasCurrent = true;
+    int row = ui.toolBarList->row(i);
+    QMap<ToolBarItem *, QSet<QAction *> >::ConstIterator itToolBar =
+            toolBarToWidgetActions.find(item);
+    if (itToolBar != toolBarToWidgetActions.constEnd()) {
+        QSet<QAction *> actions = itToolBar.value();
+        QSetIterator<QAction *> itAction(actions);
+        while (itAction.hasNext()) {
+            QAction *action = itAction.next();
+            widgetActionToToolBar.insert(action, 0);
+        }
+        toolBarToWidgetActions.remove(item);
+    }
+
+    currentState.remove(item);
+    createdItems.remove(item);
+    toolBarToItem.remove(item);
+    itemToToolBar.remove(i);
+    delete i;
+    if (item->toolBar())
+        removedItems.insert(item);
+    else
+        deleteItem(item);
+    if (wasCurrent) {
+        if (row == ui.toolBarList->count())
+            row--;
+        if (row < 0)
+            ;
+        else
+            ui.toolBarList->setCurrentRow(row);
+    }
+    setButtons();
+}
+
+void QtToolBarDialogPrivate::removeClicked()
+{
+    QListWidgetItem *i = ui.toolBarList->currentItem();
+    if (!i)
+        return;
+    ToolBarItem *item = itemToToolBar.value(i);
+    removeToolBar(item);
+}
+
+void QtToolBarDialogPrivate::defaultClicked()
+{
+    QMap<QToolBar *, QList<QAction *> > defaultToolBars = toolBarManager->defaultToolBars();
+    QMap<QToolBar *, QList<QAction *> >::ConstIterator itToolBar = defaultToolBars.constBegin();
+    while (itToolBar != defaultToolBars.constEnd()) {
+        QToolBar *toolBar = itToolBar.key();
+        ToolBarItem *toolBarItem = toolBarItems.value(toolBar);
+
+        if (toolBarToWidgetActions.contains(toolBarItem)) {
+            QSetIterator<QAction *> itAction(toolBarToWidgetActions.value(toolBarItem));
+            while (itAction.hasNext())
+                widgetActionToToolBar.insert(itAction.next(), 0);
+            toolBarToWidgetActions.remove(toolBarItem);
+        }
+
+        currentState.remove(toolBarItem);
+
+        QListIterator<QAction *> itAction(itToolBar.value());
+        while (itAction.hasNext()) {
+            QAction *action = itAction.next();
+            if (toolBarManager->isWidgetAction(action)) {
+                ToolBarItem *otherToolBar = widgetActionToToolBar.value(action);
+                if (otherToolBar) {
+                    toolBarToWidgetActions[otherToolBar].remove(action);
+                    currentState[otherToolBar].removeAll(action);
+                }
+                widgetActionToToolBar.insert(action, toolBarItem);
+                toolBarToWidgetActions[toolBarItem].insert(action);
+            }
+        }
+        currentState.insert(toolBarItem, itToolBar.value());
+
+        itToolBar++;
+    }
+    currentToolBarChanged(toolBarToItem.value(currentToolBar));
+
+    QList<ToolBarItem *> toolBars = currentState.keys();
+    QListIterator<ToolBarItem *> itTb(toolBars);
+    while (itTb.hasNext())
+        removeToolBar(itTb.next());
+}
+
+void QtToolBarDialogPrivate::okClicked()
+{
+    applyClicked();
+    q_ptr->accept();
+}
+
+void QtToolBarDialogPrivate::applyClicked()
+{
+    QMap<ToolBarItem *, QList<QAction *> > toolBars = currentState;
+    QMap<ToolBarItem *, QList<QAction *> >::ConstIterator itToolBar = toolBars.constBegin();
+    while (itToolBar != toolBars.constEnd()) {
+        ToolBarItem *item = itToolBar.key();
+        QToolBar *toolBar = item->toolBar();
+        if (toolBar) {
+            toolBarManager->setToolBar(toolBar, itToolBar.value());
+            toolBar->setWindowTitle(item->toolBarName());
+        }
+
+        itToolBar++;
+    }
+
+    QSet<ToolBarItem *> toRemove = removedItems;
+    QSetIterator<ToolBarItem *> itRemove(toRemove);
+    while (itRemove.hasNext()) {
+        ToolBarItem *item = itRemove.next();
+        QToolBar *toolBar = item->toolBar();
+        removedItems.remove(item);
+        currentState.remove(item);
+        deleteItem(item);
+        if (toolBar)
+            toolBarManager->deleteToolBar(toolBar);
+    }
+
+    QSet<ToolBarItem *> toCreate = createdItems;
+    QSetIterator<ToolBarItem *> itCreate(toCreate);
+    while (itCreate.hasNext()) {
+        ToolBarItem *item = itCreate.next();
+        QString toolBarName = item->toolBarName();
+        createdItems.remove(item);
+        QList<QAction *> actions = currentState.value(item);
+        QToolBar *toolBar = toolBarManager->createToolBar(toolBarName);
+        item->setToolBar(toolBar);
+        toolBarManager->setToolBar(toolBar, actions);
+    }
+}
+
+void QtToolBarDialogPrivate::upClicked()
+{
+    QListWidgetItem *currentToolBarAction = ui.currentToolBarList->currentItem();
+    if (!currentToolBarAction)
+        return;
+    int row = ui.currentToolBarList->row(currentToolBarAction);
+    if (row == 0)
+        return;
+    ui.currentToolBarList->takeItem(row);
+    int newRow = row - 1;
+    ui.currentToolBarList->insertItem(newRow, currentToolBarAction);
+    QList<QAction *> actions = currentState.value(currentToolBar);
+    QAction *action = actions.at(row);
+    actions.removeAt(row);
+    actions.insert(newRow, action);
+    currentState.insert(currentToolBar, actions);
+    ui.currentToolBarList->setCurrentItem(currentToolBarAction);
+    setButtons();
+}
+
+void QtToolBarDialogPrivate::downClicked()
+{
+    QListWidgetItem *currentToolBarAction = ui.currentToolBarList->currentItem();
+    if (!currentToolBarAction)
+        return;
+    int row = ui.currentToolBarList->row(currentToolBarAction);
+    if (row == ui.currentToolBarList->count() - 1)
+        return;
+    ui.currentToolBarList->takeItem(row);
+    int newRow = row + 1;
+    ui.currentToolBarList->insertItem(newRow, currentToolBarAction);
+    QList<QAction *> actions = currentState.value(currentToolBar);
+    QAction *action = actions.at(row);
+    actions.removeAt(row);
+    actions.insert(newRow, action);
+    currentState.insert(currentToolBar, actions);
+    ui.currentToolBarList->setCurrentItem(currentToolBarAction);
+    setButtons();
+}
+
+void QtToolBarDialogPrivate::leftClicked()
+{
+    QListWidgetItem *currentToolBarAction = ui.currentToolBarList->currentItem();
+    if (!currentToolBarAction)
+        return;
+    int row = ui.currentToolBarList->row(currentToolBarAction);
+    currentState[currentToolBar].removeAt(row);
+    QAction *action = currentItemToAction.value(currentToolBarAction);
+    if (widgetActionToToolBar.contains(action)) {
+        ToolBarItem *item = widgetActionToToolBar.value(action);
+        if (item == currentToolBar) { // have to be
+            toolBarToWidgetActions[item].remove(action);
+            if (toolBarToWidgetActions[item].empty())
+                toolBarToWidgetActions.remove(item);
+        }
+        widgetActionToToolBar.insert(action, 0);
+    }
+    if (action)
+        actionToCurrentItem.remove(action);
+    currentItemToAction.remove(currentToolBarAction);
+    delete currentToolBarAction;
+    if (row == ui.currentToolBarList->count())
+        row--;
+    if (row >= 0) {
+        QListWidgetItem *item = ui.currentToolBarList->item(row);
+        ui.currentToolBarList->setCurrentItem(item);
+    }
+    setButtons();
+}
+
+void QtToolBarDialogPrivate::rightClicked()
+{
+    if (!currentAction)
+        return;
+    if (!currentToolBar)
+        return;
+    QListWidgetItem *currentToolBarAction = ui.currentToolBarList->currentItem();
+
+    QAction *action = itemToAction.value(currentAction);
+    QListWidgetItem *item = 0;
+    if (action) {
+        if (currentState[currentToolBar].contains(action)) {
+            item = actionToCurrentItem.value(action);
+            if (item == currentToolBarAction)
+                return;
+            int row = ui.currentToolBarList->row(item);
+            ui.currentToolBarList->takeItem(row);
+            currentState[currentToolBar].removeAt(row);
+            // only reorder here
+        } else {
+            item = new QListWidgetItem(action->text());
+            item->setIcon(action->icon());
+            item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic);
+            currentItemToAction.insert(item, action);
+            actionToCurrentItem.insert(action, item);
+            if (widgetActionToToolBar.contains(action)) {
+                item->setData(Qt::TextColorRole, QColor(Qt::blue));
+                ToolBarItem *toolBar = widgetActionToToolBar.value(action);
+                if (toolBar) {
+                    currentState[toolBar].removeAll(action);
+                    toolBarToWidgetActions[toolBar].remove(action);
+                    if (toolBarToWidgetActions[toolBar].empty())
+                        toolBarToWidgetActions.remove(toolBar);
+                }
+                widgetActionToToolBar.insert(action, currentToolBar);
+                toolBarToWidgetActions[currentToolBar].insert(action);
+            }
+        }
+    } else {
+        item = new QListWidgetItem(separatorText);
+        currentItemToAction.insert(item, 0);
+    }
+
+    int row = ui.currentToolBarList->count();
+    if (currentToolBarAction) {
+        row = ui.currentToolBarList->row(currentToolBarAction) + 1;
+    }
+    ui.currentToolBarList->insertItem(row, item);
+    currentState[currentToolBar].insert(row, action);
+    ui.currentToolBarList->setCurrentItem(item);
+
+    setButtons();
+}
+
+void QtToolBarDialogPrivate::renameClicked()
+{
+    if (!currentToolBar)
+        return;
+
+    QListWidgetItem *item = toolBarToItem.value(currentToolBar);
+    ui.toolBarList->editItem(item);
+}
+
+void QtToolBarDialogPrivate::toolBarRenamed(QListWidgetItem *item)
+{
+    if (!currentToolBar)
+        return;
+
+    ToolBarItem *tbItem = itemToToolBar.value(item);
+    if (!tbItem)
+        return;
+    tbItem->setToolBarName(item->text());
+    //ui.toolBarList->sortItems();
+}
+
+void QtToolBarDialogPrivate::currentActionChanged(QTreeWidgetItem *current)
+{
+    if (itemToAction.contains(current))
+        currentAction = current;
+    else
+        currentAction = NULL;
+    setButtons();
+}
+
+void QtToolBarDialogPrivate::currentToolBarChanged(QListWidgetItem *current)
+{
+    currentToolBar = itemToToolBar.value(current);
+    ui.currentToolBarList->clear();
+    actionToCurrentItem.clear();
+    currentItemToAction.clear();
+    setButtons();
+    if (!currentToolBar) {
+        return;
+    }
+    QList<QAction *> actions = currentState.value(currentToolBar);
+    QListIterator<QAction *> itAction(actions);
+    QListWidgetItem *first = 0;
+    while (itAction.hasNext()) {
+        QAction *action = itAction.next();
+        QString actionName = separatorText;
+        if (action)
+            actionName = action->text();
+        QListWidgetItem *item = new QListWidgetItem(actionName, ui.currentToolBarList);
+        if (action) {
+            item->setIcon(action->icon());
+            item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic);
+            actionToCurrentItem.insert(action, item);
+            if (widgetActionToToolBar.contains(action))
+                item->setData(Qt::TextColorRole, QColor(Qt::blue));
+        }
+        currentItemToAction.insert(item, action);
+        if (!first)
+            first = item;
+    }
+    if (first)
+        ui.currentToolBarList->setCurrentItem(first);
+}
+
+void QtToolBarDialogPrivate::currentToolBarActionChanged(QListWidgetItem *)
+{
+    setButtons();
+}
+
+void QtToolBarDialogPrivate::cancelClicked()
+{
+    // just nothing
+    q_ptr->reject();
+}
+
+//////////////////////
+/*
+class FeedbackItemDelegate : public QItemDelegate
+{
+    Q_OBJECT
+public:
+    FeedbackItemDelegate(QObject *parent = 0) : QItemDelegate(parent) { }
+
+    virtual void paint(QPainter *painter, const QStyleOptionViewItem &option,
+                    const QModelIndex & index) const;
+    virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+};
+
+void FeedbackItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
+                            const QModelIndex &index) const
+{
+    if ()
+    painter->save();
+    QRect r = option.rect;
+    float yCentral = r.height() / 2.0;
+    float margin = 2.0;
+    float arrowWidth = 5.0;
+    float width = 20;
+    qDebug("rect: x %d, y %d, w %d, h %d", r.x(), r.y(), r.width(), r.height());
+    QLineF lineBase(0.0 + margin, r.y() + yCentral, width - margin, r.y() + yCentral);
+    QLineF lineArrowLeft(width - margin - arrowWidth, r.y() + yCentral - arrowWidth,
+                    width - margin, r.y() + yCentral);
+    QLineF lineArrowRight(width - margin - arrowWidth, r.y() + yCentral + arrowWidth,
+                    width - margin, r.y() + yCentral);
+    painter->drawLine(lineBase);
+    painter->drawLine(lineArrowLeft);
+    painter->drawLine(lineArrowRight);
+    painter->translate(QPoint(width, 0));
+    QItemDelegate::paint(painter, option, index);
+    painter->restore();
+}
+
+QSize FeedbackItemDelegate::sizeHint(const QStyleOptionViewItem &option,
+            const QModelIndex &index) const
+{
+    //return QItemDelegate::sizeHint(option, index);
+    QSize s = QItemDelegate::sizeHint(option, index);
+    s.setWidth(s.width() - 20);
+    return s;
+}
+
+class QtToolBarListWidget : public QListWidget
+{
+    Q_OBJECT
+public:
+    QtToolBarListWidget(QWidget *parent) : QListWidget(parent), actionDrag(false) {}
+
+protected:
+    void startDrag(Qt::DropActions supportedActions);
+
+    void dragEnterEvent(QDragEnterEvent *event);
+    void dragMoveEvent(QDragMoveEvent *event);
+    void dragLeaveEvent(QDragLeaveEvent *);
+    void dropEvent(QDropEvent *event);
+
+    void setDragAction(const QString *action) { actionName = action; }
+private:
+    QPersistentModelIndex lastDropIndicator;
+    QString actionName;
+    bool actionDrag;
+};
+
+void QtToolBarListWidget::startDrag(Qt::DropActions supportedActions)
+{
+    QListWidgetItem *item = currentItem();
+    if (item) {
+        actionName = QString();
+        emit aboutToDrag(item);
+        if (!actionName.isEmpty()) {
+            QDrag *drag = new QDrag(this);
+            QMimeData *data = new QMimeData;
+            data->setData("action", actionName.toLocal8Bit().constData());
+            drag->setMimeData(data);
+            drag->start(supportedActions);
+        }
+    }
+}
+
+void QtToolBarListWidget::dragEnterEvent(QDragEnterEvent *event)
+{
+    const QMimeData *mime = event->mimeData();
+    actionDrag = mime->hasFormat("action");
+    if (actionDrag)
+        event->accept();
+    else
+        event->ignore();
+}
+
+void QtToolBarListWidget::dragMoveEvent(QDragMoveEvent *event)
+{
+    event->ignore();
+    if (actionDrag) {
+        QPoint p = event->pos();
+        QListWidgetItem *item = itemAt(p);
+        Indicator indic = QtToolBarListWidget::None;
+        if (item) {
+            QRect rect = visualItemRect(item);
+            if (p.y() - rect.top() < rect.height() / 2)
+                indic = QtToolBarListWidget::Above;
+            else
+                indic = QtToolBarListWidget::Below;
+        }
+        setIndicator(item, indic);
+        event->accept();
+    }
+}
+
+void QtToolBarListWidget::dragLeaveEvent(QDragLeaveEvent *)
+{
+    if (actionDrag) {
+        actionDrag = false;
+        setIndicator(item, QtToolBarListWidget::None);
+    }
+}
+
+void QtToolBarListWidget::dropEvent(QDropEvent *event)
+{
+    if (actionDrag) {
+        QListWidgetItem *item = indicatorItem();
+        Indicator indic = indicator();
+        QByteArray array = event->mimeData()->data("action");
+        QDataStream stream(&array, QIODevice::ReadOnly);
+        QString action;
+        stream >> action;
+        emit actionDropped(action, item, );
+
+        actionDrag = false;
+        setIndicator(item, QtToolBarListWidget::None);
+    }
+}
+*/
+
+/*! \class QtToolBarDialog
+
+    \brief The QtToolBarDialog class provides a dialog for customizing
+    toolbars.
+
+    QtToolBarDialog allows the user to customize the toolbars for a
+    given main window.
+
+    \image qttoolbardialog.png
+
+    The dialog lets the users add, rename and remove custom toolbars.
+    Note that built-in toolbars are marked with a green color, and
+    cannot be removed or renamed.
+
+    The users can also add and remove actions from the toolbars. An
+    action can be added to many toolbars, but a toolbar can only
+    contain one instance of each action. Actions that contains a
+    widget are marked with a blue color in the list of actions, and
+    can only be added to one single toolbar.
+
+    Finally, the users can add separators to the toolbars.
+
+    The original toolbars can be restored by clicking the \gui
+    {Restore all} button. All custom toolbars will then be removed,
+    and all built-in toolbars will be restored to their original state.
+
+    The QtToolBarDialog class's functionality is controlled by an
+    instance of the QtToolBarManager class, and the main window is
+    specified using the QtToolBarManager::setMainWindow() function.
+
+    All you need to do to use QtToolBarDialog is to specify an
+    QtToolBarManager instance and call the QDialog::exec() slot:
+
+    \code
+    QtToolBarManager *toolBarManager;
+
+    void MyMainWindow::customize()
+        {
+            QtToolBarDialog dialog(this);
+            dialog.setToolBarManager(toolBarManager);
+            dialog.exec();
+        }
+    \endcode
+
+    \sa QtToolBarManager
+*/
+
+/*!
+    Creates a toolbar dialog with the given \a parent and the specifed
+    window \a flags.
+*/
+QtToolBarDialog::QtToolBarDialog(QWidget *parent, Qt::WindowFlags flags)
+    : QDialog(parent, flags)
+{
+    d_ptr = new QtToolBarDialogPrivate;
+    d_ptr->q_ptr = this;
+    d_ptr->ui.setupUi(this);
+    d_ptr->separatorText = tr("< S E P A R A T O R >");
+
+    d_ptr->ui.actionTree->setColumnCount(1);
+    d_ptr->ui.actionTree->setRootIsDecorated(false);
+    d_ptr->ui.actionTree->header()->hide();
+/*
+    ui.toolBarList->setEditTriggers(QAbstractItemView::DoubleClicked |
+                QAbstractItemView::EditKeyPressed);
+*/
+
+//    ui.actionList->setDragEnabled(true);
+//    FeedbackItemDelegate *del = new FeedbackItemDelegate(this);
+//    ui.currentToolBarList->setItemDelegate(del);
+//    ui.currentToolBarList->setAcceptDrops(true);
+
+    d_ptr->ui.upButton->setIcon(QIcon(":/qttoolbardialog/up.png"));
+    d_ptr->ui.downButton->setIcon(QIcon(":/qttoolbardialog/down.png"));
+    d_ptr->ui.leftButton->setIcon(QIcon(":/qttoolbardialog/back.png"));
+    d_ptr->ui.rightButton->setIcon(QIcon(":/qttoolbardialog/forward.png"));
+    d_ptr->ui.newButton->setIcon(QIcon(":/qttoolbardialog/plus.png"));
+    d_ptr->ui.removeButton->setIcon(QIcon(":/qttoolbardialog/minus.png"));
+
+    connect(d_ptr->ui.newButton, SIGNAL(clicked()), this, SLOT(newClicked()));
+    connect(d_ptr->ui.removeButton, SIGNAL(clicked()), this, SLOT(removeClicked()));
+    connect(d_ptr->ui.renameButton, SIGNAL(clicked()), this, SLOT(renameClicked()));
+    connect(d_ptr->ui.defaultButton, SIGNAL(clicked()), this, SLOT(defaultClicked()));
+    connect(d_ptr->ui.okButton, SIGNAL(clicked()), this, SLOT(okClicked()));
+    connect(d_ptr->ui.applyButton, SIGNAL(clicked()), this, SLOT(applyClicked()));
+    connect(d_ptr->ui.cancelButton, SIGNAL(clicked()), this, SLOT(cancelClicked()));
+    connect(d_ptr->ui.upButton, SIGNAL(clicked()), this, SLOT(upClicked()));
+    connect(d_ptr->ui.downButton, SIGNAL(clicked()), this, SLOT(downClicked()));
+    connect(d_ptr->ui.leftButton, SIGNAL(clicked()), this, SLOT(leftClicked()));
+    connect(d_ptr->ui.rightButton, SIGNAL(clicked()), this, SLOT(rightClicked()));
+
+    connect(d_ptr->ui.actionTree, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
+                    this, SLOT(currentActionChanged(QTreeWidgetItem *)));
+    connect(d_ptr->ui.toolBarList, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
+                    this, SLOT(currentToolBarChanged(QListWidgetItem *)));
+    connect(d_ptr->ui.currentToolBarList,
+                    SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
+                    this, SLOT(currentToolBarActionChanged(QListWidgetItem *)));
+
+    connect(d_ptr->ui.actionTree, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)),
+                    this, SLOT(rightClicked()));
+    connect(d_ptr->ui.currentToolBarList, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
+                    this, SLOT(leftClicked()));
+    connect(d_ptr->ui.toolBarList, SIGNAL(itemChanged(QListWidgetItem *)),
+                    this, SLOT(toolBarRenamed(QListWidgetItem *)));
+}
+
+/*!
+    Destroys the toolbar dialog.
+*/
+QtToolBarDialog::~QtToolBarDialog()
+{
+    d_ptr->clearOld();
+    delete d_ptr;
+}
+
+/*!
+    Connects the toolbar dialog to the given \a toolBarManager. Then,
+    when exec() is called, the toolbar dialog will operate using the
+    given \a toolBarManager.
+*/
+void QtToolBarDialog::setToolBarManager(QtToolBarManager *toolBarManager)
+{
+    if (d_ptr->toolBarManager == toolBarManager->d_ptr->manager)
+        return;
+    if (isVisible())
+        d_ptr->clearOld();
+    d_ptr->toolBarManager = toolBarManager->d_ptr->manager;
+    if (isVisible())
+        d_ptr->fillNew();
+}
+
+/*!
+    \reimp
+*/
+void QtToolBarDialog::showEvent(QShowEvent *event)
+{
+    if (!event->spontaneous())
+        d_ptr->fillNew();
+}
+
+/*!
+    \reimp
+*/
+void QtToolBarDialog::hideEvent(QHideEvent *event)
+{
+    if (!event->spontaneous())
+        d_ptr->clearOld();
+}
+
+#include "moc_qttoolbardialog.cpp"
+#include "qttoolbardialog.moc"
diff --git a/src/QToolBarDialog/qttoolbardialog.h b/src/QToolBarDialog/qttoolbardialog.h
new file mode 100644
index 0000000..264e701
--- /dev/null
+++ b/src/QToolBarDialog/qttoolbardialog.h
@@ -0,0 +1,144 @@
+/****************************************************************************
+** 
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info at nokia.com)
+** 
+** This file is part of a Qt Solutions component.
+**
+** Commercial Usage  
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Solutions Commercial License Agreement provided
+** with the Software or, alternatively, in accordance with the terms
+** contained in a written agreement between you and Nokia.
+** 
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+** 
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
+** package.
+** 
+** GNU General Public License Usage 
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+** 
+** Please note Third Party Software included with Qt Solutions may impose
+** additional restrictions and it is the user's responsibility to ensure
+** that they have met the licensing requirements of the GPL, LGPL, or Qt
+** Solutions Commercial license and the relevant license of the Third
+** Party Software they are using.
+** 
+** If you are unsure which license is appropriate for your use, please
+** contact Nokia at qt-info at nokia.com.
+** 
+****************************************************************************/
+
+#ifndef QTTOOLBARDIALOG_H
+#define QTTOOLBARDIALOG_H
+
+#include <QDialog>
+
+#if defined(Q_WS_WIN)
+#  if !defined(QT_QTTOOLBARDIALOG_EXPORT) && !defined(QT_QTTOOLBARDIALOG_IMPORT)
+#    define QT_QTTOOLBARDIALOG_EXPORT
+#  elif defined(QT_QTTOOLBARDIALOG_IMPORT)
+#    if defined(QT_QTTOOLBARDIALOG_EXPORT)
+#      undef QT_QTTOOLBARDIALOG_EXPORT
+#    endif
+#    define QT_QTTOOLBARDIALOG_EXPORT __declspec(dllimport)
+#  elif defined(QT_QTTOOLBARDIALOG_EXPORT)
+#    undef QT_QTTOOLBARDIALOG_EXPORT
+#    define QT_QTTOOLBARDIALOG_EXPORT __declspec(dllexport)
+#  endif
+#else
+#  define QT_QTTOOLBARDIALOG_EXPORT
+#endif
+
+class QMainWindow;
+class QAction;
+class QToolBar;
+
+class QtToolBarManagerPrivate;
+
+class QT_QTTOOLBARDIALOG_EXPORT QtToolBarManager : public QObject
+{
+    Q_OBJECT
+public:
+
+    QtToolBarManager(QObject *parent = 0);
+    ~QtToolBarManager();
+
+    void setMainWindow(QMainWindow *mainWindow);
+    QMainWindow *mainWindow() const;
+
+    void addAction(QAction *action, const QString &category);
+    void removeAction(QAction *action);
+
+    void addToolBar(QToolBar *toolBar, const QString &category);
+    void removeToolBar(QToolBar *toolBar);
+
+    QList<QToolBar *> toolBars() const;
+
+    QByteArray saveState(int version = 0) const;
+    bool restoreState(const QByteArray &state, int version = 0);
+
+private:
+
+    friend class QtToolBarDialog;
+    QtToolBarManagerPrivate *d_ptr;
+    Q_DECLARE_PRIVATE(QtToolBarManager)
+    Q_DISABLE_COPY(QtToolBarManager)
+};
+
+class QtToolBarDialogPrivate;
+
+class QT_QTTOOLBARDIALOG_EXPORT QtToolBarDialog : public QDialog
+{
+    Q_OBJECT
+public:
+
+    QtToolBarDialog(QWidget *parent = 0, Qt::WindowFlags flags = 0);
+    ~QtToolBarDialog();
+
+    void setToolBarManager(QtToolBarManager *toolBarManager);
+
+protected:
+
+    void showEvent(QShowEvent *event);
+    void hideEvent(QHideEvent *event);
+
+private:
+
+    QtToolBarDialogPrivate *d_ptr;
+    Q_DECLARE_PRIVATE(QtToolBarDialog)
+    Q_DISABLE_COPY(QtToolBarDialog)
+
+    Q_PRIVATE_SLOT(d_func(), void newClicked())
+    Q_PRIVATE_SLOT(d_func(), void removeClicked())
+    Q_PRIVATE_SLOT(d_func(), void defaultClicked())
+    Q_PRIVATE_SLOT(d_func(), void okClicked())
+    Q_PRIVATE_SLOT(d_func(), void applyClicked())
+    Q_PRIVATE_SLOT(d_func(), void cancelClicked())
+    Q_PRIVATE_SLOT(d_func(), void upClicked())
+    Q_PRIVATE_SLOT(d_func(), void downClicked())
+    Q_PRIVATE_SLOT(d_func(), void leftClicked())
+    Q_PRIVATE_SLOT(d_func(), void rightClicked())
+    Q_PRIVATE_SLOT(d_func(), void renameClicked())
+    Q_PRIVATE_SLOT(d_func(), void toolBarRenamed(QListWidgetItem *))
+    Q_PRIVATE_SLOT(d_func(), void currentActionChanged(QTreeWidgetItem *))
+    Q_PRIVATE_SLOT(d_func(), void currentToolBarChanged(QListWidgetItem *))
+    Q_PRIVATE_SLOT(d_func(), void currentToolBarActionChanged(QListWidgetItem *))
+};
+
+#endif
diff --git a/3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.ui b/src/QToolBarDialog/qttoolbardialog.ui
similarity index 100%
rename from 3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.ui
rename to src/QToolBarDialog/qttoolbardialog.ui
diff --git a/src/Render/MapRenderer.cpp b/src/Render/MapRenderer.cpp
index a9bbc17..cc62ef1 100644
--- a/src/Render/MapRenderer.cpp
+++ b/src/Render/MapRenderer.cpp
@@ -168,7 +168,7 @@ void TouchupStyleLayer::draw(Node* Pt)
                     theColor = r->theGlobalPainter.NodesColor;
                 }
                 QPointF P(r->toView(Pt));
-                if (Pt->layer()->classGroups() & Layer::Special) {
+                if (Pt->layer() && (Pt->layer()->classGroups() & Layer::Special)) {
                     QRect R2(P.x()-(WW+4)/2, P.y()-(WW+4)/2, WW+4, WW+4);
                     r->thePainter->fillRect(R2,QColor(255,0,255,192));
                 } else if (Pt->isWaypoint()) {
diff --git a/src/Sync/DirtyList.cpp b/src/Sync/DirtyList.cpp
index a37c8b6..6c68d76 100644
--- a/src/Sync/DirtyList.cpp
+++ b/src/Sync/DirtyList.cpp
@@ -10,12 +10,12 @@
 #include "Features.h"
 #include "Utils.h"
 
-#include <QtCore/QEventLoop>
-#include <QtGui/QDialog>
-#include <QtGui/QListWidget>
-#include <QtGui/QMessageBox>
-#include <QtGui/QProgressDialog>
-#include <QtNetwork/QTcpSocket>
+#include <QEventLoop>
+#include <QDialog>
+#include <QListWidget>
+#include <QMessageBox>
+#include <QProgressDialog>
+#include <QTcpSocket>
 #include <QInputDialog>
 
 #include <algorithm>
diff --git a/src/Sync/DirtyList.h b/src/Sync/DirtyList.h
index f3e943a..c9a52ed 100644
--- a/src/Sync/DirtyList.h
+++ b/src/Sync/DirtyList.h
@@ -24,7 +24,7 @@ class DirtyList
 {
     public:
         DirtyList() : errorAbort(false) {}
-        virtual ~DirtyList() = 0;
+        virtual ~DirtyList();
         virtual bool add(Feature* F) = 0;
         virtual bool update(Feature* F) = 0;
         virtual bool erase(Feature* F) = 0;
diff --git a/src/Sync/DownloadOSM.cpp b/src/Sync/DownloadOSM.cpp
index a16f108..4231e7e 100644
--- a/src/Sync/DownloadOSM.cpp
+++ b/src/Sync/DownloadOSM.cpp
@@ -28,23 +28,15 @@
 #include <QStatusBar>
 #include <QInputDialog>
 
-#include <zlib.h>
-
-// #define DEBUG_EVERY_CALL
-// #define DEBUG_MAPCALL_ONLY
-// #define DEBUG_NONGET_CALL
-
 /* DOWNLOADER */
 
 Downloader::Downloader(const QString& aUser, const QString& aPwd)
 : User(aUser), Password(aPwd),
-  Id(0),Error(false), AnimatorLabel(0), AnimatorBar(0), AnimationTimer(0)
+  currentReply(0),Error(false), AnimatorLabel(0), AnimatorBar(0), AnimationTimer(0)
 {
     //IdAuth = Request.setUser(User.toUtf8(), Password.toUtf8());
-//	connect(&Request,SIGNAL(done(bool)), this,SLOT(allDone(bool)));
-    connect(&Request,SIGNAL(requestFinished(int, bool)),this,SLOT(on_requestFinished(int, bool)));
-    connect(&Request,SIGNAL(dataReadProgress(int, int)), this,SLOT(progress(int, int)));
-    connect(&Request, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)), this, SLOT(on_responseHeaderReceived(const QHttpResponseHeader &)));
+    connect(&netManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(on_requestFinished(QNetworkReply*)));
+    connect(&netManager,SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), this,SLOT(on_authenticationRequired(QNetworkReply*,QAuthenticator*)));
 }
 
 
@@ -82,212 +74,75 @@ void Downloader::on_Cancel_clicked()
         Loop.exit(QDialog::Rejected);
 }
 
-#include "QtGui/QTextBrowser"
+#include "QTextBrowser"
 
-void showDebug(const QString& Method, const QString& URL, const QString& Sent, const QByteArray& arr)
-{
-    static int Download = 0;
-    ++Download;
-    QTextBrowser* b = new QTextBrowser;
-    b->setWindowTitle(Method + " " + URL+" -- "+QString::number(Download));
-    if (Sent.length())
-    {
-        b->append(Sent+QString("\n"));
-        b->append(" <======================== "+QString("\n"));
-        b->append(" ========================> "+QString("\n"));
-    }
-    b->append(QString::fromUtf8(arr));
-    b->setAttribute(Qt::WA_DeleteOnClose,true);
-    b->show();
-    b->raise();
-}
-
-
-#define CHUNK 4096
-
-QByteArray gzipDecode(const QByteArray& In)
-{
-    QByteArray Total;
-
-    int ret;
-    unsigned have;
-    z_stream strm;
-    char in[CHUNK+2];
-    char out[CHUNK+2];
-    /* allocate inflate state */
-    strm.zalloc = Z_NULL;
-    strm.zfree = Z_NULL;
-    strm.opaque = Z_NULL;
-    strm.avail_in = 0;
-    strm.next_in = Z_NULL;
-    ret = inflateInit2(&strm,15+32);
-    if (ret != Z_OK)
-       {
-               (void)inflateEnd(&strm);
-        return Total;
-       }
-    int RealSize = In.size();
-    for (int i=0; i<RealSize/CHUNK+1; ++i)
-    {
-        int Left = RealSize-(i*CHUNK);
-        if (Left > CHUNK)
-            Left = CHUNK;
-        memcpy(in,In.constData()+(i*CHUNK),Left);
-        strm.avail_in = Left;
-        strm.next_in = reinterpret_cast<unsigned char*>(in);
-
-        /* run inflate() on input until output buffer not full */
-        do
-        {
-            strm.avail_out = CHUNK;
-            strm.next_out = reinterpret_cast<unsigned char*>(out);
-            ret = inflate(&strm, Z_NO_FLUSH);
-            if (ret == Z_STREAM_ERROR)
-                       {
-                               (void)inflateEnd(&strm);
-                return Total;
-                       }
-            switch (ret)
-            {
-                case Z_NEED_DICT:
-                    ret = Z_DATA_ERROR;     /* and fall through */
-                case Z_DATA_ERROR:
-                case Z_MEM_ERROR:
-                    (void)inflateEnd(&strm);
-                    return Total;
-            }
-            have = CHUNK - strm.avail_out;
-            out[have] = 0;
-            Total.append(QByteArray(out,have));
-        } while (strm.avail_out == 0);
-    }
-       (void)inflateEnd(&strm);
-    return Total;
+bool Downloader::go(const QUrl& url) {
+    return request("GET", url, QString(), false);
 }
 
+bool Downloader::request(const QString& theMethod, const QUrl& url, const QString& theData, bool FireForget) {
+    if (Error) return false;
 
+    qDebug() << "Downloader::request: " << url;
 
+    netManager.setProxy(M_PREFS->getProxy(url));
+    QNetworkRequest req(url);
 
-bool Downloader::go(const QUrl& url)
-{
-    if (Error) return false;
+    req.setRawHeader(QByteArray("Content-Type"), QByteArray("text/xml"));
+    req.setRawHeader(QByteArray("User-Agent"), USER_AGENT.toLatin1());
 
-    Request.setProxy(M_PREFS->getProxy(url));
-    Request.setHost(url.host(),url.port(80));
+    QByteArray dataArray(theData.toUtf8());
+    QBuffer dataBuffer(&dataArray);
+    currentReply = netManager.sendCustomRequest(req, theMethod.toLatin1(), &dataBuffer);
 
-    if (AnimationTimer)
+    if (AnimationTimer) {
         AnimationTimer->start(200);
-    Content.clear();
-    QBuffer ResponseBuffer(&Content);
-    ResponseBuffer.open(QIODevice::WriteOnly);
-    QString sReq = url.toString(QUrl::RemoveScheme | QUrl::RemoveAuthority);
-    qDebug() << "Downloader::go: " << url << sReq;
-    QHttpRequestHeader Header("GET",sReq);
-    Header.setValue("Accept-Encoding", "gzip,deflate");
-    Header.setValue("Host",url.host()+':'+QString::number(url.port(80)));
-    Header.setValue("User-Agent", USER_AGENT);
-    Content.clear();
-    Id = Request.request(Header,QByteArray(), &ResponseBuffer);
+        connect(currentReply,SIGNAL(downloadProgress(qint64, qint64)), this,SLOT(progress(qint64, qint64)));
+    }
+
+    if (FireForget)
+        return true;
 
     if (Loop.exec() == QDialog::Rejected)
-    {
-        Request.abort();
         return false;
-    }
-
-    if (Error)
-    {
-        QMessageBox::information(0,tr("error"),Request.errorString());
-    }
-    if (Request.lastResponse().hasContentLength() && Content.size() != (int)Request.lastResponse().contentLength())
-    {
-        QMessageBox::information(0,tr("didn't download enough"),QString("%1 %2").arg(Content.size()).arg(Request.lastResponse().contentLength()));
-    }
 
-    if (Request.lastResponse().hasKey("Content-encoding"))
-    {
-        QString t(Request.lastResponse().value("Content-encoding"));
-        if (t == "gzip")
-        {
-            QByteArray Uncompressed(gzipDecode(Content));
-            Content = Uncompressed;
+    if (AnimationTimer)
+        SAFE_DELETE(AnimationTimer);
+
+    /* Test for redirections */
+    QVariant redir = currentReply->attribute(QNetworkRequest::RedirectionTargetAttribute);
+    if (redir.isValid()) {
+        LocationText = redir.toString();
+        if (!LocationText.isEmpty()) {
+            QUrl newUrl(LocationText);
+            return request(theMethod, newUrl, theData, FireForget);
         }
     }
 
-#ifdef DEBUG_EVERY_CALL
-    showDebug("GET", Web.path() + url, QByteArray() ,Content);
-#endif
-    SAFE_DELETE(AnimationTimer);
-    LocationText = Request.lastResponse().value("Location");
+    /* Handler error? */
+    if (currentReply->error())
+        QMessageBox::information(0,tr("error"), currentReply->errorString());
 
-    Result = Request.lastResponse().statusCode();
-    switch (Result) {
-    case 301:
-    case 302:
-    case 307: {
-            qDebug() << "New location: " << LocationText;
-            if (!LocationText.isEmpty()) {
-                QUrl aURL(LocationText);
-                return go(aURL);
-            }
-            break;
-        }
-    }
 
-    ResultText = Request.lastResponse().reasonPhrase();
-    ErrorText = Request.lastResponse().value("Error");
+    /* Read the data */
+    Content = currentReply->readAll();
+    Result = currentReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
+    ResultText = currentReply->errorString();
+    ErrorText = currentReply->rawHeader("Error");
     return !Error;
 }
 
-bool Downloader::request(const QString& Method, const QUrl& url, const QString& Data, bool FireForget)
-{
-    if (Error) return false;
-
-    Request.setProxy(M_PREFS->getProxy(url));
-    Request.setHost(url.host(),url.port(80));
-    qDebug() << "Downloader::request: " << url;
-
-    QByteArray ba(Data.toUtf8());
-    QBuffer Buf(&ba);
-
-    QString sReq = url.toString(QUrl::RemoveScheme | QUrl::RemoveAuthority);
-    QHttpRequestHeader Header(Method,sReq);
-    Header.setValue("Host",url.host()+':'+QString::number(url.port(80)));
-    Header.setValue("User-Agent", USER_AGENT);
-    Header.setValue("Content-Type", "text/xml");
+void Downloader::on_authenticationRequired( QNetworkReply *reply, QAuthenticator *auth) {
+    static QNetworkReply *lastReply = NULL;
 
-    QString auth = QString("%1:%2").arg(User).arg(Password);
-    QByteArray ba_auth = auth.toUtf8().toBase64();
-    Header.setValue("Authorization", QString("Basic %1").arg(QString(ba_auth)));
-
-    Content.clear();
-    Id = Request.request(Header,ba);
-
-    if (FireForget)
-        return true;
-
-    if (Loop.exec() == QDialog::Rejected)
-    {
-        Request.abort();
-        return false;
+    /* Only provide authentication the first time we see this reply, to avoid
+     * infinite loop providing the same credentials. */
+    if (lastReply != reply) {
+        lastReply = reply;
+        qDebug() << "Downloader authentication required and provided.";
+        auth->setUser(User);
+        auth->setPassword(Password);
     }
-    Content = Request.readAll();
-    if (Request.lastResponse().hasKey("Content-encoding"))
-    {
-        QString t(Request.lastResponse().value("Content-encoding"));
-        if (t == "gzip")
-        {
-            QByteArray Uncompressed(gzipDecode(Content));
-            Content = Uncompressed;
-        }
-    }
-#ifdef DEBUG_NONGET_CALL
-    showDebug(Method,URL,Data,Content);
-#endif
-    Result = Request.lastResponse().statusCode();
-    ResultText = Request.lastResponse().reasonPhrase();
-    ErrorText = Request.lastResponse().value("Error");
-    return !Error;
 }
 
 QByteArray& Downloader::content()
@@ -295,35 +150,15 @@ QByteArray& Downloader::content()
     return Content;
 }
 
-void Downloader::on_responseHeaderReceived(const QHttpResponseHeader & hdr)
+void Downloader::on_requestFinished( QNetworkReply *reply)
 {
-    //switch (hdr.statusCode()) {
-    //	case 200:
-    //		break;
-    //	case 406:
-    //		QMessageBox::critical(NULL,QApplication::translate("MerkaartorPreferences","Preferences upload failed"), QApplication::translate("MerkaartorPreferences","Duplicate key"));
-    //		break;
-    //	case 413:
-    //		QMessageBox::critical(NULL,QApplication::translate("MerkaartorPreferences","Preferences upload failed"), QApplication::translate("MerkaartorPreferences","More than 150 preferences"));
-    //		break;
-    //	default:
-    //		qDebug() << hdr.statusCode();
-    //		qDebug() << hdr.reasonPhrase();
-    //		break;
-    //}
-
-    qDebug() << "Downloader::on_responseHeaderReceived: " << hdr.statusCode() << hdr.reasonPhrase();
-}
-
-void Downloader::on_requestFinished(int anId, bool anError)
-{
-    if (anError)
+    if (reply->error())
         Error = true;
-    if ( (anId == Id) && Loop.isRunning() )
+    if ( (reply == currentReply) && Loop.isRunning() )
         Loop.exit(QDialog::Accepted);
 }
 
-void Downloader::progress(int done, int total)
+void Downloader::progress(qint64 done, qint64 total)
 {
     if (AnimatorLabel && AnimatorBar)
     {
@@ -385,14 +220,18 @@ QString Downloader::getURLToFetch(const QString &What)
 QString Downloader::getURLToFetchFull(IFeature::FId id)
 {
     QString type;
-    if (id.type & IFeature::Point)
+	QString URL;
+    if (id.type & IFeature::Point) {
         type = "node";
-    else if (id.type & IFeature::LineString)
-        type = "way";
-    else if (id.type & IFeature::OsmRelation)
-        type = "relation";
+		URL = QString("/%1/%2");
+	} else {
+		if (id.type & IFeature::LineString)
+			type = "way";
+		if (id.type & IFeature::OsmRelation)
+			type = "relation";
+		URL = QString("/%1/%2/full");
+	}
 
-    QString URL = QString("/%1/%2/full");
     return URL.arg(type).arg(id.numId);
 }
 
@@ -470,9 +309,6 @@ bool downloadOSM(QWidget* aParent, const QUrl& theUrl, const QString& aUser, con
 #endif
         return false;
     }
-#ifdef DEBUG_MAPCALL_ONLY
-    showDebug("GET", URL,QByteArray(), Rcv.content());
-#endif
     int x = Rcv.resultCode();
     switch (x)
     {
@@ -688,10 +524,21 @@ bool downloadMapdust(MainWindow* Main, const CoordBox& aBox, Document* theDocume
 
     theDownloader.setAnimator(dlg,Lbl,Bar,true);
     Lbl->setText(QApplication::translate("Downloader","Downloading points"));
-    url.addQueryItem("t", COORD2STRING(aBox.topRight().y()));
-    url.addQueryItem("l", COORD2STRING(aBox.bottomLeft().x()));
-    url.addQueryItem("b", COORD2STRING(aBox.bottomLeft().y()));
-    url.addQueryItem("r", COORD2STRING(aBox.topRight().x()));
+
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    QUrlQuery theQuery(url);
+#define theQuery theQuery
+#else
+#define theQuery url
+#endif
+    theQuery.addQueryItem("t", COORD2STRING(aBox.topRight().y()));
+    theQuery.addQueryItem("l", COORD2STRING(aBox.bottomLeft().x()));
+    theQuery.addQueryItem("b", COORD2STRING(aBox.bottomLeft().y()));
+    theQuery.addQueryItem("r", COORD2STRING(aBox.topRight().x()));
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    url.setQuery(theQuery);
+#endif
+#undef theQuery
 
     if (!theDownloader.go(url))
         return false;
@@ -750,11 +597,22 @@ bool downloadOpenstreetbugs(MainWindow* Main, const CoordBox& aBox, Document* th
 
     theDownloader.setAnimator(dlg,Lbl,Bar,true);
     Lbl->setText(QApplication::translate("Downloader","Downloading points"));
-    osbUrl.addQueryItem("t", COORD2STRING(aBox.topRight().y()));
-    osbUrl.addQueryItem("l", COORD2STRING(aBox.bottomLeft().x()));
-    osbUrl.addQueryItem("b", COORD2STRING(aBox.bottomLeft().y()));
-    osbUrl.addQueryItem("r", COORD2STRING(aBox.topRight().x()));
-    osbUrl.addQueryItem("open", "yes");
+
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    QUrlQuery theQuery(osbUrl);
+#define theQuery theQuery
+#else
+#define theQuery osbUrl
+#endif
+    theQuery.addQueryItem("t", COORD2STRING(aBox.topRight().y()));
+    theQuery.addQueryItem("l", COORD2STRING(aBox.bottomLeft().x()));
+    theQuery.addQueryItem("b", COORD2STRING(aBox.bottomLeft().y()));
+    theQuery.addQueryItem("r", COORD2STRING(aBox.topRight().x()));
+    theQuery.addQueryItem("open", "yes");
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+    osbUrl.setQuery(theQuery);
+#endif
+#undef theQuery
 
     if (!theDownloader.go(osbUrl))
         return false;
@@ -786,6 +644,7 @@ bool downloadMoreOSM(MainWindow* Main, const CoordBox& aBox , Document* theDocum
     osmWebsite = M_PREFS->getOsmApiUrl();
     osmUser = M_PREFS->getOsmUser();
     osmPwd = M_PREFS->getOsmPassword();
+    qDebug() << "Requesting more from " << osmWebsite;
 
     Main->view()->setUpdatesEnabled(false);
 
@@ -904,7 +763,7 @@ bool downloadOSM(MainWindow* Main, const CoordBox& aBox , Document* theDocument)
             if (directAPI) {
                 if (ui.FromXapi->isChecked())
                     theLayer->setUploadable(false);
-                OK = downloadOSM(Main,QUrl(QUrl::fromEncoded(directUrl.toAscii())),osmUser,osmPwd,theDocument,theLayer);
+                OK = downloadOSM(Main,QUrl(QUrl::fromEncoded(directUrl.toLatin1())),osmUser,osmPwd,theDocument,theLayer);
             }
             else
                 OK = downloadOSM(Main,osmWebsite,osmUser,osmPwd,Clip,theDocument,theLayer);
diff --git a/src/Sync/DownloadOSM.h b/src/Sync/DownloadOSM.h
index 20fb9ae..81f297f 100644
--- a/src/Sync/DownloadOSM.h
+++ b/src/Sync/DownloadOSM.h
@@ -3,7 +3,6 @@
 
 class Document;
 
-class QHttp;
 class QString;
 class QMainWindow;
 class QProgressBar;
@@ -19,7 +18,7 @@ class SpecialLayer;
 #include <QtCore/QByteArray>
 #include <QtCore/QEventLoop>
 #include <QtCore/QObject>
-#include <QtNetwork/QHttp>
+#include <QNetworkAccessManager>
 #include <QUrl>
 
 #include "IFeature.h"
@@ -31,7 +30,7 @@ class Downloader : public QObject
     public:
         Downloader(const QString& aUser, const QString& aPwd);
 
-        bool request(const QString& Method, const QUrl& URL, const QString& Out, bool FireForget=false);
+        bool request(const QString& theMethod, const QUrl& URL, const QString& Out, bool FireForget=false);
         bool go(const QUrl& url);
         QByteArray& content();
         int resultCode();
@@ -53,21 +52,21 @@ class Downloader : public QObject
         void setAnimator(QProgressDialog *anAnimator, QLabel* AnimatorLabel, QProgressBar* AnimatorBar, bool anAnimate);
 
     public slots:
-        void progress( int done, int total );
-        void on_requestFinished(int Id, bool Error);
-        void on_responseHeaderReceived(const QHttpResponseHeader & hdr);
+        void progress( qint64 done, qint64 total );
+        void on_requestFinished( QNetworkReply *reply);
+        void on_authenticationRequired( QNetworkReply *reply, QAuthenticator *auth);
         void animate();
         void on_Cancel_clicked();
 
     private:
-        QHttp Request;
+        QNetworkAccessManager netManager;
         QString User, Password;
         QByteArray Content;
         int Result;
         QString LocationText;
         QString ResultText;
         QString ErrorText;
-        int Id;
+        QNetworkReply *currentReply;
         int IdAuth;
         bool Error;
         QEventLoop Loop;
diff --git a/src/Tools/ActionsDialog.cpp b/src/Tools/ActionsDialog.cpp
index 5374ee4..83ab9ed 100644
--- a/src/Tools/ActionsDialog.cpp
+++ b/src/Tools/ActionsDialog.cpp
@@ -9,6 +9,7 @@
 #include "MainWindow.h"
 #include "MerkaartorPreferences.h"
 #include "ActionsDialog.h"
+#include "Global.h"
 
 ActionsDialog::ActionsDialog(QList<QAction *>& actions, MainWindow *parent)
     : QDialog(parent), Main(parent)
@@ -21,8 +22,12 @@ ActionsDialog::ActionsDialog(QList<QAction *>& actions, MainWindow *parent)
     actionsTable->setHorizontalHeaderLabels(hdr);
     actionsTable->verticalHeader()->hide();
     actionsTable->horizontalHeader()->setMinimumSectionSize(100);
+#ifdef QT5
+#define setResizeMode setSectionResizeMode
+#endif
     actionsTable->horizontalHeader()->setResizeMode(0, QHeaderView::Stretch);
     actionsTable->horizontalHeader()->setResizeMode(1, QHeaderView::ResizeToContents);
+#undef setResizeMode
     //actionsTable->setColumnReadOnly(0, true);
 
     int row = 0;
@@ -103,7 +108,7 @@ void ActionsDialog::recordAction(int row, int column)
 void ActionsDialog::validateAction(int row, int column)
 {
     QTableWidgetItem *item = actionsTable->item(row, column);
-    QString accelText = QString(QKeySequence(item->text()));
+    QString accelText = QString(QKeySequence(item->text()).toString());
 
     if (accelText.isEmpty() && !item->text().isEmpty())
         item->setText(oldAccelText);
diff --git a/src/Tools/QFatFs/QFat.cpp b/src/Tools/QFatFs/QFat.cpp
new file mode 100644
index 0000000..47fe4e7
--- /dev/null
+++ b/src/Tools/QFatFs/QFat.cpp
@@ -0,0 +1,585 @@
+#include "QFat.h"
+
+#include <QBuffer>
+
+QDataStream &operator<<(QDataStream &ds, const FatTocEntry &toc)
+{
+    ds << toc.flags;
+    ds << toc.creationTimestamp;
+    ds << toc.modificationTimestamp;
+    ds << toc.size;
+    ds << toc.startCluster;
+    ds << toc.name;
+
+    return ds;
+}
+
+QDataStream &operator>>(QDataStream &ds, FatTocEntry &toc)
+{
+    ds >> toc.flags;
+    ds >> toc.creationTimestamp;
+    ds >> toc.modificationTimestamp;
+    ds >> toc.size;
+    ds >> toc.startCluster;
+    ds >> toc.name;
+
+    return ds;
+}
+
+QFat::QFat(const QString& filename, quint16 clusterCount, quint16 clusterSize)
+    : m_filename(filename)
+    , m_clusterCount(clusterCount)
+    , m_clusterSize(clusterSize)
+    , m_fatFile(0)
+{
+}
+
+FatError QFat::open()
+{
+    FatError ret;
+
+    m_fatFile = new QFile(m_filename);
+    if (m_fatFile->exists()) {
+        if (!m_fatFile->open(QIODevice::ReadWrite))
+            return FatSysError;
+
+        char magic[4]; // "QFAT"
+        m_fatFile->read((char*)&magic, 4);
+        if (magic[0] != 'Q' || magic[1] != 'F' || magic[2] != 'A' || magic[3] != 'T')
+            return FatNotFatFile;
+
+        m_ds.setDevice(m_fatFile);
+        m_ds >> m_clusterCount;
+        m_ds >> m_clusterSize;
+
+        FAT_FAT_TYPE val;
+        m_fat.reserve(m_clusterCount);
+        for (int i=0; i<m_clusterCount; ++i) {
+            m_ds >> val;
+            m_fat << val;
+        }
+
+        m_startOfData = sizeof(FatHeader) + (m_clusterCount * sizeof(FAT_FAT_TYPE));
+        m_rootToc = readTocData(0);
+    } else {
+        m_fat.reserve(m_clusterCount);
+        for (int i=0; i<m_clusterCount; ++i)
+            m_fat.append(0);
+
+        m_startOfData = sizeof(FatHeader) + (m_clusterCount * sizeof(FAT_FAT_TYPE));
+    }
+
+    return FatNoError;
+}
+
+bool QFat::isOpen()
+{
+    if (!m_fatFile)
+        return false;
+
+    return true;
+}
+
+void QFat::writeFat()
+{
+    m_fatFile->seek(0);
+
+    char magic[5] = "QFAT";
+    m_fatFile->write(magic, 4);
+    m_ds.setDevice(m_fatFile);
+    m_ds << m_clusterCount;
+    m_ds << m_clusterSize;
+
+    for (int i=0; i<m_clusterCount; ++i)
+        m_ds << m_fat[i];
+}
+
+void QFat::close()
+{
+    if (m_fatFile) {
+        if (m_fatFile->isOpen()) {
+            writeFat();
+            m_fatFile->close();
+        }
+        delete m_fatFile;
+        m_fatFile = NULL;
+    }
+}
+
+FatError QFat::checkAndCreate(FAT_FAT_TYPE clusterNum)
+{
+    FatError ret;
+
+    if (!m_fatFile)
+        return FatNotOpen;
+
+    if (!m_fatFile->isOpen()) {
+
+        if (!m_fatFile->open(QIODevice::ReadWrite))
+            return FatSysError;
+
+        if (!m_fatFile->resize(m_startOfData + m_clusterSize))
+            return FatOutOfSpace;
+
+        char magic[5] = "QFAT";
+        m_fatFile->write(magic, 4);
+        m_ds.setDevice(m_fatFile);
+        m_ds << m_clusterCount;
+        m_ds << m_clusterSize;
+
+        for (int i=0; i<m_clusterCount; ++i)
+            m_ds << m_fat[i];
+
+        writeTocData(m_rootToc, 0);
+    }
+
+    if (m_fatFile->size() < m_startOfData + (clusterNum+1 * m_clusterSize)) {
+        if (!m_fatFile->resize(m_startOfData + (clusterNum+1 * m_clusterSize)))
+            return FatOutOfSpace;
+    }
+    return FatNoError;
+}
+
+FAT_FAT_TYPE QFat::findFreeCluster()
+{
+    FAT_FAT_TYPE freeCluster = 1;
+    for (;freeCluster < m_clusterCount; ++freeCluster)
+        if (!m_fat[freeCluster])
+            return freeCluster;
+
+    return m_clusterCount;
+}
+
+void QFat::eraseData(FAT_FAT_TYPE clusterNum)
+{
+    if (clusterNum == FAT_FAT_TYPE_NOVALUE)
+        return;
+
+    FAT_FAT_TYPE cluster = clusterNum;
+    do {
+        FAT_FAT_TYPE nextCluster = m_fat[cluster];
+        m_fat[cluster] = 0;
+        cluster = nextCluster;
+    } while (cluster && cluster != FAT_FAT_TYPE_NOVALUE);
+}
+
+QByteArray QFat::readData(FAT_FAT_TYPE clusterNum, qint32 maxSize)
+{
+    QByteArray data;
+    if (clusterNum == FAT_FAT_TYPE_NOVALUE)
+        return data;
+
+    char readBuffer[m_clusterSize];
+    qint32 alreadyRead = 0;
+    qint32 justRead;
+    quint16 nextCluster = clusterNum;
+    m_fatFile->seek(m_startOfData + (nextCluster * m_clusterSize));
+    do {
+        if (maxSize == -1 || alreadyRead+m_clusterSize < maxSize)
+            justRead = m_fatFile->read(readBuffer, m_clusterSize);
+        else
+            justRead = m_fatFile->read(readBuffer, maxSize-alreadyRead);
+        alreadyRead += justRead;
+        data.append(readBuffer, justRead);
+
+        FAT_FAT_TYPE oldCluster = nextCluster;
+        nextCluster = m_fat[nextCluster];
+        if (nextCluster != FAT_FAT_TYPE_NOVALUE && nextCluster != oldCluster+1)
+            m_fatFile->seek(m_startOfData + (nextCluster * m_clusterSize));
+    } while (nextCluster && nextCluster != FAT_FAT_TYPE_NOVALUE);
+
+    return data;
+}
+
+FAT_FAT_TYPE QFat::writeData(const QByteArray& data, FAT_FAT_TYPE reqCluster)
+{
+    FAT_FAT_TYPE startCluster;
+    if (reqCluster == FAT_FAT_TYPE_NOVALUE)
+        startCluster = findFreeCluster();
+    else
+        startCluster = reqCluster;
+    if (startCluster == m_clusterCount)
+        return m_clusterCount;
+
+    quint64 written;
+    quint32 idx = 0;
+    FAT_FAT_TYPE cluster = startCluster;
+    if (checkAndCreate(cluster) != FatNoError)
+        return m_clusterCount;
+    m_fatFile->seek(m_startOfData + (cluster * m_clusterSize));
+    forever {
+        written =  m_fatFile->write(data.data() + idx, ((idx + m_clusterSize) < data.size() ? m_clusterSize : data.size() - idx));
+        if (written == m_clusterSize) {
+            idx += written;
+            m_fat[cluster] = 0xff;
+            FAT_FAT_TYPE nextCluster = findFreeCluster();
+            if (nextCluster == m_clusterCount)
+                return m_clusterCount;
+            if (checkAndCreate(nextCluster) != FatNoError)
+                return m_clusterCount;
+            m_fat[cluster] = nextCluster;
+            if (nextCluster != cluster+1)
+                m_fatFile->seek(m_startOfData + (nextCluster * m_clusterSize));
+            cluster = nextCluster;
+        } else {
+            m_fat[cluster] = FAT_FAT_TYPE_NOVALUE;
+            break;
+        }
+    }
+
+    return startCluster;
+}
+
+FatTocEntries QFat::readTocData(quint16 clusterNum)
+{
+    QByteArray a = readData(clusterNum);
+    QDataStream ds(a);
+    FatTocEntries tocs;
+
+    ds >> tocs;
+    return tocs;
+}
+
+FAT_FAT_TYPE QFat::writeTocData(const FatTocEntries &toc, FAT_FAT_TYPE cluster)
+{
+    QByteArray a;
+    QDataStream ds(&a, QIODevice::WriteOnly);
+    ds << toc;
+
+    return writeData(a, cluster);
+}
+
+FatError QFat::setCurrentTocs(const QString &path)
+{
+    if (path.isEmpty()) {
+        m_curTocs = m_rootToc;
+        m_curTocsPath = "/";
+        m_curTocsCluster = 0;
+        return FatNoError;
+    }
+    if (path == m_curTocsPath && !m_curTocsPath.isEmpty())
+        return FatNoError;
+
+    FatTocEntries curTocs = m_rootToc;
+    FAT_FAT_TYPE curTocCluster = 0;
+
+    QStringList levels = path.split("/", QString::SkipEmptyParts);
+
+    bool found = false;
+    for (int i=0; i<levels.size(); ++i) {
+        for (int j=0; j<curTocs.size(); ++j) {
+            if (curTocs[j].name == levels[i]) {
+                if (curTocs[j].flags & FLAG_FOLDER) {
+                    curTocCluster = curTocs[j].startCluster;
+                    curTocs = readTocData(curTocCluster);
+                    found = true;
+                    break;
+                } else {
+                    break;
+                }
+            }
+        }
+        if (!found)
+            break;
+    }
+    if (found) {
+        m_curTocs = curTocs;
+        m_curTocsCluster = curTocCluster;
+        m_curTocsPath = path;
+        return FatNoError;
+    } else {
+        m_curTocsPath = "";
+        return FatDirNotFound;
+    }
+}
+
+FatError QFat::getToc(const QString &filename, FatTocEntry& toc)
+{
+    FatTocEntry emptyToc;
+    if (filename.isEmpty())
+        return FatFileNotFound;
+
+    QStringList levels = filename.split("/", QString::SkipEmptyParts);
+    QString name = levels.takeLast();
+    QString path = levels.join("/");
+
+    return getToc(path, name, toc);
+}
+
+FatError QFat::getToc(const QString &path, const QString& name, FatTocEntry& toc)
+{
+    FatError ret = setCurrentTocs(path);
+    if (ret != FatNoError) {
+        return ret;
+    }
+
+    for (int j=0; j<m_curTocs.size(); ++j) {
+        if (m_curTocs[j].name == name) {
+            toc = m_curTocs[j];
+            return FatNoError;
+        }
+    }
+    return FatFileNotFound;
+}
+
+FatError QFat::getTocEntries(const QString &reqpath, FatTocEntries& tocs)
+{
+    FatTocEntry toc;
+
+    if (reqpath.isEmpty() || reqpath == "/") {
+        tocs = m_rootToc;
+    } else {
+        QStringList levels = reqpath.split("/", QString::SkipEmptyParts);
+        QString name = levels.takeLast();
+        QString path = levels.join("/");
+
+        FatError ret;
+        ret = getToc(path, name, toc);
+        if (ret != FatNoError)
+            return FatDirNotFound;
+
+        tocs = readTocData(toc.startCluster);
+    }
+
+    return FatNoError;
+}
+
+
+FatError QFat::addToc(const QString &filename, const FatTocEntry &toc)
+{
+    QStringList levels = filename.split("/", QString::SkipEmptyParts);
+    QString name = levels.takeLast();
+    QString path = levels.join("/");
+    return addToc(path, name, toc);
+}
+
+FatError QFat::addToc(const QString &path, const QString& name, const FatTocEntry &toc)
+{
+    FatError ret = setCurrentTocs(path);
+    if (ret != FatNoError)
+        return ret;
+
+    for (int j=0; j<m_curTocs.size(); ++j) {
+        if (m_curTocs[j].name == name) {
+            m_curTocs.removeAt(j);
+        }
+    }
+
+    m_curTocs.push_back(toc);
+    eraseData(m_curTocsCluster);
+    FAT_FAT_TYPE clnum = writeTocData(m_curTocs, m_curTocsCluster);
+    if (clnum == m_clusterCount)
+        return FatOutOfSpace;
+    if (m_curTocsCluster == 0)
+        m_rootToc = m_curTocs;
+
+    return FatNoError;
+}
+
+FatError QFat::deleteToc(const QString &filename)
+{
+    QStringList levels = filename.split("/", QString::SkipEmptyParts);
+    QString name = levels.takeLast();
+    QString path = levels.join("/");
+    return deleteToc(path, name);
+}
+
+FatError QFat::deleteToc(const QString &path, const QString& name)
+{
+    FatError ret = setCurrentTocs(path);
+    if (ret != FatNoError)
+        return ret;
+
+    for (int j=0; j<m_curTocs.size(); ++j) {
+        if (m_curTocs[j].name == name) {
+            m_curTocs.removeAt(j);
+            eraseData(m_curTocsCluster);
+            FAT_FAT_TYPE clnum = writeTocData(m_curTocs, m_curTocsCluster);
+            if (clnum == m_clusterCount)
+                return FatOutOfSpace;
+
+            if (m_curTocsCluster == 0)
+                m_rootToc = m_curTocs;
+
+            return FatNoError;
+        }
+    }
+    return FatFileNotFound;
+}
+
+FatError QFat::makeDir(const QString &reqpath)
+{
+    FatError ret;
+
+    FatTocEntry toc;
+    FatTocEntries emptyToc;
+    ret = getToc(reqpath, toc);
+    if (ret == FatNoError)
+        return FatDirAlreadyExists;
+
+    QStringList levels = reqpath.split("/", QString::SkipEmptyParts);
+    QString name = levels.takeLast();
+    QString path = levels.join("/");
+
+    FAT_FAT_TYPE clnum = writeTocData(emptyToc, FAT_FAT_TYPE_NOVALUE);
+    if (clnum == m_clusterCount)
+        return FatOutOfSpace;
+
+    toc.flags = FLAG_FOLDER;
+    QDateTime dt = QDateTime::currentDateTime();
+    toc.creationTimestamp = dt.toTime_t();
+    toc.modificationTimestamp = dt.toTime_t();
+    toc.size = 0;
+    toc.name = name;
+    toc.startCluster = clnum;
+
+    if((ret = addToc(path, name, toc)) != FatNoError) {
+        eraseData(clnum);
+        return ret;
+    }
+    return FatNoError;
+}
+
+FatError QFat::makeDirRecursive(const QString &reqpath)
+{
+    FatError ret;
+
+    FatTocEntry toc;
+    ret = getToc(reqpath, toc);
+    if (ret == FatNoError)
+        return FatDirAlreadyExists;
+
+    QString partPath;
+    int i = 0;
+    QStringList levels = reqpath.split("/", QString::SkipEmptyParts);
+
+    while (i<levels.size()) {
+        partPath = levels[0];
+        for (int j=1; j<=i; ++j)
+            partPath += "/" + levels[j];
+        ret = makeDir(partPath);
+        if (ret != FatNoError && ret != FatDirAlreadyExists)
+            return ret;
+        ++i;
+    }
+
+    return FatNoError;
+}
+
+FatError QFat::removeDir(const QString& reqpath)
+{
+    FatError ret;
+    FatTocEntry toc;
+
+    ret = setCurrentTocs(reqpath);
+    if (ret != FatNoError)
+        return ret;
+    if (m_curTocs.size())
+        return FatDirNotEmpty;
+
+    ret = getToc(reqpath, toc);
+    if (ret != FatNoError)
+        return ret;
+
+    eraseData(toc.startCluster);
+    ret = deleteToc(reqpath);
+    if (ret != FatNoError)
+        return ret;
+
+    return FatNoError;
+}
+
+FatError QFat::removeDirRecursive(const QString& reqpath)
+{
+    FatError ret;
+
+    ret = setCurrentTocs(reqpath);
+    if (ret != FatNoError)
+        return ret;
+    if (m_curTocs.size())
+        return FatDirNotEmpty;
+
+    QString partPath = reqpath;
+    while (!partPath.isEmpty()) {
+        ret = removeDir(partPath);
+        if (ret != FatNoError)
+            return ret;
+
+        QStringList levels = partPath.split("/", QString::SkipEmptyParts);
+        levels.takeLast();
+        partPath = levels.join("/");
+    }
+
+    return FatNoError;
+}
+
+FatError QFat::removeFile(const QString& reqpath)
+{
+    FatError ret;
+    FatTocEntry toc;
+
+    ret = getToc(reqpath, toc);
+    if (ret != FatNoError)
+        return ret;
+
+    eraseData(toc.startCluster);
+    ret = deleteToc(reqpath);
+    if (ret != FatNoError)
+        return ret;
+
+    return FatNoError;
+}
+
+QString QFat::statusToc(const QString& path, int indent)
+{
+    QString ret;
+    QString fill;
+    fill.fill(' ', indent*2);
+
+    FatTocEntries curToc;
+    getTocEntries(path, curToc);
+
+    for (int i=0; i<curToc.size(); ++i) {
+        if (curToc[i].flags & FLAG_FILE) {
+            ret += QString("%3(%4) %1\t%2\n").arg(curToc[i].name).arg(curToc[i].size).arg(fill).arg(curToc[i].startCluster, sizeof(FAT_FAT_TYPE)*2, 16);
+        } else if (curToc[i].flags & FLAG_FOLDER) {
+            ret += QString("%3(%4) %1/\n").arg(curToc[i].name).arg(fill).arg(curToc[i].startCluster, sizeof(FAT_FAT_TYPE)*2, 16);
+            ret += statusToc(path + curToc[i].name + "/", indent + 1);
+        }
+    }
+
+    return ret;
+}
+
+QString QFat::status()
+{
+    QString ret;
+
+    int countFat = 0;
+    int col = 0;
+    ret = QString("FAT in use:\n  ");
+    for (int i=0; i<m_fat.size(); ++i) {
+        if (m_fat[i]) {
+            ret += QString("(%1)%2").arg(i, sizeof(FAT_FAT_TYPE)*2, 16).arg(m_fat[i], sizeof(FAT_FAT_TYPE)*2, 16);
+            if (col<3) {
+                ++col;
+                ret += " ";
+            } else {
+                col = 0;
+                ret += "\n  ";
+            }
+            countFat++;
+        }
+    }
+    if (col)
+        ret += "\n";
+    ret += QString("  Count = %1\n").arg(countFat);
+    ret += QString("  Fat Size: %1\n").arg(m_clusterCount*sizeof(FAT_FAT_TYPE));
+    ret += "\n";
+    ret += "TOC:\n";
+    ret += statusToc("/", 1);
+    ret += "\n" + QString("FatFile Size: %1\n").arg(m_fatFile->size());
+
+
+    return ret;
+}
diff --git a/src/Tools/QFatFs/QFat.h b/src/Tools/QFatFs/QFat.h
new file mode 100644
index 0000000..37916ba
--- /dev/null
+++ b/src/Tools/QFatFs/QFat.h
@@ -0,0 +1,114 @@
+#ifndef QFAT_H
+#define QFAT_H
+
+#include <QtCore>
+
+#define FAT_FAT_TYPE quint16
+#define FAT_FAT_TYPE_NOVALUE 0xffff
+
+// Big fat: max 512Mb
+//#define FAT_CLUSTER_COUNT 65535
+//#define FAT_CLUSTER_SIZE 8192
+
+//Small Fat: max 10Mb
+//#define FAT_CLUSTER_COUNT 5120
+//#define FAT_CLUSTER_SIZE 2048
+
+struct FatHeader
+{
+    char magic[4]; // "QFAT"
+    quint16 cluster_count;
+    quint16 cluster_size;
+};
+
+#define FLAG_FILE 0x20
+#define FLAG_FOLDER 0x10
+
+enum FatError
+{
+    FatNoError,
+    FatSysError,
+    FatNotFatFile,
+    FatNotOpen,
+    FatFileNotFound,
+    FatDirNotFound,
+    FatDirNotEmpty,
+    FatDirAlreadyExists,
+    FatOutOfSpace
+};
+
+struct FatTocEntry
+{
+    FatTocEntry() : flags(0) {}
+
+    quint8 flags;
+    quint32 creationTimestamp;
+    quint32 modificationTimestamp;
+    quint32 size;
+    FAT_FAT_TYPE startCluster;
+    QString name;
+};
+
+typedef QList<FatTocEntry> FatTocEntries;
+
+QDataStream &operator<<(QDataStream &ds, const FatTocEntry &toc);
+QDataStream &operator>>(QDataStream &ds, FatTocEntry &toc);
+
+class QFat
+{
+    friend class QFatEngine;
+
+public:
+    QFat(const QString& filename, quint16 clusterCount=5120, quint16 clusterSize=2048);
+
+    FatError open();
+    void close();
+    FatError checkAndCreate(FAT_FAT_TYPE clusterNum);
+    bool isOpen();
+
+    FAT_FAT_TYPE findFreeCluster();
+    void eraseData(FAT_FAT_TYPE clusterNum);
+    FAT_FAT_TYPE writeData(const QByteArray &data, FAT_FAT_TYPE cluster=FAT_FAT_TYPE_NOVALUE);
+    QByteArray readData(FAT_FAT_TYPE clusterNum, qint32 maxSize=-1);
+
+    FatTocEntries readTocData(FAT_FAT_TYPE clusterNum);
+    FAT_FAT_TYPE writeTocData(const FatTocEntries& toc, FAT_FAT_TYPE cluster);
+
+    FatError setCurrentTocs(const QString& path);
+    FatError getToc(const QString &path, const QString& name, FatTocEntry& toc);
+    FatError getToc(const QString& filename, FatTocEntry& toc);
+    FatError getTocEntries(const QString &repath, FatTocEntries &tocs);
+    FatError addToc(const QString &filename, const FatTocEntry& toc);
+    FatError addToc(const QString &path, const QString& name, const FatTocEntry &toc);
+    FatError deleteToc(const QString &filename);
+    FatError deleteToc(const QString &path, const QString& name);
+
+    FatError makeDir(const QString& path);
+    FatError makeDirRecursive(const QString &reqpath);
+
+    FatError removeDir(const QString &reqpath);
+    FatError removeDirRecursive(const QString &reqpath);
+    FatError removeFile(const QString &reqpath);
+
+    QString status();
+    QString statusToc(const QString& path, int indent);
+    QString fileName() const { return m_filename; }
+
+    void writeFat();
+protected:
+    QString m_filename;
+    QFile* m_fatFile;
+    QDataStream m_ds;
+
+    quint16 m_clusterCount;
+    quint16 m_clusterSize;
+    QList<FAT_FAT_TYPE> m_fat;
+    quint64 m_startOfData;
+
+    FatTocEntries m_rootToc;
+    FatTocEntries m_curTocs;
+    QString m_curTocsPath;
+    FAT_FAT_TYPE m_curTocsCluster;
+};
+
+#endif // QFAT_H
diff --git a/src/Tools/QFatFs/QFatFile.cpp b/src/Tools/QFatFs/QFatFile.cpp
new file mode 100644
index 0000000..c95fd51
--- /dev/null
+++ b/src/Tools/QFatFs/QFatFile.cpp
@@ -0,0 +1,78 @@
+#include "QFatFile.h"
+
+QFatFile::QFatFile(QFat* fat)
+    : QBuffer()
+    , m_fat(fat)
+{
+}
+
+QFatFile::QFatFile(const QString& fileName, QFat* fat)
+    : QBuffer()
+    , m_fat(fat)
+{
+    setFilename(fileName);
+}
+
+void QFatFile::setFilename(const QString &filename)
+{
+    if (filename.length() == 0)
+        return;
+
+    QStringList tokens = filename.split("/", QString::SkipEmptyParts);
+    m_name = tokens.takeLast();
+    m_path = tokens.join("/");
+}
+
+bool QFatFile::open(QIODevice::OpenMode mode)
+{
+    if (!m_fat->isOpen())
+        return false; //FatNotOpen;
+
+    FatError ret = m_fat->getToc(m_path, m_name, m_toc);
+    if (ret == FatFileNotFound) {
+        if (mode & QIODevice::ReadOnly)
+            return false; //FatFileNotFound;
+
+        QDateTime dt = QDateTime::currentDateTime();
+        m_toc.flags = FLAG_FILE;
+        m_toc.creationTimestamp = dt.toTime_t();
+        m_toc.modificationTimestamp = dt.toTime_t();
+        m_toc.size = 0;
+        m_toc.name = m_name;
+        m_toc.startCluster = FAT_FAT_TYPE_NOVALUE;
+
+        if (m_fat->addToc(m_path, m_name, m_toc) != FatNoError) {
+            qDebug() << "QFatFile::open: Error as-dding toc";
+            return false;
+        }
+    } else if (ret == FatNoError){
+        buffer() = m_fat->readData(m_toc.startCluster, m_toc.size);
+    } else
+        return false;
+
+    if (!QBuffer::open(mode))
+        return false; //FatSysError;
+
+    return true; //FatNoError;
+}
+
+void QFatFile::close()
+{
+    if (openMode() & QIODevice::WriteOnly) {
+        QBuffer::close();
+        m_fat->eraseData(m_toc.startCluster);
+        if (buffer().size())
+            m_toc.startCluster = m_fat->writeData(buffer(), m_toc.startCluster);
+        else
+            m_toc.startCluster = FAT_FAT_TYPE_NOVALUE;
+        m_toc.size = size();
+        m_toc.modificationTimestamp = QDateTime::currentDateTime().toTime_t();
+        if (m_fat->addToc(m_path, m_name, m_toc) != FatNoError) {
+            qDebug() << "QFatFile::close: Error adding toc";
+            return;
+        }
+        m_fat->writeFat();
+    } else
+        QBuffer::close();
+
+}
diff --git a/src/Tools/QFatFs/QFatFile.h b/src/Tools/QFatFs/QFatFile.h
new file mode 100644
index 0000000..8910bb8
--- /dev/null
+++ b/src/Tools/QFatFs/QFatFile.h
@@ -0,0 +1,29 @@
+#ifndef QFATFILE_H
+#define QFATFILE_H
+
+#include <QtCore>
+
+#include "QFat.h"
+
+class QFatFile : public QBuffer
+{
+public:
+    QFatFile(QFat* fat);
+    QFatFile(const QString& fileName, QFat* fat);
+    void setFilename(const QString& filename);
+
+    bool open ( OpenMode mode );
+    void close ();
+
+private:
+    QFat* m_fat;
+    QString m_path;
+    QString m_name;
+    QDateTime m_creationTime;
+    QDateTime m_modificationTime;
+
+    FatTocEntry m_toc;
+
+};
+
+#endif // QFATFILE_H
diff --git a/src/Tools/QFatFs/QFatFs.cpp b/src/Tools/QFatFs/QFatFs.cpp
new file mode 100644
index 0000000..52a282b
--- /dev/null
+++ b/src/Tools/QFatFs/QFatFs.cpp
@@ -0,0 +1,278 @@
+#include "QFatFs.h"
+
+static QMap<QString,QFat*> cache;
+
+QFatFsHandler::~QFatFsHandler()
+{
+    QMapIterator<QString,QFat*> i(cache);
+    while (i.hasNext()) {
+        i.next();
+        i.value()->close();
+        delete i.value();
+    }
+}
+
+QAbstractFileEngine * QFatFsHandler::create(const QString &fileName) const
+{
+
+    QUrl u(fileName);
+    if (!u.isValid())
+            return NULL;
+    if (u.scheme() != "fat")
+        return NULL;
+
+    QString fatPath;
+    QString path = u.path();
+    if (!u.host().isEmpty())
+        fatPath = u.host() + u.path();
+    else {
+        fatPath = u.path();
+    }
+    if (fatPath.startsWith("/"))
+        fatPath.remove(0, 1);
+
+    QString name = u.fragment();
+
+    QMutexLocker locker(&mutex);
+    QFat* fat = cache[fatPath];
+    if(!fat) {
+        fat = new QFat(fatPath, m_clusterCount, m_clusterSize);
+        if(!fat) return 0;
+        if (fat->open() != FatNoError)
+            return 0;
+        cache[fatPath] = fat;
+    }
+    return new QFatEngine(fat,fatPath, name);
+}
+
+/*******************************/
+
+FatIterator::FatIterator(QDir::Filters filters, const QStringList &nameFilters, QFat *fat, const QString& fatpath, const QString &name)
+    : QAbstractFileEngineIterator(filters,nameFilters)
+    , m_fat(fat)
+    , m_fatpath(fatpath)
+    , m_name(name)
+
+{
+    m_curPath = m_name;
+    m_fat->getTocEntries(m_name, m_tocs);
+    m_curIndex = -1;
+}
+
+int FatIterator::getNextIndex() const
+{
+    for (int i=m_curIndex+1; i<m_tocs.size(); ++i) {
+        if (filters() & QDir::AllEntries)
+            return i;
+        else if (filters() & QDir::Dirs) {
+            if (m_tocs[i].flags & FLAG_FOLDER)
+                return i;
+        } else if (filters() & QDir::Files) {
+            if (m_tocs[i].flags & FLAG_FILE)
+                return i;
+        }
+    }
+    return m_tocs.size();
+}
+
+bool FatIterator::hasNext() const
+{
+    return (getNextIndex() < m_tocs.size());
+}
+
+QString FatIterator::next()
+{
+    m_curIndex = getNextIndex();
+    QString path = "fat:///" + m_fatpath + "#" + m_name;
+    if(!path.endsWith("/")) path += "/";
+    return path + m_tocs[m_curIndex].name;
+}
+
+QString FatIterator::currentFileName() const
+{
+    return m_tocs[m_curIndex].name;
+}
+
+/**************************/
+
+QMutex glob_mutex;
+
+QFatEngine::QFatEngine(QFat* fat, const QString& path, const QString& name)
+    : m_fat(fat)
+    , m_fatpath(path)
+    , m_name(name)
+    , m_flags(0xffffffff)
+
+{
+    m_flags &= (int)m_fat->m_fatFile->permissions();
+    if (m_name.isEmpty() || m_name == "/") {
+        m_flags |= RootFlag;
+        m_flags |= ExistsFlag;
+        m_flags |= DirectoryType;
+    } else {
+        QMutexLocker locker(&glob_mutex);
+        FatError ret = m_fat->getToc(m_name, m_toc);
+        if (ret == FatNoError && m_toc.flags) {
+            m_flags |= ExistsFlag;
+            if (m_toc.flags & FLAG_FILE)
+                m_flags |= FileType;
+            else if (m_toc.flags & FLAG_FOLDER) {
+                m_flags |= DirectoryType;
+            }
+        } else {
+            if(m_name.endsWith('/')) {
+                m_flags|= DirectoryType;
+            } else {
+                m_flags |= FileType;
+            }
+        }
+    }
+}
+
+bool QFatEngine::open( QIODevice::OpenMode mode)
+{
+    QMutexLocker locker(&glob_mutex);
+
+    fatFile = new QFatFile(m_name, m_fat);
+    if (!fatFile->open(mode)) {
+        delete fatFile;
+        return false;
+    }
+    return true;
+}
+
+qint64 QFatEngine::read( char * data, qint64 maxlen )
+{
+    QMutexLocker locker(&glob_mutex);
+    return fatFile->read(data,maxlen);
+}
+
+qint64 QFatEngine::readLine(char *data, qint64 maxlen)
+{
+    QMutexLocker locker(&glob_mutex);
+    return fatFile->readLine(data,maxlen);
+}
+
+qint64 QFatEngine::write(const char *data, qint64 len)
+{
+    QMutexLocker locker(&glob_mutex);
+    return fatFile->write(data,len);
+}
+
+bool QFatEngine::close()
+{
+    QMutexLocker locker(&glob_mutex);
+    fatFile->close();
+    delete fatFile;
+    return true;
+}
+
+QAbstractFileEngine::Iterator * QFatEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
+{
+    QMutexLocker locker(&glob_mutex);
+    return new FatIterator(filters, filterNames, m_fat, m_fatpath, m_name);
+}
+
+QDateTime QFatEngine::fileTime(QAbstractFileEngine::FileTime time) const
+{
+    switch (time) {
+    case QAbstractFileEngine::CreationTime:
+        return QDateTime::fromTime_t(m_toc.creationTimestamp);
+    case QAbstractFileEngine::ModificationTime:
+        return QDateTime::fromTime_t(m_toc.modificationTimestamp);
+    default:
+        return QDateTime();
+    }
+}
+
+bool QFatEngine::mkdir(const QString &dirName, bool createParentDirectories) const
+{
+    QUrl u(dirName);
+    if (!u.isValid() || u.scheme() != "fat")
+        return false;
+
+    bool ret;
+
+    QMutexLocker locker(&glob_mutex);
+
+    if (createParentDirectories)
+        ret = (m_fat->makeDirRecursive(u.fragment()) == FatNoError) ? true : false;
+    else
+        ret = (m_fat->makeDir(u.fragment()) == FatNoError) ? true : false;
+    m_fat->writeFat();
+
+    return ret;
+}
+
+bool QFatEngine::rmdir(const QString &dirName, bool recurseParentDirectories) const
+{
+    QUrl u(dirName);
+    if (!u.isValid() || u.scheme() != "fat")
+        return false;
+
+    bool ret;
+
+    QMutexLocker locker(&glob_mutex);
+
+    if (recurseParentDirectories)
+        ret = (m_fat->removeDirRecursive(u.fragment()) == FatNoError) ? true : false;
+    else
+        ret = (m_fat->removeDir(u.fragment()) == FatNoError) ? true : false;
+    m_fat->writeFat();
+
+    return ret;
+}
+
+
+bool QFatEngine::extension(QAbstractFileEngine::Extension extension, const QAbstractFileEngine::ExtensionOption *option, QAbstractFileEngine::ExtensionReturn *output)
+{
+    switch (extension) {
+    case QAbstractFileEngine::AtEndExtension:
+        return fatFile->atEnd();
+    default:
+        return false;
+    }
+}
+
+bool QFatEngine::remove()
+{
+    QMutexLocker locker(&glob_mutex);
+    if (m_fat->removeFile(m_name) != FatNoError)
+        return false;
+    m_fat->writeFat();
+
+    return true;
+}
+
+QString QFatEngine::fileName(QAbstractFileEngine::FileName file) const
+{
+    QStringList tokens;
+    tokens = m_name.split("/");
+    QString name = tokens.takeLast();
+    QString path = tokens.join("/");
+
+    switch (file) {
+    case QAbstractFileEngine::DefaultName:
+    case QAbstractFileEngine::AbsoluteName:
+    case QAbstractFileEngine::CanonicalName:
+        return "fat:///" + m_fatpath + "#" + m_name;
+    case QAbstractFileEngine::BaseName:
+        return name;
+    case QAbstractFileEngine::PathName:
+    case QAbstractFileEngine::AbsolutePathName:
+    case QAbstractFileEngine::CanonicalPathName:
+        return "fat:///" + m_fatpath + "#" + path;
+    }
+}
+
+bool QFatEngine::flush()
+{
+    return true;
+}
+
+bool QFatEngine::seek(qint64 offset)
+{
+    return fatFile->seek(offset);
+}
+
+
diff --git a/src/Tools/QFatFs/QFatFs.h b/src/Tools/QFatFs/QFatFs.h
new file mode 100644
index 0000000..5d515f9
--- /dev/null
+++ b/src/Tools/QFatFs/QFatFs.h
@@ -0,0 +1,91 @@
+#ifndef QFATFS_H
+#define QFATFS_H
+
+#include <QtCore>
+
+#include "QFat.h"
+#include "QFatFile.h"
+
+class FatIterator : public QAbstractFileEngineIterator
+{
+public:
+    FatIterator(QDir::Filters filters, const QStringList &nameFilters, QFat* fat, const QString& path, const QString& name);
+
+    bool hasNext() const;
+    QString next();
+    QString currentFileName() const;
+
+private:
+    QFat* m_fat;
+    QString m_fatpath;
+    QString m_name;
+    QString m_curPath;
+
+    FatTocEntries m_tocs;
+    int m_curIndex;
+
+protected:
+    int getNextIndex() const;
+
+};
+
+class QFatFsHandler : public QAbstractFileEngineHandler {
+public:
+    QFatFsHandler(quint16 clusterCount=5120, quint16 clusterSize=2048)
+        : m_clusterCount(clusterCount), m_clusterSize(clusterSize) {}
+    ~QFatFsHandler();
+    QAbstractFileEngine* create(const QString& fileName) const;
+
+private:
+    quint16 m_clusterCount;
+    quint16 m_clusterSize;
+
+    mutable QMutex mutex;
+
+};
+
+class QFatEngine : public QAbstractFileEngine
+{
+public:
+    explicit QFatEngine(QFat* fat, const QString& path, const QString& name);
+
+    bool open(QIODevice::OpenMode mode);
+    qint64 read(char *data, qint64 maxlen);
+    qint64 readLine ( char * data, qint64 maxlen );
+    qint64 write (const char * data, qint64 len);
+    bool close();
+    bool remove();
+    bool flush ();
+    bool setSize ( qint64 /*size*/ ) { return true; }
+
+    QString fileName(FileName file) const;
+    Iterator* beginEntryList(QDir::Filters filters, const QStringList &filterNames);
+
+    bool caseSensitive () const { return true; }
+    qint64 size() const { return m_toc.size; }
+    QDateTime fileTime ( FileTime time ) const;
+    FileFlags fileFlags(FileFlags) const { return m_flags; }
+    bool supportsExtension ( Extension  ) const { return QAbstractFileEngine::AtEndExtension; }
+    bool extension ( Extension extension, const ExtensionOption * option = 0, ExtensionReturn * output = 0 );
+    bool isSequential () const { return false; }
+
+    bool mkdir ( const QString & dirName, bool createParentDirectories ) const;
+    bool rmdir ( const QString & dirName, bool recurseParentDirectories ) const;
+
+    qint64 pos () const { return fatFile->pos(); }
+    bool seek ( qint64 offset );
+signals:
+
+public slots:
+
+private:
+    QFat* m_fat;
+    QString m_fatpath;
+    QString m_name;
+    FileFlags m_flags;
+    FatTocEntry m_toc;
+
+    QFatFile* fatFile;
+};
+
+#endif // QFATFS_H
diff --git a/src/Tools/QFatFs/QFatFs.pri b/src/Tools/QFatFs/QFatFs.pri
new file mode 100644
index 0000000..960c83f
--- /dev/null
+++ b/src/Tools/QFatFs/QFatFs.pri
@@ -0,0 +1,12 @@
+INCLUDEPATH += $$PWD
+DEPENDPATH += $$PWD
+
+SOURCES += \
+    QFatFs.cpp \
+    QFat.cpp \
+    QFatFile.cpp
+
+HEADERS += \
+    QFatFs.h \
+    QFat.h \
+    QFatFile.h
diff --git a/src/Tools/Tools.pri b/src/Tools/Tools.pri
index 0fba3a6..d1bcfdb 100644
--- a/src/Tools/Tools.pri
+++ b/src/Tools/Tools.pri
@@ -1,6 +1,11 @@
+#include(QFatFs/QFatFs.pri)
+
 INCLUDEPATH += $$MERKAARTOR_SRC_DIR/Tools
 DEPENDPATH += $$MERKAARTOR_SRC_DIR/Tools
 
+#HEADERS += ZipEngine.h
+#SOURCES += ZipEngine.cpp
+
 isEmpty(MOBILE) {
   #Header files
   HEADERS += \
diff --git a/src/Tools/ZipEngine.cpp b/src/Tools/ZipEngine.cpp
new file mode 100644
index 0000000..1031699
--- /dev/null
+++ b/src/Tools/ZipEngine.cpp
@@ -0,0 +1,101 @@
+#include "ZipEngine.h"
+
+#include <QUrl>
+#include <QDebug>
+
+QAbstractFileEngine* ZipEngineHandler::create(const QString& fileName) const {
+    QUrl u(fileName);
+    QString path;
+    if (u.scheme() == "file")
+        path = u.toLocalFile();
+    else
+        path=fileName;
+
+    while(path.endsWith("/"))
+        path.chop(1);
+    QRegExp rx("(.*\\.(?:zip|msz))/(\\S\\S*)");
+    if(!rx.exactMatch(path))
+        return 0;
+    QString archivePath = rx.cap(1);
+    QString name = rx.cap(2);
+    static QMap<QString,ZipArchive> cache;
+    ZipArchive archive = cache[archivePath];
+    if(!archive.handle) {
+        archive.handle = new QuaZip(archivePath);
+        if(!archive.handle)
+            return 0;
+        if (!archive.handle->open(QuaZip::mdUnzip))
+            return 0;
+        int n = archive.handle->getEntriesCount();
+        archive.handle->goToFirstFile();
+        for(int i=0;i<n;i++) {
+            archive.files[archive.handle->getCurrentFileName()]=i;
+            archive.handle->goToNextFile();
+        }
+        cache[archivePath] = archive;
+    }
+    int index = archive.files.value(name,-1);
+    if(index<0) {
+        name+='/';
+        index=archive.files.value(name,-1);
+    }
+    return index>=0 ? new ZipEngine(archive,path,name,index) : 0;
+}
+
+ZipEngine::ZipEngine(ZipArchive archive,QString path, QString name,int index)
+    : archive(archive), path(path), name(name), index(index), flags(ExistsFlag) {
+    if(name.endsWith('/')) {
+        flags|=DirectoryType;
+        for(QMap<QString,int>::const_iterator i = ++archive.files.lowerBound(name)
+            ;i!=archive.files.constEnd() && i.key().startsWith(name);++i)
+            files << i.key().mid(name.length());
+    } else {
+        flags |= FileType;
+        QuaZipFileInfo  fi;
+        archive.handle->setCurrentFile(archive.files.key(index));
+        if (archive.handle->getCurrentFileInfo(&fi)) {
+            fileSize = fi.uncompressedSize;
+        }
+    }
+}
+
+bool ZipEngine::open( QIODevice::OpenMode mode)
+{
+    file = new QuaZipFile(archive.handle);
+    archive.handle->setCurrentFile(archive.files.key(index));
+    if (!file->open(QIODevice::ReadOnly)) {
+        delete file;
+        return false;
+    }
+    return true;
+}
+
+qint64 ZipEngine::read( char * data, qint64 maxlen )
+{
+    return file->read(data,maxlen);
+}
+
+bool ZipEngine::close()
+{
+    file->close(); delete file; return true;
+}
+
+QString ZipEngine::fileName(QAbstractFileEngine::FileName file) const
+{
+    switch (file) {
+    case QAbstractFileEngine::DefaultName:
+    case QAbstractFileEngine::AbsoluteName:
+    case QAbstractFileEngine::CanonicalName:
+        return path;
+    case QAbstractFileEngine::BaseName:
+        return path.section("/",-1);
+    case QAbstractFileEngine::PathName:
+    case QAbstractFileEngine::AbsolutePathName:
+    case QAbstractFileEngine::CanonicalPathName:
+        return path.section("/",0,-2);
+    }
+}
+
+ZipEngineHandler::ZipEngineHandler()
+{
+}
diff --git a/src/Tools/ZipEngine.h b/src/Tools/ZipEngine.h
new file mode 100644
index 0000000..fc1f5c2
--- /dev/null
+++ b/src/Tools/ZipEngine.h
@@ -0,0 +1,58 @@
+#ifndef ZIPENGINE_H
+#define ZIPENGINE_H
+
+#include <QAbstractFileEngine>
+#include <QMap>
+
+// From et-map-editor by Matthias Fauconneau (https://gitorious.org/et-map-editor)
+
+#include <quazip/quazip.h>
+#include <quazip/quazipfile.h>
+
+class ZipIterator : public QAbstractFileEngineIterator {
+public:
+    ZipIterator(QDir::Filters filters, const QStringList &nameFilters, QStringList files) :
+        QAbstractFileEngineIterator(filters,nameFilters), files(files), index(-1) {}
+    bool hasNext() const { return index < files.size() - 1; }
+    QString next() { if (!hasNext()) return QString(); index++; return currentFilePath(); }
+    QString currentFileName() const { return files[index]; }
+private:
+    QStringList files;
+    int index;
+};
+
+struct ZipArchive {
+    QuaZip* handle;
+    QMap<QString,int> files;
+};
+
+class ZipEngineHandler : public QAbstractFileEngineHandler {
+public:
+    ZipEngineHandler();
+    QAbstractFileEngine* create(const QString& fileName) const;
+};
+
+class ZipEngine : public QAbstractFileEngine {
+public:
+    ZipEngine(ZipArchive,QString,QString,int);
+    bool open( QIODevice::OpenMode );
+    qint64 read( char * data, qint64 maxlen );
+    bool close();
+    qint64 size() const { return fileSize; }
+    FileFlags fileFlags(FileFlags) const { return flags; }
+    QString fileName(QAbstractFileEngine::FileName file) const;
+    Iterator* beginEntryList(QDir::Filters filters, const QStringList &filterNames) {
+        return new ZipIterator(filters, filterNames, files);
+    }
+private:
+    ZipArchive archive;
+    QString path;
+    QString name;
+    int index;
+    QuaZipFile* file;
+    QStringList files;
+    FileFlags flags;
+    qint64 fileSize;
+};
+
+#endif // ZIPENGINE_H
diff --git a/src/Utils/CheckBoxList.cpp b/src/Utils/CheckBoxList.cpp
index f926132..5b7ce70 100644
--- a/src/Utils/CheckBoxList.cpp
+++ b/src/Utils/CheckBoxList.cpp
@@ -12,6 +12,11 @@
 
 #include "CheckBoxList.h"
 #include <QtGui>
+#include <QItemDelegate>
+#include <QApplication>
+#include <QCheckBox>
+#include <QAbstractItemView>
+#include <QStylePainter>
 
 
 // internal private delegate
diff --git a/src/Utils/CheckBoxList.h b/src/Utils/CheckBoxList.h
index 71f18e7..a2293ec 100644
--- a/src/Utils/CheckBoxList.h
+++ b/src/Utils/CheckBoxList.h
@@ -14,6 +14,7 @@
 #define CHECKBOXLIST_H
 
 #include <QtGui>
+#include <QComboBox>
 
 class CheckBoxList: public QComboBox
 {
diff --git a/src/Utils/OsmLink.cpp b/src/Utils/OsmLink.cpp
index 36e6b73..df961b6 100644
--- a/src/Utils/OsmLink.cpp
+++ b/src/Utils/OsmLink.cpp
@@ -3,6 +3,7 @@
 #include <QApplication>
 #include <QMessageBox>
 #include <QStringList>
+#include "Global.h"
 
 OsmLink::OsmLink(QString url)
     : m_IsValid(false)
@@ -20,78 +21,94 @@ OsmLink::OsmLink(QUrl url)
         qDebug() << "OsmLink:" << s;
 }
 
-#define ARG_VALID(param) if (!parseOk) return QString("Unparsed " #param "=\"%1\"").arg(theUrl.queryItemValue(#param))
+#define ARG_VALID(param) if (!parseOk) return QString("Unparsed " #param "=\"%1\"").arg(theQuery.queryItemValue(#param))
 #define PARSE_ERROR(val)  if (!parseOk) return QString("Unparsed " #val "=\"%1\"").arg(val)
 
 QString OsmLink::parseUrl(QUrl theUrl)
 {
     // On parse failure, we bail early, leaving m_isValid unset
     bool parseOk;
+#ifdef QT5
+    QUrlQuery theQuery;
+#define theQuery theQuery
+#else
+#define theQuery theUrl
+#endif
 
     if (!theUrl.isValid()) return QString("Invalid URL: %1").arg(theUrl.toString());;
 
-    if (theUrl.toString().contains("osm.org/go"))
+    if (theUrl.toString().contains("openstreetmap.org/#map=")) {
+        // first is 'map', zoom, lat and lon follows
+        QStringList list = theUrl.fragment().split(QRegExp("[/=]"));
+        qreal zoom = list[1].toInt(&parseOk);   ARG_VALID(zoom);
+        qreal lat = list[2].toDouble(&parseOk); ARG_VALID(lat);
+        qreal lon = list[3].toDouble(&parseOk); ARG_VALID(lon);
+
+        setLatLonZoom(lat, lon, zoom);
+    }
+    else if (theUrl.toString().contains("osm.org/go"))
     {
         parseShortUrl(theUrl.path().section('/', -1));
     }
-    else if (theUrl.hasQueryItem("lat") && theUrl.hasQueryItem("lon") && theUrl.hasQueryItem("zoom"))
+    else if (theQuery.hasQueryItem("lat") && theQuery.hasQueryItem("lon") && theQuery.hasQueryItem("zoom"))
     {
-        qreal lat = theUrl.queryItemValue("lat").toDouble(&parseOk);   ARG_VALID(lat);
-        qreal lon = theUrl.queryItemValue("lon").toDouble(&parseOk);   ARG_VALID(lon);
-        qreal zoom = theUrl.queryItemValue("zoom").toInt(&parseOk);    ARG_VALID(zoom);
+        qreal lat = theQuery.queryItemValue("lat").toDouble(&parseOk);   ARG_VALID(lat);
+        qreal lon = theQuery.queryItemValue("lon").toDouble(&parseOk);   ARG_VALID(lon);
+        qreal zoom = theQuery.queryItemValue("zoom").toInt(&parseOk);    ARG_VALID(zoom);
 
         setLatLonZoom(lat, lon, zoom);
     }
-    else if (theUrl.hasQueryItem("mlat") && theUrl.hasQueryItem("mlon") && theUrl.hasQueryItem("zoom"))
+    else if (theQuery.hasQueryItem("mlat") && theQuery.hasQueryItem("mlon") && theQuery.hasQueryItem("zoom"))
     {
-        qreal lat = theUrl.queryItemValue("mlat").toDouble(&parseOk);   ARG_VALID(lat);
-        qreal lon = theUrl.queryItemValue("mlon").toDouble(&parseOk);   ARG_VALID(lon);
-        qreal zoom = theUrl.queryItemValue("zoom").toInt(&parseOk);     ARG_VALID(zoom);
+        qreal lat = theQuery.queryItemValue("mlat").toDouble(&parseOk);   ARG_VALID(lat);
+        qreal lon = theQuery.queryItemValue("mlon").toDouble(&parseOk);   ARG_VALID(lon);
+        qreal zoom = theQuery.queryItemValue("zoom").toInt(&parseOk);     ARG_VALID(zoom);
 
         setLatLonZoom(lat, lon, zoom);
     }
-    else if (theUrl.hasQueryItem("minlon") && theUrl.hasQueryItem("maxlon") &&
-         theUrl.hasQueryItem("minlat") && theUrl.hasQueryItem("maxlat"))
+    else if (theQuery.hasQueryItem("minlon") && theQuery.hasQueryItem("maxlon") &&
+         theQuery.hasQueryItem("minlat") && theQuery.hasQueryItem("maxlat"))
     {
-        qreal bottom = theUrl.queryItemValue("minlat").toDouble(&parseOk);   ARG_VALID(minlat);
-        qreal left = theUrl.queryItemValue("minlon").toDouble(&parseOk);     ARG_VALID(minlon);
-        qreal top = theUrl.queryItemValue("maxlat").toDouble(&parseOk);      ARG_VALID(maxlat);
-        qreal right = theUrl.queryItemValue("maxlon").toDouble(&parseOk);    ARG_VALID(maxlon);
+        qreal bottom = theQuery.queryItemValue("minlat").toDouble(&parseOk);   ARG_VALID(minlat);
+        qreal left = theQuery.queryItemValue("minlon").toDouble(&parseOk);     ARG_VALID(minlon);
+        qreal top = theQuery.queryItemValue("maxlat").toDouble(&parseOk);      ARG_VALID(maxlat);
+        qreal right = theQuery.queryItemValue("maxlon").toDouble(&parseOk);    ARG_VALID(maxlon);
 
         setMinMax(bottom, left, top, right);
     }
-    else if (theUrl.hasQueryItem("left") && theUrl.hasQueryItem("right") &&
-         theUrl.hasQueryItem("bottom") && theUrl.hasQueryItem("top"))
+    else if (theQuery.hasQueryItem("left") && theQuery.hasQueryItem("right") &&
+         theQuery.hasQueryItem("bottom") && theQuery.hasQueryItem("top"))
     {
-        qreal bottom = theUrl.queryItemValue("bottom").toDouble(&parseOk);  ARG_VALID(minlat);
-        qreal left = theUrl.queryItemValue("left").toDouble(&parseOk);      ARG_VALID(minlon);
-        qreal top = theUrl.queryItemValue("top").toDouble(&parseOk);        ARG_VALID(maxlat);
-        qreal right = theUrl.queryItemValue("right").toDouble(&parseOk);    ARG_VALID(maxlon);
+        qreal bottom = theQuery.queryItemValue("bottom").toDouble(&parseOk);  ARG_VALID(minlat);
+        qreal left = theQuery.queryItemValue("left").toDouble(&parseOk);      ARG_VALID(minlon);
+        qreal top = theQuery.queryItemValue("top").toDouble(&parseOk);        ARG_VALID(maxlat);
+        qreal right = theQuery.queryItemValue("right").toDouble(&parseOk);    ARG_VALID(maxlon);
 
         setMinMax(bottom, left, top, right);
     }
-    else if (theUrl.hasQueryItem("left") && theUrl.hasQueryItem("right") &&
-         theUrl.hasQueryItem("bottom") && theUrl.hasQueryItem("top"))
+    else if (theQuery.hasQueryItem("left") && theQuery.hasQueryItem("right") &&
+         theQuery.hasQueryItem("bottom") && theQuery.hasQueryItem("top"))
     {
-        qreal bottom = theUrl.queryItemValue("bottom").toDouble(&parseOk);  ARG_VALID(minlat);
-        qreal left = theUrl.queryItemValue("left").toDouble(&parseOk);      ARG_VALID(minlon);
-        qreal top = theUrl.queryItemValue("top").toDouble(&parseOk);        ARG_VALID(maxlat);
-        qreal right = theUrl.queryItemValue("right").toDouble(&parseOk);    ARG_VALID(maxlon);
+        qreal bottom = theQuery.queryItemValue("bottom").toDouble(&parseOk);  ARG_VALID(minlat);
+        qreal left = theQuery.queryItemValue("left").toDouble(&parseOk);      ARG_VALID(minlon);
+        qreal top = theQuery.queryItemValue("top").toDouble(&parseOk);        ARG_VALID(maxlat);
+        qreal right = theQuery.queryItemValue("right").toDouble(&parseOk);    ARG_VALID(maxlon);
 
         setMinMax(bottom, left, top, right);
     }
     else if ((theUrl.host().contains("maps.google.com") || theUrl.host().contains("maps.google.co.uk")) &&
-         theUrl.hasQueryItem("ll") && theUrl.hasQueryItem("spn"))
+         theQuery.hasQueryItem("ll") && theQuery.hasQueryItem("spn"))
     {
-        QStringList ll = theUrl.queryItemValue("ll").split(",");     if (ll.count() != 2) return QString("Unsplit=\"%2\" (%1 elements)").arg(ll.count()).arg(theUrl.queryItemValue("ll"));
+        QStringList ll = theQuery.queryItemValue("ll").split(",");     if (ll.count() != 2) return QString("Unsplit=\"%2\" (%1 elements)").arg(ll.count()).arg(theQuery.queryItemValue("ll"));
         qreal lat = ll[0].toDouble(&parseOk);                       PARSE_ERROR(ll[0]);
         qreal lon = ll[1].toDouble(&parseOk);                       PARSE_ERROR(ll[1]);
-        QStringList spn = theUrl.queryItemValue("spn").split(",");   if (spn.count() != 2) return QString("Unsplit=\"%2\" (%1 elements)").arg(spn.count()).arg(theUrl.queryItemValue("spn"));
+        QStringList spn = theQuery.queryItemValue("spn").split(",");   if (spn.count() != 2) return QString("Unsplit=\"%2\" (%1 elements)").arg(spn.count()).arg(theQuery.queryItemValue("spn"));
         qreal spanLat = spn[0].toDouble(&parseOk);                  PARSE_ERROR(spn[0]);
         qreal spanLon = spn[1].toDouble(&parseOk);                  PARSE_ERROR(spn[1]);
 
         setMinMax(lat-spanLat, lon-spanLon/2, lat+spanLat, lon+spanLon/2);
     }
+#undef theQuery
     return QString("Unrecognised URL: %1").arg(theUrl.toString());
 }
 
@@ -105,7 +122,7 @@ void OsmLink::parseShortUrl(QString code)
         int z = 0;
         int z_offset = 0;
 
-        QByteArray ar = code.toAscii();
+        QByteArray ar = code.toLatin1();
         for (int i=0; i<ar.size(); ++i) {
         qint8 t = possibleChar.indexOf(ar.at(i));
         if (t == -1)
diff --git a/src/Utils/ProjectionChooser.cpp b/src/Utils/ProjectionChooser.cpp
index ed62cb5..f637c74 100644
--- a/src/Utils/ProjectionChooser.cpp
+++ b/src/Utils/ProjectionChooser.cpp
@@ -46,6 +46,7 @@ QString ProjectionChooser::getProjection(QString title, bool bShowPredefined, QS
         dlg->ui->cbPredefined->setVisible(false);
     }
 #else
+    Q_UNUSED(bShowPredefined);
     dlg->ui->chkPredefined->setVisible(false);
     dlg->ui->cbPredefined->setVisible(false);
 #endif
diff --git a/src/Utils/SlippyMapWidget.cpp b/src/Utils/SlippyMapWidget.cpp
index 190ceac..ebf4716 100644
--- a/src/Utils/SlippyMapWidget.cpp
+++ b/src/Utils/SlippyMapWidget.cpp
@@ -298,14 +298,12 @@ bool SlippyMapWidget::isDragging()
 /* SLIPPYMAPCACHE */
 
 SlippyMapCache::SlippyMapCache()
-: QObject(0), DownloadId(0), DownloadBusy(false), theMap(0)
+: QObject(0), DownloadReply(0), DownloadBusy(false), theMap(0)
 {
-    Download.setProxy(M_PREFS->getProxy(QUrl(QString("http://tile.openstreetmap.org"))));
-    Download.setHost("tile.openstreetmap.org");
+    baseUrl.setUrl("http://tile.openstreetmap.org");
+    Download.setProxy(M_PREFS->getProxy(baseUrl));
 
-    DownloadBuffer.setBuffer(&DownloadData);
-    DownloadBuffer.open(QIODevice::WriteOnly);
-    connect(&Download,SIGNAL(requestFinished(int,bool)),this,SLOT(on_requestFinished(int, bool)));
+    connect(&Download,SIGNAL(finished(QNetworkReply*)),this,SLOT(on_requestFinished(QNetworkReply*)));
 
     preload(Coord(0,0,0),":/Tiles/000.png");
     preload(Coord(0,0,1),":/Tiles/100.png");
@@ -334,14 +332,15 @@ void SlippyMapCache::preload(const Coord& C, const QString& Filename)
 }
 
 
-void SlippyMapCache::on_requestFinished(int Id, bool Error)
+void SlippyMapCache::on_requestFinished(QNetworkReply *reply)
 {
-    if (Id == DownloadId)
+    qDebug() << "Finished with error code" << reply->error();
+    if (reply == DownloadReply)
     {
         DownloadBusy = false;
-        if (!Error)
+        if (!reply->error())
         {
-            Memory[DownloadCoord] = DownloadData;
+            Memory[DownloadCoord] = reply->readAll();
             if (theMap)
                 theMap->newData(DownloadCoord.X,DownloadCoord.Y,DownloadCoord.Zoom);
             QMap<Coord,QByteArray>::iterator i = Dirties.find(DownloadCoord);
@@ -412,11 +411,12 @@ void SlippyMapCache::startDownload()
             DownloadBusy = true;
             DownloadCoord = Queue[0];
             Queue.erase(Queue.begin());
-            QString Path("/%1/%2/%3.png");
-            Path = Path.arg(DownloadCoord.Zoom).arg(DownloadCoord.X).arg(DownloadCoord.Y);
-            DownloadData.clear();
-            DownloadBuffer.reset();
-            DownloadId = Download.get(Path, &DownloadBuffer);
+            QUrl reqUrl(baseUrl);
+            reqUrl.setPath(QString("/%1/%2/%3.png").arg(DownloadCoord.Zoom).arg(DownloadCoord.X).arg(DownloadCoord.Y));
+            qDebug() << "Starting download with url: " << reqUrl;
+            QNetworkRequest req(reqUrl);
+            req.setRawHeader(QByteArray("User-Agent"), USER_AGENT.toLatin1());
+            DownloadReply = Download.get(req);
             return;
         }
         Queue.erase(Queue.begin());
diff --git a/src/Utils/SlippyMapWidget.h b/src/Utils/SlippyMapWidget.h
index 5607605..fad2c13 100644
--- a/src/Utils/SlippyMapWidget.h
+++ b/src/Utils/SlippyMapWidget.h
@@ -3,11 +3,12 @@
 
 #include <QtCore/QBuffer>
 #include <QtCore/QByteArray>
-#include <QtGui/QWidget>
-#include <QtNetwork/QHttp>
+#include <QWidget>
+#include <QNetworkAccessManager>
 
 #include <QMap>
 #include <QList>
+#include <QUrl>
 
 class SlippyMapWidgetPrivate;
 
@@ -36,7 +37,7 @@ class SlippyMapCache : public QObject
         QPixmap* getImage(int x, int y, int Zoom);
         QPixmap* getDirty(int x, int y, int Zoom);
     private slots:
-        void on_requestFinished(int id, bool Error);
+        void on_requestFinished( QNetworkReply *reply);
     private:
         void addToQueue(const Coord& C);
         void startDownload();
@@ -44,10 +45,11 @@ class SlippyMapCache : public QObject
 
         QMap<Coord, QByteArray> Memory, Dirties;
         QList<Coord> Queue;
-        QHttp Download;
+        QUrl baseUrl;
+        QNetworkAccessManager Download;
         QByteArray DownloadData;
         QBuffer DownloadBuffer;
-        int DownloadId;
+        QNetworkReply *DownloadReply;
         Coord DownloadCoord;
         bool DownloadBusy;
         SlippyMapWidgetPrivate* theMap;
diff --git a/src/Utils/TagSelector.cpp b/src/Utils/TagSelector.cpp
index 267d7da..6e1f81b 100644
--- a/src/Utils/TagSelector.cpp
+++ b/src/Utils/TagSelector.cpp
@@ -429,7 +429,8 @@ TagSelectorMatchResult TagSelectorOperator::evaluateVal(const QString& val) cons
             if (val.toUpper() != emptyString) return TagSelect_Match;
         }
     } else if (UseSimpleRegExp) {
-        if (rx.exactMatch(val))  {
+        QRegExp lrx(rx);
+        if (lrx.exactMatch(val))  {
             if (theOp == EQ)
                 return TagSelect_Match;
         } else {
@@ -438,7 +439,8 @@ TagSelectorMatchResult TagSelectorOperator::evaluateVal(const QString& val) cons
         }
 
     } else if (UseFullRegExp) {
-        if (rx.indexIn(val) != -1)  {
+        QRegExp lrx(rx);
+        if (lrx.indexIn(val) != -1)  {
             if (theOp == EQ)
                 return TagSelect_Match;
         } else {
diff --git a/src/common/AboutDialog.ui b/src/common/AboutDialog.ui
index eb621f3..710c121 100644
--- a/src/common/AboutDialog.ui
+++ b/src/common/AboutDialog.ui
@@ -32,7 +32,7 @@
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:small; font-style:italic;">Merkaartor version</span><span style=" font-size:8pt;"> </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:small; font-weight:600;">%1%2(%3)</span></p></body></html></string>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:small; font-weight:600;">%1</span></p></body></html></string>
          </property>
         </widget>
        </item>
@@ -43,23 +43,12 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></string>
          </property>
         </widget>
        </item>
        <item>
-        <widget class="QLabel" name="BoostVersion">
-         <property name="text">
-          <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></string>
-         </property>
-        </widget>
-       </item>
-       <item>
         <widget class="QLabel" name="Proj4Version">
          <property name="text">
           <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
@@ -120,7 +109,7 @@ p, li { white-space: pre-wrap; }
    <item>
     <widget class="QLabel" name="label">
      <property name="text">
-      <string>Copyright Bart Vanhauwaert, Chris Browet and others, 2006-2012</string>
+      <string>Copyright Bart Vanhauwaert, Chris Browet, Ladislav Láska and others, 2006-2015</string>
      </property>
     </widget>
    </item>
diff --git a/src/common/Coord.h b/src/common/Coord.h
index f585aed..5897e91 100644
--- a/src/common/Coord.h
+++ b/src/common/Coord.h
@@ -63,16 +63,6 @@ class Coord : public QPointF
 uint qHash(const Coord &c);
 
 
-#ifndef _MOBILE
-#if QT_VERSION < 0x040700 || defined(FORCE_46)
-#include <ggl/ggl.hpp>
-#include <ggl/geometries/register/point.hpp>
-
-GEOMETRY_REGISTER_POINT_2D_GET_SET(Coord, qreal, cs::cartesian, x, y, setX, setY)
-
-#endif
-#endif
-
 inline Coord operator-(const Coord& A, const Coord& B)
 {
     return Coord(A.x()-B.x(), A.y()-B.y());
diff --git a/src/common/Document.cpp b/src/common/Document.cpp
index 80336f4..d17072d 100644
--- a/src/common/Document.cpp
+++ b/src/common/Document.cpp
@@ -36,6 +36,7 @@
 #include <QList>
 #include <QMenu>
 #include <QSet>
+#include <QReadWriteLock>
 
 /* MAPDOCUMENT */
 
@@ -51,6 +52,7 @@ public:
         , lastDownloadLayer(0)
         , tagFilter(0), FilterRevision(0)
         , layerNum(0)
+        , theFeaturePaintersLock( QReadWriteLock::Recursive )
     {
     };
     ~MapDocumentPrivate()
@@ -79,6 +81,7 @@ public:
     mutable QString Id;
 
     QList<FeaturePainter> theFeaturePainters;
+    QReadWriteLock theFeaturePaintersLock;
 };
 
 Document::Document()
@@ -124,11 +127,17 @@ const QString& Document::id() const
 
 void Document::setPainters(QList<Painter> aPainters)
 {
+    lockPaintersForWrite();
     p->theFeaturePainters.clear();
     for (int i=0; i<aPainters.size(); ++i) {
         FeaturePainter fp(aPainters[i]);
         p->theFeaturePainters.append(fp);
     }
+    for (FeatureIterator it(this); !it.isEnd(); ++it)
+    {
+        it.get()->invalidatePainter();
+    }
+    unlockPainters();
 }
 
 int Document::getPaintersSize()
@@ -136,6 +145,18 @@ int Document::getPaintersSize()
     return p->theFeaturePainters.size();
 }
 
+void Document::unlockPainters() {
+    p->theFeaturePaintersLock.unlock();
+}
+
+void Document::lockPainters() {
+    p->theFeaturePaintersLock.lockForRead();
+}
+
+void Document::lockPaintersForWrite() {
+    qDebug() << "LockW";
+}
+
 const Painter* Document::getPainter(int i)
 {
     return &p->theFeaturePainters[i];
@@ -375,7 +396,7 @@ FilterLayer* Document::addFilterLayer(FilterLayer *aLayer)
 {
     FilterLayer* theLayer = aLayer;
     if (!theLayer)
-        theLayer = new FilterLayer(QUuid::createUuid(), tr("Filter layer #%1").arg(++p->layerNum), "false");
+        theLayer = new FilterLayer(QUuid::createUuid().toString(), tr("Filter layer #%1").arg(++p->layerNum), "false");
     add(theLayer);
 
     FeatureIterator it(this);
@@ -1019,33 +1040,26 @@ QList<Feature*> Document::mergeDocument(Document* otherDoc, Layer* layer, Comman
 Document* Document::getDocumentFromClipboard()
 {
     QClipboard *clipboard = QApplication::clipboard();
-    QDomDocument* theXmlDoc = new QDomDocument();
+    QDomDocument theXmlDoc;
 
     if (clipboard->mimeData()->hasFormat("application/x-openstreetmap+xml")) {
-        if (!theXmlDoc->setContent(clipboard->mimeData()->data("application/x-openstreetmap+xml"))) {
-            delete theXmlDoc;
+        if (!theXmlDoc.setContent(clipboard->mimeData()->data("application/x-openstreetmap+xml"))) {
             return NULL;
         }
     } else
     if (clipboard->mimeData()->hasFormat("application/vnd.google-earth.kml+xml")) {
-        if (!theXmlDoc->setContent(clipboard->mimeData()->data("application/vnd.google-earth.kml+xml"))) {
-            delete theXmlDoc;
+        if (!theXmlDoc.setContent(clipboard->mimeData()->data("application/vnd.google-earth.kml+xml"))) {
             return NULL;
         }
     } else
     if (clipboard->mimeData()->hasText()) {
-        if (!theXmlDoc->setContent(clipboard->text())) {
-            delete theXmlDoc;
+        if (!theXmlDoc.setContent(clipboard->text())) {
             return NULL;
         }
     } else {
-        delete theXmlDoc;
         return NULL;
     }
-    Document* doc = Document::getDocumentFromXml(theXmlDoc);
-    delete theXmlDoc;
-
-    return doc;
+    return Document::getDocumentFromXml(&theXmlDoc);
 }
 
 /* FEATUREITERATOR */
diff --git a/src/common/Document.h b/src/common/Document.h
index 96cf451..bf54e32 100644
--- a/src/common/Document.h
+++ b/src/common/Document.h
@@ -123,6 +123,9 @@ public:
 
     virtual void setPainters(QList<Painter> aPainters);
     virtual int getPaintersSize();
+    void lockPainters();
+    void lockPaintersForWrite();
+    void unlockPainters();
     virtual const Painter* getPainter(int i);
 
     QStringList getCurrentSourceTags();
diff --git a/src/common/FeatureManipulations.cpp b/src/common/FeatureManipulations.cpp
index e768f61..6f3d066 100644
--- a/src/common/FeatureManipulations.cpp
+++ b/src/common/FeatureManipulations.cpp
@@ -435,12 +435,12 @@ static void splitRoad(Document* theDocument, CommandList* theList, Way* In, cons
         }
     }
 
-    Way* FirstPart = In;
-    Result.push_back(FirstPart);
+    Way* FirstPart     = In;
+    bool FirstWayValid = false;
     for (int i=1; (i+1)<FirstPart->size(); ++i)
     {
-        if (std::find(Points.begin(),Points.end(),FirstPart->get(i)) != Points.end())
-        {
+        if (std::find(Points.begin(),Points.end(),FirstPart->get(i)) != Points.end() and FirstPart->get(i) != FirstPart->get(i+1) \
+                and (FirstWayValid or FirstPart->get(0) != FirstPart->get(i))) {
             Way* NextPart = g_backend.allocWay(theDocument->getDirtyOrOriginLayer(In->layer()));
             theList->add(new AddFeatureCommand(theDocument->getDirtyOrOriginLayer(In->layer()),NextPart,true));
             copyTags(NextPart,FirstPart);
@@ -452,12 +452,13 @@ static void splitRoad(Document* theDocument, CommandList* theList, Way* In, cons
             }
             handleWaysplitRelations(theDocument, theList, FirstPart, NextPart);
 
-            Result.push_back(NextPart);
+            FirstWayValid = true;
+            Result.push_back(FirstPart);
             FirstPart = NextPart;
             i=0;
         }
     }
-
+    Result.push_back(FirstPart);
 
 }
 
@@ -483,6 +484,32 @@ void splitRoads(Document* theDocument, CommandList* theList, PropertiesDock* the
     theDock->setSelection(Result);
 }
 
+/* Split road by the two nodes and return the way joining them, if there is one. */
+Way *cutoutRoad(Document* theDocument, CommandList* theList, PropertiesDock* /* theDock */, Node *N1, Node *N2) {
+    QList<Way*> Roads, Result;
+    QList<Node*> Points;
+
+	Way *R1 = Way::GetSingleParentRoadInner( N1 );
+	Way *R2 = Way::GetSingleParentRoadInner( N2 );
+
+	if (R1)
+		Roads.push_back(R1);
+	if (R2)
+		Roads.push_back(R2);
+
+    Points.push_back(N1);
+    Points.push_back(N2);
+
+    for (int i=0; i<Roads.size(); ++i)
+        splitRoad(theDocument, theList, Roads[i], Points, Result);
+
+	for (int i = 0; i < Result.size(); ++i) {
+		if (Result[i]->isExtrimity(N1) && Result[i]->isExtrimity(N2))
+			return Result[i];
+	}
+	return NULL;
+}
+
 static void breakRoad(Document* theDocument, CommandList* theList, Way* R, Node* Pt)
 {
     for (int i=0; i<R->size(); ++i)
@@ -1935,12 +1962,10 @@ AxisAlignResult axisAlignRoads(Document* theDocument, CommandList* theList, Prop
         // tweak midpoints
         i = 0;
         foreach (Way *theWay, theWays) {
-            Node *n1;
             Node *n2 = theWay->getNode(0);
             QPointF p1;
             QPointF p2 = node_pos[n2];
             for (int j = 0; j < theWay->size()-1; ++j, ++i) {
-                n1 = n2;
                 n2 = theWay->getNode(j + 1);
                 p1 = p2;
                 p2 = node_pos[n2];
diff --git a/src/common/FeatureManipulations.h b/src/common/FeatureManipulations.h
index 5618822..f9f260c 100644
--- a/src/common/FeatureManipulations.h
+++ b/src/common/FeatureManipulations.h
@@ -10,9 +10,11 @@ class Projection;
 
 #include <QList>
 #include "Coord.h"
+#include "Node.h"
 
 void joinRoads(Document* theDocument, CommandList* theList, PropertiesDock* theDock);
 void splitRoads(Document* theDocument, CommandList* theList, PropertiesDock* theDock);
+Way *cutoutRoad(Document* theDocument, CommandList* theList, PropertiesDock* thedock, Node *N1, Node *N2);
 void breakRoads(Document* theDocument, CommandList* theList, PropertiesDock* theDock);
 bool canCreateJunction(PropertiesDock* theDock);
 int createJunction(Document* theDocument, CommandList* theList, PropertiesDock* theDock, bool doIt=true);
diff --git a/src/common/Global.h b/src/common/Global.h
index 09cab86..a0e5696 100644
--- a/src/common/Global.h
+++ b/src/common/Global.h
@@ -14,9 +14,16 @@
 
 #include <QList>
 #include <QPair>
+#include <QtGlobal>
 
 #include "MemoryBackend.h"
 
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+#define QT5
+#else
+#define QT4
+#endif
+
 class MainWindow;
 class IBackend;
 
diff --git a/src/common/MapView.cpp b/src/common/MapView.cpp
index ebee29f..c016d73 100644
--- a/src/common/MapView.cpp
+++ b/src/common/MapView.cpp
@@ -5,7 +5,7 @@
 #include "MapView.h"
 #include "MainWindow.h"
 #include "PropertiesDock.h"
-#include "IDocument.h"
+#include "Document.h"
 #include "ILayer.h"
 #include "LayerIterator.h"
 #include "ImageMapLayer.h"
@@ -57,7 +57,7 @@ public:
     RendererOptions ROptions;
 
     Projection theProjection;
-    IDocument* theDocument;
+    Document* theDocument;
     Interaction* theInteraction;
 
     bool BackgroundOnlyPanZoom;
@@ -152,7 +152,7 @@ MainWindow *MapView::main()
     return Main;
 }
 
-void MapView::setDocument(IDocument* aDoc)
+void MapView::setDocument(Document* aDoc)
 {
     p->theDocument = aDoc;
     p->osmLayer->setDocument(aDoc);
@@ -160,7 +160,7 @@ void MapView::setDocument(IDocument* aDoc)
     setViewport(viewport(), rect());
 }
 
-IDocument *MapView::document()
+Document *MapView::document()
 {
     return p->theDocument;
 }
@@ -785,7 +785,6 @@ void MapView::resizeEvent(QResizeEvent * ev)
     {
         delete StaticTouchup;
         StaticTouchup = new QPixmap(size());
-        StaticTouchup = new QPixmap(size());
     }
 
     invalidate(true, true, true);
diff --git a/src/common/MapView.h b/src/common/MapView.h
index 6114816..7b3c6cf 100644
--- a/src/common/MapView.h
+++ b/src/common/MapView.h
@@ -14,7 +14,7 @@
 class MainWindow;
 class Feature;
 class Way;
-class IDocument;
+class Document;
 class MapAdapter;
 class Interaction;
 class ImageMapLayer;
@@ -32,8 +32,8 @@ public:
     ~MapView();
 
     MainWindow* main();
-    virtual void setDocument(IDocument* aDoc);
-    IDocument* document();
+    virtual void setDocument(Document* aDoc);
+    Document* document();
     Interaction* interaction();
     void setInteraction(Interaction* anInteraction);
 
diff --git a/src/common/Projection.cpp b/src/common/Projection.cpp
index 937c7f0..dc4d085 100644
--- a/src/common/Projection.cpp
+++ b/src/common/Projection.cpp
@@ -151,17 +151,17 @@ void Projection::projTransform(ProjProjection srcdefn,
                                ProjProjection dstdefn,
                                long point_count, int point_offset, qreal *x, qreal *y, qreal *z )
 {
-    pj_transform(srcdefn, dstdefn, point_count, point_offset, x, y, z);
+    pj_transform(srcdefn, dstdefn, point_count, point_offset, (double *)x, (double *)y, (double *)z);
 }
 
 void Projection::projTransformFromWGS84(long point_count, int point_offset, qreal *x, qreal *y, qreal *z ) const
 {
-    pj_transform (theWGS84Proj, theProj, point_count, point_offset, x, y, z);
+    pj_transform (theWGS84Proj, theProj, point_count, point_offset, (double *)x, (double *)y, (double *)z);
 }
 
 void Projection::projTransformToWGS84(long point_count, int point_offset, qreal *x, qreal *y, qreal *z ) const
 {
-    pj_transform(theProj, theWGS84Proj, point_count, point_offset, x, y, z);
+    pj_transform(theProj, theWGS84Proj, point_count, point_offset, (double *)x, (double *)y, (double *)z);
 }
 
 QPointF Projection::projProject(const QPointF & Map) const
diff --git a/src/common/TerraceDialog.cpp b/src/common/TerraceDialog.cpp
index 897980a..397f00c 100644
--- a/src/common/TerraceDialog.cpp
+++ b/src/common/TerraceDialog.cpp
@@ -77,7 +77,7 @@ unsigned int TerraceDialog::calcNumbering(int type, const QString& ranges, QStri
                         count -= maxNum - num;
                     int cur = ends[0];
                     for (int i = 0; i < count; i++, cur += step)
-                        *outNumbers << QString::fromAscii("%1").arg(cur);
+                        *outNumbers << QString::fromLatin1("%1").arg(cur);
                 }
                 if (num >= maxNum)
                     return maxNum;
diff --git a/src/src.pro b/src/src.pro
index f23e05e..2cdbfc1 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -6,8 +6,17 @@ include (Config.pri)
 #Custom config
 include(Custom.pri)
 
-include(../3rdparty/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.pri)
-include(../3rdparty/qttoolbardialog-2.2_1-opensource/src/qttoolbardialog.pri)
+isEmpty(SYSTEM_QTSA) {
+  include(../3rdparty/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.pri)
+} else {
+  CONFIG += qtsingleapplication
+}
+isEmpty(SYSTEM_QUAZIP) {
+  DEFINES += QUAZIP_STATIC
+  include(../3rdparty/quazip-0.7/quazip.pri)
+} else {
+  LIBS += -lquazip
+}
 
 #Qt Version
 QT_VERSION = $$[QT_VERSION]
@@ -24,22 +33,13 @@ TEMPLATE = app
 
 CONFIG += rtti stl exceptions
 #CONFIG -= exceptions
-QT += svg network xml core gui
+QT += svg network xml core gui webkitwidgets concurrent printsupport
 win32-msvc* {
     LIBS += -lzlib
 } else {
     LIBS += -lz
 }
 
-!contains(NODEBUG,1) {
-    CONFIG += debug
-    #OBJECTS_DIR += $$PWD/../tmp/$$(QMAKESPEC)/obj_debug
-}
-contains(NODEBUG,1) {
-    CONFIG += release
-    DEFINES += NDEBUG
-    #OBJECTS_DIR += $$PWD/../tmp/$$(QMAKESPEC)/obj_release
-}
 contains(FRISIUS,1) {
     TARGET = frisius
     DEFINES += FRISIUS_BUILD
@@ -56,24 +56,17 @@ contains(FRISIUS,1) {
 }
 
 MERKAARTOR_SRC_DIR = $$PWD
-COMMON_DIR = $$PWD/../binaries
-OUTPUT_DIR = $$PWD/../binaries/$$(QMAKESPEC)
+COMMON_DIR = $$OUT_PWD/../binaries
+OUTPUT_DIR = $$OUT_PWD/../binaries
 DESTDIR = $$OUTPUT_DIR/bin
 
 #UI_DIR += $$PWD/../tmp/$$(QMAKESPEC)
 #MOC_DIR += $$PWD/../tmp/$$(QMAKESPEC)
 #RCC_DIR += $$PWD/../tmp/$$(QMAKESPEC)
 
-INCLUDEPATH += $$PWD $$PWD/../include $$PWD/../interfaces $$MOC_DIR $$PWD/../include/builtin-ggl
+INCLUDEPATH += $$PWD $$PWD/../include $$PWD/../interfaces $$MOC_DIR
 DEPENDPATH += $$PWD $$PWD/../interfaces
 
-unix {
-    contains(USE_BUILTIN_BOOST,1) {
-        INCLUDEPATH += $$PWD/../include/builtin-boost
-    }
-} else {
-    INCLUDEPATH += $$PWD/../include/builtin-boost
-}
 win32 {
     INCLUDEPATH += $$COMMON_DIR/include
     LIBS += -L$$COMMON_DIR/lib
@@ -112,6 +105,9 @@ include(Tools/Tools.pri)
 include(TagTemplate/TagTemplate.pri)
 include(NameFinder/NameFinder.pri)
 include(Utils/Utils.pri)
+include(QToolBarDialog/QToolBarDialog.pri)
+
+VPATH += $$INCLUDEPATH
 
 # Header files
 HEADERS += \
@@ -145,7 +141,9 @@ unix:!macx {
     isEmpty( LIBDIR ) {
         LIBDIR = $${PREFIX}/lib${LIB_SUFFIX}
     }
+
     DEFINES += PLUGINS_DIR=$${LIBDIR}/merkaartor/plugins
+
     target.path = $${PREFIX}/bin
     SHARE_DIR = $${PREFIX}/share/merkaartor
 
@@ -165,6 +163,15 @@ win32 {
     }
 }
 
+
+unix {
+    CONFIG += link_pkgconfig
+    PKGCONFIG += sqlite3
+}
+win32 {
+    LIBS += -lsqlite3
+}
+
 DEFINES += SHARE_DIR=$${SHARE_DIR}
 INSTALLS += target
 
@@ -266,6 +273,12 @@ contains (PROTOBUF, 1) {
     DEFINES += USE_PROTOBUF
 }
 
+!isEmpty(SANITIZE) {
+    QMAKE_CXXFLAGS+=-fsanitize=address -fno-omit-frame-pointer
+    QMAKE_CFLAGS+=-fsanitize=address -fno-omit-frame-pointer
+    QMAKE_LFLAGS+=-fsanitize=address
+}
+
 unix:!macx {
     desktop.path = $${PREFIX}/share/applications
     desktop.files = merkaartor.desktop
diff --git a/translations/merkaartor_ar.ts b/translations/merkaartor_ar.ts
index 109cd5f..939d0a0 100644
--- a/translations/merkaartor_ar.ts
+++ b/translations/merkaartor_ar.ts
@@ -24,20 +24,11 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_cs.ts b/translations/merkaartor_cs.ts
index 28f2df8..91013a3 100644
--- a/translations/merkaartor_cs.ts
+++ b/translations/merkaartor_cs.ts
@@ -24,20 +24,11 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_de.ts b/translations/merkaartor_de.ts
index 768c56f..11198b1 100644
--- a/translations/merkaartor_de.ts
+++ b/translations/merkaartor_de.ts
@@ -57,7 +57,7 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
@@ -67,19 +67,6 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (erstellt mit <span style=" font-weight:600;">%2</span>)</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost-Version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_es.ts b/translations/merkaartor_es.ts
index 9efa58c..bfe8859 100644
--- a/translations/merkaartor_es.ts
+++ b/translations/merkaartor_es.ts
@@ -24,20 +24,11 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_et.ts b/translations/merkaartor_et.ts
index be48db3..2ea3e6f 100644
--- a/translations/merkaartor_et.ts
+++ b/translations/merkaartor_et.ts
@@ -24,20 +24,11 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_fr.ts b/translations/merkaartor_fr.ts
index f3cf173..d424ae1 100644
--- a/translations/merkaartor_fr.ts
+++ b/translations/merkaartor_fr.ts
@@ -57,7 +57,7 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
@@ -67,15 +67,6 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_hr.ts b/translations/merkaartor_hr.ts
index f224904..731212f 100644
--- a/translations/merkaartor_hr.ts
+++ b/translations/merkaartor_hr.ts
@@ -24,20 +24,11 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_hu.ts b/translations/merkaartor_hu.ts
index 485c996..abea1cd 100644
--- a/translations/merkaartor_hu.ts
+++ b/translations/merkaartor_hu.ts
@@ -48,20 +48,11 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_it.ts b/translations/merkaartor_it.ts
index 3829df7..93b3337 100644
--- a/translations/merkaartor_it.ts
+++ b/translations/merkaartor_it.ts
@@ -57,7 +57,7 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
@@ -67,19 +67,6 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (creato con <span style=" font-weight:600;">%2</span>)</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Versione Rapida</span><br /><span style=" font-weight:600;">%1</span></p></body></html></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_ja.ts b/translations/merkaartor_ja.ts
index 3132139..ed4d7fa 100644
--- a/translations/merkaartor_ja.ts
+++ b/translations/merkaartor_ja.ts
@@ -29,29 +29,16 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_nl.ts b/translations/merkaartor_nl.ts
index 2ad6921..dff4bde 100644
--- a/translations/merkaartor_nl.ts
+++ b/translations/merkaartor_nl.ts
@@ -24,20 +24,11 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_pl.ts b/translations/merkaartor_pl.ts
index 8eccf49..4601ea1 100644
--- a/translations/merkaartor_pl.ts
+++ b/translations/merkaartor_pl.ts
@@ -29,7 +29,7 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
@@ -39,19 +39,6 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (zbudowane przez <span style=" font-weight:600;">%2</span>)</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Wersja Boost</span><br /><span style=" font-weight:600;">%1</span></p></body></html></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_pt.ts b/translations/merkaartor_pt.ts
index e1a265b..fc6bc3b 100644
--- a/translations/merkaartor_pt.ts
+++ b/translations/merkaartor_pt.ts
@@ -24,20 +24,11 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_pt_BR.ts b/translations/merkaartor_pt_BR.ts
index 3e02d28..b0bded7 100644
--- a/translations/merkaartor_pt_BR.ts
+++ b/translations/merkaartor_pt_BR.ts
@@ -29,29 +29,16 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT versão</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt versão</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (compilado com <span style=" font-weight:600;">%2</span>)</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost versão</span><br /><span style=" font-weight:600;">%1</span></p></body></html></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_ru.ts b/translations/merkaartor_ru.ts
index 1417d1c..2c51e0c 100644
--- a/translations/merkaartor_ru.ts
+++ b/translations/merkaartor_ru.ts
@@ -57,7 +57,7 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
@@ -67,19 +67,6 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Версия Boost</span><br /><span style=" font-weight:600;">%1</span></p></body></html></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_sk.ts b/translations/merkaartor_sk.ts
index afc6132..8895bcd 100644
--- a/translations/merkaartor_sk.ts
+++ b/translations/merkaartor_sk.ts
@@ -24,20 +24,11 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_sv.ts b/translations/merkaartor_sv.ts
index 822505f..731712b 100644
--- a/translations/merkaartor_sv.ts
+++ b/translations/merkaartor_sv.ts
@@ -24,20 +24,11 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/translations/merkaartor_uk.ts b/translations/merkaartor_uk.ts
index 6ac7c46..26021b4 100644
--- a/translations/merkaartor_uk.ts
+++ b/translations/merkaartor_uk.ts
@@ -24,20 +24,11 @@ p, li { white-space: pre-wrap; }
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">QT version</span> </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-style:italic;">Qt version</span> </p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:small;"><span style=" font-weight:600;">%1</span> (built with <span style=" font-weight:600;">%2</span>)</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/common/AboutDialog.ui" line="54"/>
-        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-size:small; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Boost version</span><br /><span style=" font-weight:600;">%1</span></p></body></html></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/common/AboutDialog.ui" line="65"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
diff --git a/windows/Makefile b/windows/Makefile
index 5c15dbe..93154c8 100644
--- a/windows/Makefile
+++ b/windows/Makefile
@@ -5,7 +5,7 @@ LIGHT := "c:/Program Files/Windows Installer XML v3.6/bin/light.exe"
 CANDLE := "c:/Program Files/Windows Installer XML v3.6/bin/candle.exe"
 LRELEASE := "/cygdrive/c/QtSDK/Desktop/Qt/4.7.4/mingw/bin/lrelease.exe"
 VERSION=0.18
-REVISION=.0
+REVISION=.1
 
 all: release debug svn 
 
diff --git a/windows/copydeps.sh b/windows/copydeps.sh
new file mode 100644
index 0000000..8c489da
--- /dev/null
+++ b/windows/copydeps.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+cp `cygcheck.exe binaries/bin/merkaartor.exe  | grep mingw.*dll$ | sed -e 's/^ *//' | sort -u` ./binaries/bin/
diff --git a/windows/installer.nsi b/windows/installer.nsi
new file mode 100644
index 0000000..363450e
--- /dev/null
+++ b/windows/installer.nsi
@@ -0,0 +1,146 @@
+;Merkaartor installer script
+;Based on NSIS Modern User Interface Basic Example Script, by Joost Verburg
+
+;--------------------------------
+;Include Modern UI
+
+  !include "MUI2.nsh"
+  !include "FileFunc.nsh"
+  !include "LogicLib.nsh"
+  !include "StrFunc.nsh"
+  !include "version.nch"
+
+
+  SetCompressor lzma 
+
+;--------------------------------
+;General
+
+  ;Name and file
+  Name "Merkaartor"
+  OutFile "merkaartor-${VER}.exe"
+
+  ;Default installation folder
+  InstallDir "$PROGRAMFILES${BITS}\Merkaartor"
+  
+  ;Get installation folder from registry if available
+  InstallDirRegKey HKCU "Software\Merkaartor" ""
+  
+
+
+  ;Request application privileges for Windows Vista
+  RequestExecutionLevel admin
+
+;--------------------------------
+; Interface settings
+  !define MUI_ICON "..\Icons\Merkaartor_48x48.ico"
+  ;!define MUI_HEADERIMAGE
+  ;!define MUI_HEADERIMAGE_BITMAP "..\Icons\Merkaartor_100x100.png"
+  ;!define MUI_HEADERIMAGE_RIGHT
+  !define MUI_ABORTWARNING
+
+  !define MUI_WELCOMEPAGE_TEXT "This setup will install Merkaartor in version ${VER}."
+  !define MUI_WELCOMEFINISHPAGE_BITMAP "..\Icons\Merkaartor_installer.bmp"
+
+;--------------------------------
+;Pages
+
+  !insertmacro MUI_PAGE_WELCOME
+  !insertmacro MUI_PAGE_LICENSE "..\LICENSE"
+  !insertmacro MUI_PAGE_COMPONENTS
+  !insertmacro MUI_PAGE_DIRECTORY
+  !insertmacro MUI_PAGE_INSTFILES
+  
+  !insertmacro MUI_UNPAGE_CONFIRM
+  !insertmacro MUI_UNPAGE_INSTFILES
+  
+
+;--------------------------------
+;Installer Sections
+
+Section "Merkaartor" SecMerkaartor
+  ; This section is mandatory
+  SectionIn RO
+
+  SetOutPath "$INSTDIR"
+
+  SetShellVarContext all
+
+  
+  ;ADD YOUR OWN FILES HERE...
+  File ..\binaries\bin\*
+
+  ; Menu shortcut
+  CreateDirectory "$SMPROGRAMS\Merkaartor"
+  CreateShortcut  "$SMPROGRAMS\Merkaartor\Merkaartor.lnk" "$INSTDIR\merkaartor.exe"
+  CreateShortcut  "$SMPROGRAMS\Merkaartor\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
+  
+  ;Store installation folder
+  WriteRegStr HKCU "Software\Merkaartor" "" $INSTDIR
+  
+  ;Create uninstaller
+  WriteUninstaller "$INSTDIR\Uninstall.exe"
+  !define ARP      "Software\Microsoft\Windows\CurrentVersion\Uninstall\Merkaartor"
+  WriteRegStr HKLM "${ARP}"      "DisplayName"    "Merkaartor"
+  WriteRegStr HKLM "${ARP}"      "DisplayVersion"  "${VER}"
+  WriteRegStr HKLM "${ARP}"      "DisplayVersion"  "${VER}"
+  WriteRegStr HKLM "${ARP}"      "UninstallString" "$\"$INSTDIR\uninstall.exe$\""
+  WriteRegStr HKLM "${ARP}"      "DisplayIcon" "$\"$INSTDIR\merkaartor.exe$\""
+ 
+  ; Estimated size
+  ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
+  IntFmt $0 "0x%08X" $0
+  WriteRegDWORD HKLM "${ARP}" "EstimatedSize" "$0"
+
+SectionEnd
+
+Section "Background plugins" SecBackgroundPlugins
+
+  SetOutPath "$INSTDIR\plugins"
+  File /r ..\binaries\bin\plugins\background
+
+SectionEnd
+
+;--------------------------------
+;Languages
+ 
+  !insertmacro MUI_LANGUAGE "English"
+
+;--------------------------------
+;Descriptions
+
+  ;Language strings
+  LangString DESC_SecMerkaartor ${LANG_ENGLISH} "The program and necessary libraries."
+  LangString DESC_SecBackgroundPlugins ${LANG_ENGLISH} "Access to some background layers, including Bing."
+
+  ;Assign language strings to sections
+  !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+    !insertmacro MUI_DESCRIPTION_TEXT ${SecMerkaartor} $(DESC_SecMerkaartor)
+    !insertmacro MUI_DESCRIPTION_TEXT ${SecBackgroundPlugins} $(DESC_SecBackgroundPlugins)
+  !insertmacro MUI_FUNCTION_DESCRIPTION_END
+
+;--------------------------------
+;Uninstaller Section
+
+; -------------------------------
+; Version info
+;  VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "Merkaartor"
+;  VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "� The Merkaartor Developers"
+;  VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "A good OpenStreetMap editor."
+;  VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "${VER}"
+;  VIProductVersion "${VER}.0"
+;  VIFileVersion    "${VER}.0"
+
+
+Section "Uninstall"
+
+  ;ADD YOUR OWN FILES HERE...
+
+  SetShellVarContext all
+  Delete "$INSTDIR\Uninstall.exe"
+  RMDir /r "$INSTDIR" 
+  RMDir /r "$SMPROGRAMS\Merkaartor"
+  DeleteRegKey HKCU "Software\Merkaartor"
+  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Merkaartor"
+
+SectionEnd

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/merkaartor.git



More information about the Pkg-grass-devel mailing list